-
transient关键字标记成员变量使其在序列化时被跳过,仅对实现Serializable接口的类生效;static+transient冗余,finaltransient字段反序列化后按默认值初始化;适用于敏感数据、临时状态等场景。
-
能解决STW问题的关键在于理解JVM对象分配、标记与回收机制,而非依赖参数调优;需排查隐式System.gc()调用、DirectByteBuffer清理缺失、容器CPU资源争抢、GC算法适用性及日志分析能力。
-
匿名内部类是Java中“定义即实例化”的语法糖,用于满足单次使用的接口/抽象类契约,适用于非函数式接口、需调用父类构造器、定义字段或方法等Lambda无法处理的场景。
-
Java初学者开发购物系统应先用控制台实现核心流程:统一用nextLine()处理输入避免换行符残留;商品、购物车、订单类职责分明;购物车用ArrayList+Map管理;结账时复制商品快照;主循环用while+switch控制菜单;完成基础功能后再扩展持久化或界面。
-
Java中使用try-with-resources最核心的优势是让资源释放“不用操心但一定发生”,只要资源实现AutoCloseable,JVM就保证其在try块结束时自动关闭,无论正常执行、return或抛异常。
-
Connection必须实现AutoCloseable才能用于try-with-resources,旧驱动(如MySQL5.1.x、PostgreSQL42前)仅实现java.sql.Connection而未实现AutoCloseable,导致编译报错;需升级驱动并确保JDK≥7、编译目标设为1.7+。
-
标记-清除算法先标记可达对象,再清除未标记对象内存,不移动对象但产生碎片;适用于老年代,现代JVM多作为Mark-Compact或G1的基础阶段。
-
ArithmeticException是Java中不强制捕获的运行时异常,仅在int、long等整数类型除零时抛出;float/double除零返回Infinity或NaN;应前置校验分母而非依赖try-catch。
-
AtomicStampedReference不自动解决ABA,而是通过版本号使ABA可检测;必须用get(int[])原子获取最新引用与stamp,每次compareAndSet前重读,不可硬编码或缓存stamp,否则CAS因stamp不匹配而失败。
-
短路运算符仅在左操作数确定整体结果时跳过右表达式:&&左为false、||左为true时生效;需确保左操作数稳定快速且分布利于提前终止,避免异常、副作用或耗时操作置于左侧。
-
groupingBy默认返回HashMap无序,因HashMap不保证遍历顺序;需插入顺序用LinkedHashMap::new,需key排序用TreeMap并指定Comparator。
-
WebSocket连接后收不到弹幕,主因是Session被意外关闭;需检查isOpen()、避免异步未发送、禁用轮询改用SimpMessagingTemplate;弹幕时间应服务端归一化为offsetMs;高并发广播改用CopyOnWriteArraySet;XSS防护须后端白名单过滤。
-
ArrayList默认容量为0(JDK12+)或10(早期),size()始终为0直到add();add()末尾追加高效,set()需索引<size(),remove()移除元素导致O(n)移动;遍历时修改会抛ConcurrentModificationException。
-
G1通过Region机制规避外部碎片:每个Region为独立分配单元,无需物理连续空间;回收以Region为粒度采用复制算法,仅Humongous对象需连续空间,碎片风险被限制在可控范围内。
-
抽象类的根本意义是解决复用代码与强制规范行为的矛盾,它禁止实例化、允许存状态、提供具体方法并强制子类实现抽象方法。