Nhà phát triển web có nên hiểu TCP / IP không và cách các bộ định tuyến quản lý các yêu cầu? [đóng cửa]


15

Tôi đã có một cuộc phỏng vấn việc làm hôm nay cho vị trí Công việc là nhà phát triển trên một trang web quan trọng. Họ đã hỏi hàng tấn câu hỏi liên quan đến ngôn ngữ lập trình mà tôi đã trả lời mà không gặp vấn đề gì, nhưng sau đó họ bắt đầu đặt câu hỏi về cách yêu cầu TCP / IP được thực hiện khi tôi gửi yêu cầu trên PC đến máy chủ web. Tôi đã nhận được những nội dung đó khi còn là sinh viên, nhưng tôi không nhớ rõ về chúng, vì tôi làm việc chủ yếu trong phát triển web, câu hỏi của tôi là:

Là một nhà phát triển phần mềm, chủ yếu làm việc trên các ứng dụng web, tôi có cần phải có kiến thức sâu rộng về TCP / IP không và cách các bộ định tuyến quản lý các yêu cầu hoặc đó chỉ là kiến ​​thức hộp đen đối với tôi?


Họ có muốn biết thêm về cách các yêu cầu TCP / IP được thực hiện ở cấp độ khái niệm hay họ muốn biết chi tiết cụ thể? TCP / IP được sử dụng dưới mũ trùm mỗi khi chúng ta giao tiếp trên mạng. Cá nhân tôi tin rằng nó rất quan trọng để hiểu làm thế nào mọi thứ hoạt động dưới mui xe ít nhất ở mức độ khái niệm. Điều này sẽ giúp bạn phát hiện ra các vấn đề, và thậm chí thường thiết kế các giải pháp tốt hơn.
Parag

Câu trả lời:


25

Loại kiến ​​thức này rất hữu ích rất ít khi xuất hiện.

Ví dụ: khi nhóm op của bạn thiết lập trang web sản xuất của bạn phía sau bộ cân bằng bộ định tuyến / tường lửa / tải được thiết lập hơi khác so với nhóm trong môi trường thử nghiệm của bạn và bạn gặp vấn đề liên quan đến vấn đề đó, nó sẽ phục vụ tốt cho bạn để phát hiện ra rằng nhanh chóng và nói chuyện với các op, thay vì đào tìm một số điều kỳ lạ trong mã. Nó sẽ phục vụ bạn tốt hơn nữa để có thể hiểu ngôn ngữ của họ khi bạn có cuộc trò chuyện đó.

Nhưng tôi thực sự không hiểu tại sao mọi người lại đặt nặng vấn đề này vào các cuộc phỏng vấn, đặc biệt là khi nó dành cho một lập trình viên cơ sở. Nó chắc chắn không phải là kiến ​​thức cần thiết cho mọi người trong nhóm và bạn có thể được dạy.


2
Tốt điểm tái lập trình viên cơ sở, nhưng tôi không chắc chắn vị trí @forgotmynick gì mức đang áp dụng cho :-)
Dean Harding

@Dean - Điểm công bằng. Tôi có xu hướng cho rằng những người đề cập đến khi họ còn là một sinh viên chưa được hơn 5 năm. Nhưng bạn nói đúng, không phải lúc nào cũng như vậy.
pdr

1
Ít nhất là biết những gì xảy ra khi các bộ định tuyến âm thầm bỏ kết nối, thực sự tốt đẹp trong một thiết lập sản xuất. Bị cắn bởi điều đó hơn một lần.

