我今天在重要站点上接受了职位面试,以担任开发人员职位。他们问了许多与编程语言有关的问题,我设法没有问题地回答了这些问题,但是随后,他们开始询问有关在我的PC上向Web服务器发出请求后如何发出TCP / IP请求的问题。我确实是在学生时代就收到这些内容的,但是我不太记得它们,因为我主要从事网络开发工作,我的问题是:
作为主要从事Web应用程序工作的软件开发人员,我是否需要具有TCP / IP的广泛知识以及路由器如何管理请求,或者这对我来说只是黑匣子知识?
我今天在重要站点上接受了职位面试,以担任开发人员职位。他们问了许多与编程语言有关的问题,我设法没有问题地回答了这些问题,但是随后,他们开始询问有关在我的PC上向Web服务器发出请求后如何发出TCP / IP请求的问题。我确实是在学生时代就收到这些内容的,但是我不太记得它们,因为我主要从事网络开发工作,我的问题是:
作为主要从事Web应用程序工作的软件开发人员,我是否需要具有TCP / IP的广泛知识以及路由器如何管理请求,或者这对我来说只是黑匣子知识?
Answers:
这种知识进来非常有用的非常罕见。
例如,当您的运营团队在路由器/防火墙/负载平衡器后面设置生产站点时,该站点与测试环境中的路由器/防火墙/负载平衡器的设置略有不同,因此您会遇到与此相关的问题,这将有助于您发现问题。迅速与操作人员交谈,而不是挖掘代码中的怪异之处。进行对话时,能够更好地理解他们的语言将为您提供更好的服务。
但是我真的不明白为什么人们会在面试中如此重视这些东西,尤其是对于初级程序员而言。对于团队中的每个人来说,这当然不是必不可少的知识,可以教您。
我个人的观点是,Web开发人员应该知道底层协议的工作方式。特别是HTTP,但也至少是TCP / IP的基础。根据站点的复杂程度,您可能会发现自己不得不查看HTTP跟踪转储甚至tcpdump
日志,在这种情况下,您至少需要具备一定的TCP / IP知识。
现在,是否真的需要查看tcpdump很大程度上取决于您站点的详细信息。例如,如果您的站点很大,并且用户和服务器分布在多个数据中心中,并且发出了相对大量的请求(例如Ajax,尤其是Comet风格的请求),那么tcpdump
s可能就是您我需要看一下。
如果您正在做的只是某个Intranet站点或相当简单的内容,那么知识可能并不那么重要,但是我仍然认为了解低级内容将始终对您有所帮助。
了解您正在编码的层下面的层的行为总是很有用的,仅是因为当您尝试调试一个相对复杂的问题并且您需要了解您的应用程序为什么会出现意外的性能问题时,它非常有用在WAN上或为什么它对使用NAT的用户失败的原因。当您需要在会议室与开发人员,Web服务器管理员,网络管理员和数据库管理员讨论问题时,这也可能是无价的说和理解其他人都在说的语言,并提出聪明的问题。而且,您对各种实施细节的了解越多,您就越有可能通过以下方式构建可扩展站点:
就是说,显然存在着收益递减的问题,要了解更多关于某种抽象的知识,即与所编写的代码相距6层抽象,就不可能使您成为更好的Web开发人员。因此,它在某种程度上取决于您所指的“广泛”。理解路由器如何管理请求的基础知识可能会很有用,但是了解如何配置不同的路由器以区分不同类型的流量的优先级可能并不是很有用,除非您碰巧正在使用网络管理员可能想要的应用程序节流。
但是,即使这不是特别实用,强大的开发人员也往往会对堆栈的不同层感到好奇,并且即使这样做没有明显的好处,也倾向于了解它们。我倾向于期望对关系数据库如何工作或网络如何工作有深刻理解的Web开发人员比只限于了解Web开发技术的Web开发人员更强大。显然,这不是一个完美的关联,但提出来却是合理的。
在我看来,您需要大致了解这些位如何从您的应用程序传递到服务器并返回,尤其是对于Web开发职位。编程中没有黑匣子;所有抽象泄漏。
作为主要从事Web应用程序工作的软件开发人员,我是否需要具备TCP / IP的广泛知识以及路由器如何管理请求,还是对我来说只是黑盒知识?
IMO,您是软件开发人员(我假设具有CS背景)这一事实应了解这些知识。特别是如果您进行Web开发。正如我在评论中提到的那样,我已经大量减少了咨询费用,只是修复了那些不了解网络/ Internet体系结构基础知识的人所犯的真正愚蠢的错误。
ZOMG,我对我的网站所做的更改未显示,请帮助! * ZOMG,人的个人资料越来越交叉,因为会话被缓存的地方,PLZ德的帮助!* ZOMG,我们有一个身份验证的用户安全的内容,但人们可以得到他们用书签和血腥的认证屏幕讷韦尔出现,PLZ TEH救命!”
...等等等等...可悲的是...
Web应用程序和用户浏览器之间有很多东西:应用程序,应用程序的NIC,路由器和可能的防火墙,然后是HTTP服务器内部NIC,然后是http服务器,然后是http服务器出站NIC,然后是另一个路由器,最肯定的是防火墙。然后是一个缓存设备,可能还有一个SSL设备。然后使用更多的路由器和缓存服务器访问Internet,最后访问用户的浏览器(及其内部缓存)。
数不胜数的事情可能会出错,如果您对网络,网络协议,操作系统/系统管理员和互联网体系结构没有足够的了解,那么您将会迷失方向,并受到IT OPs部门的摆布(因为大多数开发人员既无权访问基础架构,也无所适从。在最坏的情况下,它将使您成为真正的Web开发人员。
Web开发的编程方面就是这一方面。它的成功执行完全取决于其他技能(尤其是网络和系统管理),这些技能不能被视为理所当然,也不能盲目地委派给IT运营。这并不意味着您必须负责网络/操作系统故障排除,但是
一种。您必须知道在网络/操作系统级别会出什么问题,以便您可以合作和指导从未对您的应用程序有深入了解的IT OPS。b。这些知识使您可以对系统进行工程设计,从而避免或至少改善并优雅地应对此类错误。
编程只是工程和开发的一方面。它不是您的主要技能,并且从长远来看在企业开发中尤其是在Web开发中确实会取得成功,这是您需要了解的事情。老实说,这些都是应该在学校或毕业前(或刚进入就业市场时)通过自学(非常牢固)学习的东西。
祝好运。
这是一个棘手的问题。是的,我认为每个开发人员都应具有基本知识TCP / IP以及如何组织基于该协议的网络。但是,这就引出了一个问题,即基本知识库的广泛程度。
我认为,开发人员应该知道什么是数据包以及如何通过网络分配数据包(包括知道该数据包使用什么类型的机器),而无需面对任何特定的问题(因此需要了解事物在“那里”的真正组织方式)。接触)。但是,我认为知道路由器将数据包分发给所有接收者,而交换机将数据包分发给某些接收者就足够了。我也不需要所有子网的开发者-我当然不知道所有细节;-)我应该知道子网可能是隔离的,并且数据包需要从网络A 路由到网络B,但是所有对于典型的开发人员而言,细节是很多方法。
我认为这有点像开车:您应该知道为什么需要引擎以及为什么需要燃料,但是作为普通驾驶员,您不需要知道如何为燃烧过程计算理想的燃料和空气混合物。
没有比不了解周围发生的事情的人更令人沮丧的事情了。它导致一遍又一遍地问相同的问题(当然,形式略有不同)。
当您发现自己在问重复的问题时,该该死了。最近收到的问题示例:
实际上,我收到了很多重复的问题,他们发现再次提问比学习容易,我开始跟踪它们并制作Powerpoint幻灯片。现在,每六个月左右,我就会进行一次动手练习。这样人们就可以参考我制作的幻灯片。后来,当他们问到我们在课堂上讲过的内容时,我会轻轻地引用它,他们通常会记得我们讲过它,然后自己重新阅读幻灯片。这样做的人实际上可以更好地学习该主题并发现它有价值。它以减少我的工作时间中断的形式带来了显着的变化。
另一个想法:在现实世界中,现实系统有许多怪癖和问题,难以置信的是,只知道您特定领域的知识就不多。任何有关基础原理如何工作的想法都只能为您提供帮助。
现在,如果它确实超出了您应该知道的范围,那就好了,不用担心。但是,如果您发现自己多次问这个问题,请学习它。你不会后悔的。
太好了,问了这个问题。活到老学到老。