【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

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

  • 2019-07-31
  • 本文字数:2063 字

    阅读完需:约 7 分钟

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

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


落地,意味着对实战的要求更高。所以,一些程序员会倾向于使用类似 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-07-31 13:468775

评论 1 条评论

发布
用户头像
期待。
2019-08-01 16:55
回复
没有更多了
发现更多内容

为什么你辛苦肝的博客没人看?搭框架、排版、画图技巧这些你真的懂么?

码哥字节

排版规范 写作技巧 2月月更

微服务从代码到k8s部署应有尽有系列(一)

万俊峰Kevin

Go 微服务 web开发 go-zero RPC框架

容器编排技术 Kubernetes 学习总结|社区征文

架构精进之路

云原生 新春征文 2月日更

低代码实现探索(三十一)管好你的组件--元信息

零道云-混合式低代码平台

JVM进阶(十):年老代收集器

No Silver Bullet

CMS JVM 2月月更 年老代收集器

GitLab + Jenkins + ACK 自动化部署方案

百瓶技术

运维 jenkins 自动化部署 #GitLab ACK

Java常见数据结构详解

编程江湖

Python代码阅读(第74篇):单词首字母转换成大写

Felix

Python 编程 字符串 阅读代码 Python初学者

Apache Pulsar 2021 年度盘点(结尾有惊喜)

Apache Pulsar

开源 云原生 中间件 社区 Apachepulsar

视野 | KeyDB:为 Web 应用而生的高性能 Redis 分支

RadonDB

数据库 redis 后端 RadonDB

Hadoop运行环境搭建

编程江湖

hadoop

盘点下近几年退役的顶级 Apache 大数据项目 - 继 Sentry,Sqoop 之后,Ambari 正式退役

明哥的IT随笔

大数据 ambari sqoop sentry

Spring Cloud Alibaba Nacos 服务注册与发现功能实现!

王磊

SpringCloud Alibaba

职场焦虑之我对35岁危机的看法

老张

35岁危机 职场发展

Pulsar 在云原生消息引擎领域为何如此流行?| 社区征文

老周聊架构

云原生 Apache Pulsar 新春征文 2月月更

2021 Apache Pulsar 中文社区先锋奖与年度优秀案例奖出炉!

Apache Pulsar

开源 云原生 中间件 Apache Pulsar 社区

抽奖| Apache Pulsar 社区新年福袋来啦

Apache Pulsar

开源 云原生 中间件 Apache Pulsar 社区

云效交付篇:流水线持续交付 | 云效快速入门

阿里云云效

阿里云 DevOps 云原生 持续交付 研发

Apache Druid 在 Shopee 的工程实践

Shopee技术团队

数据库 后端 Apache Druid

Serverless 应用优化四则秘诀

Serverless Devs

Serverless

Serverless 年终技术盘点 :工业、学术、社区遍地开花

Serverless Devs

云计算 阿里云 Serverless

人人都是 Serverless 架构师 | 弹幕应用开发实战

Serverless Devs

Serverless 弹幕 应用开发

让所有工具变成你的锤子 — 邂逅《Every Tool's a Hammer》

蔡超

方法论 学习笔记 软件架构

一人走路不孤独,小度化身百度地图导航NPC,伴你回家路

百度大脑

聚力同行,迈向零碳未来

大咖说

云计算 阿里巴巴 阿里云 数智化

暂时不在更新

你?

Apache POI详解及Word文档读取示例

程序员架构进阶

Java Apache POI 2月月更

了解一下DDD领域驱动设计

蜜糖的代码注释

Java DDD 领域模型 2月月更

JS事件详解和js事件委托

编程江湖

Milvus 2.0 正式 GA

Zilliz

数据库 AI

JVM进阶(十一):JAVA G1收集器

No Silver Bullet

G1 JVM 垃圾收集器 2月月更

面试必考的网络编程知识,帮你梳理好了 | 极客时间_架构_盛延敏_InfoQ精选文章