@pdr - Tôi không đồng ý. Loại kiến ​​thức này hữu ích khi bạn muốn biết lý do tại sao mọi thứ mất quá nhiều thời gian hoặc tại sao các bản cập nhật bạn thực hiện cho trang web của bạn không hiển thị trong trình duyệt của người dùng. Bất cứ ai có một chút kiến ​​thức mạng sẽ biết câu trả lời: bộ nhớ đệm. Cá nhân, với tư cách là một nhà tư vấn, tôi đã thực hiện việc sửa chữa một cách ngu ngốc đơn giản (và rất tốn kém cho công ty) những điều mà mọi người sẽ tránh nếu họ biết những điều này. Nó không giống như nếu khoa học tên lửa hoặc cơ học lượng tử này. Ý tôi là mọi người, không có lý do gì để một jr dev không biết về điều này (đặc biệt nếu có nền tảng CS).
luis.espinal

@ luis.espinal - Thành thật mà nói, tôi không nghĩ rằng mình sẽ gộp bộ nhớ đệm vào cùng một danh mục. Nó không phải là một thứ mạng, nó là một thứ trình duyệt. Tôi đồng ý với bạn rằng bộ nhớ đệm (trình duyệt hoặc máy chủ) là điều mọi người cần phải hiểu bởi vì nó đơn giản nhưng có rất nhiều vấn đề. Nhưng TCP / IP?
pdr

16

Ý kiến ​​cá nhân của tôi là một nhà phát triển web nên biết các giao thức cấp thấp hoạt động như thế nào. Đặc biệt là HTTP, nhưng cũng (ít nhất là những điều cơ bản) của TCP / IP. Tùy thuộc vào mức độ phức tạp của trang web của bạn, bạn có thể thấy mình phải xem xét các dấu vết HTTP hoặc thậm chí tcpdumpcác bản ghi trong trường hợp đó bạn sẽ cần ít nhất một kiến ​​thức về TCP / IP.

Bây giờ, việc bạn có thực sự phải xem một tcpdump hay không phụ thuộc rất nhiều vào các chi tiết của trang web của bạn. Ví dụ: nếu bạn có một trang web lớn với nhiều người dùng và máy chủ trải rộng trên nhiều trung tâm dữ liệu, thực hiện một số lượng yêu cầu tương đối lớn (ví dụ: Ajax, đặc biệt là các yêu cầu theo kiểu Comet), thì đó tcpdumpcó thể là thứ bạn ' sẽ cần phải nhìn vào.

Nếu tất cả những gì bạn đang làm việc là một trang web mạng nội bộ hoặc một cái gì đó khá đơn giản, thì kiến ​​thức có thể không quá quan trọng, nhưng tôi vẫn nghĩ rằng việc biết các công cụ cấp thấp sẽ luôn giúp ích.


3
haha ... tôi sẽ không gọi http là giao thức cấp thấp
Pemdas

2
@Permdas: tất cả đều tương đối. HTTP ở mức cao hơn TCP, nhưng mức thấp hơn so với (nói) SOAP.
Dean Harding

1
SOAP là điều cụ thể thực hiện hơn là giao thức. Thật không may, việc triển khai của nó rất gần nhau, đến nỗi họ gọi nó là "giao thức"
kagali-san

HTTP: có. TCP / IP: một sự hiểu biết thô sơ về cách thức & lý do tại sao nó thực hiện một số hoạt động cấp cao hơn có lẽ là tốt. Tôi nghi ngờ một kiến ​​thức sâu sắc là bắt buộc (hoặc quá thường xuyên hữu ích) trong môi trường phát triển web
Andy Hunt

7

Hiểu được cách các lớp bên dưới lớp bạn mã hóa luôn hữu ích nếu chỉ vì nó rất hữu ích khi bạn cố gắng gỡ lỗi một vấn đề tương đối phức tạp và bạn cần hiểu tại sao ứng dụng của bạn gặp sự cố hiệu suất không mong muốn trên mạng WAN hoặc tại sao người dùng sử dụng NAT không thành công, v.v. Nó cũng có thể là vô giá khi bạn cần ở trong một phòng thảo luận về vấn đề với các nhà phát triển, quản trị viên máy chủ web, quản trị viên mạng và quản trị viên cơ sở dữ liệu để có thể để nói và hiểu ngôn ngữ mà mọi người khác đang nói và đặt câu hỏi thông minh. Và bạn càng hiểu nhiều chi tiết triển khai khác nhau, bạn càng có khả năng xây dựng một trang web có thể mở rộng bằng cách, ví dụ,

