字节跳动后端开发一面面经(用户增长)

《面试题目》

  1. 拷打项目,询问项目中最大的难点及解决方案,并进行深入追问。
  2. 雪花算法原理。
  3. 为什么选择RabbitMQ而不是其他消息队列组件?
  4. 定时调度任务相关问题。
  5. Redis淘汰策略。
  6. 多租户架构设计。
  7. RAG(检索增强生成)流程。
  8. Java内存模型(JMM)。
  9. 栈溢出的常见情况。
  10. 对象创建的步骤。
  11. 如何判断对象死亡?
  12. GC相关:STW的定义及在GC中是否必须存在。
  13. 手撕代码:字符串中的最长不重复子串长度(ACM模式)。
  14. SQL场景题:联合索引的优化,如何通过调整索引顺序提升查询性能。

《参考解析》

  • RabbitMQ选型:对比Kafka(高吞吐、日志处理)、RocketMQ(强一致性、金融级可靠性)与RabbitMQ(低延迟、复杂路由)。强调因业务对消息路由灵活性要求高而选择RabbitMQ。
  • Redis淘汰策略:列举LRU(最近最少使用)、LFU(最不经常使用)、TTL过期删除等。需结合业务场景说明为什么采用某种策略以平衡内存和命中率。
  • JVM STW:STW(Stop-The-World)指在垃圾回收过程中暂停应用线程。STW在现有主流GC算法中是不可避免的,目的是确保对象引用关系在分析时不被业务线程改动,保证标记一致性。
  • 联合索引顺序:遵循“最左匹配原则”。在SQL优化中,应将过滤性最强、查询最常用的字段置于索引的前列,并通过Explain分析索引覆盖情况进行调优。
  • 最长不重复子串:使用滑动窗口算法,维护一个哈希表或数组记录字符及其下标,当遇到重复字符时,将窗口左边界更新为重复字符上一次出现位置的下一位。