-
企业级Java开发环境需统一JDK版本(如OpenJDK17LTS)、用SDKMAN!管理多版本;Maven为主构建工具,配置私有仓库镜像与依赖管理;IDEA标准化配置代码化;DockerCompose支撑本地中间件;JVM参数与调试预置,强调可控、可审计、可批量部署。
-
ArrayList采用1.5倍扩容而非2倍,是为了降低连续内存碎片率:2倍扩容(如100→200)导致闲置空间激增(如存120个元素浪费80位),加剧老年代碎片化和GC压力;1.5倍(100→150)闲置更少(仅浪费30位),内存利用率稳定在70%~85%,旧数组更易被完整回收。
-
add()遍历时必报ConcurrentModificationException,因迭代器的expectedModCount与集合modCount不一致触发fail-fast机制;安全做法包括暂存后批量添加、倒序遍历、ListIterator.add()或改用CopyOnWriteArrayList等。
-
new出来的对象不一定在堆上,因逃逸分析可判定其是否逃逸:未逃逸时JVM可栈上分配或标量替换;方法逃逸或线程逃逸则必须堆分配。
-
Java中对象克隆分为浅克隆和深克隆。1.浅克隆通过实现Cloneable接口并重写clone()方法,复制基本类型值和引用类型地址,导致原对象与克隆对象共享引用对象;2.深克隆则确保完全独立,可通过重写clone()递归克隆、序列化反序列化或使用JSON转换等方式实现,适用于需隔离对象的场景。
-
Optional.ifPresent不适用于分布式事务补偿或状态安全恢复,它仅为避免空指针的本地无副作用消费操作,缺乏事务性、幂等性、重试机制及跨服务协调能力。
-
Map.merge()仅在键已存在时调用remappingFunction;键不存在则直接put,不执行函数;返回null会删除该键;多线程需用ConcurrentHashMap保证原子性。
-
Java21的记录类与模式匹配使switch处理嵌套对象更安全简洁:通过record定义不可变数据结构,结合类型+记录+列表模式及守卫条件,实现多层解构、null防御和编译期穷尽性检查。
-
答案:配置JavaMaven项目需先设置JDK和Maven环境。在IntelliJIDEA中添加JDK路径,配置ProjectSDK;安装本地Maven并设置MAVEN_HOME,在IDEA中指定Mavenhomepath和settings.xml文件;新建项目选择MavenArchetype或导入pom.xml;检查依赖下载是否成功,必要时配置镜像加速;编写HelloWorld类并运行验证配置正确性。整个过程依赖路径准确与网络稳定。
-
必须手动解析WAV二进制头以获取fmt块扩展字段和fact块数据;需用RandomAccessFile按RIFF规范逐块读取,注意小端序,并根据cbSize动态处理扩展字段。
-
应定义2–3个顶层业务异常基类(如BusinessException、SystemException、ValidationException)而非平级继承RuntimeException,以支持语义分组捕获、日志归类、可恢复性判断及精准测试;自定义异常需携带code和context等结构化信息,并避免存储大对象;受检异常仅用于调用方能且应立即处理的场景(如参数校验),非受检异常适用于系统故障等不可当场修复问题;全局异常处理器应仅记录堆栈、设HTTP状态码、返回精简JSON,禁用吞异常、外调告警或兜底NPE
-
反射读取嵌套注解本质是逐层获取运行时注解实例:外层注解元素必须为内层注解类型且两者均需@Retention(RUNTIME);获取外层实例后直接调用其方法得到内层代理对象,再递归处理,注意空值检查、禁止对注解调用getAnnotation、限制递归深度。
-
灰度化核心是用加权平均公式0.299×R+0.587×G+0.114×B逐像素计算亮度并截断至0–255,需注意通道顺序(RGB/BGR)、数组维度、批量读写及Alpha通道单独处理。
-
Stream.peek()适合插入审计日志,需准确定位位置(filter前/后、map后)、记录轻量可追溯信息(阶段标识、追踪ID、关键字段、时间戳)、确保异步非阻塞、异常兜底,并通过MDC实现链路级审计。
-
WatchService默认不递归监听子目录,需手动遍历注册;pollEvents()后必须调用reset()否则事件丢失;ENTRY_MODIFY不保证内容变更;容器/NFS等场景建议改用轮询或快照比对。