自我介绍

您好,我是李文泽,2026 届的软件工程本科专业应届生。我的技术方向是Java后端开发,有扎实的编程基础和项目经验。

在技术栈方面,我熟练掌握Java语言和面向对象编程思想,熟悉Spring、Spring Boot、MyBatis等主流框架。数据库方面熟悉MySQL的使用和优化,了解Redis缓存的应用。

项目经验方面,我做过在线视频、音乐管理系统等项目。在音乐管理系统中,负责后端核心功能开发,包括用户模块、视频模块和评论互动模块的实现。我独立设计了 MySQL 表结构,实现了视频分页查询和关联查询逻辑,同时使用 Redis 缓存播放量等热点数据,减少数据库访问压力,同时解决了缓存穿透的问题。

我的学习能力比较强,遇到问题会主动查资料、看源码、做实验来解决。平时会关注技术社区,学习新技术和最佳实践。我对技术充满热情,希望能在实际工作中不断提升自己,为团队创造价值。

HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0 的区别?

HTTP/1.0:最初的标准,但是每个请求都需要独立的TCP连接,效率低下:

HTTP/1.1:引入了持久连接、管道化和缓存控制,成为近年来的主流,但是存在队头阻塞问题;

HTTP/2.0:引入二进制分帧、多路复用、头部压缩、服务器推送等,大幅度提升了性能;

HTTP/3.0:基于QUIC协议,使用UDP代替TCP,解决了对头阻塞问题,提交连接速度。

一、在线视频系统可能会问


1️⃣ 视频播放量为什么用 Redis?

使用 Redis 缓存播放量,是为了减少数据库访问压力。播放量属于高频读写数据,如果每次都更新 MySQL,会增加数据库压力,而 Redis 基于内存,读写速度更快。


2️⃣ Redis 和 MySQL 如何保证数据一致?

常见做法是:

  • 先更新数据库

  • 再删除或更新缓存

采用“先更新数据库,再删除缓存”的策略可以减少数据不一致问题。


3️⃣ JWT 登录流程是怎么实现的?

用户登录成功后:

  • 后端生成 JWT token

  • 返回给前端

  • 前端每次请求在请求头携带 token

  • 后端通过过滤器解析 token,校验合法性

如果验证通过,则允许访问接口。


4️⃣ 视频分页怎么实现?

使用 MySQL 的 limit 实现分页:

limit (page-1)*size , size

在项目中使用 MyBatis-Plus 的分页插件完成分页查询。


5️⃣ 为什么选择单体架构?

因为项目规模较小,业务复杂度不高,单体架构开发成本低,部署简单,更适合学习和中小型项目。


二、音乐系统可能会问


6️⃣ MinIO 是什么?为什么用它?

MinIO 是一个对象存储服务,用于存储文件。

在项目中用于存储音频文件和封面图片,实现文件与数据库分离,提升系统扩展性。


7️⃣ MyBatis-Plus 和 MyBatis 区别?

MyBatis-Plus 是 MyBatis 的增强工具,提供了通用 CRUD 方法,减少了重复 SQL 编写,提高开发效率。


8️⃣ 分层架构怎么划分?

  • Controller:处理请求

  • Service:处理业务逻辑

  • Mapper:操作数据库

分层可以提高代码可维护性。


三、Java 高频


9️⃣ HashMap 原理

HashMap 底层是数组 + 链表 + 红黑树,通过 hash 计算下标实现快速查找。

当链表长度 ≥ 8 且数组容量 ≥ 64 时,会转为红黑树。


🔟 ArrayList 扩容机制

默认容量为 10,当容量不足时,扩容为原来的 1.5 倍。


11️⃣ synchronized 作用

用于保证线程安全,通过加锁保证同一时间只有一个线程执行。


12️⃣ 什么是死锁?

多个线程互相持有对方需要的资源,彼此等待,导致程序无法继续执行。


四、MySQL 高频


13️⃣ 什么是索引?

索引是用于提高查询效率的数据结构,InnoDB 使用 B+树。


14️⃣ 为什么用 B+树?

因为 B+树高度低,磁盘 IO 次数少,适合范围查询。


15️⃣ 最左前缀原则

联合索引必须从最左边的字段开始使用,否则索引可能失效。


16️⃣ explain 是干什么的?

用于查看 SQL 执行计划,判断是否走索引。


五、Redis 高频


17️⃣ Redis 为什么快?

基于内存、单线程模型、IO 多路复用。


18️⃣ Redis 数据类型

String
Hash
List
Set
ZSet


19️⃣ 缓存击穿

热点 key 过期,大量请求打到数据库。


20️⃣ 缓存雪崩

大量 key 同时过期。


21️⃣ 缓存穿透

查询数据库中不存在的数据,每次都访问数据库。


六、Spring 高频


22️⃣ Spring Boot 自动配置原理

基于 @EnableAutoConfiguration,通过 spring.factories 加载自动配置类。


23️⃣ 事务失效场景

  • 方法是 private

  • 同类调用

  • 没有被 Spring 管理