全栈实战初试


全栈工程师初面实战题目

一、MySQL 数据库

1. 怎么分析 MySQL 的索引?

回答要点:

  • 使用 EXPLAIN 分析执行计划,关注:
    • type:ALL(全表) < index < range < ref < eq_ref < const
    • key:实际使用的索引
    • rows:预估扫描行数
    • Extra:Using index(覆盖索引)、Using filesort(需优化)、Using temporary(需优化)
  • 使用 SHOW INDEX FROM table_name 查看索引信息
  • 慢查询日志定位问题 SQL

2. 索引的最左匹配规则?

回答要点:

  • 联合索引 (a, b, c) 的匹配规则:
    • WHERE a=1WHERE a=1 AND b=2WHERE a=1 AND b=2 AND c=3
    • × WHERE b=2WHERE c=3WHERE b=2 AND c=3(不走索引)
  • 范围查询会中断匹配WHERE a=1 AND b>2 AND c=3,c 用不到索引
  • 顺序无关:优化器会自动调整,WHERE b=2 AND a=1 也能用索引

3. 一条 SQL 的执行流程?

回答要点:

客户端 → 连接器(权限验证) → 查询缓存(8.0已移除) 
      → 分析器(词法/语法分析) → 优化器(执行计划/索引选择) 
      → 执行器 → 存储引擎(InnoDB)
  • 连接器:管理连接、身份认证
  • 分析器:词法分析(识别关键字)、语法分析(语法校验)
  • 优化器:选择索引、决定 JOIN 顺序
  • 执行器:调用存储引擎接口获取数据

4. 数据库告警高 CPU 怎么处理?

回答要点:

  1. 定位问题 SQL
    -- 查看当前执行的SQL
    SHOW FULL PROCESSLIST;
    -- 或查询慢查询日志
  2. 常见原因及解决
    • 全表扫描 → 添加合适索引
    • 复杂 JOIN → 拆分查询、优化索引
    • 锁等待 → 检查死锁、优化事务
    • 大量连接 → 检查连接池配置、是否有连接泄漏
  3. 紧急处理KILL 问题查询,限流降级

二、Elasticsearch

5. 同步大量数据到 ES 怎么处理?

回答要点:

  • 全量同步
    • 使用 Bulk API 批量写入(每批 1000-5000 条)
    • 同步前关闭 refresh_interval,完成后再开启
    • 设置 number_of_replicas=0,完成后恢复
  • 增量同步方案
    • Canal 监听 MySQL Binlog → MQ → ES
    • 业务双写(注意一致性)
    • Logstash 定时拉取
  • 注意事项
    • 控制并发数,避免压垮 ES
    • 做好失败重试和断点续传
    • 数据校验(对账)

三、Spring 框架

6. Spring 用了哪些设计模式?

回答要点: 设计模式 应用场景
工厂模式 BeanFactory、ApplicationContext 创建 Bean
单例模式 Bean 默认 scope=singleton
代理模式 AOP 动态代理(JDK/CGLIB)
模板方法 JdbcTemplate、RestTemplate
观察者模式 ApplicationEvent 事件机制
适配器模式 HandlerAdapter 处理不同类型 Controller
策略模式 Resource 接口的不同实现

7. Spring Bean 的生命周期?

回答要点:

实例化 → 属性注入 → Aware接口回调 → BeanPostProcessor前置 
      → InitializingBean/init-method → BeanPostProcessor后置 
      → 使用 → DisposableBean/destroy-method → 销毁
  • @PostConstruct 在 init-method 之前执行
  • @PreDestroy 在 destroy-method 之前执行

8. @Transactional 失效的场景?

回答要点:

  • 同类方法调用:内部方法调用不走代理
  • 非 public 方法:CGLIB 代理的限制
  • 异常被吞掉:catch 后没有抛出
  • 异常类型不对:默认只回滚 RuntimeException
  • 数据库不支持:MyISAM 引擎不支持事务

四、消息队列

9. 你的项目为什么要用消息队列?

回答要点(结合实际场景):

  • 异步解耦:下单后异步发短信/邮件,不阻塞主流程
  • 削峰填谷:秒杀场景,请求先入队,后端按能力消费
  • 数据同步:订单数据异步同步到 ES、数仓
  • 实际案例:支付成功后通知发货、积分、优惠券等多个下游系统

10. 如何保证消息不丢失?

回答要点(以 RabbitMQ 为例): 环节 保证方案
生产者 confirm 机制确认消息到达 Broker
Broker 持久化(交换机+队列+消息)
消费者 手动 ACK,处理完再确认

五、Vue 前端实战

11. 大数据量表格卡顿怎么优化?

