@@ -2330,6 +2330,96 @@ Redis 的顶层 keyspace 通常使用哈希字典,单 key 的值再按 String
23302330
23312331---
23322332
2333+ ### 219. ` Callable ` 、` Future ` 和 ` CompletableFuture ` 有什么区别?如何等待多个任务全部完成?
2334+
2335+ > 来源:影石 Java 后端一面,2026 年 8 月 11 日
2336+
2337+ ` Callable<V> ` 描述一个可返回结果并抛出受检异常的任务;提交给 ` ExecutorService ` 后得到 ` Future<V> ` ,后者表示异步结果,可查询状态、取消或通过 ` get() ` 等待。` Future ` 的组合能力较弱;` CompletableFuture ` 同时是结果容器和异步阶段,支持串行、并行、异常恢复与 ` allOf/anyOf ` 组合,但默认线程池和阻塞调用必须显式治理。
2338+
2339+ 等待全部任务可用 ` invokeAll ` 、` CompletableFuture.allOf ` 或 ` CountDownLatch ` 。选择取决于是否需要返回值、动态组合和超时取消。不能在同一个容量不足的线程池中让父任务阻塞等待其子任务,否则可能线程饥饿死锁;生产代码还要传播 Deadline、处理部分失败并回收未完成任务。
2340+
2341+ ---
2342+
2343+ ### 220. Java 反射如何工作?反射为什么可能破坏单例,应该怎样防护?
2344+
2345+ > 来源:影石 Java 后端一面,2026 年 8 月 11 日
2346+
2347+ 反射通过 ` Class ` 元数据在运行时检查构造器、字段、方法和注解,并可在权限允许时动态创建对象或调用成员。它支撑依赖注入、序列化和测试框架,但会弱化编译期约束,带来访问控制、可维护性和一定调用开销;模块强封装环境下,深反射还可能被拒绝。
2348+
2349+ 私有构造器、双重检查锁或静态内部类只控制普通创建路径,若构造器被反射调用仍可能产生第二个实例。可在构造器中检测重复初始化,但要处理并发和反序列化;更稳妥的是使用 ` enum ` 单例,JVM 禁止反射创建枚举实例,并天然处理序列化。单例实例唯一不代表内部可变状态线程安全。
2350+
2351+ ---
2352+
2353+ ### 221. InnoDB 的聚簇索引和二级索引分别存什么?主键与普通索引查询如何回表?
2354+
2355+ > 来源:影石 Java 后端一面,2026 年 8 月 11 日
2356+
2357+ InnoDB 的聚簇索引叶子节点保存整行数据,一张表只有一个聚簇组织顺序,通常由主键承担;没有合适主键时会选择可用唯一键或生成隐藏行 ID。二级索引叶子保存索引列和主键值,因此通过普通电话号码索引查询未覆盖字段时,要先取得主键,再访问聚簇索引完成回表。
2358+
2359+ 按主键 ` id ` 查询直接走聚簇索引;按电话索引查询走二级索引。若查询字段都在二级索引中,可使用覆盖索引避免回表。索引是否实际采用还取决于选择性、统计信息、条件写法和成本估算,不能只看“建了索引”。
2360+
2361+ ---
2362+
2363+ ### 222. InnoDB 中普通 ` SELECT ` 、锁定读和 ` UPDATE ` 分别会加什么锁?范围条件为什么影响插入?
2364+
2365+ > 来源:影石 Java 后端一面,2026 年 8 月 11 日
2366+
2367+ 普通一致性 ` SELECT ` 在常见 MVCC 场景下读取快照,通常不加记录锁;` SELECT ... FOR UPDATE/SHARE ` 和 ` UPDATE/DELETE ` 属于当前读。使用唯一索引等值命中时通常锁定目标记录;非唯一索引或范围扫描在可重复读下可能使用 Record、Gap 或 Next-Key Lock,以锁住扫描到的索引范围并抑制幻读。
2368+
2369+ 锁定范围由隔离级别、执行计划、索引、边界是否命中和实际扫描路径共同决定。例如条件落在已有键 3 与 5 之间,即使没有匹配行,也可能锁住对应间隙并阻止插入 4。回答前应说明表结构和索引,再用 ` EXPLAIN ` 、事务隔离级别及 ` performance_schema.data_locks ` 验证,不能只从 SQL 文本猜锁。
2370+
2371+ ---
2372+
2373+ ### 223. CDC 分别从 MySQL 和 PostgreSQL 的什么日志读取变更?如何保证快照与增量衔接?
2374+
2375+ > 来源:影石 Java 后端一面,2026 年 8 月 11 日
2376+
2377+ MySQL CDC 通常读取 binlog,Row 格式可提供行级变更,并通过 file/position 或 GTID 维护位点。PostgreSQL 底层写 WAL,CDC 通常通过 logical decoding 和 replication slot 把 WAL 解码为逻辑变更;WAL 本身服务崩溃恢复,不能把“直接解析 WAL 文件”和稳定的逻辑复制协议混为一谈。
2378+
2379+ 全量初始化要在一致性快照边界记录增量位点,再回放该点之后的日志;消费侧按事件 ID、表主键和版本幂等,处理事务边界、DDL、心跳、乱序和 Schema 演进。PostgreSQL slot 或 MySQL 日志长期积压会占用存储,必须监控 lag、保留期和下游背压。
2380+
2381+ ---
2382+
2383+ ### 224. Spring 的 IoC 与 DI 是什么?Bean 可以通过哪些方式注册和注入?
2384+
2385+ > 来源:影石 Java 后端一面,2026 年 8 月 11 日
2386+
2387+ IoC 表示对象创建、依赖装配和生命周期从业务代码交给容器;DI 是实现 IoC 的主要方式。Bean 可通过组件扫描、` @Bean ` 工厂方法、` @Import ` 、XML 或程序化 ` registerBean ` 注册。依赖可用构造器、Setter 或字段注入;构造器注入能表达必需依赖、支持不可变对象和测试,通常应优先。
2388+
2389+ 容器外手动 ` new ` 的对象不会自动经历依赖注入、AOP 和完整 Bean 生命周期。确需接管现有对象时可使用受控的 BeanFactory API,但更好的做法是把创建边界放回容器。回答“如何创建 Bean”时要区分注册 BeanDefinition、实例化对象和依赖注入三个阶段。
2390+
2391+ ---
2392+
2393+ ### 225. Redis 的 RDB、AOF 和混合持久化分别如何工作?线上怎样选?
2394+
2395+ > 来源:京东后端开发一面,2026 年 8 月 20 日
2396+
2397+ RDB 在指定时机生成数据快照,文件紧凑、恢复快,适合备份和全量恢复,但可能丢失最近一次快照后的写入;生成快照通常依赖 fork 与 Copy-on-Write,大内存和高写入下要关注 fork 延迟与额外内存。AOF 追加写命令并按 ` appendfsync ` 策略刷盘,数据丢失窗口更小,但文件和恢复成本通常更高,并需要后台重写压缩历史。
2398+
2399+ 混合持久化在 AOF 重写时使用 RDB 前缀加后续增量,兼顾恢复速度和数据新鲜度。线上选型先定义 RPO、RTO、磁盘与 fork 预算,并结合复制、哨兵/集群和异地备份;开启两者也不等于不会丢数据,仍要演练崩溃恢复并验证持久化文件。
2400+
2401+ ---
2402+
2403+ ### 226. 网络安全中的四层与七层防御有什么区别?SQL 注入为什么属于应用层攻击?
2404+
2405+ > 来源:影石 Java 后端二面,2026 年 8 月 11 日
2406+
2407+ 四层防御主要依据 IP、端口、协议和连接状态处理流量,例如 SYN Flood 防护、连接限速和四层负载均衡;七层防御理解 HTTP、RPC 等应用协议和业务语义,可检查 URL、Header、Body、身份与调用行为。层级越高信息越丰富,但解析成本、误报和被绕过的复杂度也更高。
2408+
2409+ SQL 注入发生在应用把不可信输入拼成 SQL 语义的边界,因此属于应用层问题。根治手段是参数化查询、最小数据库权限、输入约束和安全 ORM 用法;WAF 可拦截已知模式,但不能替代代码修复。四层设备看不到解密后的 SQL 语义,也无法单独解决注入。
2410+
2411+ ---
2412+
2413+ ### 227. Nacos 的注册发现链路是什么?它在 CAP 中到底属于 CP 还是 AP?
2414+
2415+ > 来源:影石 Java 后端二面,2026 年 8 月 11 日
2416+
2417+ 服务实例向 Nacos 注册服务名、分组、集群、地址和元数据,客户端通过查询、订阅和本地缓存获得实例列表,再结合负载均衡发起调用。临时实例通常依赖心跳或连接状态维持,失联后被摘除;客户端还要处理推送丢失、服务端不可用和缓存过期,不能把注册中心当成永不失败的实时真相。
2418+
2419+ “Nacos 属于 CP 还是 AP”不能只背一个字母。不同版本和数据类型可采用不同一致性路径:临时服务实例更偏可用性的 Distro/AP 语义,持久实例或配置数据可能使用 Raft/CP 语义。回答时应锁定 Nacos 版本、实例类型和业务数据,再说明网络分区时希望保可用还是保强一致。
2420+
2421+ ---
2422+
23332423## 算法与手撕题单
23342424
23352425以下题目来自同一时间窗口,适合单独放入算法训练计划:
@@ -2380,3 +2470,4 @@ Redis 的顶层 keyspace 通常使用哈希字典,单 key 的值再按 String
23802470| 0-1 背包与完全背包 | [ 蔚来 AI Infra 面经] ( https://www.nowcoder.com/feed/main/detail/738d29de77ef4675bbac0a7d18ed1371 ) |
23812471| 两数之和(LC 1) | [ 沐曦 AI Infra 一面] ( https://www.nowcoder.com/feed/main/detail/5f3629b12be346de8dbc954a75d0990f ) |
23822472| 矩阵第 K 小元素(原帖有序约束未完整记录) | [ 腾讯 CDG AI Infra 框架侧面经] ( https://www.nowcoder.com/feed/main/detail/6bbfaca62dc64d45851f3ea6c48ff168 ) |
2473+ | 爬楼梯(递归、记忆化与动态规划,LC 70) | 字节火山引擎 Managed Agent 一面,2026 年 8 月 13 日 |
0 commit comments