
先说明一下百度2018校招这批核心网络研发工程师笔试题放到现在看依然有很强的参考价值。核心网络岗不像普通后端开发它卡在网络底层考的是一整套数据面和控制面知识以及排查问题的思路。这套题能让人看清一个事实大厂要的不是背协议的人而是能把协议、实现和故障场景串起来的人。这篇文章我打算按“岗位在干什么—笔试考什么—关键题型怎么解—备考怎么练”这条线来拆顺便把我这些年见过的同类题和踩坑经验加进去。不管你是准备校招还是已经在做网络方向想补体系这篇文章都值得花十几分钟读完。1. 核心网络研发工程师到底在干什么笔试为什么这么出1.1 岗位职责决定考察方向核心网络研发工程师在百度这种体量的公司主要负责的是数据中心网络、骨干网、内容分发网络CDN调度、负载均衡LB、网关系统、网络监控与自动运维平台这类基础设施。说白了用户请求从点击到页面呈现中间经过的每一跳网络设备、每一种转发策略、每一项加速手段都跟这个岗位有关。这个岗位和普通后端研发有个明显区别后端出了问题通常影响单服务网络出了问题影响的是所有依赖网络的业务。所以笔试不会只考简单的编程题而是会刻意考察你在复杂链路下的判断力一个网络故障发生时你能不能在多层协议栈里快速定位瓶颈一个转发需求到来时你选哪种数据结构和算法来实现最高效的匹配。这也是为什么这套题里既有TCP、路由协议这些纯网络知识又有哈希表、字符串匹配、设计题这类工程实现内容。1.2 笔试题型的整体结构2018校招核心网络研发工程师第一批笔试题整体结构非常有代表性大致可以分为四块网络基础与协议栈TCP/UDP细节、TCP三次握手与四次挥手、拥塞控制、滑动窗口、IPv4/IPv6、路由协议BGP/OSPF、DNS解析过程、HTTP/HTTPS机制。网络编程与系统Socket编程、select/poll/epoll、多线程并发模型、零拷贝、内核协议栈相关概念。数据结构和算法哈希表设计、字符串匹配、链表与树的常规操作、排序、查找偶尔会出大数据处理类题目。系统设计与综合设计一个高并发网关、设计一个负载均衡策略、或者给出一个特定场景让你分析可能存在的瓶颈和优化点。这套结构之所以稳定是因为它精准覆盖了网络研发日常要用的三样东西对网络原理的深度理解、对系统编程的熟练度、对大规模分布式场景的工程判断力。下面我把每一块的具体知识点和解题思路展开讲。2. 网络基础题详解TCP与路由协议是绝对主力2.1 TCP的追问策略从三次握手到拥塞控制TCP在笔试题里的出题方式非常有层次感。第一层是记忆类比如“三次握手为什么不是两次或四次”这种题目只要理解双方需要确认各自收发能力就能答好。第二层是计算类比如给定带宽时延积BDP让你计算理想的TCP发送缓冲区大小公式是带宽乘以往返时延RTT再换算成字节数。第三层才是拉分题比如“TCP如何避免拥塞崩溃”或者“慢启动阈值怎么动态调整”。这种题如果只背几个状态名基本拿不到高分。考察点在于慢启动阶段cwnd指数增长每收到一个ACK增加一个MSS最大报文段。ssthresh慢启动阈值的作用是切换慢启动和拥塞避免。发生丢包时快速重传和快速恢复如何配合超时重传又怎么重置cwnd。我在批改类似的笔试题时发现最容易失分的点是很多人把拥塞窗口和接收窗口混为一谈。两条动态变化逻辑是独立的两套机制前者是网络侧的拥塞状态后者是接收端的处理能力最终的有效窗口取二者较小值。建议答题时先用一句话区分两者再展开细节考官一眼就能看出你的理解深度。还有一个高频衍生题UDP为什么不可靠还要大量使用以及怎么在UDP上实现可靠传输。这个知识点到现在都会出现在大厂面试里因为QUIC的问世让业界重新关注到UDP的潜力。笔试题若涉及通常会考察UDP的头部开销小、无连接、无拥塞控制适合实时性要求高或弱网环境若要可靠传输需要在应用层实现序列号、确认重传、乱序重排和流量控制这本质上就是QUIC早期设计思路。2.2 路由协议面试点BGP与OSPF的选路逻辑路由协议是网络研发区别于普通开发的标志性考点。BGP考的是路径属性Path Attributes和选路顺序权重Weight最高优先然后是本地优先级Local Preference、AS路径长度AS_PATH、起源类型、MED多出口区分符、EBGP优于IBGP、IGP度量值最后是比较Router ID。这个顺序必须记住因为设计题里容易给一个多线路拓扑要求你诊断为什么流量走了某条不理想的路径。OSPF则倾向于考区域设计、LSA类型、SPF算法原理和收敛速度。比较典型的题目是在骨干区域Area 0和非骨干区域之间为什么要求所有非骨干区域必须直连骨干区域。因为OSPF要求区域间路由通过骨干区域中转避免区域间环路这个设计本质上是防环和分级。答题时如果能把“ABR区域边界路由器负责区域间路由通告、区域内路由通过SPF计算”这套逻辑讲清楚就能体现体系化认知。笔试中对“路由优先级”的考察也很常见直连路由、静态路由、动态路由OSPF内部优先级通常高于BGP怎么比较默认路由的工作原理以及路由递归查找的机制。我记得有一道经典题目是这样当一条静态路由指向的下一跳地址不可达时这条路由是否会出现在路由表中。答案是不会因为路由表需要递归解析到出接口如果下一跳无效则无法安装。这类细节题容易暴露功底我建议复习时一定要动手在模拟器里敲一遍光背书很容易漏。2.3 应用层协议DNS解析全过程与HTTP机制DNS解析的设计题在百度这套题里出现过多次典型问法是“从输入域名到页面加载中间经历了哪些DNS查询”。标准完整链路是浏览器缓存、操作系统缓存hosts文件与系统解析器缓存、本地DNS服务器LDNS、根域名服务器、顶级域名服务器如.com、权威域名服务器。如果题目给的是递归查询还是迭代查询还需要区分清楚一般用户侧到LDNS是递归LDNS到根和权威是迭代。这里常有考生忽略一个点DNS使用的是UDP 53端口但当响应数据超过512字节时会触发truncated标志TC1客户端需要改用TCP重发。这个细节很能体现实战经验因为真实生产环境排查DNS超时问题时经常遇到大响应被截断的场景。我在实际运维中甚至遇到过因为MTU设置不合理导致DNS响应分片丢失而整体不可用的情况所以看到这道题时格外有亲切感。HTTP部分的出题往往围绕状态码与缓存机制。301和302的区别、304协商缓存机制、HTTP/1.1的Keep-Alive、HTTP/2的多路复用与头部压缩HPACK这些都需要掌握。核心网络研发更关注的是HTTP与TCP的交互关系一个HTTP请求的延迟由哪些部分构成TCP握手、TLS握手、DNS解析、首字节时间TTFB各占多少这其实就是“前端性能优化里为什么强调减少请求数”的底层原因。2.4 IPv4与IPv6及基础网络概念2018年时IPv6在国内已经开始推开笔试题里会带一些IPv6的基础考察。典型点是IPv6地址长度128位、地址分类与简写规则、NAT64与DNS64的过渡机制、邻居发现协议NDP取代ARP。这块不难但不能完全不准备因为大型网络早晚要全面支持双栈考官要的是你对新协议栈不陌生。其他基础概念还包括交换机MAC地址表的学习与老化、VLAN的划分与Trunk口配置、ARP请求与响应的工作机制包括ARP欺骗和防护、MTU与分片PMTUD、NAT的类型静态NAT、动态NAT、PAT。这些内容不一定会单独出题但会作为背景知识出现在大型设计题或者故障排查题里。尤其是MTU和分片问题是实际网络中非常隐蔽的性能杀手平时多积累案例会更有底气。3. 网络编程与高性能IO模型从socket到epoll3.1 Socket编程基础阻塞、非阻塞与多路复用笔试题在网络编程方面不会要求你完整写出一个高性能服务器但会通过代码片段或概念题来考察你对IO模型的理解。首先要把四个概念分清楚阻塞IO、非阻塞IO、IO多路复用、异步IO。其中阻塞IO是线程阻塞在内核等待数据非阻塞IO是立即返回但需要轮询IO多路复用是让内核帮我们同时监听多个文件描述符异步IO是内核完成全部操作后通知应用。最容易出大题的是IO多路复用。select的缺点是监听数量受限通常1024每次调用需要把fd_set整体从用户态拷贝到内核态而且返回后还需要遍历全部fd来找出就绪的poll虽然去掉了数量限制但同样存在遍历开销epoll则通过事件驱动和回调机制解决了大量连接下的效率问题。如果要答好建议画一张三者对比表把数量限制、拷贝方式、触发模式、内部实现讲透。3.2 epoll的两种触发模式与适用场景epoll有水平触发LT和边缘触发ET这是笔试里最经典的细节题之一。水平触发的意思是只要缓冲区还有数据每次epoll_wait都会返回边缘触发是只有当状态发生变化时从无数据到有数据才通知一次之后即使还有数据也不再通知除非有新的数据到来。很多新手不理解为什么ET模式更高效却更难用。因为ET模式下你必须一次把数据全部读完通常配合非阻塞IO循环读取到EAGAIN否则剩余数据可能会一直滞留在缓冲区里再也没机会触发事件。而LT模式就算一次没读完下次还能被通知。所以常见的生产实践是高并发环境下用ET加非阻塞IO、配合线程池处理业务逻辑同时要注意处理好半包和粘包问题。做题时如果忘记这一点可以去想想Redis、Nginx这些组件的IO模型为什么选epoll以及它们是怎么处理读事件的答案自然就浮出来了。3.3 多线程模型与共享资源竞争网络编程题中还有一类是线程模型题比如“是one thread per connection好还是线程池加event loop好”。one thread per connection实现简单但线程数量受限于资源且线程切换开销大连接数一高就会崩。Reactor模型把IO事件分发和业务处理分离Nginx和Netty都是这类思路。这时候还会引出共享资源竞争问题。多个线程同时操作同一个socket发数据需不需要加锁。答案是接收数据时若多个线程同时read同一个fd存在不确定性发送时通常建议由单线程负责写或者用队列把待发送数据串行化否则需要锁保护发送缓冲区和socket写操作。这个知识点很实用真实网关模块如果并发控制做得不好线上会频繁出现超时和乱序所以笔试里出现几乎是必然的。3.4 零拷贝、内核态与用户态切换除了IO模型零拷贝Zero-Copy也是一个高频加分项。一次常规的文件发送过程数据会经过磁盘、内核缓冲区、用户缓冲区、socket缓冲区、网卡中间多次上下文切换和数据拷贝。零拷贝通过sendfile、mmap或splice等方式减少用户态和内核态之间的重复拷贝提升高带宽场景下的吞吐量。网上的解释大多停留在“零拷贝不用拷贝”这种浅层笔试题如果要拿高分需要说清楚两种实现路径一是DMA从磁盘到内核缓冲区后直接通过socket发送sendfile二是利用mmap让用户态和内核态共享同一块物理内存避免readwrite的复制。还要提到零拷贝的适用场景大文件传输收益明显小文件或频繁小包传输因系统调用和内存映射开销反而可能得不偿失这些判断力正是考官想看到的工程思维。4. 数据结构和算法题不只考性能还考场景匹配4.1 哈希表设计与冲突处理核心网络研发岗对算法的考察偏工程实用型不会出特别偏门的竞赛题但会出与网络场景强相关的数据结构题。哈希表是绝对重点因为在LB、连接跟踪、路由匹配这些场景里哈希表是性能的基石。哈希表的考察点包括哈希函数设计、装填因子Load Factor设置、冲突解决方案链地址法、开放定址法、再哈希法、扩容rehash的时机与代价。如果题目给的是“设计一个支持高并发的连接跟踪表”就需要考虑分段锁或无锁哈希如Cuckoo Hash来减少竞争。我的建议是答题时先说明为什么选哈希而不是树或跳表再说明冲突策略和扩容方案最后提一下最坏情况下的退化问题如何避免好的哈希函数和负载因子控制。这种层层递进的回答方式是拿高分的关键。4.2 字符串匹配与长连接场景字符串匹配题在网络研发笔试里也出现过例如实现一个简单的AC自动机Aho-Corasick或多模式匹配用于内容过滤或DPI深度包检测。也有简单一点的版本在一个长字符串中定位子串让你手写KMP算法。KMP的核心是next数组的构建也就是失配时模式串回退的位置理解了这一点代码就不难写。这类题的工程背景非常清楚网关层做敏感词过滤、协议解析、URL路由匹配都需要高效的多模式匹配。笔试里出现字符串匹配只是为了看基础功底是否扎实以及能否把经典算法迁移到具体问题中。如果你能把AC自动机的构建过程讲清楚Trie树加fail指针加BFS构建并告诉考官在几千条规则时用AC自动机比逐个匹配快几个数量级这一题基本就稳了。4.3 大数据场景下的一些TopN问题2018年的笔试题目里还有一类典型的“大数据TopN”问题比如从海量日志中统计访问量最大的IP或URL。常规思路是哈希分片加小顶堆先对数据进行哈希取模分到多个文件每个文件内用哈希表计数再用大小为K的小顶堆求TopN最后合并各文件的TopN。这道题表面考算法实际考分布式思维数据太多无法一次性加载内存时怎么处理哈希分片能否让结果均匀堆的堆化过程和复杂度是多少。扩展场景里还会问如果数据分布在多台机器上怎么办那就是MapReduce框架的经典思路了本质上是分而治之。答题时画一个数据流简图会更清晰但注意别在卷面上依赖复杂图表写清楚每一步的输入输出即可。4.4 网络场景中的LRU缓存设计缓存淘汰策略也是热门考点。LRU最近最少使用在设计题中出镜率极高因为CDN缓存、DNS缓存、LB连接复用都用它。手写LRU的经典做法是哈希表加双向链表哈希表负责O(1)查找双向链表负责O(1)删除和移动节点。get操作把节点移到链表头部put操作在容量满时删除链表尾部节点。进阶追问往往是如果要求并发安全怎么办。可以用互斥锁保护整个结构但压力大的场景下性能不好更优做法是拆锁分段类似ConcurrentHashMap的思路或采用读多写少时的读写锁优化。再进阶一步是LFU最不经常使用和LRU的对比LFU对热门内容更友好但存在“历史热点污染”问题比如一个曾经爆款的内容会长期占据缓存位置这个问题在真实CDN调度中非常现实。5. 系统设计题高并发网关与负载均衡策略5.1 设计一个高并发接入网关系统设计题是笔试的压轴题也是最容易拉开差距的题。曾经有一道非常典型的题目是“设计一个支撑百万并发连接的接入网关”。面对这个东西答题思路比结果重要得多因为纸上谈兵给不出真实部署方案考官要看的是你有没有一套完整的思考框架。我的答题框架是这样的先分层接入层用LVSLinux Virtual Server或DPDK/内核协议栈优化处理网络包再用Nginx或自研网关做七层转发后面挂业务服务集群。其次讲连接管理百万连接意味着不能开等量线程必须用epoll事件驱动、线程池固定大小。第三步讲session保持和超时控制分布式环境下Session怎么同步心跳机制怎么设计。最后还得讲一下高可用健康检查、失败重试、限流熔断、配置热更新这些都要考虑到。如果题目有时间可以补充一些性能数据单机C10K到C10M的演进思路io_uring、XDP这些新技术的取舍。但要注意分寸如果答得过于花哨反而会显得没有重点。最好的回答永远是从核心问题出发层层递进有数据支撑有方案对比这样才有说服力。5.2 负载均衡算法与一致性哈希负载均衡的算法题也很经典从轮询、加权轮询、最少连接数、最短响应时间到一致性哈希逐层递进。最容易出题的是一致性哈希因为它在缓存和网关调度中都是核心问题。一致性哈希要答好需要包含几个要素哈希环的构建、虚拟节点的作用、数据迁移的最小化。为什么要引入虚拟节点因为真实节点很少时哈希环上的分布非常不均匀容易导致热点倾斜加入虚拟节点可以把每个物理节点映射成多个虚拟节点让请求分布更均匀同时一个节点故障只是把它的虚拟节点重新分配只影响少量数据。这个思路在很多分布式系统Redis集群、Cassandra里都是一样的理解了底层就能举一反三。另一个与之相关的必答点是“如何平滑扩缩容”。直接在哈希环中增加节点会导致大量数据重新映射所以需要把一致性哈希和最小化数据迁移结合起来回答。最好能举一个实际场景一个分布式缓存集群中有四台机器增加一台后受影响的数据比例如何计算这个问题我当年演练过现在仍推荐大家画个环算一遍。5.3 DPDK与内核协议栈的性能对比题2018年的话DPDK已经火过一阵了所以笔试题里偶尔会出现“为什么DPDK能大幅提升包处理性能”这类题。DPDK的核心优势是轮询模式代替中断模式避免频繁中断开销用户态驱动绕过内核协议栈的锁、拷贝和调度开销通过大页内存HugePages减少TLB miss使用无锁队列在多核间传递数据包。如果以“和内核协议栈对比”来答那么内核协议栈的劣势很明显每个包都要复制到用户态、系统调用频繁、锁竞争激烈、中断处理占用大量CPU。但也别把内核协议栈贬得一文不值通用性好、生态成熟、安全性经过长期验证多数场景下依然是首选。答题时加入这句“不是所有场合都适合DPDK只有当单机吞吐要求极高且业务可以接受独占CPU资源时才值得引入”会显得更有工程判断力。5.4 故障场景分析全链路超时排查最后一种系统设计题是“给定一个具体故障场景给出排查思路”。比如“用户普遍反馈打开网页变慢从网络层面如何排查”。这种题没有标准答案但有标准框架先确认影响范围所有用户还是部分用户所有地域还是部分地域再分层排查客户端、DNS、接入层、网络链路、应用层、数据库层每层用命令工具验证ping、dig、traceroute、ss、curl、tcpdump然后缩小范围定位根因。我在真实工作中最常遇到的情况是MTU分片问题或BGP路由抖动这两类问题都隐蔽、复现难、影响范围大。笔试时举这种案例会非常加分因为说明你有现场经验不是只会背命令。回到答题本身框架完整、命令使用正确、逻辑链条清晰基本就是高分的保障。6. 备考建议与避坑心得6.1 知识体系梳理的优先级如果离笔试还有两周到一个月我会建议按下面的优先级来复习第一优先级TCP/IP协议栈细节尤其是TCP状态机、拥塞控制、超时重传、流量控制。这一块在笔试中的出现频率极高且容易出大题。第二优先级Linux网络编程模型包括IO多路复用、Reactor模型、多线程同步、网络缓冲区的管理。第三优先级路由交换基础知识BGP、OSPF、VLAN、ARP、STP不需要掌握到思科认证那种深度但核心概念要能讲清楚。第四优先级数据结构和算法重点复习哈希表、字符串匹配、TopN、LRU、一致性哈希这些与网络场景强相关的内容。第五优先级系统设计题准备一套自己的框架多练几道高并发网关、负载均衡、故障排查题。我的体会是不要一上来就刷大量选择题。核心网络研发的笔试题更偏向于问答题和设计题选择题只是热身真正决定通过率的是你对知识点的解释能力和串联能力。所以复习时尽量用“给别人讲课”的方式来检验自己的理解能讲清楚才算掌握。6.2 常见失分点与答题技巧我自己看过不少校招笔试卷子总结了几类常犯错误概念混淆拥塞窗口和接收窗口分不清epoll的LT和ET讲不清NAT和代理搞混。这些问题如果出现在简答题里会直接断送整体印象分。只答结论不答过程题目问“为什么”只回答“因为TCP需要可靠传输”缺少“双方各自需要确认对方的收发能力”这种关键词就很难拿满分。算法题考虑边界情况不全哈希表扩容的时机、KMP模式串第一位失配、LRU容量为1的边界这些细节必须提前想清楚。设计题没有框架感想到哪写到哪缺少分层和主次。平时多背几套固定框架比如四层负载、七层负载、缓存、队列、限流、降级、监控考场上直接套用即可。答题时的建议是开门见山先写结论再展开细节。比如题目问“select和epoll的区别”第一句话就写“select采用轮询扫描、fd数量受限、内核到用户态拷贝开销大而epoll通过事件驱动回调机制在大量连接场景下性能更优”然后分点展开。这样阅卷人第一眼就能看到你的核心判断给分也会更“狠”一些。6.3 笔试与后续面试的衔接最后想聊聊这套题和面试怎么衔接。笔试一般是为了筛人题目往往覆盖面广、难度中等偏上但真正进入面试环节后考官会拿着你在笔试中的答案深度追问。我当时就遇到过笔试里写对了LRU实现面试官继续追问“如果key特别大怎么办”“如果突然有大量读请求怎么优化”这样的层层深入考察的就是你是否真的理解了还是换了个题目就懵了。所以复习笔试时我建议多留一个心眼每做一个知识点同时准备它的延伸问题。比如复习TCP拥塞控制就想想BBR和CUBIC的区别复习一致性哈希就想想如果节点权重不同怎么处理复习epoll就想想ET模式下常见的坑和实际项目中怎么规避。这种“一题三问”的复习方式效率比重复刷题高得多。7. 这套题对现在还有多少参考价值我认真翻了这套2018年的笔试题之后的感觉是大部分知识框架至今依然有效因为网络核心技术的演进并没有颠覆性改变TCP/IP的网络分层、路由协议、负载均衡、故障排查的基本逻辑还是那一套。但技术风向上有些变化值得注意QUIC/HTTP3已经从实验走向大规模部署DPDK和XDP在云原生网络里越来越常见可编程交换机P4和数据面可编程也变成热词现在的考察会更多涉及这些方向。另外现在的笔试趋势是越来越多地结合具体场景比如让你设计一个多集群Ingress网关、一个跨地域的加速链路调度器或者分析一个eBPF观测工具的应用场景。如果你要参加的是2024年之后的校招建议在网络基础之外多补充一些现代网络技术栈的知识。不过经典永远是经典。2018年的这套题之所以值得复盘是因为它考察的那些底层认知没有被时间淘汰当你面对一个复杂的网络系统时能不能快速定位问题和设计出合理的架构靠的正是这些基础概念形成的直觉。希望这篇复盘能帮你对核心网络研发方向有更整体的把握也能在准备笔试时少走一些弯路。