- 博客(11)
- 收藏
- 关注
原创 java基础面试题
synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了 synchronized 锁的升级。
2025-07-05 15:34:26
1214
原创 map的底层逻辑实现原理
选型建议:快速存取 →"HashMap"。有序遍历 →"LinkedHashMap"(顺序)或 "TreeMap"(排序)。高并发 → "ConcurrentHashMap"。底层优化:哈希冲突处理(红黑树)、锁粒度细化(CAS + synchronized)、动态扩容。理解 "Map" 的底层实现有助于在开发中合理选择数据结构,平衡性能、线程安全和功能需求。
2025-07-05 14:22:08
522
原创 Map的特性
/ 按 Key 长度排序// 输出 {C++=2, Java=1}(Key 长度 3 → 4)核心区别:"HashMap"(无序快查)、"LinkedHashMap"(保留顺序)、"TreeMap"(排序)、"ConcurrentHashMap"(高并发安全)。底层优化:动态扩容、红黑树退化机制、分段锁/CAS 并发控制。
2025-06-10 19:08:12
1373
原创 list的动态扩容
核心原则:动态扩容通过空间换时间,平衡了内存占用与操作效率。最佳实践:预估数据规模,初始化时指定容量(如 "new ArrayList<>(N)")。避免频繁扩容导致性能抖动,尤其在数据量大的场景。
2025-06-07 17:53:07
855
原创 list接口
多线程->使用"CopyOnWriteArrayList" 或 "Collections.synchronizedList()" 包装类。提供add(),get(),remove(),set()等基本索引的操作,以及迭代器listiterator支持双向遍历。"List" 实现类,可显著提升程序性能和代码可维护性。:"ArrayList" 与 "LinkedList" 在内存占用和 GC 性能上的差异。避免在 "LinkedList" 中使用 "for" 循环遍历(性能差),改用迭代器。
2025-05-22 21:50:35
334
原创 异常的详细内容
场景:需明确业务错误类型(订单状态非法,用户权限不足)。实现:继承(受检)或(非受检):自己写一个错误类型的方法。Java异常处理机制通过分层分类管理错误,核心在于:明确异常类型,合理使用try0-catch-finally和自定义异常,遵循最佳实践。
2025-05-21 21:49:04
300
原创 对象间的四种关系
依赖和关联是基础关系,前者临时使用,后者长期持有。设计时需要根据对象间逻辑选择合适关系组合适用于不可分割的部件(订单与订单项)聚合适用于复用模块(部门和员工)。设计时需要根据对象间逻辑选择合适关系组合适用于不可分割的部件(订单与订单项)聚合适用于复用模块(部门和员工)。依赖:开发过程中,不同的组件或模块之间的相互依赖关系,可以是Java类,Java包或Java库。继承是基于类的依赖关系,子类继承父类的属性和方法,同时可以进行方法重写,达到代码重用的目的。
2025-05-21 21:40:25
211
原创 static
static还可以修饰成员变量、成员方法、代码块和内部类,改变它们的性质和使用方法,静态变量和静态方法属于类本身,所有对象共享静态变量,通过类名可以直接调用静态方法,但静态代码块在类加载时执行,属于初始化静态变量或执行一次性的操作,静态内部类不依赖于外部类的实例,可以直接创建对象。
2025-05-17 21:35:55
372
1
原创 JDK和JRE
所有的java程序都会被编译成【.class文件】,经由虚拟机间接的与操作系统交互,由虚拟机解释经由本地系统执行。JVM:java虚拟机==实现跨平台 核心部分。JDK:开发工具包==面向开发者。JRE:运行环境==面向程序用户。
2025-05-17 16:32:35
111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