-
Java方法是可重复使用的代码块,用于完成具体任务;由修饰符、返回类型、方法名、参数列表和方法体组成;void表示无返回值,非void需每条路径return对应类型值;参数为局部变量,基本类型传值、对象传引用;static属类、无需实例即可调用,非static属实例、须通过对象调用;重载同名异参(编译期绑定),重写同签名子类覆盖父类(运行期动态绑定)。
-
SOLID不是银弹,而是针对“改一处崩一片”的五条反思性约束;它不规定写法,只警示频繁修改多类多方法即可能违反原则。
-
包的核心作用是解决类名冲突和限定访问范围;它通过命名空间隔离实现类共存,并作为protected和默认访问权限的边界。
-
ServiceLoader通过读取META-INF/services/下以接口全限定名命名的文本文件来加载实现类,文件每行一个实现类全限定名,需严格匹配包名和大小写;load()仅解析配置,next()才触发Class.forName和实例化,使用线程上下文类加载器,默认非单例。
-
Java版本与JAVA_HOME配置错误导致编译运行失败:需确保JAVA_HOME指向JDK根目录(非bin)、路径无空格/中文;Maven需≥3.6.3且maven-compiler-plugin≥3.8.0;IDE需独立配置JDK路径;多JDK共存时应统一终端实际调用版本。
-
Future是Java中用于异步任务结果获取与状态管理的占位符,需通过ExecutorService提交Callable任务获得,提供get()、isDone()、cancel()等方法;其局限性包括无链式调用、无回调机制、异常处理被动、多任务协调困难,新项目应优先使用CompletableFuture。
-
匿名内部类是Java中无需命名即可实现接口或继承抽象类的方式,适用于一次性、轻量级场景,如事件监听、线程启动、自定义排序等;其语法为new接口/抽象类(参数){实现体},要求基于已有类型、可访问外部final变量、不可定义静态成员(除staticfinal外)。
-
Redis预减库存必须用DECRBY而非GET+SET,因后者存在竞态条件导致超卖;DECRBY原子性防超卖,需配合EXISTS校验key存在、检查返回值是否为负、Lua脚本封装操作,并在DB层用WHEREstock>0二次校验。
-
在JPA双向关联中,仅靠save()操作无法自动同步双方引用;必须显式维护对象图的一致性——即同时设置双方的引用关系(如student.setTeacher(t)和teacher.getStudents().add(student)),否则可能引发数据不一致、级联失效或空指针异常。
-
ReentrantLock需手动管理锁的获取与释放,必须在try中lock、finally中unlock;支持可中断、超时、公平性;需统一加锁顺序防死锁;通过Condition实现精准唤醒。
-
Redis预减库存必须用DECRBY而非GET+SET,因后者存在竞态条件导致超卖;DECRBY原子性防超卖,需配合EXISTS校验key存在、检查返回值是否为负、Lua脚本封装操作,并在DB层用WHEREstock>0二次校验。
-
substring(intbeginIndex)合法索引范围是0到字符串长度(含),如"abc".substring(3)返回"",但substring(4)越界;空串时s.length()-1为-1会抛异常,需先判空;substring(begin,end)为左闭右开区间,长度等于end-begin。
-
在Java8+中,单次拼接推荐用+(编译器优化为StringBuilder),concat()仅适合小字符串;循环拼接必须用StringBuilder;split()默认丢弃末尾空串,需传-1保留;replace()用于字面量替换,replaceAll()和replaceFirst()走正则;substring()在JDK7u6+已修复内存泄漏,但大字符串截取仍需谨慎。
-
应使用队列替代递归展开空白区域以避免栈溢出和重复访问;UI更新须严格在EDT中执行并同步模型与组件状态;布雷需确保循环终止条件正确,防止雷数不足。
-
不能安全、合规地绕过访问权限调用私有构造器——Java的setAccessible(true)在JDK9+强封装下默认抛出InaccessibleObjectException,仅在模块开放、旧版本或开发环境等受限场景可能成功,生产环境应优先采用工厂方法、构建器或依赖注入等设计替代方案。