淘天后端社招一面面经

淘天集团 · 后端开发 · 一面 · 2026-04

面试题目

  1. 讲一下你们的搜索架构
  2. 输入一个关键词后是如何处理的?会经历哪些系统,整个流程是什么样的?
  3. 讲一下重构的方案,具体体现了什么技术力?整个过程遇到的最大难点是什么?
  4. 如何排查GC问题的?怎么确认哪一个是大对象?
  5. 分页是怎么做的?如何支持千人千面?不同用户不同筛选项每次返回分页顺序不同,怎么设计排序逻辑?
  6. 排序所需的数据是如何回流回去的?
  7. 多级缓存是如何设计的?Redis的ZSet用来干什么,底层原理?多线程并发请求Redis是安全的吗?
  8. Java写多线程程序怎么写?线程池参数怎么设计的?有没有遇到过线程池导致的性能问题?假如设定多个线程池,如何确定其和CPU核数的关系?还有没有用过其他线程池,ForkJoinPool?
  9. 解释一下配注解,比如RefreshScope是怎么实现实时拉取配置的?
  10. 讲一下配置中心的整体架构?修改文件后,如何同步到客户端的?客户端的IP存在哪里?心跳是谁发给谁?
  11. 讲一下RPC的架构。
  12. 设计一个Agent需要考虑哪些方面?

参考解析

  • GC排查与大对象:通过jstat查看GC频率,jmap dump内存堆栈,使用MAT工具分析大对象;大对象通常在Old区,通过查看堆内存中的占用实例数和大小定位。
  • Redis ZSet原理:底层由跳表(SkipList)和压缩列表/哈希表实现;ZSet保证了插入数据的有序性,适用于排行榜及优先级队列。
  • 线程池参数设计:核心线程数根据IO密集型或CPU密集型决定(CPU核心数+1或2*CPU核心数),需通过压测动态调整,关注队列饱和策略及拒绝策略。
  • RefreshScope实现:利用Spring容器的Scope机制,配置变更时销毁原有Bean实例并重新刷新,从而实现代理类获取最新的配置属性值。
  • Agent设计考虑:关注字节码注入(Instrumentation)、性能开销(非侵入式)、兼容性、稳定性(不能挂载导致主程序Crash)以及安全权限控制。