重生——第九次面试2026.8.13某车一面 📅 2026/8/13 17:47:37 1. 拷打实习项目面试重点业务背景、遇到什么并发 / 数据问题、方案选型、踩坑、优化点、你负责模块不要只讲功能。 STAR 思路 1S 场景业务是什么存在什么痛点并发、数据不一致、性能慢 2T 任务你的职责需要解决什么问题 3A 行动技术方案核心代码思路中间踩过什么坑怎么调优 4R 结果性能提升多少解决了什么线上问题学到什么被追问高频方向为什么选这个技术不用别的如果并发再放大 10 倍会出现什么问题怎么优化线上出现 bug 你怎么排查这个方案有什么缺点2.MCP 协议 vs HTTP 协议调用区别MCPModel Context ProtocolAI 工具调用协议HTTP 通用应用层协议连接模式HTTP短连接为主每次请求建立 / 释放连接也可以长连接 keep‑alive。无状态。MCP基于流的长连接stdio、websocket一次连接复用持续双向通信。数据模型HTTPRequest‑Response 一问一答模式。MCPJSON‑RPC 2.0可以并行多路请求同一个连接同时发多个调用不需要等待上一个返回。支持通知不需要 response。用途HTTP通用服务调用前后端、微服务。MCP专门给大模型做 Tool Call工具、资源、提示词标准化模型可以发现可用工具。开销HTTPhttp 头、cookie 等头部开销大。MCP二进制 / 流式 json头部少多次调用开销更低。认证HTTPheader token、cookie、oauth2。MCP支持 transport 层认证ws token、stdio 环境变量协议本身不强制。简单总结HTTP 适合通用微服务MCP 面向 AI 工具调用长连接 JSON‑RPC支持并行调用专为模型工具交互设计。3. 系统之间认证怎么做服务间认证Token 方式JWT服务 A 生成 jwt放到请求头传给服务 BB 校验签名。适合网关、跨服务。缺点无法主动作废 token。OAuth2.0 客户端凭证模式 Client Credentials服务账号专门用于服务与服务之间拿 access_token 访问资源服务。适合多微服务。API Key简单请求头放 api‑key服务端校验 key配置在配置中心。适合第三方调用缺点密钥泄露风险。mTLS 双向 TLS双方都持有证书握手阶段互相校验证书。安全高适合内网核心服务运维重。Spring Cloud Alibaba 微服务体系Sentinel Nacos 元信息 token 透传内网服务也可以网关统一鉴权。MCP 场景transport 层携带密钥ws url 带 token或者环境变量传密钥。区分用户登录认证面向人服务间认证机器对机器不需要用户参与。4.InnoDB 索引结构InnoDB 索引是B 树B 树所有数据都在叶子节点非叶子节点只存索引键 页号用于路由查找。主键索引聚簇索引叶子节点保存完整行数据表数据本身就是按主键 B 树组织。二级索引普通索引叶子节点存索引列 主键值不存完整行。查到主键之后再去主键索引拿完整行就是回表。页B 树节点就是磁盘页默认 16KB一页存多条索引记录减少磁盘 IO。B 树对比 B 树B 树每个节点都存数据B 树只有叶子存数据范围查询极强。5. 回表是什么 索引失效回表查询使用二级索引二级索引叶子只能拿到主键再拿着主键去聚簇索引读取完整行数据这个过程叫回表。如果 select 只查索引本身包含的字段不需要回表叫覆盖索引。 例索引 (name)select name from t where namexxx→ 覆盖索引不回表select name,age from t where namexxx→ 需要回表拿 age6. 索引失效常见场景索引列做运算、函数、隐式类型转换where substr(name,1,1)a/where str123字段是 intlike 以通配符开头like %abcor 一边条件没有索引not in、!、is not null 不一定失效要看数据分布不能直接说一定失效mysql 优化器判断全表扫描比走索引更快放弃索引。数据量占比大的时候触发。联合索引不满足最左前缀原则。注意is null 可以走索引is not null 可能不走看数据。联合索引 abcbc 失效那 ba有 a 就行是吧联合索引index(a,b,c)遵循最左前缀匹配有效条件从索引最左开始连续使用。✅有效 where a? where a? and b? where a? and b? and c? where a? and c? a 生效c 失效b 没有c 不能用索引排序过滤❌失效 where b? and c? 没有 a整个索引无法使用 where b? and a? →SQL 条件顺序无关mysql 优化器会自动调整条件顺序等价 a and b可以正常走 abc 索引。关键点SQL where 条件书写顺序不影响要看是否包含索引最左列 a。where b? and a?有 a优化器重排为 a and b可以走索引。where b?没有 a完全不走这个联合索引。“有 a 就行” 不完全对where a? and c?a 可以用索引定位b 缺失c 无法利用索引过滤排序。只能用到 a 这一部分。7. 缓存穿透 布隆过滤器原理缓存穿透查询数据库和缓存都不存在的数据缓存 miss请求直接打到 DB。大量这种请求压垮数据库。解决方案缓存空值缓存存 null设置短过期时间布隆过滤器拦截不存在 key直接返回不去查缓存、DB。布隆过滤器原理由bit 数组 多个 hash 函数组成。存入 keykey 经过 N 个不同 hash 函数算出 N 个 bit 下标把对应 bit 位置 1。查询 key同样 N 次 hash如果所有对应 bit 位都是 1 →可能存在只要有一个 bit 是 0 →一定不存在。特点存在误判率判定存在实际可能不存在不会漏判。不支持删除元素删除会影响其他 key一般用计数布隆过滤器解决删除。占用内存很小适合海量数据做存在性判断。缓存击穿热点 key 过期大量请求打数据库缓存雪崩大量 key 同时过期redis 宕机。8. 批量导入Redisson 分布式锁 先更新库后延迟删缓存其他解决方案场景人员信息批量导入多线程并发修改同一组织节点权限树错乱方案Redisson 分布式锁 先更新数据库延迟删除缓存保证最终一致性。先回顾先更新数据库再删除缓存问题更新成功删除缓存失败 → 缓存旧数据数据不一致。用延迟双删更新 DB → 删除缓存 → 休眠一小段时间再删一次缓存。Redisson 锁保证同一组织节点串行执行。除 Redis 分布式锁之外解决并发修改同一资源防止错乱的方案数据库乐观锁version 版本号表增加 version 字段更新时update xxx set ... versionversion1 where id#{id} and version#{oldVersion}更新行数 0 代表已经被别人修改捕获异常重试。不需要锁适合并发冲突不多场景。缺点大量冲突会大量重试。数据库悲观锁select ... for update行锁。事务内锁住这行其他线程阻塞。 缺点数据库压力大长事务容易死锁不适合高并发批量导入。业务层队列按组织 ID 分片队列同一个组织节点的所有导入任务投递到同一个队列单线程消费。天然串行无锁。Kafka/RabbitMQ。适合批量导入削峰。数据库唯一约束如果业务可以利用唯一索引避免重复脏写。Zookeeper 分布式锁临时有序节点实现分布式锁可靠性高性能比 Redis 差。选型对比 冲突少优先乐观锁批量任务可以消息队列串行高并发争抢用 Redis 分布式锁强一致性可以 zk 锁。注意分布式锁只能解决并发写错乱不能彻底解决缓存 DB 不一致还是依赖延迟双删、MQ 重试删除缓存。9.IOC 和 AOPIOC控制反转 Inversion of Control控制反转把对象创建、依赖交给 Spring 容器而不是自己 new 对象。DI 依赖注入是 IOC 实现方式构造器注入、setter 注入、字段 Autowired 注入。好处解耦便于单元测试容器统一管理生命周期。Bean 的生命周期实例化 → 属性填充 →初始化 →销毁。AOP面向切面编程 Aspect‑Oriented Programming把通用横切逻辑抽离出来日志、权限校验、事务、限流、埋点不和业务代码耦合。底层两种代理 1JDK 动态代理实现接口的类生成接口代理对象。 2CGLIB 代理继承目标类生成子类类没有实现接口时使用。SpringBoot 默认 CGLIB。AOP 概念切面 Aspect通知 切点切点 Pointcut匹配哪些类哪些方法通知 Advice执行逻辑 Before After AfterReturning AfterThrowing Around连接点 JoinPoint被拦截到的方法。Around 环绕通知功能最强可以控制目标方法要不要执行。