李东's Blog

李东

php最新面试题

2026-03-01
php最新面试题

中级 PHP 面试抗追问手册(武汉 1w 档)终极版

说明:全是“人话版”,面试官追问 3~4 层也能站住。
每题包含:面试官问 → 人话答 → 追问 → 活法提示。
适合打印、背诵和电脑复习。


目录

  1. 百万数据量优化
  2. Laravel 启动流程
  3. Redis 缓存击穿 / 数据一致
  4. N+1 查询(Laravel)
  5. 队列(Laravel)
  6. Linux / 部署
  7. 空窗期 + OpenClaw
  8. 高并发接口设计
  9. 秒杀 / 抢购设计
  10. 接口幂等设计
  11. 分库分表设计
  12. AI 辅助开发工具(Cursor / Trae / OpenClaw)

百万数据量怎么优化

第一问

面试官:百万数据量的 SQL 怎么优化?

答法:从数据库、代码、缓存三个层面做。

第二问(追)

面试官:索引你怎么建的?

答法:先看最频繁的 SQL,再按 where + order by 建联合索引,避免单字段索引,索引不要越多越好。

第三问(追)

面试官:分页你怎么做?

答法:数据量大不用 offset 分页,用 id 游标分页:where id > last_id limit 20

第四问(杀)

面试官:排序怎么办?

答法:排序字段 + 查询条件在索引里,避免回表。

⚠️ 作死点

  • select *
  • 单字段索引不够
  • offset 翻页过大

✅ 活法关键词

  • 联合索引
  • 游标分页
  • 三层思路(DB/代码/缓存)

Laravel 启动流程

第一问

面试官:Laravel 启动流程?

答法

  1. public/index.php 入口
  2. Composer 自动加载
  3. Application 容器初始化
  4. 核心 ServiceProvider 注册(数据库、缓存、日志)
  5. 全局中间件 + 路由中间件
  6. 路由分发 → 控制器 → 模型

第二问(追)

面试官:中间件什么时候执行?

答法:路由匹配后,先全局中间件,再路由中间件,控制器前执行。

第三问(追)

面试官:ServiceProvider 是干嘛的?

答法:初始化系统入口,绑定接口、注册事件、加载配置,全局逻辑不适合放控制器里。

第四问(杀)

面试官:Middleware 和 Provider 什么时候用?

答法:请求相关用 Middleware,系统启动阶段用 Provider。

⚠️ 作死点

  • 背诵教材术语
  • “就是注册服务”一句带过

✅ 活法关键词

  • IOC 容器
  • 请求链中间件
  • Provider 初始化

Redis 缓存击穿 / 数据一致

第一问

面试官:缓存击穿怎么办?

答法:加锁,防止多个请求同时查数据库。

第二问(追)

面试官:具体怎么加锁?

答法:缓存 miss 后用 setnx 或原子操作,只让一个请求去查数据库。

第三问(追)

面试官:其他请求怎么办?

答法:等一小会,或者返回旧缓存,不让数据库被打爆。

第四问(杀)

面试官:数据不一致怎么办?

答法:以数据库为准,更新时先改库再删缓存,允许短暂不一致。

⚠️ 作死点

  • 不考虑高并发
  • 背空话 “分布式锁”

✅ 活法关键词

  • setnx / 原子操作
  • 数据库为准
  • 短暂不一致可接受

N+1 查询(Laravel)

第一问

面试官:遇到过 N+1 查询吗?

答法:遇到过,列表循环关联表容易踩。

第二问(追)

面试官:怎么发现的?

答法:慢 SQL / 日志 / 开发调试发现。

第三问(追)

面试官:怎么解决?

答法:用 with() 一次性查出关联数据,避免循环查询数据库。

⚠️ 作死点

  • 不查日志
  • 循环里查数据库

✅ 活法关键词

  • eager loading
  • with()
  • 慢 SQL

队列(Laravel)

第一问

面试官:你用过队列吗?

答法:用过,发邮件、消息等异步任务。

第二问(追)

面试官:为什么不用同步?

答法:同步拖慢接口响应,影响用户体验。

第三问(追)

面试官:队列失败了怎么办?

答法:失败重试,超过次数进失败队列,人工或定时处理。

⚠️ 作死点

  • 队列就是异步,不说失败处理
  • 不提延迟/重试机制

✅ 活法关键词

  • 异步任务
  • 失败队列
  • 重试机制

Linux / 部署

第一问

面试官:怎么部署项目?

答法:Linux + Nginx + PHP-FPM

第二问(追)

面试官:PHP-FPM 挂了怎么办?

答法:看日志 → 重启服务 → 排查内存或慢请求

第三问(追)

面试官:怎么防止老挂?

答法:控制并发,优化慢接口,避免单请求耗时过长。

⚠️ 作死点

  • 不看日志
  • 只重启不查原因

