面试必考的网络编程知识,帮你梳理好了 | 极客时间
发布时间:2023-01-09 10:56:18 所属栏目:Unix 来源:
导读: 什么是网络编程?用一句话概括,就是对网络协议的落地。
落地,意味着对实战的要求更高。所以,一些程序员会倾向于使用类似 Netty 这种封装好的框架——快速,高效。既然如此,为什么要学网络
落地,意味着对实战的要求更高。所以,一些程序员会倾向于使用类似 Netty 这种封装好的框架——快速,高效。既然如此,为什么要学网络
什么是网络编程?用一句话概括,就是对网络协议的落地。 落地,意味着对实战的要求更高。所以,一些程序员会倾向于使用类似 Netty 这种封装好的框架——快速,高效。既然如此,为什么要学网络编程呢? 跟开发细节相比,有时我们更看重开发效率。但如果是高性能网络编程呢? 拿盖房子来举例,如果我们要建个小平房,对地基的深浅和材质没有那么高的要求;但要想建造高楼大厦,小平房的地基条件就远远不够了。 同样的,普通开发与高性能网络编程也不能相提并论,高性能就意味着:那些未经大规模验证的设计很容易到达临界点。 这时unix网络编程,不仅要想办法延展边界,比如提高吞吐量和并发性,还要解决各种棘手异常,比如如何保证上千万个连接的正常运行等等。 这些问题,可不是一个框架就能解决的。 框架的产生,或是为了实现跨平台支持,例如 JDK;或是为了屏蔽网络编程的细节,让开发更方便,例如 libevent。直接学框架,出了问题也难以排查,更无法捋顺框架背后的设计逻辑。 在工作中,我面试过很多候选人。令我惊讶的是,即便是工作多年的技术人,对网络协议和网络编程的理解,仍然停留在一个比较浅的层次上,比如: 大多数人仅停留在“是这样”的阶段,对“为什么”缺乏深入了解。事实上,无论在面试还是工作中,这方面的知识都是非常重要的基本功。 在我看来,学高性能网络编程,掌握两个核心要点就够了:第一,在理解网络协议的基础上,充分利用操作系统内核提供的能力,感知各种网络 I/O 事件;第二,学会使用线程处理并发。 抓住这两个核心问题,就抓住了高性能网络编程的“七寸”。 所以,我和极客时间合作了专栏《网络编程实战》。名字起得比较朴素——我认为,高性能就建立在实打实的经验基础之上,不必过度强调。 在专栏中,我也会单刀直入地展开,从解决实际问题的角度讲解这些知识点。 我会和你一起研究某个理论或算法,并与代码、实验相关联,分析它提出的目的、解决了哪些问题,从最简单的网络套接字开始,逐步带你写出健硕的高性能网络程序。 在这个过程中,我会尽我所能,将自己多年的实战经验与专栏内容融为一体,帮你透彻理解协议、API 和代码。 △扫码立即试读 我是谁? 我是盛延敏,现就职于某大型金融服务公司,专注云计算的架构和开发工作。博士毕业于中科大,毕业后我加入 IBM,从事 WebSphere 应用服务器、PaaS 平台 Bluemix 等系统的开发工作。后任大众点评云平台首席架构师,推动了以 Docker 为核心的私有云建设和落地。 2000 年,我开始用网络编程框架 ACE、CORBA 等技术进行电信网管系统的开发,后来又接触了 ICE,写分布式控制系统。再之后转向 Java,使用 JDK 进行 Web Service 和应用服务器的网络开发和研究,使用 Netty 进行 Java 高性能网络编程的开发。这些工作经历,让我对网络编程有了更为深入的理解。 我是如何讲解网络编程的? 网络编程是一个高度重视实战的模块。在专栏中,我将从底层原理讲起,逐步聚焦到高性能编程上,教你解决工作的常见异常和性能问题,并手把手带你编写一个高性能 HTTP 服务器。 我们会重点展开对 Linux 网络编程的学习。原因很简单,Linux 系统已成为互联网数据中心的标配,加上基于 Linux 的移动开发平台 Android 的迅速崛起,Linux 的重要性愈发明显。如果你想学好网络编程,这是一个非常明智的选择。 专栏主要分三大层级,逐步递进: 第一,充分理解 TCP/IP 网络模型和协议。 在基础篇中,我们会梳理 TCP/IP 模型和网络函数接口之间的联系,通过实例展开对套接字、套接字缓冲区、拥塞控制、数据包和数据流、本地套接字(UNIX 域套接字)等的讨论,交付给你一个全面细致的知识体系。 第二,结合对协议的理解,增强对各种异常情况的处理能力。 比如,对 TCP 数据流的处理、半关闭的连接、TCP 连接有效性的侦测、处理各种异常情况等,这些问题决定了程序的健壮性。这一部分的内容,我将在提升篇详细展开。 第三,写出可支持大规模高并发的网络处理程序。 在性能篇,我将带你深入研究 C10K 问题,引入进程、线程、多路复用、非阻塞、异步、事件驱动等现代高性能网络编程所需要的技术,并在接下来的实战篇,结合实例上手操作,教你写出高性能的网络程序。 “不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。”几千年前荀子的这段话,用来诠释学习编程技术的最佳方法,再合适不过了。 你还可以对专栏里的代码进行修改和调试,从而加深对网络编程的理解。结合课程中的练习,我有把握你一定能学以致用,从底层到实战,通关高性能网络编程。 (编辑:开发网_新乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