-
ReentrantLock可替代synchronized实现细粒度锁控制,支持超时、中断和尝试获取;分段锁、无锁原子类(如LongAdder)、延迟初始化与Copy-On-Write等策略可减少竞争。
-
ReentrantLock需手动配对acquire/release,必须用try-finally确保unlock;默认非公平锁性能更优;Condition替代wait/notify须用while重检条件;仅在需超时、中断响应或多个条件队列时选用。
-
List与数组转换需注意类型安全与可变性:1.List转数组推荐使用toArray(newT[0])避免强转异常;2.数组转List用Arrays.asList()但生成不可变列表,如需修改应包装为newArrayList<>(...);3.基本类型转换需借助StreamAPI,如int[]与List<Integer>通过boxed()和mapToInt()实现。
-
配置Scala与Java混合开发环境的关键是安装JDK、Scala并统一管理依赖。1.安装JDK8或11,配置JAVA_HOME和PATH;2.安装Scala并设置SCALA_HOME;3.使用SBT创建项目,配置build.sbt,组织src目录;4.在IntelliJIDEA中安装Scala插件并导入SBT项目,实现Java与Scala互调。
-
观察者模式解决对象间一对多依赖更新,核心是状态变更通知;策略模式解决算法动态替换,核心是算法可插拔。二者职责分明,可组合使用但不可混淆边界。
-
@Consume是ApacheCamel提供的声明式消息消费方式,它通过URI绑定方法,由Camel运行时自动注册为消费者;其本质是将指定endpoint(如direct:)的消息路由到标注方法,无需显式配置RouteBuilder,但需确保Camel上下文已启用并完成组件扫描。
-
Java布尔类型是独立基本类型,不可与数字或字符串直接比较;应直接用if(flag)、显式解析字符串、避免==比较包装类、注意短路运算符副作用及三元运算符类型匹配。
-
Collection是Java单列集合的顶层接口,定义统一操作契约而非具体实现;它规范增删查遍历等五大能力,要求子类支持无参/复制构造、继承Iterable,并通过List/Set/Queue等子接口落实有序性、重复性等特性。
-
不能直接newList(),因为List是接口,Java不允许实例化接口;必须使用其实现类如ArrayList,推荐写法为Listlist=newArrayList()。
-
应使用ArrayList动态管理学生和课程对象,定义独立Student和Course类,用id而非名称作唯一标识,选课时校验容量与重复,同步更新双向引用,查询用Stream避免空指针,持久化前深拷贝,JSON序列化需处理循环引用。
-
SimpleDateFormat非线程安全,多线程应避免共享实例;需显式设置时区和Locale以保证一致性;通过setLenient(false)开启严格解析防止误转换;注意格式大小写区分,推荐新项目使用DateTimeFormatter。
-
Java枚举可通过方法、字段和构造函数定义行为,每个枚举值可实现抽象方法(如Operation.apply)以定制逻辑,通过构造函数初始化状态(如symbol),并可重写toString;也可为不同枚举值提供具体实现(如Logger.log)区分行为,适用于策略模式;还可实现接口(如Task.execute)统一行为规范,并添加通用方法(如run),提升代码复用性与可维护性。
-
滑动窗口限流必须用Redis的ZSET而非INCR+EXPIRE,因后者仅支持固定窗口,无法防止“窗口边缘刷量”;ZSET通过毫秒级时间戳实现精确滑动统计,并需Lua脚本原子执行ZREMRANGEBYSCORE、ZCOUNT和ZADD。
-
Android应用从APK切换为AAB发布后,内置的AMR格式音频文件因被自动压缩而无法加载,引发Resources$NotFoundException;通过配置aaptOptions.noCompress显式排除AMR文件可彻底解决。
-
AIO通过异步非阻塞I/O提升邮件系统附件上传响应,将文件读取、编码、传输等耗时操作剥离主线程,实现快速响应与高并发处理。