-
首先创建继承Exception的自定义异常类,再在方法中用throw抛出实例,调用时需try-catch处理或声明throws,确保异常被正确捕获与处理。
-
应优先使用细粒度锁、并发工具类和ThreadLocal,避免方法级同步、同步块内调用外部方法及ThreadLocal内存泄漏。
-
Java中类可通过extends继承抽象类并用implements实现多个接口,如Dog类继承Animal并实现Movable,既复用父类代码又满足接口行为规范,需实现所有抽象方法与接口方法。
-
Java中异常不是必须打印堆栈,但生产环境catch块应优先使用log.error("msg",e)输出完整堆栈;仅在明确预期、无调试价值且已妥善处理时(如超时重试、文件不存在创建默认配置)可省略。
-
右下角状态栏显示当前文件编码,若显示GBK但内容为“æä»¬”类乱码,说明实际为UTF-8;反之显示UTF-8却出现“鎴?釜”,则实际为GBK;应先Reloadas确认,再Convertto保存。
-
volatile不能保证原子性,因为它只确保读写立即刷入主存和禁止重排序,不阻止操作被拆分为读-改-写三步;如counter++在多线程下结果小于预期。
-
应使用ArrayList<Contact>替代硬编码数组,Contact需重写equals()和hashCode(),遍历时删除须用Iterator.remove()或倒序循环,搜索用stream().filter(),存储优选JSON或CSV而非ObjectOutputStream。
-
ReentrantLock必须配对调用lock()和unlock(),且unlock()必须放在finally块中;推荐使用tryLock()避免死锁、lockInterruptibly()支持中断响应;可重入性需严格匹配加锁解锁次数,公平模式会降低吞吐量。
-
StructuredTaskScope是Java21实现结构化并发的核心机制,通过作用域自动强制子任务生命周期与父作用域绑定,解决ExecutorService边界模糊、错误传播手动、资源清理不可靠等问题。
-
抽象类可定义静态方法和字段,静态字段用于子类共享数据且不可重写,静态方法适合封装不依赖实例的通用逻辑;接口静态成员有访问限制,而抽象类更灵活。
-
ThreadLocal为每个线程提供独立变量副本,避免并发冲突。通过get()和set()方法实现线程专属数据访问,适用于数据库连接、用户上下文传递和格式化工具体等场景。由于底层ThreadLocalMap的键为弱引用、值为强引用,若不及时调用remove()可能导致内存泄漏。尤其在线程池中,线程复用时未清理会引发脏数据。最佳实践包括使用后立即remove()、将ThreadLocal声明为privatestatic。正确使用可提升多线程代码的安全性与清晰度。
-
JVM是实现“一次编写,到处运行”的软件抽象层,核心由运行时数据区(方法区、堆、虚拟机栈、本地方法栈、程序计数器)、类加载机制(加载、验证、准备、解析、初始化)和执行引擎(解释器+JIT编译器)组成。
-
Java中匹配反斜杠需双重转义:字符串字面量和正则各吃一层,如匹配"."写为"\\.";推荐用Pattern.quote()自动转义;split("\.")切IP时注意空字段处理。
-
IDE和javac/java命令行是分工关系:IDE底层调用JDK工具并自动管理路径与依赖,命令行需手动配置-d、-cp等参数,错误信息更精准;调试可用jdb或JDWP远程连接;CI/CD、服务器临时修改、Docker构建等场景必须用命令行。
-
短路运算符仅在左操作数确定整体结果时跳过右表达式:&&左为false、||左为true时生效;需确保左操作数稳定快速且分布利于提前终止,避免异常、副作用或耗时操作置于左侧。