✅ 活法关键词

  • 日志
  • 并发控制
  • 慢接口优化

空窗期 + OpenClaw

第一问

面试官:你这段时间没上班,在干嘛?

答法:整理以前项目技术点,同时用 OpenClaw 做自动化任务,例如定时采集数据、同步数据库。

⚠️ 作死点

  • 说“自学”
  • 编公司

✅ 活法关键词

  • 技术整理
  • 自动化
  • OpenClaw 实战

高并发接口设计

第一问

面试官:高并发接口你怎么设计?

答法:先从限流、缓存、队列三方面考虑,保证接口在高流量下不会崩。

第二问(追)

面试官:限流你具体怎么做?

答法:用 Redis 计数器或者漏桶/令牌桶算法,对接口做 QPS 限制。

第三问(追)

面试官:缓存策略呢?

答法:热点数据放 Redis,非核心数据用延迟更新或异步刷新,避免缓存击穿。

第四问(杀)

面试官:队列处理失败怎么办?

答法:失败重试,超过次数进失败队列,人工或定时处理。

⚠️ 作死点

  • 不考虑限流
  • 全靠数据库撑
  • 队列失败不处理

✅ 活法关键词

  • 限流算法
  • Redis 热点缓存
  • 队列重试

秒杀 / 抢购设计

第一问

面试官:你做过秒杀系统吗?

答法:有做过,核心是控制库存、限流和抢购请求排队。

第二问(追)

面试官:如何保证库存不超卖?

答法:用 Redis 原子操作减库存,同时异步落库。

第三问(追)

面试官:并发特别高怎么办?

答法:前端请求排队到队列中处理,减少数据库压力;热点缓存防击穿。

第四问(杀)

面试官:如果队列挂了怎么办?

答法:落库后重试失败队列或手工干预,保证最终一致性。

⚠️ 作死点

  • 数据库直接减库存
  • 没限流、没排队

✅ 活法关键词

  • Redis 原子减库存
  • 异步队列
  • 高并发排队

接口幂等设计

第一问

面试官:接口怎么保证幂等?

答法:使用唯一请求 ID 或 token,重复请求不重复写数据库。

第二问(追)

面试官:支付类接口怎么办?

答法:先生成订单号,接口幂等校验 ID,操作数据库前检查是否已存在,保证重复请求不重复扣款。

第三问(追)

面试官:Redis 怎么帮忙?

答法:请求 ID 可以缓存到 Redis,短时间重复请求直接返回结果,不访问数据库。

⚠️ 作死点

  • 只靠数据库约束
  • 不考虑重复请求

✅ 活法关键词

  • 请求唯一 ID
  • Redis 幂等缓存
  • 支付安全

分库分表设计

第一问

面试官:你的项目如何分库分表?

答法:按业务或时间拆表、拆库,减少单表压力。

第二问(追)

面试官:如何路由请求?

答法:通过中间件或 DAO 层判断 user_id 或时间,选择对应库和表。

第三问(追)

面试官:事务怎么保证?

答法:跨库事务尽量避免,核心业务用单库事务,其他用最终一致性策略。

第四问(杀)

面试官:数据迁移怎么办?

答法:用脚本批量迁移 + 双写策略,保证新老系统过渡期数据一致。

⚠️ 作死点

  • 全靠单库撑
  • 跨库事务处理复杂不说
  • 不做迁移策略

✅ 活法关键词

  • 分库分表
  • 中间件路由
  • 单库事务 + 最终一致性

AI 辅助开发工具(Cursor / Trae / OpenClaw)

第一问

面试官:你了解 Cursor、Trae、OpenClaw 这些 AI 工具吗?

答法:了解,我平时用这些工具来提升开发效率和自动化运维。

  • Cursor:代码生成与智能补全,快速生成函数模板,提高开发速度。
  • Trae:AI 辅助测试和调试,分析代码问题和优化建议。
  • OpenClaw:自动化数据采集和任务调度,重复操作交给工具做。

第二问(追)

面试官:能具体举个例子你是怎么用的吗?

答法

  • Cursor:Laravel 控制器快速生成 CRUD 方法
  • Trae:跑单元测试分析日志发现潜在 bug
  • OpenClaw:定时采集第三方数据,同步数据库

第三问(追)

面试官:那你怎么保证 AI 生成的代码没问题?

答法:AI 只做辅助,核心逻辑和数据库操作我都会手动 review,必要时重写或优化。

第四问(杀)

面试官:AI 能替代你开发吗?

答法:AI 只能辅助,不能替代设计思路、业务判断和复杂逻辑开发。

⚠️ 作死点

  • 说“全交给 AI 做”
  • 不区分辅助和核心逻辑
  • 只说工具名,不讲应用场景

✅ 活法关键词

  • AI 辅助开发
  • 自动化任务
  • 代码生成 / 测试 / 数据采集
  • 最终逻辑把控在自己手里