类型通配符用于表示不同泛型 List 的父类,分为三类:<?> 表示元素类型未知的 List,只能读取不能写;<? extends 类型> 表示该 List 的元素类型为指定类型或其子类;<? super 类型> 表示元素类型为指定类型或其父类。文章通过代码示例说明了这三种通配符的声明方式及其适用的具体泛型类型,帮助理解在 Java 中如何使用上界和下界通配符进行安全的类型读取和写入。

Redis 提供两种持久化方式:RDB 快照(save 同步、bgsave 异步,利用写时复制)和 AOF 追加日志(支持三种 fsync 策略并可重写),4.0 引入混合持久化,将 RDB 与增量 AOF 合并提升重启速度。生产环境可同时开启,优先使用 AOF 恢复。备份可通过定时脚本保存最近 48 小时/1 个月的数据并跨机复制。主从复制通过 replicaof(slaveof)实现,首次全量复制后使用 PSYNC 支持断点续传,防止复制风暴。文中还示例了 Jedis 连接池、Pipeline 批量命令以及 Lua 脚本的原子操作用法。

G1(-XX:+UseG1GC)将堆划分为最多2048个Region,采用并行并发标记‑整理,按停顿时间目标(‑XX:MaxGCPauseMillis)优先回收价值最高的Region,支持复制回收、Humongous大对象区,并可通过多参数调优适用于8 GB 以上大内存、对停顿有严格要求的服务。ZGC(-XX:+UseZGC)是 JDK 11 引入的低延迟单代收集器,基于Region、颜色指针和读屏障实现全并发标记‑整理,停顿始终 ≤10 ms,支持 TB 级堆并感知 NUMA,适合超大堆与极致延迟场景。两者均通过并行线程利用多核,G1 强调可预测停顿,ZGC 强调停顿独立于堆大小。

Nacos 客户端在微服务启动后每 5 秒向 Nacos 服务器的 /nacos/v1/ns/instance/beat 接口发送一次心跳包,携带实例名称、IP、端口、集群、权重等信息。服务器的 naming 模块收到心跳后,先检查实例是否已登记;若不存在则注册并存入实例 Map,若已存在则更新时间并标记为健康,同时推送状态变更消息并返回新的心跳间隔。服务器每 20 秒扫描实例 Map,将长期未收到心跳的非健康实例删除,从而剔除失效服务。整个过程保证了服务实例的实时注册、健康监测与自动清理。

文章系统阐述了JVM的整体结构与内存模型,解释了Minor GC 中对象复制后根引用的更新机制,并详细列举了常用的堆、栈、元空间等 JVM 参数含义及调优方法。通过示例演示 -Xss 对栈溢出影响,提出在高并发业务中应尽量让对象在新生代分配回收,避免频繁晋升老年代,并根据实际负载合理配置 -Xms、-Xmx、-Xmn、MetaspaceSize 等参数,以提升性能和稳定性。

选择排序把数组分为已排和未排两部分,每轮在未排区找最小元素并与当前位交换,直至全部有序。实现思路是用 i 标记目标位置,用 s 记录最小值索引,内部遍历比较后在轮末一次交换,减少交换次数。代码示例展示了整数数组的排序过程及每轮结果。与冒泡排序同为 O(n²) 时间,但交换次数更少,通常更快;冒泡是稳定排序,选择排序不稳定。文中通过扑克牌实例说明选择排序在多关键字排序时会改变相同键的相对顺序,验证其不稳定性。