要求
逻辑清晰
每个框架清楚应用场景、注意事项、运行流程即可。
一、Java基础
- 说说spring 框架。 bean注入 aop 事务 反射等
- 说说spring boot? 说说autowired方法? Spring - @Autowired背后实现的原理_springboot autowired原理_Q.E.D.的博客-CSDN博客
- spring boot 统一异常处理 SpringMVC中统一处理异常_springmvc统一异常处理_fang·up·ad的博客-CSDN博客
- spring boot 不同环境的配置文件如何切换
- 说说微服务
- 分布式事务如何保证 安全验证 - 知乎 【分布式】分布式事务解决方案_哔哩哔哩_bilibili
- 多线程说说?说几个多线程类
- 死锁?如何避免 Java 线程死锁及如何避免死锁介绍_java死锁如何避免_大渔歌_的博客-CSDN博客
- CAS https://www.cnblogs.com/Shuuichi/p/10590710.html
- 异常体系 java异常体系_捻玖的博客-CSDN博客
- G1 垃圾回收器 - 简书
二、Spring
三、Spring Boot
1.为什么spring boot 不推荐使用Autowired注解
视频讲解 为什么Spring官方不推荐使用@Autowired属性注入_哔哩哔哩_bilibili
(1)成员变量初始化零值,是给每个类对象用null、0等初始化。
(2)Autowired是在init方法以后执行。底层反射也会花费时间;
(3)构造器方法初始化。在init方法中就会执行。提前执行且没有反射浪费时间。可使用lombok降低代码冗余,RequiredArgsConstructor会将成员变量生成一个构造器。
四、redis
redis 数据类型,采用的数据结构表示和什么编码格式存储。
数据类型的编码格式,即数据的存储格式,数据库中的数据存储格式非常重要,如 RDBMS 的行式存储和列式存储。Redis 作为内存数据库,对于数据编码的设计思想是,最大限度地“以时间换空间”,从而最大限度地节省内存。
缓存
使用缓存是为了系统的高并发,高性能,提高访问速度
(1)本地缓存
使用JVM的CocurrentHashMap实现或Guava实现。
应用场景
- 存储频繁使用的少量数据,支持高并发访问
https://www.cnblogs.com/zjdxr-up/p/16307774.html
20道经典Redis面试题_CSDN砖家的博客-CSDN博客
五、mysql
B+树和B数区别?
B+叶子节点和排序的下一个节点使用指针互相指向,叶子节点有所有父节点的数据冗余。他两相同点事都是排好序,叶子节点有多个。
上图B树,下图B+树。B树自己定义层数
innodb的page结构
(1) innodb和磁盘交互以16KB的存储大小进行读写交互。作用:减少磁盘IO,提高查询效率。比如where查询时,会先读出16kb比较是否存在,不存在,在读书下一个16kb比较,依次进行
(2)用户数据插入时,会根据主键进行排序。 所以建议主键使用自增id,可以提高插入效率。
页目录用来将用户数据分成多个组,记录每个组的主键和其实指针,提高遍历效率,因为如果没有页目录,如果查找一个大于用户数据中最大主键的数据,那么此时需要遍历整个链表。比如 select * from t where a=3 查询时直接从页目录找,因为 1<3<4,所以从第一组数据里面找。找到返回,找不到就找不到。提高了遍历链表速度。
为什么建议主键使用自增id?①因为数据插入时需要按照主键进行排序,如果主键id随意大小,每次插入都需要排序 ②最糟糕的是,如果一页满了,插入时需要将某个数据挤出此页,那么引发多米诺骨牌效应。
为什么不建议使用uuid? uuid无序,另外太占空间。
(3)多页数据存储。
where查询时,会先读出16kb比较是否存在,不存在,在读书下一个16kb比较,依次进行 ,如果数据多,那么一页页比较也特别慢,怎么解决?将每个页目录的最小值取出来,形成一个链表。那查询时就可以加快。 空间换区时间。