灵犀互娱服务端实习-二面

编程语言
===
C++多态的核心原理是什么?答了运行时多态(继承)和编译时多态(模板)
构造函数为什么不能是虚函数?答:因为构造时虚函数表未初始化

项目
===
问项目中选用Kafka, Redis, Mongo的原因?
问一个项目(线上书城)的并发量多少?答:Spring Boot框架处理一部分并发问题,并且通过悲观锁防止超卖
面试官问是否是自主选择Kafka, Redis, Mongo这些数据库/中间件?答:按照应用场景选择对应的技术,举了使用Redis做书籍基本信息缓存的例子(将话题引导到Redis)
引导成功,面试官问初始时的数据是如何放到Redis中的?答:Cache Miss时回写缓存
面试官追问:Redis放不下怎么办?答:设计的时候没有考虑这个问题,但是我现在思考了一下,或许可以通过一些缓存驱逐策略(比如LRU),限制Redis缓存使用的内存量?
Kafka在项目中的作用?答了异步消息队列和具体的业务场景
面试官觉得在这个场景下使用Kafka和数据库的区别似乎不大?答:使用Kafka可以实现消息的订阅机制,如果将订单请求存数据库,前端需要一直轮询
面试官让我详细介绍了一个项目(LSM-KV相关),介绍完之后不断深挖,最后问了:如何修改跳表数据结构,使得可以快速查找到key指定排名的节点?没答上来,面试官建议去看看Redis源码中的跳表

场景题
===
设计游戏的任务系统:玩家杀怪、和NPC聊天、制作东西等行为会触发某些任务进度的修改或者任务的完成,要求快速查找到某个任务、快速删除、更新任务进度。你大概会使用什么数据结构作支撑?
思考了几分钟,追问:有限制玩家按照特定的顺序完成任务吗?面试官说:不用考虑那么复杂的情况
答了使用AVL树或者红黑树等平衡树存储任务的索引,与线性表相比,查找、删除、修改的时间复杂度都是O(logN),综合下来性能比较优
面试官追问:玩家杀怪的时候,系统如何知道杀怪是属于某个任务,并更新对应任务的进度?想了想:把不同的任务分放在不同的任务树上,比如杀怪事件都放在同一个任务树上、和NPC聊天的事件都放在另一个任务树上,这样杀怪事件发生后,只需要在杀怪任务树上查找,并更新相关任务节点的任务。

闲聊
===
简历上写的掌握的编程语言,是大学里教的,还是自己学的?
简历上写的项目是课程项目、还是自发参与的项目?想了解一下
为什么投递服务器开发岗位?

反问
===
介绍一下部门业务?

自评
===
第一次进二面,面试前更紧张,但是面试开始后就逐渐不紧张了,面试总时长50min左右,没有问算法手撕感觉有些没底,希望能进HR面吧。

== 4.11更新
灵犀上海hc太少了,二面后横向比较挂

好心的hr姐姐说帮我联系下广州总部,那边给的答复是倾向于招有转正的实习生,婉拒了🥲
全部评论

相关推荐

1. 数组和链表的区别2. 数组为什么顺序遍历快(回答因为数组在内存空间中是连续的? 问: 为什么连续的内存空间就快了呢?)3. 两个链表相交节点如何判断4. 获取链表倒数第K个元素5. 大根堆 和 小根堆有了解过吗? 如果用堆进行排序,怎么构建堆?堆顶元素被移出后,怎么调整堆?6. 快排 以及 时间复杂度7. 层序遍历如何实现8. 给一个表达式 , 如果判断表达式中的括号格式是否正确9. map集合的底层实现(我解释了go中的map集合底层) 10. 详细解释链地址法和线性探测法如何实现?11. 如何自己实现一个map集合 , 遇到哈希冲突如何解决12. C++中的智能指针是怎么实现的?13. C++是如何实现多态的?你知道虚函数表和虚函数的作用吗?14. Go语言的channel实现原理15. Go语言支持协程 , 讲讲协程, 线程 , 进程的区别16. GMP调度模型17.  TCP和UDP有什么区别?18. 如果服务端和客户端已经建立了TCP连接,但网线被突然拔掉,这个连接还存在吗?19. 如果一个进程被kill掉了,客户端和服务端之间的连接还存在吗?20. 怎么理解TCP的面向连接?TCP连接的管理具体是指什么?21. 绿盟项目 - 攻击模拟平台介绍.22. 如果使用Redis做消息队列,怎么保证消息的可靠性?如果消息丢失了,怎么处理?23. Redis的AOF和RDB两种持久化方式分别是什么?它们的原理和区别是什么?24. RDB快照写入时机?
查看24道真题和解析
点赞 评论 收藏
分享
评论
4
6
分享

创作者周榜

更多
牛客网
牛客企业服务