-
Java中浅拷贝集合最安全通用的方式是使用构造函数(如newArrayList<>(source)),它创建独立集合对象但共享元素引用;深拷贝需手动实现,不可变集合拷贝需确保源头安全。
-
Optional.flatMap与Stream.filter配合最常用:用flatMap将Optional转为Stream(JDK9+直接opt.stream(),JDK8用flatMap+Stream::ofNullable),避免map造成类型嵌套;Stream.ofNullable安全处理null元素,替代filter(Objects::nonNull);优先使用findFirst等原生返回Optional的终止操作,避免手动包装;禁用get(),坚持函数式链式调用。
-
Java字符串+拼接在编译期仅对常量字面量直接合并为单个字符串,对局部变量则优化为StringBuilder调用;循环中动态拼接不会优化,需显式使用StringBuilder避免性能问题。
-
使用接口与依赖注入实现松耦合:1.接口定义行为,分离“做什么”与“怎么做”;2.依赖注入传递实现,避免类内直接new对象;3.Spring框架通过@Autowired自动装配,简化配置;4.松耦合提升可维护性、可测试性,支持灵活替换实现,符合开闭原则。
-
ConcurrentHashMap默认loadFactor为0.75是工程权衡最优解,兼顾哈希冲突概率、内存占用与扩容开销;过高(如0.9)加剧碰撞、锁争用与树化开销,过低(如0.5)则浪费内存、增加扩容频次且损害缓存局部性。
-
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实现精准唤醒。
-
Java要求所有局部变量在读取前必须明确赋值;若循环可能不执行(如集合为空),未初始化的布尔变量将导致编译错误。
-
线程池拒绝策略必须选用CallerRunsPolicy或自定义策略,配合有界队列(如ArrayBlockingQueue)和显式构造的ThreadPoolExecutor;禁用Executors工厂方法;需监控活跃线程数、队列积压量及拒绝次数;多业务应拆分独立线程池实现风险隔离。
-
直接删除config目录比点击「RestoreDefaults」更彻底,因其清除编译器配置、Maven/Gradle路径、SDK绑定等关键设置,而按钮仅重置部分UI偏好。
-
BindException是操作系统报出的端口占用异常,表明JVM尝试绑定的端口(如8080)已被其他进程占用;常见于SpringBoot启动卡在Web服务器初始化阶段,需用lsof、netstat或netstat-ano定位并终止冲突进程,或通过配置server.port、VM参数、Docker端口映射等避免重复绑定。