Skip to content

Commit d2d0d3b

Browse files
committed
docs: add subject interview fundamentals
1 parent d747e8f commit d2d0d3b

2 files changed

Lines changed: 92 additions & 1 deletion

File tree

05_interview/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ eyebrow: Module 06
5151
| [程序员八股文50题](fundamentals/general-backend/) | 通用技术岗 | 数据结构+操作系统+网络+数据库+系统设计,50道高频题全解析 |
5252
| [2026年3–7月高频后端八股统计](fundamentals/backend-frequency-2026-march-july/) | 高频统计 | 32组真实面经:规范题频次、跨月趋势、复习优先级与算法附录 |
5353
| [2026年春季后端面经八股](fundamentals/recent-2026-spring/) | 3–5月真题 | 45道题:Java、C++、JVM、数据库、缓存、网络与分布式 |
54-
| [2026年2–8月后端面经八股](fundamentals/recent-2026-summer/) | 2–8月真题 | 218道题:Java、C++、Go、操作系统、网络、数据库、分布式与AI Infra |
54+
| [2026年2–8月后端面经八股](fundamentals/recent-2026-summer/) | 2–8月真题 | 227道题:Java、C++、Go、操作系统、网络、数据库、分布式与AI Infra |
5555

5656
## 备考建议
5757

_includes/interview-seasons/2026/summer.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)