面试题
文章平均质量分 86
linの架构梦
这个作者很懒,什么都没留下…
展开
-
spring循环依赖
什么是循环依赖循环依赖指bean之间相互依赖,但是注意只能是set注入属性类型(单例)的循环依赖能够被spring解决,如果是在构造函数中则会抛出异常BeanCurrentlyInCreationException什么是三级缓存 /** 一级缓存 这个就是我们大名鼎鼎的单例缓存池 用于保存我们所有的单实例bean */ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(25原创 2021-02-03 16:08:20 · 91 阅读 · 1 评论 -
Reentralock的加锁流程
reentrantlock的加锁流程非公平锁加解锁流程线程1执行如下操作:(出现竞争)CAS尝试将state由0设置为1,结果失败进入tryAcquire逻辑,再次失败进入acquireQueued逻辑- 创建Node队列创建两个 Node,其中第一个Node成为哨兵,用来占位,不关联线程在acquireQueued逻辑中,线程会进入一个死循环,两次失败过后会进入park阻塞如果自己是第二个Node节点关联的线程,那么会进行一次tryAcquire尝试如果原创 2021-02-03 16:03:43 · 468 阅读 · 1 评论 -
java线程
线程的优先级cpu采用时间片的形式调度运行的线程,当线程所分配的时间片用完之后,会发生线程调度,并等待下次分配。线程所分到的时间片多少也就决定了该线程所使用处理器资源的多少。线程优先级就是觉得线程需要多或者少分配一些处理器的资源通过成员变量priority 控制,范围 1~10,默认5。线程的优先级具有继承的特性,如果用A线程去启动B线程 ,那么B线程的优先级和A线程一致线程的分类默认情况下,java进程需要等待所有线程都运行结束,才会结束。主线程:守护线程:只要其它非守护线程原创 2021-02-03 16:00:33 · 168 阅读 · 1 评论 -
java内存模型
主内存与工作内存首先在介绍java内存模型中的主内存和工作内存之前,先介绍一下处理器的效率问题硬件的效率和一致性由于计算机的存储设备与处理器的运算速度有着几个数量级的差距,现代计算机都不得不加入一层或多层读写速度尽可能接近处理器运算速度的高速缓存,来作为内存与处理器之间的缓冲:将运算需要使用的数据复制到缓存中,让运算能快速进行,当运算结果结束后再从缓存中同步回内存中,这样处理器就无须等待缓慢的内存读写了。CPU缓存一致性从上面的描述可以看出,当多个处理器在同时运算共同的数据时,对于共享数据的一致原创 2021-02-03 15:56:36 · 45 阅读 · 0 评论 -
java共享模型
共享问题资源共享由于线程和进程的关系,在上一篇并发基础中有写到,多个线程可共享一块内存区域,并且每个线程也都有自己独立的工作空间。经典案例:从这里我们开始对自增自减进行迫害 static int counter = 0; public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() -> { for原创 2021-02-03 15:54:56 · 174 阅读 · 0 评论 -
HashMap
核心问题HashMap中的位运算,为什么采用位运算,为什么是2的n次幂?HashMap中的扩容HashMap中的主要成员变量get方法put方法寻找索引HashMap的结构主体还是一个存放Node节点的数组产生hash冲突之后,进行链化,在对应索引位置形成链表寻找索引/** 1.7 */final int hash(Object k) { int h = hashSeed; if (0 != h && k instance原创 2021-02-03 15:50:40 · 65 阅读 · 0 评论 -
深拷贝和浅拷贝
什么是拷贝引用拷贝Employee e=new Employee("zhangsa", "232", 23);Employee e2=e;sout(e);sout(e2);//结果hashcode相同上述操作叫做引用拷贝,对象创建在栈中,e保存着对象的引用地址,而e2=e则是将引用地址赋值给e2,即e2同e一起指向栈中的同一个对象对象拷贝Employee e=new Employee("zhangsa", "232", 23); Employee clone=null; clo原创 2021-02-03 15:49:15 · 63 阅读 · 0 评论