-
数组长度固定、不支持泛型、缺乏内置操作,而集合框架提供标准化实现:ArrayList支持随机访问,HashSet自动去重,TreeSet有序存储,HashMap高效查找,且需注意容量预设、hashCode/equals重写、遍历删除等坑。
-
Java集合不可变设计旨在避免意外修改、提升可预测性与线程安全性;通过List.of()等创建真正不可变实例,防止跨模块误改、天然线程安全、增强函数式编程可靠性。
-
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
-
异常链通过将底层异常作为原因嵌入新异常,实现错误信息的封装与追溯。在Java中,使用Throwable类提供的带cause参数的构造函数或initCause()方法,可在抛出业务异常时保留原始异常。例如,在Service层捕获SQLException后,可封装为UserServiceException并传入原异常,形成链条。打印堆栈时会自动显示“Causedby”层级结构,便于定位根因。自定义异常应提供publicMyException(Stringmessage,Throwablecause)构造函数并
-
Java项目通过SQLiteJDBC驱动实现本地数据存储,适合轻量级应用。1.添加Maven依赖引入sqlite-jdbc;2.使用DriverManager连接数据库文件,自动创建sample.db;3.执行建表、增删改查操作;4.推荐使用PreparedStatement防注入,try-with-resources管理资源,外部配置路径,注意并发写锁与定期备份,确保稳定运行。
-
双亲委派是类加载的向上委托责任链机制:AppClassLoader先委托ExtClassLoader,再委托BootstrapClassLoader,仅当顶层失败才自救加载;其核心在loadClass()三步逻辑,且打破需重写loadClass()而非仅findClass()。
-
PriorityBlockingQueue的出队方法有poll()、take()和remove():poll()非阻塞取头元素,空时返回null;take()阻塞等待直至有元素;remove(Objecto)按值删除首个匹配元素,时间复杂度O(n)。
-
Java多线程面试重在实战经验而非背诵;wait()必须在synchronized块中调用,否则抛IllegalMonitorStateException;ConcurrentHashMapJDK8用CAS+单桶锁替代分段锁;线程池拒绝策略中CallerRunsPolicy更防雪崩;ThreadLocal内存泄漏因key弱引用而value强引用未及时清理。
-
合理使用异常机制可提升Java程序健壮性。应区分IOException、Json解析异常、HTTP客户端/服务端异常及自定义异常,针对性捕获处理;避免泛化catch,逐层处理并转换为统一业务异常,封装上下文信息;结合重试与熔断机制控制外部风险,防止系统级联故障。
-
Arrays.asList()不能直接修改原数组,因其返回的是不支持add/remove的内部ArrayList;传入基本类型数组会因泛型擦除导致仅含一个元素。
-
Map接口用于存储键值对,提供put、get、remove等方法进行增删改查;通过keySet、values、entrySet实现遍历操作。
-
代理模式是AOP的技术基础,AOP通过代理机制实现横切关注点的模块化。Java中代理分为静态代理和动态代理,后者包括JDK动态代理(基于接口)和CGLIB代理(基于继承)。SpringAOP利用这两种方式,在目标类有接口时用JDK代理,无接口时用CGLIB生成代理类。通过InvocationHandler或MethodInterceptor可在方法调用前后插入逻辑,如日志、事务等。AOP的核心是将重复代码封装为切面,并在运行时通过代理织入目标方法,实现对原有业务逻辑无侵入的增强。开发者无需修改原始类即可完
-
MaxGCPauseMillis是G1的软性停顿目标而非硬性超时,其效果依赖历史数据与内存分配模式;设过低会增频GC、降低吞吐,设过高则单次停顿延长;需配合G1NewSizePercent、G1MixedGCCountTarget等参数协同调优,并通过GC日志分析分布而非均值验证。
-
Java中对象赋值默认是引用传递,直接使用“=”会导致多个变量指向同一内存地址;要避免副作用,必须通过构造新实例实现深拷贝或值复制,而非简单赋值。
-
本文详解如何使用现代Java时间API(java.time)将形如"25/12/2021"的字符串安全、准确地解析为带纽约时区(America/New_York)的完整时间点,避免传统Date+SimpleDateFormat的时区陷阱。