-
Java集合框架是统一管理数据的“通用收纳盒”,专注存储、安全访问和灵活替换;Collection与Map因设计目标不同而互不继承;选错实现类性能差10倍;遍历时修改需用Iterator.remove()或removeIf()避免ConcurrentModificationException。
-
finalize()不是析构钩子而是GC负担,无调用保证且易致OOM;应禁用并改用Cleaner或try-with-resources。
-
企业级开发中封装与可读性需动态权衡,核心是明确封装目的、契约边界和可观测性,避免为整洁而封装,强调路径可见、职责清晰、团队共识及工程化保障。
-
BLOCKED线程从未获取锁,WAITING线程一定曾持有锁;jstack中“waitingtolock”表未抢到,“waitingon”表已持有并让出;sleep不释放锁且非WAITING,wait必须在synchronized内调用;BLOCKED自动参与锁竞争,WAITING必须显式唤醒。
-
类是对象的模板,定义属性和方法;对象是类的实例,具有具体状态和行为。例如Person类定义姓名、年龄及说话方法,通过new创建多个独立对象如person1,各自存储数据并调用方法,体现封装性。
-
该用Predicate而不是Function:Predicate专用于返回boolean的判断逻辑(如filter),Function专用于返回任意类型的转换逻辑(如map);混淆会导致编译错误、语义混乱及集成崩溃。
-
不能只用e.printStackTrace()记录异常,因其输出到System.err、不可控且不支持结构化日志;应使用logger.error("msg",throwable)配合SLF4J+Logback/Log4j2,并注意MDC透传与上下文传递。
-
WebSocketServerProtocolHandler必须置于pipeline最前端,因其需处理原始HTTP升级请求;若前置解码器已将其转为FullHttpRequest,则握手失败并抛IllegalStateException。
-
Java方法内联由HotSpot的C2编译器在运行时动态决定,依据方法热度、字节码大小(默认≤35)、是否含synchronized/异常处理器等执行特征;@ForceInline对普通代码无效,虚方法需JIT证明调用目标唯一才可能去虚拟化内联。
-
ThreadLocal在线程池中必然残留,不显式清理会导致上下文污染;其value为强引用,key为弱引用,异常或遗漏remove会使value长期驻留,引发数据错乱。
-
String.split()基于正则表达式拆分字符串,需转义元字符如.|[]等,使用limit参数可控制结果长度和空字符串处理。
-
NavigableMap扩展SortedMap,提供有序访问和导航方法。1.ceilingEntry、floorEntry、higherEntry、lowerEntry查找最接近键的条目;2.pollFirstEntry和pollLastEntry获取并移除极值条目;3.descendingMap、subMap、headMap、tailMap支持反向和范围视图;4.firstEntry、lastEntry、navigableKeySet等返回有序集合。方法均基于排序,适用于TreeMap,注意边界与nul
-
局部变量表是编译期确定的字节码静态结构,不参与运行时压栈;真正压栈的是调用过程中参数、返回地址及局部变量值,它们在操作系统栈中动态分配并按固定偏移(如ebp±n)布局,可通过C+GDB实操观测。
-
ThreadLocal通过为每个线程维护独立变量副本解决线程间数据污染,核心是“线程内单例”;需显式remove()避免内存泄漏,且子线程默认不继承其值。
-
Character.digit()将数字字符按指定进制解析为整数,参数为码点和进制(2–36),非有效数字或超范围时返回-1;需校验结果,不适用于整串转换。