Java基础知识记录-20220315
Java基础知识记录-20220315
MySQL三大日志及各自的作用
binlog 、redolog、undolog
binlog: 用于记录数据库操作的日志,select和show查询语句除外,开启后可用于主从复制
redolog: 重做日志,用于记录数据库提交事务的日志,保证事务持久性
undolog: 记录事务未提交时前一个版本的日志,是前一个版本的快照,用于保证事务原子性
MySQL事务
数据库中的事务是指对数据库执行一批操作,在同一个事务当中,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。
并发情况下MySQL如何保证事务(什么是MVCC)
MySQL事务隔离级别,解决了什么问题
MySQL有4种事务隔离级别: 读未提交、读已提交、可重复读、串行化
解决的问题
读未提交: 不能解决脏读、不可重复读、幻读
读已提交:解决脏读、不能解决 不可重复读、幻读
可重复读:解决脏读、不可重复读、不能解决幻读
串行化:解决脏读、不可重复读、幻读
MySQL默认的事务隔离级别:可重复读
Redis数据结构
string 、list、set 、hash、zset
什么是跳表
zset底层数据结构是跳表
https://zhuanlan.zhihu.com/p/53975333
Redis分布式锁
https://blog.csdn.net/asd051377305/article/details/108384490
SpringBoot常用注解
@EnableAutoConfiguration
@EnableFeignClients
@EnableHystrixDashboard
@EnableCircuitBreaker
@EnableDiscoveryClient
@MapperScan
@SpringBootApplication
Java8 新特性
lambda表达式
Stream API
Optional
时间和日期API
如何排查慢SQL
1.通过show full processlist; 抓取慢sql
2.打开慢SQL日志
3.通过explain 查看sql执行计划
SQL 索引失效的情况
1.有or必全有索引;
2.复合索引未用左列字段;
3.like以%开头;
4.需要类型转换;
5.where中索引列有运算;
6.where中索引列使用了函数;
7.如果mysql觉得全表扫描更快时(数据少);
如何查看SQL是否走索引
1.使用explain查看SQL语句,看一下 select type、key length、Extra
2.查看Extra中是否有file sort ,有的话需要给排序字段增加索引
如果一条SQL有两个索引,走了慢的那个索引如何解决
1.强制走某一个索引
select order_key ,createtime FROM aaa force index(createtime) group by order_key
2.删除慢的那个索引,引导SQL优化期
kafka如何解决消息丢失问题
https://zhuanlan.zhihu.com/p/354772550
深拷贝和浅拷贝的区别
浅拷贝:复制一个对象,对象中的属性都复制一份,如果含有内部对象,则将引用指向它
深拷贝:完整复制一个对象,含有内部对象也复制一遍
如何实现深拷贝
1.实现Cloneable接口,重写clone方法,手动赋值
2.实现Serializable接口序列化,通过序列化和反序列
3.通过fastjson,从Object转成json,然后转回object,本质上是反射
MySQL 聚簇索引和非聚簇索引的区别
聚集索引
表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。 在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺序只能有一种。
非聚集索引
表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,其行数量与数据表行数据量一致。
总结一下:聚集索引是一种稀疏索引,数据页上一级的索引页存储的是页指针,而不是行指针。而对于非聚集索引,则是密集索引,在数据页的上一级索引页它为每一个数据行存储一条索引记录。
MySQL 为什么使用B+树而不使用B树,什么是B+树
https://www.cnblogs.com/tiancai/p/9024351.html
MySQL都有哪些索引
唯一索引、主键索引、普通索引、全文索引、外键索引、复合索引
唯一索引和普通索引的区别
唯一索引可以保证数据记录的唯一性
HashMap底层原理
数组+链表+红黑树
ConcurrentHashMap怎么保证线程安全的
https://jishuin.proginn.com/p/763bfbd7485c
synchronized和ReentrantLock区别
1.synchronized是JVM层面的锁,ReentrantLock是Java API层面的
2.synchronized没有显式的加锁解锁,通过字节码可以看出来,ReentrantLock可以显式的加解锁
3.synchronized不支持可重入、ReentrantLock支持
4.synchronized不支持中断、ReentrantLock支持中断
5.synchronzied是非公平锁、ReentrantLock根据参数设置是否公平,默认非公平锁
6.synchronzied锁的是对象,锁是保存在对象头里面的,根据对象头数据来标识是否有线程获得锁/争抢锁;ReentrantLock锁的是线程,根据进入的线程和int类型的state标识锁的获得/争抢。
volatile 在多核CPU下怎么保证多线程可见性
https://blog.csdn.net/mashaokang1314/article/details/96571818
Redis的使用场景
https://zhuanlan.zhihu.com/p/161311820
springcloud用过哪些组件
eureka、zuul、hystrix、openfeign、
你对Hystrix熔断机制的理解
什么情况下会触发熔断机制
1.请求超时
2.在时间窗口期内,超过一定次数失败就熔断
分布式事务你们是怎么实现的
RocketMq、本地事务表
多个服务调用,怎么保证事务的强一致性
用户下单,30分钟内未支付,清除占用如何实现
https://cloud.tencent.com/developer/article/1866307
数据库有100条记录,随机抽取20条记录,如何实现
1.MySQL写法
select * from goods order by rand() limit 20;
2.Java代码层面实现
将数据全部取出来,使用Collections.shuffle()洗牌算法,然后抽取20个
3.使用Redis
将数据id存储至Redis中,使用set结构,然后使用spop命令随机返回元素
DelayQueue的使用场景
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!