加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

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

发布时间:2023-01-09 10:56:18 所属栏目:Unix 来源:
导读:  什么是网络编程?用一句话概括,就是对网络协议的落地。

  落地,意味着对实战的要求更高。所以,一些程序员会倾向于使用类似 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 问题,引入进程、线程、多路复用、非阻塞、异步、事件驱动等现代高性能网络编程所需要的技术,并在接下来的实战篇,结合实例上手操作,教你写出高性能的网络程序。
 
  “不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。”几千年前荀子的这段话,用来诠释学习编程技术的最佳方法,再合适不过了。
 
  你还可以对专栏里的代码进行修改和调试,从而加深对网络编程的理解。结合课程中的练习,我有把握你一定能学以致用,从底层到实战,通关高性能网络编程。
 
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章