-
char是基本类型,String是引用类型;char占2字节、值比较,String对象不可变、需用equals判等,混用易致编译错误或意外数值运算。
-
ldc指令加载动态常量时触发bootstrap方法执行,依赖MethodHandles体系和ConstantBootstraps提供的标准引导方法;其流程包括提取BMH索引、加载MethodHandle、调用linkCallSite并缓存结果。
-
CallerRunsPolicy的核心价值是作为压力调节阀,通过调用者线程同步执行任务实现反压降级;适用于不能丢任务、可容忍短时延迟、上游线程可控的场景,需配合有界队列、合理线程数及短耗时任务(≤200ms)使用。
-
RabbitMQ替代同步调用是为解决阻塞、雪崩与强依赖问题;应定义统一消息契约类并用函数式Consumer绑定,禁用@StreamListener,手动ack需配合异常抛出与重试退避配置。
-
Collections.synchronizedList()仅保证单方法原子性,不保障复合操作或迭代安全;需手动同步临界区,如检查再添加、遍历时须synchronized(list)块;替代方案依读写比例选CopyOnWriteArrayList或ReentrantLock。
-
生产环境线程池必须调用shutdown()停止接收新任务,再用awaitTermination()配合超时与volatile变量保护实现优雅关闭,超时后可选shutdownNow()强制终止。
-
Collectors.partitioningBy根据布尔条件将流元素分为两组,适用于二元分类场景。例如按年龄区分成年与未成年用户,支持结合下游收集器统计数量或提取属性,提升代码可读性。
-
开发 TCP 程序时,第一步通常都是先把服务器端搭起来。JDK 的 ja va.net 包里专门提供了一个 ServerSocket 类,它的实例对象就可以用来实现服务器端程序。查一下 API 文档就会发现,ServerSocket 类提供了不止一种构造方法,下面就按这个思路,把这些构造方法逐一讲清
-
方法引用需确保声明类型与运行时目标一致:检查左侧表达式静态类型是否过宽、IDE解析的函数式接口签名是否匹配实际对象能力,并验证参数类型在编译期和运行时均兼容,避免NullPointerException或IllegalArgumentException。
-
SecureRandom为什么比Random更适合加密场景因为Random是伪随机、可预测的线性同余算法,种子一旦暴露或被猜中,整个序列都能还原;而SecureRandom默认从操作系统采集熵(如/dev/urandom或Windows的BCryptGenRandom),输出不可预测、抗回溯,满足密码学强度要求。常见错误现象:用Random生成JWT密钥、APItoken、盐值(salt),导致系统被批量破解。使用场景包括:generateKeyPair()前的随
-
模板方法模式通过抽象类定义算法骨架,子类实现具体步骤。示例中GameTemplate定义游戏流程,FootballGame和BasketballGame实现初始化与开始游戏,分别输出对应信息,endPlay可选覆盖,提升代码复用性。
-
Stream.distinct()依赖equals()和hashCode()判断重复,自定义类需重写二者且逻辑一致;并行流中顺序不保证;无法按字段去重;内存开销大,大数据量慎用。
-
newSingleThreadExecutor本质是单线程+无界队列的特殊封装,内部使用ThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue()),任务严格FIFO执行且自动恢复线程,但不暴露线程控制权。
-
Java数组通过运行时类型检查保障安全,泛型依赖编译期类型擦除和约束;因泛型类型信息在运行时不存在,故禁止创建泛型数组,避免破坏类型安全。
-
StringJoiner是Java8引入的专用于结构化字符串拼接的工具类,支持分隔符、前缀、后缀、空值定制、合并及长度统计,底层基于StringBuilder实现,轻量高效且线程不安全。