-
关键在于区分“程序还能不能活”和“业务还能不能做”:Error是进程级崩溃,不可恢复,需告警止损;Exception是功能级异常,可捕获、重试、降级,影响局部且可控。
-
Collections.copy方法体现PECS原则:源列表用?extendsT(生产者,只读),目标列表用?superT(消费者,只写),确保类型安全的跨集合元素复制。
-
Java类不能多重继承的根本原因是避免菱形继承导致的歧义,如方法/字段冲突、构造链混乱;而接口多实现安全,因只声明契约无状态;实践中应采用组合+接口替代。
-
答案:Java中通过Properties类和类加载器读取resources下的配置文件,如config.properties,使用InputStream加载并获取键值对,推荐ClassLoader方式确保JAR包内正常访问,注意处理文件缺失、编码及敏感信息存储问题,外部配置可用FileInputStream指定路径。
-
Shenandoah的“变量无感迁移”指对象移动时应用线程无需暂停、代码无需修改,依托BrooksPointers(对象头8字节原子字段)与读屏障协同实现:访问旧地址时自动跳转至新副本,确保语义一致且仅初始/最终标记需极短STW。
-
升级Hadoop至3.3.4后出现UnsatisfiedLinkError,根本原因是Windows平台依赖的本地库(如hadoop.dll)版本不兼容——Hadoop各主版本间的native组件二进制不互通,必须使用与目标Hadoop版本严格匹配的winutils.exe和hadoop.dll。
-
加了serialVersionUID仍报InvalidClassException是因为JVM比对的是其字面值,若未显式声明则自动生成,类结构微调会导致默认值变化;应统一用1L并按兼容性规则递增。
-
ZGC采用彩色指针而非“深色指针”,其核心目标是实现亚毫秒级暂停,回收对象堆内存而非“变量”,不追求“秒级回收”。
-
区块链区块头链接本质是用哈希指针替代普通指针的防篡改链表:每个区块的prev_hash存储前一区块头的SHA-256哈希值,内容篡改将导致哈希变更、后续链接断裂,验证自动且无需第三方。
-
必须用APT在编译期强制校验注解属性——通过@Retention(RetentionPolicy.SOURCE)声明注解,于process()中遍历标注元素、提取AnnotationMirror/Value并校验数值范围、字符串非空、枚举合法性、字段类型等,错误时调用messager报错中断编译。
-
选型核心是看变量被并发修改的频率:冲突少用乐观锁,冲突高用悲观锁。乐观锁靠版本号校验、不阻塞读,适用于社交点赞等低冲突场景;悲观锁用SELECT...FORUPDATE提前加锁,适用于秒杀、转账等高冲突场景;需关注热点数据写密度而非整体QPS,灰度时监控失败率与等待时长,混合策略更常见。
-
关键在于JVM编译后签名:泛型擦除使List<String>和List<Integer>均变为List,导致同名同签名冲突;用javap-s验证descriptor是否重复;桥接方法可能与手动方法重叠;应改用语义化命名如parseStrings()避免冲突。
-
NumberFormat.setParseIntegerOnly(true)使parse()方法忽略小数点及之后内容,仅提取开头整数部分;如"123.45"→123、"-42.99"→-42,但".5"解析失败。
-
Java通过JDBC查询INT类型含NULL字段时,必须用Integer等包装类接收,不可用基本类型int,否则getInt()返回0无法区分真实0与NULL,且可能抛异常;应先调用wasNull()判断或改用getObject("col",Integer.class)。
-
启用-XX:+PrintGCDetails后,GC日志中直接反映晋升行为的关键字段是:tenuringthreshold(显示为newthreshold)、survivor容量与使用量、oldgen增量,以及PSYoungGen存活大小变化;其中newthreshold值动态体现实际晋升年龄门槛,oldgen增量与年轻代存活量差值可量化晋升字节数,Survivor区饱和时newthreshold陡降或归零即表明强制晋升启动。