
Java面试
MANONGMN
收获与付出成正比
展开
-
【Java面试】fail-safe 和 fail-fast
原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所作的修改并不能被迭代器检测到。: 表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出 ConcurrentModificationException 异常,从而导致遍历失败。,表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出ConcurrentModificationException。原创 2023-11-02 15:20:43 · 194 阅读 · 0 评论 -
【Java面试】AQS?
AQS 是多线程同步器,它是 J.U.C 包中多个组件的底层实现,如 Lock、CountDownLatch、Semaphore 等都用到了 AQS. 从本质上来说,AQS 提供了两种锁机制,分别是排它锁和共享锁。,就是存在多线程竞争同一共享资源时,同一时刻只允许一个线程访问该共享资源,也就是多个线程中只能有一个线程获得锁资源,比如 Lock 中的 ReentrantLock 重入锁实现就是用到了 AQS 中的排它锁功能。原创 2023-11-02 15:02:28 · 127 阅读 · 0 评论 -
【Java面试】Java集合总结
HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到hash 值,然后通过(n-1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。内存空间占用:LinkedList 比 ArrayList 更占内存,因为LinkedList 的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。原创 2023-11-02 13:58:22 · 137 阅读 · 0 评论 -
【Java面试】面试被问:ConcurrentHashMap 底层实现原理?
ConcurrentHashMap有一个。原创 2023-11-02 12:47:48 · 128 阅读 · 0 评论 -
【Java面试】面试被问lock和synchronized的区别?
而非公平锁,就是不管是否有线程在排队等待锁,它都会尝试去竞争一次锁。synchronized在性能方面和lock相差不大,在实现上会有一个区别synchronized引入了偏向锁,轻量级锁,重量级锁,以及锁升级的机制去实现锁的优化,而lock则用到了自旋锁的方式实现性能优化。并且我们可以通过synchronized加锁对象的生命周期,来控制锁的作用范围,比如锁对象是静态对象,或者类对象,那么这个锁就是属于全局锁,如果锁对象是实例对象,那么这个锁的范围取决于这个对象的生命周期。2.修饰在同步代码块上。原创 2023-11-02 12:12:42 · 82 阅读 · 0 评论