当前位置:首页 > 知识

网络面试题及答案

面试官在视频那头皱着眉,网络问我:“如果给你一个包含十亿条URL的面试文本文件,内存只有2G,题及怎么找出重复的答案URL?”这是某大厂三面真实出现过的题。我回答用哈希分片,网络他追问哈希函数怎么选、面试分片后怎么保证相同URL落到同一文件、题及每个小文件再用哈希表统计。答案答完他点点头,网络又补了一句:“那如果哈希冲突导致某个分片特别大呢?面试”——这才是面试的真正杀招。

网络面试题跟现场白板面试有本质区别。题及摄像头开着,答案你没法观察面试官的网络表情,对方也看不到你画图的面试手势。所有思考过程必须靠嘴说出来。题及我见过不少人技术底子不错,但视频里一紧张就沉默,对面以为你卡住了,直接换题。

TCP三次握手,别只背状态码

“说说三次握手。”这题出现频率高得离谱。背SYN、SYN-ACK、ACK谁都会,但面试官想听的是:为什么是三次而不是两次?我一般这么答——两次握手的话,服务端收到SYN就建立连接,但客户端可能因为网络延迟没收到SYN-ACK,又重发了一个SYN。服务端这时候会建立两个连接,其中一个永远等不到数据。三次握手的第三次ACK,本质上是让客户端确认“我收到了你的确认”,服务端才敢分配资源。

有个细节很多人忽略:第三次握手时,客户端已经进入ESTABLISHED状态,但服务端收到ACK之前还在SYN_RCVD。所以如果这个ACK丢了,客户端会直接发数据,服务端收到数据后发现连接没完全建立,会回RST。这个场景在抓包里偶尔能碰到。

HTTP和HTTPS,面试官在意的不是加密算法

“HTTPS握手过程说一下。”多数人能背出非对称加密交换对称密钥。但面试官接着问:“证书链怎么验证?”这时候就卡住一片。

我实际排查过一个证书问题:某内部系统换证书后,部分安卓手机报SSL错误。原因是中间证书没配全,安卓某些版本不自动下载缺失的中间CA。面试里聊到这个层面,比背RSA和AES的区别有用得多。

还有跨域。CORS预检请求什么时候触发?简单请求不触发,但一旦带了自定义头或者Content-Type是application/json,浏览器就先发OPTIONS。我遇到过前端同学在Nginx里配了Access-Control-Allow-Origin: *,但没处理OPTIONS请求,结果POST全部失败。面试官如果问“怎么解决跨域”,答Nginx反向代理、JSONP、CORS三种方案不够,得说清楚各自适用场景和坑。

算法题在视频里更容易翻车

现场面试可以写伪代码,视频面试通常要求共享屏幕写可运行代码。有次我面一个候选人,题目是反转链表。他写完后我让他跑一下,结果空指针异常。他盯着屏幕找了半分钟,说“这里应该判空”。其实我看到了,但我想看他调试的思路。

视频面试写代码,建议先把边界条件写在注释里。比如“head == null返回null”、“单节点直接返回”。面试官看到这个习惯,印象分会高。写完后别急着说“好了”,自己造一个测试用例走一遍。链表题就手动模拟[1,2,3]和[]两种情况。

动态规划题在视频里尤其难讲。最长回文子串,你用中心扩展法,时间复杂度O(n²),空间O(1)。面试官问能不能优化,你说Manacher算法O(n)。他让你解释,你对着屏幕干讲数组下标变换,对方大概率听晕。这时候可以共享一个空白文档,边写边画p数组的变化过程。视频面试的共享白板功能,很多人没用起来。

项目经验,别堆技术名词

“介绍一个你负责的项目。”这题看着开放,其实有陷阱。有人一上来就说“用了Spring Cloud、Redis、Kafka、Elasticsearch”,面试官接着问“Kafka消息积压怎么处理”,答不上来就减分。

我自己的做法是挑一个具体问题讲。比如“订单超时未支付自动取消”,方案有定时扫表、RabbitMQ死信队列、Redis过期监听。我选死信队列,然后讲TTL设置、消息丢失怎么补偿、幂等怎么保证。面试官顺着问“如果队列挂了怎么办”,我答本地消息表加定时补偿。这样聊二十分钟,比列十个技术栈管用。

视频面试还有个隐藏考点:网络稳定性。我经历过一次面试中途断网,重连后面试官明显不耐烦。后来我每次视频面试前,手机开热点备用,有线网络优先。摄像头角度调好,别仰拍鼻孔。这些细节不影响技术评分,但影响面试官的情绪。

最后说个真实案例。有个候选人被问“10亿URL找重复”,他答完哈希分片后,主动说“如果某个分片还是太大,可以对这个分片用布隆过滤器先过滤一遍,但布隆过滤器有误判,需要再精确校验”。面试官眼睛亮了。网络面试的加分项,往往就在这种主动延伸的边界思考里。

分享到: