-
LocalDate仅处理无时区日期,LocalDateTime含日期时间但无时区;二者均不可变且线程安全,但误用易致DateTimeException或时区错误;涉及真实时刻须用Instant或ZonedDateTime。
-
答案:Java中通过try-catch结合循环实现操作重试,可加入指数退避与随机抖动提升稳定性,推荐使用Resilience4j等库管理复杂重试逻辑。
-
创建子类对象时,先调用父类构造方法,再调用子类构造方法。1.子类构造方法首行隐式或显式调用super(),执行父类初始化;2.若父类无无参构造,需显式调用super(参数);3.多层继承下,按继承链从顶层父类逐级向下执行;4.super()必须位于子类构造方法第一行,不能与this()共存;5.执行顺序为:静态代码块→实例代码块→构造方法,均按继承链依次进行。
-
LocalDate仅存年月日,LocalDateTime存年月日及时分秒,二者均无时区;需表示绝对时刻须用ZonedDateTime或Instant。
-
MAT能有效分析Java堆内存并定位内存泄漏。1.获取堆转储文件可通过jmap、jcmd手动生成或OOM时自动触发;2.MAT通过“支配者树”展示对象支配关系,帮助识别大内存占用对象及未释放的引用链;3.“直方图”按实例数量和内存占用排序,揭示异常对象创建和“胖”对象;4.MAT还能发现不必要的对象创建、优化数据结构选择、识别冗余数据、评估缓存策略、发现类加载器泄漏及分析线程栈内存,全面提升内存使用效率。
-
Tomcat是Servlet容器而非Java环境,必须依赖JDK运行;需显式配置JAVA_HOME指向JDK根目录,且不支持JDK7;其优势在于稳定、生态成熟、对传统WAR部署支持完整。
-
SpringBoot整合HibernateEnvers可通过以下步骤实现数据库版本控制:1.添加hibernate-envers依赖;2.配置审计表前缀、后缀及修订字段;3.在实体类添加@Audited启用审计;4.使用AuditReader查询历史记录;5.自定义修订实体和监听器记录操作用户;6.优化性能通过批量、异步、索引和选择性审计;7.处理关联关系使用@Audited、@AuditJoinTable和@AuditMappedBy。
-
Java中用JarOutputStream打包JAR文件,本质是向ZIP流写入符合JAR规范的条目(JarEntry)并可选添加META-INF/MANIFEST.MF;必须显式设置JarEntry时间戳(如entry.setTime(System.currentTimeMillis())),否则部分JDK版本使用1980-01-01默认值导致解压失败;MANIFEST.MF必须作为第一个条目写入,即先putNextEntry(newJarEntry("META-INF/MANIFEST.MF"))再ma
-
Collections.swap()用于交换List中两索引位置的元素,如示例中将索引1与3的元素互换,实现原地交换且不抛异常当索引相同时,底层通过set和get方法完成值替换。
-
正确处理Java线程中断需响应中断信号而非忽略,调用thread.interrupt()设置中断状态,线程应通过isInterrupted()检查或捕获InterruptedException做出响应;阻塞方法抛出异常后应恢复中断状态并清理资源;循环任务中需定期检测中断以及时退出;线程池中可通过future.cancel(true)触发中断,确保任务支持中断并完成清理,保持信号传递。
-
Java并发编程核心在于理解内存模型、状态共享与协作机制,需掌握volatile、synchronized原理、JDK并发工具类边界、线程池调优及竞态排查方法。
-
抽象类用于提取共性、规范结构和减少重复,适合共享代码与统一模板的场景。1.定义模板行为:通过模板方法模式固定算法骨架,子类实现变化步骤,如不同格式的数据导出流程;2.共享通用属性和方法:将图形系统的颜色、填充等公共状态封装在抽象父类中,子类继承并实现特有逻辑;3.强制子类实现关键行为:支付系统中通过抽象方法确保各支付方式均实现验证与执行操作;4.部分实现的接口替代方案:日志系统中抽象类提供通用格式化功能,子类定制输出方式。相比接口,抽象类支持默认实现和状态管理,适用于既有共性又有差异的场景,提升系统可维护
-
i++不是原子操作,因其被拆分为读取、计算、写回三步,多线程下易发生竞态导致结果错误;volatile仅保可见性不保原子性;synchronized、AtomicInteger、ThreadLocal等是常用线程安全方案。
-
必须确认系统架构与JDK版本匹配:32位(i686/i386)仅支持OpenJDK,64位(x86_64/aarch64)才可安装JDK11+;下载包名须含x64或aarch64;解压后务必正确配置JAVA_HOME指向JDK根目录并更新PATH,否则java-version成功但javac等工具不可用。
-
CopyOnWriteArrayList适合读多写少场景,如监听器列表、配置缓存、广播队列;写操作频繁时性能骤降,因每次写需全量复制数组;迭代时修改不抛ConcurrentModificationException,但Iterator.remove()无效。