-
Java多线程面试重在实战经验而非背诵;wait()必须在synchronized块中调用,否则抛IllegalMonitorStateException;ConcurrentHashMapJDK8用CAS+单桶锁替代分段锁;线程池拒绝策略中CallerRunsPolicy更防雪崩;ThreadLocal内存泄漏因key弱引用而value强引用未及时清理。
-
合理使用异常机制可提升Java程序健壮性。应区分IOException、Json解析异常、HTTP客户端/服务端异常及自定义异常,针对性捕获处理;避免泛化catch,逐层处理并转换为统一业务异常,封装上下文信息;结合重试与熔断机制控制外部风险,防止系统级联故障。
-
Arrays.asList()不能直接修改原数组,因其返回的是不支持add/remove的内部ArrayList;传入基本类型数组会因泛型擦除导致仅含一个元素。
-
Java文件上传下载需匹配Servlet3.0+与Web容器(如Tomcat7+),SpringBoot2.2+默认支持;关键配置包括spring.servlet.multipart.max-file-size、max-request-size;前端须用enctype="multipart/form-data"及正确name属性;常见问题有参数不匹配、流重复读取、中文名乱码等。
-
SQLException捕获后应记录SQL语句、参数、getSQLState()和getErrorCode(),仅e.printStackTrace()会丢失关键上下文;只对“08S01”“40001”等可重试码重试,且需关闭资源、指数退避、避免事务内重试;回滚前须检查事务状态;PreparedStatement参数为null时应统一用setObject或setNull,禁用字符串拼接防注入。
-
Java多态是语言特性而非设计模式,却是策略、模板方法、工厂方法、观察者等模式落地的底层支撑;它通过接口/抽象类实现运行时行为绑定,避免if-else硬编码,提升扩展性与可测试性,但需警惕假抽象、构造器调用抽象方法、类型判断绕过多态等常见问题。
-
Java中栈帧的返回地址由JVM自动管理,存于栈帧方法出口区域,指向调用指令下一条字节码地址,开发者不可访问或修改,仅能通过return、异常抛出、try-finally间接影响控制流。
-
Java集合类默认支持泛型但不强制使用,JDK5起泛型为可选语法糖;不加泛型会导致运行时ClassCastException,而加泛型可在编译期捕获类型错误并自动转型。
-
Chromebook上必须通过Crostini(Debian容器)安装openjdk-17-jdk,而非手动或Arch;装后需确认PATH和javac-version,VSCode需用Remote-Containers连接,且容器重启后服务需手动启动。
-
在iText7中,getWidthPoint()已被移除,需通过BaseFont.getWidthPoint()或PdfFont.getWidth()配合字体实例和字号显式计算文本宽度,不再支持链式调用后直接获取。
-
静态代码块先执行,顺序为:静态代码块→实例代码块→构造函数;静态代码块属类级别、类加载时执行一次,实例代码块属对象级别、每次new时在构造函数前执行。
-
Collections.copy()用于将源列表元素复制到已有目标列表中,要求目标列表大小不小于源列表且可修改,否则抛出异常。
-
本文详解Java数组中查找并替换首个匹配元素时的异常处理逻辑,指出原代码在循环内过早判断失败导致异常必抛的问题,并提供修正方案与最佳实践。
-
统一Java开发环境需强制收敛JDK版本、构建工具参数、编码格式与依赖策略;用asdf+.tool-versions锁定版本,maven-enforcer-plugin绑定compile阶段校验Java版本,google-java-format统一代码风格并CI阻断不合规提交。
-
printStackTrace()不该出现在生产代码里,因为它直接输出到System.err,无法控制目标、格式、级别,也无法集成日志系统,导致日志归属不清、缺失上下文(如traceId、用户ID),排查困难。