小游戏公司后端一面面经
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 从 52 张扑克牌中抽两张,抽出一红一黑的概率是多少?
- 六个羽毛球中四个全新,第一次使用两个后放回,第二次抽到两个全新的概率是多少?
- 单向链表按 n 个一组翻转应该如何实现?
- 如何求 N 的阶乘转成十二进制后的位数、末尾零个数和末尾首个非零值?
- 两个坐标系之间的点坐标如何转换?
- 点乘和叉乘分别表示什么?
- 数据库常见存储引擎有什么区别?
- Java 集合框架中 List、Set 和 Map 如何选择?
- 哈希冲突有哪些解决策略?
- WebSocket 与传统 HTTP 通信有什么区别?
《参考解析》
- 一红一黑的组合数为红牌数乘黑牌数,除以从全部牌中任取两张的组合数即可。组合计数时要保证分母和分子使用同一种“无序抽取”口径。
- 第一次取出的球可能是全新或已使用,放回后状态改变;应按第一次取到全新球的数量分情况,再计算第二次取到两个全新的条件概率并求和。
- 用哨兵节点逐段定位长度为 n 的区间,原地反转后接回前后链表;不足 n 个节点时按题意保留或反转。全程只需常数额外空间。
- 不能直接构造完整阶乘时,可用质因数分解计算位数和末尾零,再用高精度分块乘法求末尾非零数字。十二进制的零由因子 12 的个数决定,即同时受 2 和 3 的指数限制。
- 若变换为旋转矩阵和平移组成的齐次变换,先把点扩展为齐次坐标,再左乘从 A 到 B 的变换矩阵。矩阵方向和坐标系约定必须保持一致。
- 点乘结果是标量,常用于投影和夹角判断;叉乘结果是向量,方向遵循右手规则,常用于求法向量和判断平面朝向。
- InnoDB 支持事务和行级锁,适合高并发写入;MyISAM 结构简单但以表锁为主且不支持事务。选择应基于一致性和并发写需求。
- List 保持顺序并允许重复,Set 强调唯一性,Map 按键查值。还要考虑访问复杂度、排序需求、线程安全和是否需要并发集合。
- 常见方法有链地址法、开放寻址、再哈希和树化。需要根据装载因子、删除语义、内存局部性和最坏情况复杂度选择。
- WebSocket 在 HTTP 握手后升级为双向长连接,服务端可主动推送;HTTP 更适合请求响应。长连接仍需心跳、断线重连和连接数控制。