3.12腾讯视频后端一面
面试题目
基础与底层:
- 多态在编程中有什么作用?Java 里是怎么实现的?
- 并发编程用什么措施?
- 讲一下 Java 垃圾回收机制和常见 GC 算法。
- 内存溢出、频繁 GC 可能是什么原因?怎么优化?
- TCP 和 UDP 的区别?适用场景分别是什么?为什么 UDP 不可靠还要用?
- HTTPS 攻击场景下证书伪造的可能性。
- B 树与 B+ 树的区别。
数据库与 Redis:
- 数据库 ACID 是什么?事务隔离级别及对应问题。
- Redis 常用数据结构及适用场景。
- Redis 为什么要用 Lua 脚本?其原子性如何保证?在集群模式(跨 slot)下是否保证原子性?
高并发与分布式系统:
- 秒杀场景下的库存超卖与防并发下单问题。
- 分布式 ID 生成方案。
- 分布式锁设计:按用户 ID 加锁的性能瓶颈分析,及 Redis 宕机后的锁释放问题。
- 支付场景下如何通过幂等机制处理超时、丢包和重复提交。
综合与算法:
- 在校期间如何使用 AI 辅助学习。
- 算法题:删除链表倒数第 N 个节点(需分别用双指针法和栈实现)。
参考解析
- Java多态实现:通过继承(重写)和接口实现,底层依赖虚函数表(vtable)进行动态绑定,实现“同名不同行”。
- B+树优势:相比B树,B+树所有数据存储在叶子节点,非叶子节点只存储索引,层级更浅,磁盘IO更少,且叶子节点通过链表连接,适合范围查询。
- 分布式锁宕机问题:设置锁的过期时间(TTL)防止死锁;使用 Redlock 算法或通过 Lua 脚本原子性加锁,解锁时校验唯一标识确保不会误删他人锁。
- 幂等设计:通常采用全局唯一请求 ID,通过 Redis 原子性
setnx记录或数据库唯一索引保证在多次请求中只有一次被处理。 - 链表倒数第N个节点:
- 双指针法:快指针先走 N 步,随后快慢指针同速,快指针到末尾时,慢指针指向倒数第 N 个节点的前驱。
- 栈法:将节点入栈,弹出 N 次找到目标节点的前驱。