综合面试题
基本信息:
姓名:
面试职位:
面试编号:
1、短剧系统中,一部短剧有多集(一对多关系),以下哪种表设计最合理?
A、把所有剧集信息用 JSON 存在短剧表的一个字段里
B、短剧表和剧集表分开,剧集表通过 vid 外键关联短剧表
C、每一集单独建一张表
D、短剧和剧集放在同一张表,用 type 字段区分
2、数据库表 vs_dramas_video 中,category_ids 字段存储为 JSON 数组(如 [1,3,5]),要按分类 ID 筛选短剧,以下哪个 SQL 写法最合适?
A、WHERE category_ids = 3
B、WHERE category_ids LIKE "%3%"
C、WHERE JSON_CONTAINS(category_ids, "3")
D、WHERE FIND_IN_SET(3, category_ids)
3、用户通过 Header 传 token 进行接口鉴权,以下关于 Token 过期处理的说法,哪个最合理?
A、Token 永不过期,这样用户体验最好
B、Token 过期后,后端返回 401 状态码,前端跳转登录页
C、Token 过期后,后端自动生成新 Token 放在响应头里返回
D、Token 过期后,直接返回 500 错误
4、后台管理员删除一部短剧,系统采用软删除(设置 deletetime 字段)。查询短剧列表时,以下哪个做法正确?
A、不需要特殊处理,ORM 会自动过滤
B、查询条件加上 WHERE deletetime IS NULL
C、查询条件加上 WHERE deletetime = 0
D、B 和 C 都可能正确,取决于框架的软删除实现方式
5、UniApp 项目使用分包加载,以下说法错误的是?
A、分包可以减少首次加载的包体积,提升启动速度
B、主包中的页面可以跳转到分包页面
C、分包中的页面可以直接引用其他分包的组件
D、分包配置在 pages.json 的 subPackages 字段中
6、设计一个"用户购买剧集"的 RESTful 接口,以下哪个设计最规范?
A、GET /api/buy?video_id=1&episode_id=2
B、POST /api/episodes/2/purchase 请求体:{ "video_id": 1 }
C、PUT /api/order 请求体:{ "video_id": 1, "episode_id": 2 }
D、POST /api/order/create 请求体:{ "video_id": 1, "episode_id": 2 }
7、以下关于接口幂等性的说法,正确的是?
A、幂等性是指接口只能调用一次
B、幂等性是指多次调用同一接口,结果与调用一次相同
C、所有 POST 接口天然具有幂等性
D、只有 GET 接口需要考虑幂等性
8、PHP 中使用数据库事务,以下代码存在什么问题?Db::startTrans();$user = Db::name("user")->where("id", $uid)->find();if ($user["coins"] < $price) { return json(["code"=>0, "msg"=>"余额不足"]); }Db::name("user")->where("id", $uid)->update(["coins" => $user["coins"] - $price]);Db::commit();
A、没有问题,代码逻辑正确
B、余额不足时直接 return,没有执行 rollback,事务未正确关闭
C、应该用 setInc/setDec 而不是手动计算余额
D、B 和 C 都是问题
9、短剧系统中用户表使用 int 类型的时间戳存储 VIP 到期时间(vip_endtime),判断用户是否为 VIP,以下哪个写法最安全?
A、WHERE vip_endtime > NOW()
B、WHERE vip_endtime > UNIX_TIMESTAMP()
C、WHERE FROM_UNIXTIME(vip_endtime) > NOW()
D、A 和 B 效果一样
10、Vue 2 组件中,父组件向子组件传递数据用 props,子组件向父组件通信用什么?
A、直接修改 props 的值
B、通过 this.$emit 触发自定义事件
C、通过 this.$parent 直接访问父组件数据
D、通过 Vuex 全局状态管理
11、以下关于 N+1 查询问题的描述,正确的是?
A、N+1 是指查询了 N+1 张表
B、N+1 是指先查 1 次列表,再循环 N 次查关联数据,共 N+1 次查询
C、N+1 问题只在 ORM 中存在,手写 SQL 不会有
D、N+1 问题对性能影响不大,不需要优化
12、后台批量上架 500 部短剧,以下哪种实现方式最合理?
A、前端循环调用 500 次单条更新接口
B、前端一次性传 500 个 ID,后端用 WHERE id IN (...) 批量 UPDATE
C、前端一次性传 500 个 ID,后端逐条 UPDATE 并用事务包裹
D、不需要接口,直接在前端用 JS 修改页面显示状态
13、用户 VIP 已有月卡(到期时间 2026-04-01),又购买了年卡(365天),以下哪种权益叠加方式最合理?
A、覆盖:直接从今天算起加 365 天
B、叠加:从月卡到期时间算起加 365 天
C、取最长:比较两个到期时间,取较晚的那个
D、退款月卡剩余天数,重新计算年卡到期时间
14、以下哪个不是防止 SQL 注入的有效方法?
A、使用参数化查询(预处理语句)
B、使用 ORM 框架的查询构建器
C、对用户输入进行 addslashes() 转义
D、对用户输入进行类型校验(如 intval)
15、支付回调接口设计中,以下哪个做法是错误的?
A、回调接口必须验证签名,防止伪造请求
B、回调接口必须做幂等处理,同一订单多次回调只处理一次
C、回调接口处理成功后返回支付平台要求的成功标识
D、回调接口应该在处理完业务逻辑后再验证签名,提高效率
16、用户用金币购买剧集时,为保证数据一致性和并发安全,以下哪些措施是必要的?
A、使用数据库事务包裹扣款和创建订单操作
B、使用乐观锁或悲观锁防止并发扣款
C、购买前检查是否已购买,防止重复购买
D、使用 UPDATE coins = coins - price WHERE coins >= price 原子操作
E、购买成功后发送异步消息通知用户
17、以下哪些是前端首屏加载优化的有效手段?
A、使用分包加载,减少主包体积
B、图片使用懒加载,首屏外的图片延迟加载
C、接口数据使用缓存,减少重复请求
D、所有页面的 JS/CSS 打包成一个文件,减少请求数
E、使用骨架屏提升用户感知速度
18、设计短剧排行榜功能(热播榜 Top 50,每小时更新),以下哪些技术方案是合理的?
A、使用 Redis Sorted Set 存储排行数据,查询时直接从缓存读取
B、每次用户请求排行榜时,实时从数据库 COUNT + ORDER BY 查询
C、使用定时任务每小时计算一次排名,结果写入缓存或排行表
D、后台手动调整排名时,同步更新缓存
E、排行榜数据变化时记录快照,用于展示排名升降
19、以下关于 AI 辅助编码的说法,哪些是正确的?
A、AI 生成的代码可以直接用于生产环境,不需要人工审查
B、给 AI 的提示词越详细(包含边界条件、异常处理要求),生成的代码质量越高
C、AI 生成的代码常见问题包括:缺少事务、并发不安全、缺少参数校验
D、使用 AI 编码时,应该多轮迭代优化,而不是一次生成就结束
E、AI 可以完全替代开发者的代码审查能力
20、后台批量操作 500 条数据时,其中 3 条失败了,以下哪些处理策略是合理的?
A、全部回滚,一条都不更新,提示用户重试
B、成功的正常提交,失败的记录下来返回给前端,让用户处理
C、成功的正常提交,失败的自动重试一次
D、前端展示处理进度和结果明细(成功 497 条,失败 3 条)
E、静默忽略失败的 3 条,只返回成功
21、在 ThinkPHP 中,使用 Db::name("user")->where("id", $id)->find() 查询时,框架会自动进行参数化处理,可以防止 SQL 注入。
A、正确
B、错误
22、Vue 2 中,子组件可以直接修改父组件通过 props 传入的对象属性,且不会报错,所以这种做法是推荐的。
A、正确
B、错误
23、数据库中使用 int 时间戳存储时间,比使用 datetime 类型更节省存储空间,且不受时区影响。
A、正确
B、错误
24、使用 AI 工具生成代码时,只要提示词写得足够好,就不需要对生成的代码进行审查和测试。
A、正确
B、错误
25、在高并发场景下,先查询用户余额再扣减的"读-改-写"模式是安全的,因为数据库有事务保护。
A、正确
B、错误
27. 26、在 ThinkPHP 中,开启数据库事务的方法是 Db::______(),提交事务是 Db::______(),回滚事务是 Db::______()。
28. 27、Vue 2 中,子组件触发自定义事件通知父组件的方法是 this.______("事件名", 数据),父组件监听事件的写法是 ______:事件名="处理函数"(或简写 @事件名)。
29. 28、MySQL 中,防止 N+1 查询问题的常用方法是使用 ______ 查询将关联数据一次性查出,或使用 ORM 的 ______(eager loading / with)功能。
30. 29、RESTful API 中,获取资源列表用 ______ 方法,创建新资源用 ______ 方法,更新资源用 PUT 方法,删除资源用 ______ 方法。
31. 30、Redis 中最适合实现排行榜功能的数据结构是 ______(有序集合),添加成员的命令是 ZADD,获取排名前 N 的成员用 ______ 命令。
31、【AI 辅助编码】系统支持二级分销:用户 A 邀请用户 B,B 邀请用户 C。当 C 付费时,B 获得一级佣金,A 获得二级佣金。请使用任意 AI 工具生成佣金计算的核心函数,然后审查 AI 生成的代码,指出至少 3 个可能存在的问题并修正。(考察:AI 提示词能力、代码审查能力、金额计算安全意识)
32、【AI 辅助 Debug】线上反馈:部分用户购买 VIP 后,页面仍显示非 VIP,刷新后恢复正常。已知信息:后端购买接口返回成功;前端用 Vuex 管理状态,通过 vip_endtime > now 判断 VIP。请使用 AI 工具辅助分析可能原因,从 AI 给出的多个原因中判断最可能的是哪个,并给出代码级修复方案。(考察:AI 辅助排查能力、上下文组织能力、前后端联调经验)
34. 33、【AI 代码审查】请审查以下 AI 生成的用户签到领金币接口代码,找出至少 5 个问题并给出修正版本:public function signIn() ______ $yesterday = date("Y-m-d", strtotime("-1 day")); $yesterdaySigned = Db::name("sign_log")->where("user_id", $user_id)->where("date", $yesterday)->find(); $streak = $yesterdaySigned ? $user["sign_streak"] + 1 : 1; $coins = min($streak * 10, 100); Db::name("user")->where("id", $user_id)->update(["coins" => $user["coins"] + $coins, "sign_streak" => $streak]); Db::name("sign_log")->insert(["user_id" => $user_id, "date" => $today, "coins" => $coins, "streak" => $streak]); return json(["code" => 1, "msg" => "签到成功", "data" => ["coins" => $coins]]);}(提示:从安全、并发、事务、参数校验、时区等维度审查)
34、【AI 辅助架构设计】产品需求:短剧排行榜功能,支持热播榜/新剧榜/好评榜/付费榜,每种 Top 50,每小时更新,后台可手动调整排名,前端展示排名升降。请使用 AI 工具辅助设计技术方案,展示你的提示词和对 AI 方案的评估调整过程,最终给出:表结构 + 核心接口 + 缓存策略 + 定时任务设计。(考察:AI 辅助架构设计能力、提示词迭代能力、方案评估能力)
35、【场景设计】VIP 权益系统设计:系统有月卡/季卡/年卡,请设计 VIP 套餐表结构、购买流程(从下单到权益生效)、VIP 判断逻辑、权益叠加策略(已有月卡又买年卡怎么处理),以及支付回调延迟时用户状态的处理方案。
36、【场景设计】后台批量操作优化:运营需要批量上架 500 部短剧,目前前端循环调用单条接口导致很慢且超时。请从接口设计、数据库操作、前端体验、异常处理(部分失败)四个维度给出完整优化方案。
37、【编码题】请实现一个短剧列表分页查询接口(PHP/ThinkPHP 或任意语言),要求:支持分页(page, page_size)、按分类筛选(category_id,注意 category_ids 是 JSON 数组字段)、按状态筛选、按创建时间排序、返回总数和列表。请写出完整代码并说明关键设计决策。
38、【编码题】请实现用户用金币购买剧集的核心逻辑(PHP 或伪代码),要求:校验余额、防重复购买、使用事务、考虑并发安全(说明你选择的锁策略)。入参:user_id, video_id, episode_id。表:vs_user(coins), vs_dramas_video_order, vs_dramas_video_episodes(price)。
39、【编码题】请用 Vue 2 实现一个剧集选择组件 <episode-list>,接收 episodes 数组(每项有 id/name/is_free/price/is_purchased)和 currentId,免费集显示免费标签,已购显示已购标签,未购显示价格;点击未购集触发 @buy 事件,点击免费/已购集触发 @play 事件,当前播放集高亮。
40、【综合题】请描述你使用 AI 编码工具的完整工作流程:从拿到需求开始,你会怎么组织提示词?怎么审查 AI 输出?遇到 AI 生成的代码有问题时怎么迭代?你认为 AI 编码最大的风险是什么?你会怎么在团队中推广 AI 编码的最佳实践?
关闭
更多问卷
复制此问卷