-
Jackson的YAMLMapper默认不将点号(.)视为路径分隔符,而是将其作为普通键名的一部分;若YAML中使用formatting.template这类扁平键,需配合JSONPointer/formatting.template而非/formatting/template才能正确定位。
-
应使用double而非float存储身高体重,因float在常见范围内易精度丢失导致BMI判断失败,且Java默认浮点类型为double,混用会引发隐式转换风险;BMI计算需确保单位统一、校验正数输入,并避免硬编码平方或误用Math.sqrt()。
-
Java中接口支持多继承,通过extends可扩展多个接口。例如MoveableextendsFlyable,Swimmable,实现类Duck需实现所有方法;若default方法冲突,必须重写解决;同名常量应通过接口名明确引用,避免歧义。
-
使用java.awt.Robot模拟文件上传后键盘失灵(如Ctrl键常驻触发),根本原因是按键按下后未对应释放,导致系统级按键状态异常,需严格配对keyPress()与keyRelease()。
-
ConcurrentHashMap可实现线程安全简易缓存,支持原子操作如computeIfAbsent,适合静态数据;需手动管理过期与清理,不自动回收;Weak/SoftReference不适用因不可控且非线程安全;LinkedHashMap非线程安全且无TTL;复杂场景应选Caffeine。
-
Java死锁典型场景包括:①多线程以不同顺序获取同一组Lock或synchronized对象,如银行转账中线程A先account1后account2、线程B反之;②嵌套同步且锁对象不一致。
-
并发是程序能同时管理多个任务,即使单核也靠时间片切换实现;并行需多核硬件支持,真正物理同时执行。Java中应优先用ExecutorService线程池而非裸Thread,并注意parallelStream()共享ForkJoinPool的风险。
-
IntelliJIDEA解压即用,需配置JDK11+并新建Java项目验证:下载压缩包→解压至英文路径→运行bin/idea.exe或idea.sh→在ProjectStructure中添加JDK→新建项目运行HelloWorld成功即配置完成。
-
SpringBoot使用SpringDataRedis时,CrudRepository对boolean类型字段(如isActive)的派生查询(如findAllByActiveFalse())常因序列化/反序列化不一致而返回空结果;根本原因是Redis存储的布尔值被序列化为字符串"true"/"false",但默认查询仍按boolean类型匹配,导致类型不匹配。
-
学生类和课程类应作为独立实体设计,通过Enrollment关系类建模多对多关联;ID统一用String;选课需校验存在性、重复性、容量等;退课与查询应维护courseToStudents、studentToCourses等内存索引以实现O(1)操作。
-
Java中通过throws声明受检异常并由调用者用try-catch处理,底层传递异常、上层捕获并转化业务异常,提升程序健壮性与可维护性。
-
Semaphore许可数应根据目标资源真实容量设定,如数据库连接池为5则设为5,需预留10%~20%余量,动态资源应换用Resilience4j等限流器。
-
Eclipse中必须配置JDK(而非JRE)才能正常编译调试及使用新语法;需在InstalledJREs中添加JDK根路径,并在项目级设置JavaBuildPath、CompilerCompliance和ProjectFacets保持版本一致。
-
Java中Set的并、交、差需用addAll、retainAll、removeAll,但会原地修改;判断交集非空应使用!Collections.disjoint()而非retainAll返回值。
-
使用静态内部类实现单例,结合Collections.synchronizedList保证集合线程安全。1.静态内部类确保懒加载与线程安全;2.synchronizedList包装列表防止并发修改;3.遍历时需手动同步。推荐此方式,优于双重检查锁定。