Điều đó nói rằng, rõ ràng có một điểm lợi nhuận giảm dần khi tìm hiểu thêm về một số trừu tượng là 6 lớp trừu tượng khỏi mã mà bạn đang viết không có khả năng giúp bạn trở thành một nhà phát triển web tốt hơn. Vì vậy, nó sẽ phụ thuộc vào một mức độ nào đó vào những gì bạn có nghĩa là "rộng rãi". Hiểu những điều cơ bản về cách các bộ định tuyến quản lý các yêu cầu là điều có thể khá hữu ích nhưng hiểu cách các bộ định tuyến khác nhau có thể được cấu hình để ưu tiên các loại lưu lượng khác nhau có thể không hữu ích lắm trừ khi bạn làm việc trên một ứng dụng mà quản trị viên mạng có thể muốn để tiết lưu.

Nhưng ngay cả khi nó không thực tế, các nhà phát triển mạnh có xu hướng tò mò về các lớp khác nhau của ngăn xếp và có xu hướng tìm hiểu về chúng ngay cả khi không có lợi ích rõ ràng để làm như vậy. Tôi có xu hướng mong đợi rằng một nhà phát triển web có hiểu biết sâu sắc về cách cơ sở dữ liệu quan hệ hoạt động hoặc cách thức hoạt động của mạng sẽ mạnh hơn một nhà phát triển web bị hạn chế chỉ biết về các công nghệ phát triển web. Rõ ràng, đó không phải là một mối tương quan hoàn hảo, nhưng nó hợp lý để hỏi.


+1 cho "Nó cũng có thể là vô giá khi bạn cần ở trong phòng thảo luận vấn đề với các nhà phát triển, quản trị viên máy chủ web, quản trị viên mạng và quản trị viên cơ sở dữ liệu để có thể nói và hiểu ngôn ngữ mà mọi người khác đang nói và đặt câu hỏi thông minh "
Parag

5

Phụ thuộc vào trang web bạn đang xây dựng. Đối với các trang web nhỏ / vừa, kiến ​​thức cơ bản về TCP / IP có thể tốt.

Nếu bạn đang làm việc trên một trang web hàng đầu (về lưu lượng truy cập), kiến ​​thức chi tiết về các giao thức và cơ sở hạ tầng mạng cơ bản là vô cùng quan trọng. Nó sẽ hướng dẫn bạn thường xuyên trong việc đưa ra quyết định thiết kế tốt.


3

Theo tôi, bạn cần phải biết cách thức các bit nhận được từ ứng dụng của bạn đến máy chủ và trở lại, đặc biệt là đối với vị trí phát triển web. Không có hộp đen trong lập trình; tất cả trừu tượng rò rỉ .


2

Là một nhà phát triển phần mềm, chủ yếu làm việc trên các ứng dụng web, tôi có cần phải có kiến ​​thức sâu rộng về TCP / IP không và cách các bộ định tuyến quản lý các yêu cầu hoặc đó chỉ là kiến ​​thức hộp đen đối với tôi?

IMO, thực tế là bạn là một nhà phát triển phần mềm (tôi giả sử có nền tảng CS) nên biết về những điều này. Đặc biệt nếu bạn làm phát triển web. Như tôi đã đề cập trong một trong những bình luận của mình, tôi đã thực hiện một khoản phí tư vấn chỉ bằng cách sửa các lỗi thực sự ngu ngốc được thực hiện bởi những người không biết về những điều cơ bản của kiến ​​trúc mạng / Internet.