回答要点:

  • 虚拟滚动:只渲染可视区域的行(vue-virtual-scroller / vxe-table)
  • 分页加载:后端分页,前端懒加载
  • 冻结列优化:减少固定列数量,用 CSS position: sticky
  • 减少 watcher:大列表不要每行都双向绑定
  • Web Worker:大数据计算放到 Worker 中

12. 首屏加载慢怎么优化?

回答要点:

  1. 打包优化
    • 路由懒加载 () => import('./xxx.vue')
    • 第三方库走 CDN(externals 配置)
    • Tree Shaking + 代码分割
  2. 资源优化
    • 图片压缩 + WebP 格式 + 懒加载
    • Gzip / Brotli 压缩
  3. 渲染优化
    • 骨架屏 / Loading 状态
    • 关键 CSS 内联
  4. 实测工具:Lighthouse、Performance 面板

13. 你遇到过哪些前端内存泄漏问题?

回答要点:

  • 常见场景
    • 定时器未清除(setInterval 在 beforeUnmount 清除)
    • 事件监听未移除(addEventListener 对应 removeEventListener)
    • 闭包引用大对象
    • 第三方库实例未销毁(ECharts、地图等)
  • 排查方法
    • Chrome DevTools → Memory → Heap Snapshot
    • 反复进入/离开页面,观察内存是否持续增长

14. 前端如何处理接口并发和防抖?

回答要点:

  • 按钮防重复提交
    • 点击后 disable + loading 状态
    • 接口层用 axios 拦截器取消重复请求
  • 搜索防抖lodash.debounce 300-500ms
  • 下拉加载节流lodash.throttle
  • 并发控制:Promise.all 或 p-limit 库控制并发数

六、后端实战进阶

15. 国内外不同区域数据如何同步?

回答要点:

  • 方案选型 方案 适用场景 延迟
    数据库主从同步 读多写少,单向同步 秒级
    双向同步(DTS/Canal) 多活架构 秒~分钟级
    消息队列 最终一致性,解耦 秒级
    应用层双写 定制化强 实时
  • 核心问题处理
    • 冲突解决:时间戳优先、业务规则仲裁、人工处理
    • 幂等设计:唯一键 + upsert
    • 断网重连:本地日志 + 重试队列
  • 实际经验:用阿里云 DTS 跨区同步,配合业务层对账

16. 高并发下如何保证库存不超卖?

回答要点:

  1. 数据库层
    UPDATE stock SET num = num - 1 WHERE goods_id = ? AND num > 0

    利用行锁 + 条件判断

  2. Redis 预扣减
    • DECR 原子操作,扣减成功再下单
    • Lua 脚本保证原子性
  3. 分布式锁(Redisson):控制并发入口
  4. 异步削峰:请求先入 MQ,顺序消费

17. 线上 OOM 怎么排查和处理?

回答要点:

  1. 紧急处理
    • 先扩容/重启止血
    • 保留现场:-XX:+HeapDumpOnOutOfMemoryError
  2. 排查步骤
    • jmap -histo:live <pid> 查看对象分布
    • MAT / VisualVM 分析 dump 文件
    • 找到大对象 → 定位代码
  3. 常见原因
    • 大集合未释放、缓存无上限
    • 批量查询不分页
    • 线程池队列无界

18. 定时任务重复执行/漏执行怎么解决?

回答要点:

  • 重复执行
    • 分布式锁(Redisson / 数据库锁)
    • 任务状态标记(执行前检查)
    • 用分布式调度框架(XXL-Job、Elastic-Job)
  • 漏执行
    • 配置 misfire 策略(错过后立即补执行)
    • 任务执行日志 + 对账告警
  • 幂等设计:业务逻辑保证重复执行无副作用

七、项目与综合

19. 项目中遇到的最大挑战?

回答框架(STAR):

  • 背景:什么业务场景
  • 问题:遇到什么技术难点
  • 方案:如何分析、如何解决
  • 结果:带来什么收益(量化最好)

20. 分布式事务怎么处理?

回答要点:

  • 最终一致性方案(推荐):
    • 本地消息表 + MQ 重试
    • 事务消息(RocketMQ)
  • 强一致性方案
    • Seata AT 模式(对业务侵入小)
  • 实际项目更多用最终一致性 + 对账补偿

21. 接口响应慢如何排查?

回答要点:

  1. 链路追踪:SkyWalking/Zipkin 定位慢在哪个环节
  2. 数据库:慢查询日志 + EXPLAIN 分析
  3. 代码层面:Arthas 火焰图分析热点方法
  4. 外部依赖:第三方接口超时、Redis 大 Key
  5. 常见优化:加索引、加缓存、异步化、批量处理

面试加分项

  • 能结合实际项目经验回答
  • 回答有条理(123 点)
  • 知道方案的优缺点和适用场景
  • 主动提及踩过的坑和解决过程


扫描二维码,在手机上阅读
收藏

DevOps实战初试

Ai问答接口开发

评 论
请登录后再评论