面试模拟-202508

面试模拟-202508
mengnankkzhouGemini模拟面试2025.7.29
1.Java面向对象的基本特性:
总:的介绍一下java面向对象
分:封装,继承,多态
总:好处
2.Hashmap的原理
总:hashmap是个啥
分:
基本数据结构类型,1.7 or 1.8
hash冲突解决
核心put过程
扩容机制,为什么是2倍
线程安全实现
concurrenthashmap
平时使用场景
3.ArrayList 和 LinkedList 的区别
- 底层数据结构
- 插入删除遍历节点
- 扩容
- 使用场景:
4.常用的设计模式
- 单例:饿汉式,懒汉式,DCL 枚举 实际应用,RedisClient AppConfig Spring bean
- 策略:
- 模板
- 观察
- 工厂
5.ThreadLocal的实现
- 底层数据结构
Threalocal涉及两个组件,一个是他对象本身负责set和get
然后一个ThreadLocalMap负责数据的存储,每一个线程都持有一个ThreadLocalMap他就是副本。是线程隔离的,不会有并发的线程不安全问题
ThreadLocalMap是Thread下面的一个内部类,使用了自定义的散列表来存储键值对,key为实例,value是为具体的对象
然后ThreadLocalMap
的 Entry
是用 WeakReference
来存储 ThreadLocal
对象实例,这样可以避免 ThreadLocal
对象不会因为强引用而无法被垃圾回收。但需要注意的是,value
是一个强引用,如果 ThreadLocal
没有正确清理,就可能导致内存泄漏的问题。然后我们如果想回收内存的话,需要显示的调用remove方法移除。或者是查找当前线程关联的map,将其键值对分别设为当前线程和null
内存泄漏问题
使用场景
6.你如何理解“悲观锁与乐观锁”?分别适用哪些场景?CAS 原理是什么?
- 悲观锁,乐观锁代表什么,实例,场景
- CAS原理,OS的cmpxchg
- CAS问题
- 使用场景
7.说一下 Java 中的 synchronized
关键字的实现原理、优化机制,以及它和 ReentrantLock
的区别
- 底层原理,对象头中的 monitor 锁,每个对象在 JVM 中都有一个对象头,包含了锁标志位和指向 monitor 的指针。当线程进入
synchronized
块或方法时,会尝试获得这个对象的 monitor。多线程竞争时,会进行 锁的升级,这就是 HotSpot 中的锁优化。 - 锁的升级过程,无锁->偏向锁->轻量级锁->重量级锁
- 和
ReentrantLock
对比
8.说一下 Java 中的 volatile
关键字的作用,它能实现线程安全吗?它和 synchronized
有什么区别?
可见性,禁止重排性
不能保证原子下,i++
和JMM的关系:JMM规定了主内存和工作内存的交互规则,volatile 会强制线程刷新工作内存和主内存之间的数据。
写 volatile → 插入一个 Store + StoreBarrier 。读 volatile → 插入一个 LoadBarrier + Load
应用场景,标识位,布尔控制变量,DCL
和
synchronized
对比