ZOMG, những thay đổi tôi đã thực hiện cho trang web của mình không hiển thị, xin hãy giúp đỡ! * ZOMG, hồ sơ của người dân đang nhận được vượt qua bởi vì phiên đang được lưu trữ ở đâu đó, plz teh giúp đỡ! * ZOMG, chúng tôi có nội dung an toàn cho người sử dụng xác thực, nhưng mọi người có thể cho họ với một bookmark và Nevers màn hình xác thực đẫm máu đi lên, plz teh Cứu giúp! "

... vân vân và vân vân ... thật đáng buồn ...

Có rất nhiều thứ giữa ứng dụng web của bạn và trình duyệt của người dùng: ứng dụng của bạn, NIC của ứng dụng, bộ định tuyến và có thể là tường lửa, sau đó là máy chủ http của máy chủ http, sau đó là máy chủ http của bạn, sau đó là máy chủ http của bạn, sau đó là máy chủ http của bạn bộ định tuyến và chắc chắn là một tường lửa. Sau đó, một thiết bị lưu trữ, và có thể là một thiết bị SSL. Sau đó ra internet với nhiều bộ định tuyến và máy chủ bộ đệm hơn, cuối cùng đến trình duyệt của người dùng của bạn (và bộ đệm trong của nó.)

Hàng trăm thứ có thể sai và nếu bạn không có kiến ​​thức về mạng, giao thức mạng, hệ điều hành / sysadmin và kiến ​​trúc internet, bạn sẽ bị lạc và phải chịu trách nhiệm của bộ phận IT OP của bạn (vì hầu hết các nhà phát triển không có quyền truy cập vào cơ sở hạ tầng cũng như không biết tìm ở đâu khi xử lý sự cố). Tệ nhất, nó sẽ làm cho bạn trở thành một nhà phát triển web thực sự nhảm nhí.

Khía cạnh lập trình của phát triển web chỉ là một khía cạnh. Việc thực hiện thành công nó nằm trên các kỹ năng khác (đặc biệt là quản trị hệ thống và mạng) mà không thể được cấp cho cũng như không được ủy quyền một cách mù quáng cho các hoạt động CNTT. Điều đó không có nghĩa là bạn phải chịu trách nhiệm cho việc khắc phục sự cố mạng / HĐH, nhưng

a. Bạn phải biết những gì có thể sai ở cấp độ mạng / hệ điều hành để bạn có thể hợp tác và hướng dẫn IT OPS, những người không bao giờ có thể có kiến ​​thức sâu sắc về ứng dụng của bạn. b. Kiến thức như vậy cho phép bạn thiết kế hệ thống của mình sao cho nó tránh được, hoặc ít nhất là cải thiện và cảnh sát duyên dáng với các lỗi như vậy.

Lập trình chỉ là một khía cạnh của kỹ thuật và phát triển. Nó không thể là kỹ năng chính của bạn và thực sự thành công về lâu dài trong phát triển doanh nghiệp nói chung và phát triển web nói riêng, đây là những điều bạn cần biết. Và thành thật mà nói, đây là những điều nên được học (rất chắc chắn) ở trường hoặc thông qua việc tự học trước khi tốt nghiệp (hoặc ngay khi tham gia vào thị trường việc làm.)

Chúc may mắn.


1

Điều quan trọng là phải hiểu TCP / IP và cách các bộ định tuyến quản lý các yêu cầu. Nhưng bạn không biết cần có kiến thức sâu rộng về điều đó tại một cuộc phỏng vấn. Một ít nó đã được thể hiện trước đây. Nếu không thì cả hai đều lãng phí thời gian. Âm thanh như một cái bẫy.

Nhưng đối với vai trò Kiến trúc sư, tôi tin tưởng mạnh mẽ rằng kiến ​​thức này quan trọng trong mọi trường hợp. Anh chàng sẽ cung cấp các giải pháp có thể tận dụng lợi thế đó bằng cách sử dụng hoặc thậm chí sao chép kiến ​​trúc trong giải pháp tùy chỉnh. Có một ngày cuối tuần với Tanenbaum Networks và dễ dàng !!


1

