腾讯游戏后端一面

一个半小时纯拷打场景和实操(藤子太哈人了)

总的来说,这次面试体验非常好,面试官虽然言辞犀利但还算温柔,愿意引导你进行操作,可以学习到很多知识,特别是一些中间件的底层逻辑,让我真正见识了后端的深似海,但我是第一次在面试中遇到需要实操的场景,非常紧张,终端实操和代码编写都写的不好,只完成了一部分,幸运的是,面试官人特别好,会议结束后就给过了,并鼓励我后面继续加油!

问项目:

1、大文件上传怎么做的

2、某个分片上传时间超过了24小时,因此被定时任务清理掉了,应该怎么办?

修改清理触发条件/校验文件完整性,断点续传重新触发

3、合并文件时java的RandomAccessFile底层是如何实现的

4、写文件时,如何确定某个块是否写入成功了呢

5、如何判断整个文件上传成功的

6、分布式锁的实现

7、redis宕机了怎么办

Redis 宕机的处理逻辑是「先检测→再降级→后容灾」:

  1. 快速检测 Redis 状态,避免接口超时阻塞;
  2. 优先保证业务可用,通过「本地锁 / 数据库唯一索引」兜底去重能力;
  3. 长期通过「主从 / 集群」提升 Redis 可用性,从根本上减少宕机概率;
  4. 故障后复盘优化,形成闭环。

8、如果redis上了主从,主节点上万锁,这时候宕机了,宕机前给client1发送了锁,client1变成了主节点,怎么办(Redis 主从架构下主节点宕机时,锁的「数据同步延迟」+「主从切换」导致的锁有效性问题)

方案 1:使用 Redis Redlock(红锁)—— 分布式锁的标准解决方案

Redlock 是 Redis 官方推荐的解决主从锁丢失的方案,核心逻辑是「多实例独立加锁,超过半数成功才算锁生效」,彻底摆脱单主从架构的同步问题。

实现逻辑

  • 部署至少 3 个独立的 Redis 主节点(无主从关系,避免单集群故障);
  • 加锁时,向所有 Redis 节点发送SET key value NX EX命令;
  • 只有「超过半数节点(≥2 个)加锁成功」,且总耗时≤锁过期时间的 1/3,才算最终加锁成功;
  • 解锁时,向所有节点发送 DEL 命令删除锁

9、噩梦的开始,发了个redis的源码压缩文件,要求在linux(mac)环境上实操,面试官更改了一些源码,跑不通了,需要自行在linux环境中编译redis源码,检查报错后,通过测试查出是哪些命令跑不通,定位到具体的源码文件,找出错误原因并修改源码后重新编译通过即可(总共五个错误,吭哧费劲半天搞定了一个,剩下的没时间就让面完有时间自己做了)

10、介绍redis RESP

11、代码题:用Java编写一个简单的RESP规则的编码器和解码器,包括且不限于简单字符串,错误,整数,批量字符串和数组,大约就是写五个函数,再封装一个concat函数(给我整蒙了,我寻思不都是力扣嘛)还好不难,但花了很多时间去理解这个东西,没见过,根本不知道想让我做什么,写了两个之后发现就是做字符串的拼接

12、写完让讲一下RESP对数组编码的思路,以及解码器的思路

13、如果让你实现redis的cs架构,你如何设计服务端的架构(脑子懵了,仿照MySQL的回答,面试官似乎很欣慰)

服务端(Server)                                │
│ ├─ 网络层:Acceptor(监听端口)+ Handler(处理连接) │
│ ├─ 协议层:RESP解码器(解析客户端命令)+ 编码器(响应) │
│ ├─ 命令层:命令解析 + 命令执行器(如SET/GET/DEL)    │
│ ├─ 存储层:内存哈希表(模拟Redis的键值存储)         │
│ └─ 连接层:连接池 + 超时管理 + 心跳检测
#日常实习#
全部评论
感觉似乎有点难啊
点赞 回复 分享
发布于 01-14 23:56 北京
让我想起了牛客和京东的面试官,也是一面,也是给我过了
点赞 回复 分享
发布于 01-13 08:45 广东
看着感觉好难
点赞 回复 分享
发布于 01-12 16:37 陕西
你这面的好晚啊
点赞 回复 分享
发布于 01-11 19:26 陕西
太难了吧
点赞 回复 分享
发布于 01-11 10:39 辽宁
至少这次面试也是一次能力的提升
点赞 回复 分享
发布于 01-10 15:41 安徽
RESP好难
点赞 回复 分享
发布于 01-07 17:38 云南
是游戏安全吗?
点赞 回复 分享
发布于 01-06 23:27 浙江
还有二面吗
点赞 回复 分享
发布于 01-06 11:48 山东
看呆了卧槽
点赞 回复 分享
发布于 01-05 19:34 浙江
恐怖如斯
点赞 回复 分享
发布于 01-05 18:46 陕西

相关推荐

2025.3.20下午3点1.面试官介绍业务2.自我介绍3.说一说布隆过滤器的实现,为什么用谷歌的布隆过滤器(轻量级)?,有没有看过他的源码?(没有)4.实习和区块链有关,对他了解吗?(做二次开发,没碰底层,简单介绍区块链)5.说一说简历里面写的oom问题?这里有用到jinfo等命令吗?(没有,比较简单的oom问题没用到这些命令)画火焰图了吗?(没有)?6.线程池使用的全过程?有监控过线程池吗?(没有)7.有没有解决过死锁问题?(没遇到过,但是看过很多解决方案)8.java锁的实现方式?9.分布式锁的实现方式?运用?(他说线程池经常配合锁一起用,没这样用过)10.Linux上出现很多time wait怎么排查(不会)11.三次握手四次挥手的过程中服务器的状态(不会)12.用过socket吗?(课设用过,他说那过)13.长链接用过吗?(没有)14.用的Docker版本多少?(不记得)15.Docker相关命令16.Docker底层是docker d还是container d(没听说过)17.Docker用的是桥接还是host(应该是用桥接,面试官:所以你只是会用命令但是并没有了解过底层是吧-对)18.进程、线程、协程的区别?进程间的通信方式?还知道其他的吗,比如java机这种?(没听说过),有使用过共享内存吗?(没有)19.所以没有手写过协程之类的是吧?(没有)20.他说给了个简单的Sql执行-sql语句:select A.a A.g from user where a=1,b=2 group by g 有两个索引(a,b,c)和(a)他会走索引吗-会吧(答错了,他说有group排序就不行,但是查了发现a,b好像确实还是用到索引了,要是联合索引包括g,group也会用到索引)算法:手撕LRU(让我看完题目问我思路,说了双向链表或者大顶堆,问我多久能写完,想了一下自己也不太清楚什么时候能搓完,他说java搓大顶堆挺耗时间的,那换一道,结果换了没写出来,太菜了)面评脏
查看17道真题和解析
点赞 评论 收藏
分享
评论
14
48
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务