感觉是重复造轮子

回 遮望眼: 是重复造轮子,这点不用辩,也没必要纠结。但这个词在面试场景里得拆开看。 轮子指的是最终产物,面试官根本不会用你的 mini http 去跑生产流量,他要的是造的过程在你脑子里留下了什么。同一个项目两个人做完,一个能讲清半包怎么处理、EPOLLOUT 忘了注销会怎样、chunked 和 Content-Length 同时出现怎么判、长度字段不校验上界会怎么被打爆;另一个只能说"我实现了 HTTP 服务器,支持 GET 和 POST"。前者是学习,后者才叫重复造轮子。 所以判断标准不是"这东西有没有现成的",而是"你能不能说出它为什么这么设计、不这么设计会怎样"。有成熟实现反而是好事:muduo、libevent、nginx 都可以拿来对照,你写完读一遍别人的,差距直接变成知识点。 真浪费时间的造法是这几种:跟着视频一步步敲、只跑正常路径、不读规范(RFC 1350、9110 这些明明是免费的)、跑通就不压测、遇 bug 靠 print 蒙过去。 再说说招聘市场的现实。秋招简历里手写 HTTP 服务器、线程池、RPC、协程库已经非常多了,同质化严重。面试官看到这个标题不会加分,只有你讲出的细节深度超过他的预期才会。所以策略是少而深:四个里挑一个做到能被追问三层,其余只做到"我说得清它和主项目的区别在哪",比四个都做一遍交差强。 如果目标是简历上有区分度,就在基础轮子上叠一层。比如给 chatroom 加一个 Agent 接入层——消息路由、工具调用、流式返回,或者给 mini http 写一份完整压测和瓶颈分析。前者踩的是当下需求,后者证明你能量化,两样都比再多造第五个轮子有用。 但基础的那一个还是得有。跳过轮子阶段直接上"带 Agent 的项目",很容易被一句追问打穿:Agent 的流式响应底层是 SSE 还是 WebSocket,为什么选它,粘包怎么处理。到那时候你会庆幸自己造过。