Đây là một câu hỏi mẹo. Có, tôi nghĩ rằng mọi nhà phát triển nên có kiến thức cơ bản về TCP / IP và cách các mạng dựa trên giao thức đó được tổ chức. Tuy nhiên, điều đó dẫn đến câu hỏi về mức độ hiểu biết cơ bản được coi là rộng lớn như thế nào .

Tôi nghĩ rằng không phải đối mặt với bất kỳ vấn đề cụ thể nào (và do đó cần phải biết cách mọi thứ được tổ chức thực sự "ở dưới đó"), nhà phát triển nên biết gói tin là gì và cách các gói được phân phối qua mạng (bao gồm biết loại máy nào gói đó tiếp xúc với). Tuy nhiên tôi nghĩ rằng đủ để biết rằng một bộ định tuyến phân phối các gói cho tất cả các máy thu và một bộ chuyển mạch cung cấp các gói cho các máy thu nhất định . Tôi cũng sẽ không yêu cầu một nhà phát triển tất cả các công cụ mạng con đó - Tôi chắc chắn không biết tất cả các chi tiết về bản thân mình ;-) Tôi nên biết rằng các mạng con có thể bị cô lập và các gói cần phải được chuyển từ mạng A sang mạng B nhưng tất cả chi tiết là cách để nhiều cho một nhà phát triển điển hình.

Tôi nghĩ nó giống như lái xe hơi: Bạn nên biết tại sao bạn cần một động cơ và tại sao bạn cần nhiên liệu nhưng với tư cách là một người lái xe trung bình, bạn không cần biết cách tính hỗn hợp hoàn hảo giữa nhiên liệu và không khí cho quá trình đốt cháy.


0

Vài điều gây thất vọng hơn những người không hiểu những nguyên tắc cơ bản của những gì đang diễn ra xung quanh họ. Nó dẫn đến việc hỏi cùng một câu hỏi lặp đi lặp lại (tất nhiên ở dạng hơi khác nhau.)

Khi bạn thấy mình đặt câu hỏi lặp lại, đã đến lúc đánh những cuốn sách. Ví dụ gần đây về câu hỏi tôi đã nhận được:

  • "Làm cách nào để định cấu hình mạng nếu xyz?" ...
  • "Làm cách nào để định cấu hình mạng nếu abc?" ...
  • Nói lại...

Trên thực tế, tôi đã nhận được rất nhiều câu hỏi lặp lại từ những người thấy dễ hỏi lại hơn là tìm hiểu, tôi bắt đầu theo dõi chúng và tạo các slide Powerpoint. Bây giờ, cứ sau sáu tháng, tôi lại mở một lớp học thực hành. Mọi người sau đó có thể tham khảo các slide tôi đã thực hiện. Sau này, khi họ hỏi điều gì đó chúng tôi đề cập trong lớp, tôi nhẹ nhàng đề cập đến nó, và họ thường nhớ lại rằng chúng tôi đã che nó và tự đọc lại các slide cho chính họ. Những người làm như vậy thực sự học các môn học tốt hơn và thấy nó có giá trị. Nó đã tạo ra một sự khác biệt đáng chú ý trong hình thức ít gián đoạn đến ngày làm việc của tôi.

Một suy nghĩ khác: Trong thế giới thực, các hệ thống thực có rất nhiều vấn đề và vấn đề, nó cực kỳ hạn chế không biết nhiều hơn chỉ là kiến ​​thức cụ thể về miền của bạn. Bất kỳ ý tưởng làm thế nào các nguyên tắc cơ bản cơ bản hoạt động chỉ có thể giúp bạn.

Bây giờ, nếu nó thực sự nằm ngoài phạm vi cho những gì bạn nên biết, thì tốt thôi, đừng lo lắng về nó. Nhưng nếu bạn thấy mình đặt câu hỏi nhiều hơn một lần, hãy tìm hiểu nó. Bạn sẽ không hối tiếc đâu.

Bravo đã đặt câu hỏi. Không ngừng học hỏi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.