2026.09.08-北京小厂全栈面经与复盘

2026.09.08-北京小厂全栈面经与复盘

最后更新:


985 字 约 5 分钟

前面问了一下项目没录到,但是没什么问题

技术

首先问了一下TCP的三次握手,这个看过又忘得差不多了,只能大概扯了一下

整个TCP三次握手其实就是基于SYN和ACK,对对方进行通信能力建立的确认,主要实现的核心是序列号seq

首先分为客户端和服务端,服务端保持网络端口监听状态

客户端生成序列号x,并在TCP报文首部中的控制位标记SYN = 1,表示我这边开始的通信的序列号是以x为起点开始计算的,你这边注意一下;这是第一次握手

服务端接收到SYN和序列号seq = x,明白了对方的意思,于是自己这边也生成初始序列号y,同样发送SYN = 1,表示我这边是以y作为起始序列号的,同时对对方的信息返回ACK = 1表示确认我这边收到你的信息了,用ack = x + 1表示你那边下一条应该给我发送x + 1序列号;这是第二次握手

客户端接收到SYN和序列号seq = y,也明白了,然后发送确认ACK表示我这里也收到你的信息了,同时发送seq = x + 1表示这是第二条消息,ack = y + 1表示你那边下一条应该给我发y + 1序列号,接下来我们开始通信吧,连接建立成功;这是第三次握手


接下来问了我Python怎么启动一个http服务,我答了uvicorn,但是不知道原生Python怎么启动

实际上Python有原生库http,直接python -m http.server 8000就可以


情景题

面试官:假设你现在需要抓取一些网站的热点,比如说论坛,再比如说公众号,监测几个公众号的阅读统计,实现一个监控网站,像微博,发文章了第一时间收到,你会怎么设计

这里分成两种情况回答

第一种就是官方给了我们API接口,这种就比较容易,我们直接调用,然后做数据分析

但是如果没有公开API请求,或者没有给到,就可以尝试使用浏览器的开发者工具,分析页面,对对应的后端API发起curl请求,验证接口格式我们这里再进行对应设计

后面复盘,抓包模拟curl在大型网站面前基本秒封,所以需要其他设计

首先使用自动化工具兜底,当网站的接口加密参数极难逆向解析的时候,就需要考虑使用像Playwright这样的自动化工具,进行无头浏览器渲染抓取

另一个方面可以解析DOM,如果是SSR也就是服务端渲染,可以通过库来解析DOM,如果是SPA则通过监听WebSocket或者拦截XHR数据流

XHR就是XMLHttpRequest,是浏览器内部支持的一个JavaScript API,可以在不刷新整个网页的情况下和后端交换数据

同时在实时监控层面,可以采用高频轮询和增量抓取策略,保证数据的即时性

安全方面,使用IP代理池,建立健康检查机制,当某个IP出现403的时候立刻剔除并且报警


有没有了解的第三方爬虫框架

这里没有了解过

后面看了一下,像是Python有Scrapy,TypeScript有Crawlee,甚至还有现代化的LLM爬虫Firecrawl,可以将网站转为LLM友好的Markdown或者JSON,现在看来爬虫这个领域还是挺有意思的,发展得也很成熟,相当于一种程度上的网络攻防?在信息获取上有重要的作用,像是Firecrawl这种工具爬到的结果甚至可以拿来做LLM训练


然后后面就让我讲了一下冒泡排序和二分查找,描述得有点乱七八糟,但是还是说出来了

评论

评论会在审核后展示

查看原图