类型通配符用于在泛型中表示不确定的元素类型,充当各种泛型 List 的父类。基本形式 `List<?>` 表示元素类型未知,不能向其中写入元素;上限通配符 `List<? extends T>` 限定元素为 T 或其子类;下限通配符 `List<? super T>` 限定元素为 T 或其父类。示例代码展示了三类通配符的合法声明及不兼容的写法,帮助理解它们在实际开发中的使用场景。

Redis提供RDB快照和AOF日志两种持久化方式,RDB通过save/bgsave生成二进制快照,bgsave采用写时复制不阻塞;AOF记录每条写命令,可配置fsync策略并支持后台重写;Redis 4.0引入混合持久化,将RDB快照与增量AOF合并加速重启。生产环境常同时开启RDB和AOF,恢复时优先AOF。备份可通过定时复制RDB/AOF并多机保存。主从复制采用PSYNC实现全量或增量同步,支持断点续传,从节点可设为只读。文中还示例了Jedis连接池、Pipeline批量发送及Lua脚本实现原子操作。

G1 是面向多核大内存的服务器 GC,堆被划分为最多2048个等大小 Region,依据‑XX:MaxGCPauseMillis 设定的停顿目标优先回收回收价值最高的 Region,采用复制算法并支持 Young、Mixed、Full 四种回收,提供 Humongous 区存放大对象并可通过多参数调优,适合 8 GB 以上、停顿 500 ms 以内的业务。ZGC 是 JDK 11 引入的实验性低延迟 GC,采用单代 Region 结构(Small、Medium、Large),通过并发标记‑准备‑重定位‑自愈颜色指针实现几乎恒定 ≤10 ms 停顿,支持 TB 级堆、NUMA 感知,吞吐略降约 15%。

微服务启动后,内置的 Nacos 客户端每 5 秒向 Nacos Server 的 /nacos/v1/ns/instance/beat 接口发送一次心跳,携带实例名、IP、端口、集群、权重等信息。Server 的 naming 模块收到心跳后,先判断实例是否已存在;若不存在则注册并存入实例 Map,若已存在则更新时间、标记为健康并推送状态变更。Server 每 20 秒扫描实例 Map,删除连续未收到心跳的非健康实例,从而实现对失效服务的剔除。

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

选择排序把数组划分为已排序和未排序两部分,每轮在未排序区间寻找最小元素并与当前目标位置交换,直至全部有序。实现时用外层循环 i 标记目标索引,内层遍历找最小索引 s,最后一次性交换,降低交换次数。时间复杂度为 O(n²),与冒泡排序相同,但因交换次数更少通常更快;在高有序度数据上冒泡稍优。选择排序是不稳定的,示例代码通过扑克牌对象演示,同一数值的不同花色在多轮排序后相对位置会改变,而冒泡排序保持相对顺序。代码示例提供完整的 Java 实现及运行结果。