字节飞书后端一面
《面试题目》
- 70min(40min+30min)
自我介绍
熟悉哪个项目 2. 那就简单介绍一下第一个项目
讲讲epoll 3. epoll和select,poll的区别
讲讲长连接和短连接 4. 长连接和短连接分别有什么使用场景(这里答得太差了,没反应过来面试官想问什么) 5. 为什么不全用go去写(项目里有java有go,因为是java转go) 6. 双层路由表怎么实现的 7. redis的ttl怎么设的 8. mq在这里的作用是什么 9. 对agent了解到什么程度 10. 讲讲langchain和langgraph 11. 讲讲mcp和skills的区别 12. 对prompt,mcp,skills,subagent的理解 13. 短期记忆和长期记忆怎么划分的 14. 讲讲操作系统中的虚拟空间 15. lc200岛屿数量(没撕出来,寄) 16. 反问,自己需要提升的部分 17. 对代码的日志调试不够熟练,对技术的具体使用场景不够了解 18. 总结,人生的处女面,太紧张了,语言组织混乱,没把面试官往项目亮点上引导,hot100复习了70多题,正好出到没复习过的,拼命回忆做法也没想起来
《参考解析》
-
Redis核心:Redis常用数据结构:String/Hash/List/Set/ZSet。持久化:RDB(定期快照,恢复快,数据可能丢失)和AOF(追加日志,数据安全,文件大)。缓存穿透用布隆过滤器;缓存雪崩加随机过期时间+多级缓存;缓存击穿用互斥锁或逻辑过期。分布式锁用SET key value NX PX + Lua脚本保证原子释放。
-
JVM与GC:JVM内存模型:堆(对象分配,GC管理)、方法区(类信息、常量池)、虚拟机栈(栈帧/局部变量/操作数栈)、本地方法栈、程序计数器。GC算法:标记-清除(内存碎片)、标记-整理(无碎片,但移动对象)、复制(新生代)。G1按Region划分堆,预测停顿时间。
-
消息队列:消息队列解决异步解耦、流量削峰。消息可靠性:生产者confirm确认;Broker持久化;消费者手动ACK。幂等性:消费端通过唯一ID+Redis或DB乐观锁实现。顺序消息:同一业务Key路由到同一分区/Queue,单线程消费。消息积压:扩消费者+增加分区+临时跳过非关键消息。
-
RAG与大模型:RAG(检索增强生成)流程:文档切片→向量化(Embedding)→存向量数据库→检索时将query向量化→TopK语义检索→将相关文档拼入prompt→LLM生成。优化:混合检索(语义+关键词)、重排序Rerank、查询改写、上下文压缩。评估:召回率(relevant docs retrieved/total relevant)、精确率、Answer相关性。