面试盲点总结

1、AutoWired和Resource的区别

AutoWird:
按照byType匹配,如果想byName.需要借助 @Qualifier

Resource:
指定了name或者type就按照指定来匹配,如果没有指定,则默认按照byName,匹配不上就byType.

AQS里面的ws属性

1、结构:
int state=0;
FIFO双端队列
队列节点是:线程ID,线程状态=ws

2、流程

先CAS抢占 state

抢占成功,节点放置,状态设置

抢占失败,则进行竞争:

tryAcqure获取独占锁

失败则AddWaiter进入队尾

也是CAS进行抢占,但是里面会进行状态的处理。

ws=SINGAL表示正在占用

如果前节点正在占领,则自己就设置为阻塞

如果前节点也是阻塞,则自己还是阻塞。

3、AQS默认是非公平的

先抢占state,还会在队尾插入的时候进行抢占

公平锁和非公平锁的成本开销及原理

非公平锁:两次CAS抢占state,最后再看线程状态,插入或占领

公平锁:直接先判断队列是否有等待的线程节点,然后插入或占领

ABA问题的解决

原子类,加版本号,jvm用的是时间戳,封装了一个原子类。voliate属性

HashSet

HashSet底层就是基于HashMap实现的,key就是去重,value就是PRESENT

模板方法
Transactional 注解实现过程
Zab协议和羊群效应

watch是会一次性的

节点类型有

临时的
永久的
临时有序
永久有序

Redis对象
Redis高性能的原因

1、非阻塞:多路I/O复用

2、内存操作

3、单线程:没有CPU切换开销

Redis结构
SpringCloud

PRC:调用
负载均衡
熔断机制
网关
配置化

jdk, cjlib

为什么jdk必须是接口?
jdk:

被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口(通过生成字节码机制)生成一个代理类,然后在这个代理类中织入代码(被代理的类是AOP里所说的目标,InvocationHandler是切面)。
cjlib

like 会走索引吗

like ‘aaa%’ 区分度高的时候走索引,区分度不高的时候不走索引

like ‘%aaa%’, like ‘%aaaa’ 不走索引。

为什么范围查找后不走索引

因为只有当前面字段为确认值时,后续字段才会有序,会走索引。

因为前面字段不确认的时候,后续字段就没有顺序了。

标记-清除 算法什么时候用

CMS算法就是啊,

堆的分配

为什么分新生代,老年代?

有些数据不会死那么快,减少操作

为什么新生代分成两片?
不要那么快放进老年代

为什么分s0,s1?
因为不要内存不连续。

堆外内存

又名直接内存
DirectBuffer 核心就是不受JVM管理,不会回收,自己回收

1、不被JVM管理,因此没有GC
2、不需要进入jvm,复制快。
但是不好管理

Redis为什么用跳跃表

1、跳跃表实现简单,相对于平衡二叉树
不需要旋转

2、性能Olog(N)

Redis分布式锁的核心是是什么

保障并发安全性

访问互斥

Lamda的原理

1、在调用的类内部生产一个内部类和一个静态方法
2、调用的时候调用的是内部类实例的静态方法、

jdk,cjlib

jdk为什么是接口?
因为实现机制就是 有个aware的织入类,创建代理的时候,参数就是接口类

线程池策略

1、直接拒绝:丢弃任务,抛出异常
2、忽略:丢弃任务,不抛异常
3、用调用excute 执行
4、丢弃队列最前面的任务,继续尝试放进当前任务

死锁优化
为什么是8就转红黑树

1、0.75的负载率
2、泊松分布
3、8的概率在百万分之一

根据泊松分布,在负载因子0.75(HashMap默认)的情况下,单个hash槽内元素个数为8的概率小于百万分之一,将7作为一个分水岭,等于7时不做转换,大于等于8才转红黑树,小于等于6才转链表。

为什么初始化的大小为16

经验值

你可能感兴趣的:(java基础)