0526茁维尔AI科技 java后端面试

字节跳动 · Java开发工程师 · 广东 · 2026-06

《面试题目》

  1. 项目开发中有没有遇到大文件读写的场景?
  2. Java IO中字节流和字符流的区别是什么?
  3. 字节流可以传输图片、视频这类文件吗?
  4. Java集合中List、Set、Map的区别是什么?
  5. 讲一下HashMap的底层原理?
  6. 项目中的SQL优化是怎么做的?怎么排查出问题、为什么接口会慢?
  7. 数据库索引有哪些类型?
  8. 事务的四大隔离级别是什么?
  9. 项目中遇到行锁、表锁该怎么解决?
  10. 有没有使用过Linux?
  11. 生产环境项目出bug该怎么排查?有哪些实时排查命令?
  12. Docker怎么查看实时日志?
  13. Spring IOC容器的核心原理是什么?如何实现依赖注入?
  14. 项目中有没有使用MyBatis的一级缓存和二级缓存?
  15. Spring Boot的核心优势是什么?
  16. Apache策略模式的接口加载逻辑具体怎么实现?
  17. 复杂策略、节点需要往回流转的情况该怎么处理?
  18. 有没有使用过Redis?结合项目场景说一下使用场景?
  19. 乐观锁和悲观锁的区别是什么?
  20. Redis的过期策略是怎么实现的?
  21. oc了,但是感觉薪资太少,规模也小,没必要去,拒绝了

《参考解析》

  1. MySQL深度:MySQL InnoDB使用B+树索引,支持ACID事务。关键知识点:聚簇索引(主键索引)叶节点存完整行数据;辅助索引叶节点存主键值(需回表);MVCC通过undo log版本链+ReadView实现多版本并发控制,解决脏读/不可重复读;事务隔离级别从低到高:读未提交→读已提交→可重复读(默认)→串行化。

  2. Redis核心:Redis常用数据结构:String/Hash/List/Set/ZSet。持久化:RDB(定期快照,恢复快,数据可能丢失)和AOF(追加日志,数据安全,文件大)。缓存穿透用布隆过滤器;缓存雪崩加随机过期时间+多级缓存;缓存击穿用互斥锁或逻辑过期。分布式锁用SET key value NX PX + Lua脚本保证原子释放。

  3. Spring框架:Spring IoC容器管理Bean生命周期,核心是依赖注入(DI)。AOP面向切面编程通过动态代理(JDK/CGLIB)实现横切关注点(日志/事务/权限)。Spring事务传播行为:REQUIRED(加入现有或新建)、REQUIRES_NEW(挂起当前,新建)、NESTED(嵌套事务)等。