快手Java日常实习一面面经

快手 · Java日常实习 · 一面 · 2026-04

《面试题目》

  1. 自我介绍
  2. 为什么大一学Java、大二找实习?
  3. 自学Java与学校课程的区别?
  4. 手撕算法:链表题或两数之和(选两数之和)
  5. JVM概念及组成部分(运行时数据区及其他部分)
  6. JUC概念、JUC包组成及多线程实现方式
  7. 线程池:类型、参数、执行原理及参数设计策略
  8. 为什么IO密集型需要调大线程数?
  9. 实习中使用的线程池提交方法及线程安全定义
  10. 项目/实习中遇到的难点及解决思路
  11. Redis深度交流:单线程/多线程区别、工作模式、持久化机制(RDB/AOF适用场景)
  12. 离职原因及个人挑战思考
  13. 反问环节

《参考解析》

1. JVM组成: 除了运行时数据区(堆、栈、方法区、程序计数器等),还包括类加载子系统、执行引擎、本地方法接口和本地方法库。

2. 线程池参数设计: 核心参数包括corePoolSize、maxPoolSize、keepAliveTime、workQueue、threadFactory、handler。CPU密集型建议设置为CPU核心数+1;IO密集型建议设置为2*CPU核心数或根据IO等待时间比例动态计算。

3. 线程池执行原理: 优先核心线程处理;核心线程满则进入任务队列;队列满则创建非核心线程;非核心线程也满则执行拒绝策略。

4. Redis线程模型: Redis 6.0前是单线程(基于IO多路复用),6.0后引入多线程处理网络IO读写,但核心命令执行仍是单线程,保证了原子性。

5. RDB vs AOF: RDB是快照备份,恢复快,适合容灾恢复;AOF是命令追加,数据丢失风险小,适合对数据完整性要求高的场景。