主题
海隆网讯 已完结
日期
2024 年 9 月 5 日
自我介绍
面试官您好,我是 wmh,是软件工程专业的 25 届应届生。
我的主要技术栈是 Spring Boot、MySQL、Redis。也会使用前端框架 Vue3,有一定的运维经验。
在校参与过学校项目组工作,有在校团队项目经验。参与过需求分析、数据库设计、开发、测试、部署等项目全流程。
在校期间完成了定时微服务、在线判题平台、个人导航站等项目,也与项目组成员合作开发过学校实验室预约系统、低代码平台组件库设计、学校申硕平台的二次开发等。
在校期间多次参与竞赛,曾获蓝桥杯省一和 CCPC 河北省赛的铜奖。
Vue
Vue2 和 Vue3 之间的区别
Vue3 支持组合式 API (Setup API)
MySQL
索引都有什么类型
- 主键索引
- 唯一索引
- 普通索引
- 联合索引
- 前缀索引
多个字段建立一个联合索引,它的匹配原则是什么?
遵循最左前缀法则,如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。
如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。
什么情况会导致索引失效?
- 联合索引不遵守最左前缀法则
- 列运算(使用字符串函数,数字与字符串转换)
- 头部模糊匹配
- or 连接条件,其中一边没有索引
- MySQL 评估如果使用索引效率更低,就会进行全表扫描
- 查询的值是所有的值(避免回表查询)
B+ 树和 B 树的区别?
B 树所有节点都存放数据,B+ 树只有叶子节点才存放数据,对范围查询不友好,且读取索引节点时需要更多的内存和磁盘 IO。
MySQL 使用了优化的 B+ 树,将叶子节点的单项链表改为了双向链表。
Java
链表 LinkedList 和数组 ArrayList 的区别
- 数据结构:LinkedList 使用了单链表,ArrayList 使用了数组
- 性能:LinkedList 修改插入性能高,ArrayList 查询性能高
- 空间:LinkedList 每个节点需要存放前后节点的地址,占用额外空间,ArrayList 存在数组的预留位置
数据结构
常见的排序算法
冒泡排序、快速排序、堆排序、插入排序、选择排序
简述一下快排的基本原理
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递此达到整个数据变成有序序列。
- 从数组中任选一个元素作为基准
- 使得所有比基准小的元素都在基准的左边,所有比基准大的元素都在基准的右边
- 递归左子数组和右子数组
SSM 框架
Spring Boot 和 Spring MVC 的区别
Spring MVC 是 Spring 的一个 Web 框架,处理 HTTP 请求。
Spring Boot 是 Spring 的一个开发脚手架,简化创建和使用流程。
Redis
Redis 的使用场景
- 作为 MySQL 的缓存
- 分布式锁
- 分布式登录,存放 Token
- 分布式环境存放登录验证码
怎么保证缓存一致的?
在更新数据库时主动更新或删除缓存
先删缓存还是先更新数据库?
先操作数据库,然后再删除缓存
避免其他线程再删除完缓存且未更新数据库时重建缓存。
Redis 过期数据的返回值?
返回 nil
面试官说的 -1,是错误的。
Redis 的基本数据类型有什么?
- String
- Hash
- Set
- ZSet
- List