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的使用场景

https://juejin.cn/post/6844903822867824653

posted @ 2022-03-16 00:08  crazy-zz5536  阅读(48)  评论(0编辑  收藏  举报