腾讯视频后端开发面经
《面试题目》
一、 项目深挖与常规问答
- 自我介绍。
- 挑一个花费时间最多、最重点的项目介绍,并罗列一两个难点。
- 目前项目的访问量多大?
二、 计算机基础与后端八股
- 操作系统与网络:Python多进程解决OOM原因;进程与线程区别;FastAPI连接过程(TCP三次握手);WebSocket与轮询对比。
- JVM:运行时内存区域;堆内存回收机制;引用类型回收逻辑。
- Redis:布隆过滤器、互斥锁、逻辑过期应用;逻辑与物理过期区别;HyperLogLog、ZSet、Bitmap原理与场景;统计七天活跃用户交集方案。
- RabbitMQ:消息百分之百入库保证;死信队列处理;消息幂等性。
- MySQL:签到表索引设计;高并发重复点赞MySQL解决方案;乐观锁与悲观锁对比及悲观锁缺陷。
三、 算法与代码手撕
- 实现 O(1) 时间复杂度的 LRU 缓存。
- 合并 K 个升序链表。
四、 AI 与大模型工程
- RAG 工作流步骤;RAG 知识库生成步骤;向量检索相似度判断;Agent 架构设计。
五、 反问环节
- 入职工作内容与难点;腾讯内部 AI 辅助编程态度;面试评价与建议。
《参考解析》
- Python多进程vs多线程:Python受限于GIL(全局解释器锁),多线程无法利用多核CPU执行计算密集型任务,而多进程拥有独立内存空间,可规避GIL并利用多核,适合处理大内存计算以解决OOM。
- TCP连接过程:即经典三次握手(SYN -> SYN/ACK -> ACK)。FastAPI底层基于Starlette和uvicorn,涉及异步I/O事件循环,需理解内核缓冲区与文件描述符操作。
- Redis缓存一致性:布隆过滤器解决缓存穿透;互斥锁解决缓存击穿;逻辑过期通过提前设置过期时间字段,由后台线程异步重建,避免缓存失效瞬间压力。
- RabbitMQ可靠性:生产端使用Confirm机制确认投递,MQ端通过持久化存储(Queue/Message Durable),消费端通过手动Ack确认处理完成,配合幂等性检查(如Redis存唯一流水号)保证一致性。
- MySQL索引与锁:签到表应建立(user_id, sign_date)联合索引;高并发点赞可用MySQL的UNIQUE索引或Atomic update(update … where … and status=0)实现;乐观锁通过CAS版本号机制,减少锁冲突导致的阻塞。