面试必考的网络编程知识,帮你梳理好了 | 极客时间

阅读数:7426 2019 年 7 月 31 日 13:46

面试必考的网络编程知识,帮你梳理好了 | 极客时间

什么是网络编程?用一句话概括,就是对网络协议的落地。

落地,意味着对实战的要求更高。所以,一些程序员会倾向于使用类似 Netty 这种封装好的框架——快速,高效。既然如此,为什么要学网络编程呢?

跟开发细节相比,有时我们更看重开发效率。但如果是高性能网络编程呢?

拿盖房子来举例,如果我们要建个小平房,对地基的深浅和材质没有那么高的要求;但要想建造高楼大厦,小平房的地基条件就远远不够了。

同样的,普通开发与高性能网络编程也不能相提并论,高性能就意味着:那些未经大规模验证的设计很容易到达临界点。

这时,不仅要想办法延展边界,比如提高吞吐量和并发性,还要解决各种棘手异常,比如如何保证上千万个连接的正常运行等等。

这些问题,可不是一个框架就能解决的

框架的产生,或是为了实现跨平台支持,例如 JDK;或是为了屏蔽网络编程的细节,让开发更方便,例如 libevent。直接学框架,出了问题也难以排查,更无法捋顺框架背后的设计逻辑

在工作中,我面试过很多候选人。令我惊讶的是,即便是工作多年的技术人,对网络协议和网络编程的理解,仍然停留在一个比较浅的层次上,比如:

  • 大家经常说的四层、七层,分别指的是什么?
  • TCP 三次握手是什么,TIME_WAIT 是怎么发生的?CLOSE_WAIT 又是什么状态?
  • Linux 下的 epoll 解决的是什么问题?如何使用 epoll 写出高性能的网络程序?
  • 什么是网络事件驱动模型?Reactor 模式又是什么?

大多数人仅停留在“是这样”的阶段,对“为什么”缺乏深入了解。事实上,无论在面试还是工作中,这方面的知识都是非常重要的基本功。

在我看来,学高性能网络编程掌握两个核心要点就够了:第一,在理解网络协议的基础上,充分利用操作系统内核提供的能力,感知各种网络 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 问题,引入进程、线程、多路复用、非阻塞、异步、事件驱动等现代高性能网络编程所需要的技术,并在接下来的实战篇,结合实例上手操作,教你写出高性能的网络程序

“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。”几千年前荀子的这段话,用来诠释学习编程技术最佳方法,再合适不过了。你还可以对专栏里的代码进行修改和调试,从而加深对网络编程的理解。

结合课程中的练习,我有把握你一定能学以致用,从底层到实战,通关高性能网络编程
面试必考的网络编程知识,帮你梳理好了 | 极客时间

现在订阅有什么福利?

1.早鸟优惠 ¥68,原价 ¥99。

2. 结算时,输入优惠口令「justbuyit」再减 5 元到手仅 63 元,口令【明晚 24 点】失效,>>>戳此订阅

3.订阅课程后,可获得作者整理的高清版「网络编程核心知识」图谱,获取方式:添加专栏运营微信 dididisco,回复关键词:编程

口令【明晚 24 点】失效。

戳此订阅,以最低价 ¥63 入手。

评论

发布
用户头像
期待。
2019 年 08 月 01 日 16:55
回复
没有更多了