字节跳动后端开发一面面经(用户增长)
《面试题目》
- 拷打项目,询问项目中最大的难点及解决方案,并进行深入追问。
- 雪花算法原理。
- 为什么选择RabbitMQ而不是其他消息队列组件?
- 定时调度任务相关问题。
- Redis淘汰策略。
- 多租户架构设计。
- RAG(检索增强生成)流程。
- Java内存模型(JMM)。
- 栈溢出的常见情况。
- 对象创建的步骤。
- 如何判断对象死亡?
- GC相关:STW的定义及在GC中是否必须存在。
- 手撕代码:字符串中的最长不重复子串长度(ACM模式)。
- SQL场景题:联合索引的优化,如何通过调整索引顺序提升查询性能。
《参考解析》
- RabbitMQ选型:对比Kafka(高吞吐、日志处理)、RocketMQ(强一致性、金融级可靠性)与RabbitMQ(低延迟、复杂路由)。强调因业务对消息路由灵活性要求高而选择RabbitMQ。
- Redis淘汰策略:列举LRU(最近最少使用)、LFU(最不经常使用)、TTL过期删除等。需结合业务场景说明为什么采用某种策略以平衡内存和命中率。
- JVM STW:STW(Stop-The-World)指在垃圾回收过程中暂停应用线程。STW在现有主流GC算法中是不可避免的,目的是确保对象引用关系在分析时不被业务线程改动,保证标记一致性。
- 联合索引顺序:遵循“最左匹配原则”。在SQL优化中,应将过滤性最强、查询最常用的字段置于索引的前列,并通过Explain分析索引覆盖情况进行调优。
- 最长不重复子串:使用滑动窗口算法,维护一个哈希表或数组记录字符及其下标,当遇到重复字符时,将窗口左边界更新为重复字符上一次出现位置的下一位。