碎碎念
这是我人生第一次面试, 因为无论是以前高中和大学, 我都没有参加过什么社团, 没想到能够这么顺利.
这里非常感谢实验室的几位师兄, 顺爷卢爷朋爷和翀哥的大厂经历给了我信心, 也感谢女朋友的鼓励陪伴, 瓦斯的复习面试和舍友的配合.
其实早在疫情的时候卢爷就怂恿我去投简历, 可能是因为我太怂了, 所以之前一直连简历都没有做. 直到来杭电交流, 逼着自己把卢爷的内推(再次感谢卢爷 整个过程都是卢爷在给信心)填了, 结果真没想到会收到面试通知. 在写这篇文章的时候状态已经更新为HR面了.
全部面试都是视频面试, 有可能是今年疫情的原因吧.
四面的面试官都很nice 第一次的面试体验非常好
一面
比较紧张, 专门出去开了个房来面试, 是在牛客网上面的, 面试官没有开摄像头, 他的声音挺温柔的, 缓解了我的紧张.
首先上午先让我在牛客笔试, 给了三道题.
- 第一题是简单的字符串模拟,
- 第二题是个裸三角dp题,
- 第三题印象深刻是个约瑟夫环(有坑).
- 在做完第二题的时候, 面试官突然说看我做得挺快的, 要不要加道题, 那肯定加, 第四题是个模拟题. 我当时卡在了第三题, 因为题目要求用链表实现, 但是一直TLE, 我和面试官留言说没有办法, 先把第四题A了, 后来我真的没有办法了, 用了数学公式把约瑟夫环A了. 第三题优化用了大量时间, 我怕面试官对我印象不好, 所以A完4题之后一直在做第三题, 最后的结果就是, 我发现了这题目有误, 给了数据范围根本不能用链表模拟做, 只能用数学做, 接着就给面试官留言这个问题.
(第三题可以在牛客上搜到 叫约瑟夫环进阶 题目有误 只能用数学推导做)
总的来说笔试没啥难度, 随便过.
后来面试官微信回我说收到回复, 然后说我做得不错, 然后约了下午聊一下.
- 上来先是自我介绍, 问了一下在学校的成绩, 排名什么的, 然后说这个作为参考下而已, 毕竟实习还是得看下在校学习情况怎么样的. (如实说了下)
- 问了我为什么要选择游戏开发这个岗位.(说了说自己做过的小游戏, 和游戏经历)
- C++: 你有看过STL的源码吗 (有); vector和map底层了解吗 (具体实现balabala); 那红黑树为什么比其他平衡树快 (旋转和其他调整的比较balabala).
- C++: 你知道怎么实现多态吗 (虚函数); 虚函数的原理是什么 (虚表); 虚表的具体实现又是怎样 (整个表结构答一下balabala); 期间插问了虚表指针内存模型放在哪.
- C++: 刚说了虚表的内存结构, 那还有其他内存分布吗 (5个内存模型);
- C++: 给我一段C的代码, 让我看看有什么问题 (有关指针的引用的问题 我一眼居然先看到他没写return 0 尴尬); 引申出来内存管理的问题 new和delete 有了解吗 (他俩实现的结构balabala); new 和 malloc的区别 (我答的就网上那几个区别); 面试官说还不够 (???) ; 被引导答出operator new() 是可以被重载的; 假如有个100万行的代码, 你怎么测试出他的内存泄漏的地方 (不会 说了几个蠢办法);
- C++: 问你空类给定一个结构体, 问你在32位系统下和64位系统下它的sizeof大小. (就内存对齐嘛)
- 算法: 我看你做题不错, OJ不说, 有在leetcode做过题吗 (很早就800+题了 现在只做周赛); 那就不用问你了, 都没意思 (??? 这都能跳过).
- 计网: TCP和UDP (balabala); 游戏里面怎么判断该用哪个 (猜测性地答了下); 面试官给我科普了像跑跑卡丁车那些闪现不是丢包是因为网络同步的问题
- OS: 记不得题目了, (他说出来我就直接说正在学这门课,不会)
- 杂: 图形学聊了下 (我不是引擎的 所以没说太多); 三角函数怎么算得快 (不确定答了个打表居然对了); 计算3d射线和球体和立方体判断相交 (没从数学上 答了大概逻辑思路);
- 杂: 设计模式有没有了解 (简单说了下); 游戏的一些实现逻辑 (举例自己玩过的游戏); 期间透露了他是天美的(其实我投的不是这个); 游戏引擎有没有用过 (cocos 正在学ue4); 假如有一本很厚的书你会怎么看呢 (从头到尾balabala前提是这本书好); 你怎么判定这本书好不好 (师兄推荐 找风评 先评估);
- 最后问了我实习的时间; 反问环节我问了下组里要什么引擎, 我的学习路线应该是怎样, 他给我推荐了游戏数学相关的书 (??? 我不是引擎); 最后说有消息就会有同事联系你
一面的时间大概是 1h30min笔试加上1h30min的面试吧.
二面
小插曲: 二面的面试官开始时候进错面试房间了, 大家都在互等了一下, 然后微信面试官找我, 我???
二面算是个聊天面吧(???), 没有太具体的问题. 总的面试时间也很短 大概40min.
- 自我介绍 (balabala)
- 你为什么选择C++ (??? 就随便说呗); 你觉得C++学习中遇到的最大困难是什么 (??? 继承);
- 你怎么学的面向对象 (??? C++ primer); 那只是语法吗? 具体的呢 (???项目经验 设计模式);
- 了解一下计网和OS的学习 (??? 如实聊)
- 你遇到的最大的困难是什么 (??? 有一题特难的线段树题); 我是怎么解决的(自己看 不懂再问人)
- 为什么师兄在光子, 不让他自己拉你去光子 (???); (后来知道, 面试官是想看我懂不懂借助外力)
- 你觉得游戏开发应该要具备什么能力 (游戏经验, 代码能力, 基础等); 你觉得你的能力够了吗 (从岗位要求分析balabala)
- 你一般是怎么学习的 图形学了解吗 (如实聊)
- 你是怎么学习线性代数的 (如实聊 看线代的本质)
- 反问环节,我应该学什么引擎, 他只说引擎都是相通的, 没有具体回答, 说组里的u3d和ue4都有
后来面试结束半小时后微信问了我什么时候能去实习, 我答了寒假 (后来卢爷说我应该说什么时间都可以, 因为有可能时间不合适就会把我丢去别的组)
三面
不大清楚有没有把我丢去其他部门或者组, 三面聊天挺开心的, 一共聊了1h左右吧
- 循例介绍一下自己, 问了下交流生的事情
- 有用过C++的多继承吗 (有); 会遇到什么问题吗 (菱形继承,虚继承balabala); 游戏的例子有吗 (装备啥的balabala);
- 都有什么继承方式呢 (一般都用public,还有private和protected); 用来干嘛的(改变继承过来的权限); 为什么你说一般public (忘了答啥了); 如果我硬要用其他继承呢 有例子吗 (举例破碎的装备强化后还是破碎的);
- C++的多态讲一下 (balabala); 虚表是每个对象一份吗 (不是 原因balabala);
- 怎么学C++的呢 有看过effective C++吗 (有) 那modern呢 (无 但跟侯捷网课学C++2.0)
- 那你有了解过C++的一些新的特性吗 (上来先说下新了解的C++20balabala); (再提了11 14的特性balabala);
- 你刚提到lambda表达式介绍一下 (介绍balabala); 使用中最大的问题是什么 (捕获balabala); 还有问题吗 (实现大概类似仿函数 所以值捕获多次调用会出现问题balabala);
- 那那个移动语义呢 (之前博客就有总结 介绍一下balabala); 还有什么应用 (??? 我懵了 答了个记忆中的完美转发); 完美转发是怎样你知道吗 (不知道); 为什么当时不了解呢 (这个我看过, 但是博客都很复杂 而且应用也不太清晰); 面试官放走我了.
- 了解函数的执行吗 (堆栈指针esp ebp寄存器怎么动的balabala); 内存对齐有了解吗 (又考了 一次性说完balabala); cache是什么 (定义balabala); 为什么要有 (成本balabala); 它和寄存器哪个快 (寄存器 原因balabala);
- 你知道引用计数和垃圾回收吗 (我引申出share_ptr的实现); 智能指针说说 (balabala) ; 问题 (循环引用); 解决 (weak_ptr);
- 内存碎片了解吗 (OS没学到 但有自己的理解); 说说看 (???靠 说了vector的底层扩容原理和倍数的选择, 举例2倍和1.5倍会对之前的内存有啥影响)
- 我们简单聊聊数据结构和算法吧, 你知道最快的基于比较的排序算法吗 (STL的sort的实现balabala); 那里面的快排的复杂度是平均复杂度吗 (是最优 平均是带个2的系数的吧?? 忘了); 那这个已经是最快的了吗 (已经是比较的复杂度的下界了);
- 了解哈希表吗 (); 冲突时候怎么办 (同key套链表balabala);
- 说几个你知道的最短路算法吧 (dijkstra floyd bellman-ford SPFA); 问了个SPFA的问题忘了是啥 (我答了判负环);
- 那你知道启发式搜索吗 (我居然刚没答这个) (有 A star search balabala); **那你知道评估函数吗 **(欧氏距离 曼哈顿距离 面试完朋爷说dijkstra也是特殊的评估函数 百度了还有切比雪夫距离); 那他们一定可以得到最短路吗 (是的 我之前看过证明); 那你还记得证明吗 (??? 我不会); 那一定需要最优吗 (不一定 游戏寻路算越快越好 允许误差); 那如果要你实现一个 怎么保证能最短呢 需要满足什么性质 (??? 不会 面试完朋爷丢给我性质 我太菜了);
- 你说说dp吧 (介绍一下dp balabala) (线性 三角模型 区间dp 树形dp balabala);
- 哈夫曼编码是干嘛的 (压缩balabala) (基于哈夫曼树balabala) (前缀不会重叠balabala); 为什么一定他们的前缀不会重合呢 (叶子的路径唯一balabala);
- 了解设计模式吗 有什么原则吗 (八大原则balabala); 单例模式 (饿汉懒汉线程安全balabala);
- 问了个线代的矩阵计算问题 我忘了是啥 (balabala); C++三角函数怎么算 (一面问过, 先泰勒展开,但是游戏打表balabala);
- 一个圆和线段怎么判断相交 (联立解方程balabala); 还有吗 (圆心和线段的距离与半径关系balabala); 哪个快 (写表达式balabala);
- 聊到DX113d魔方的项目 (balabala), 鼠标拾取实现 (射线balabala); 怎么表示3d旋转 (记录旋转点和角度balabala) (极坐标balabala); 碰撞检测 (不会 我cocos调库的);
- 聊了下游戏逻辑的实现 (卡牌游戏, 手游体力系统等)
- 问了我什么时候来实习 (寒假开始); 能实习多久 (2~3个月); 不是 是问你整个大三大四 (??? 不打算考研 都可以);
- 反问环节, 问了下塞尔达的望远镜实时渲染远处怎么做到的 (面试官说mipmap textureXXX技术 大概听懂了)
愉快结束了
HR面
待定 面完三面刚好周末 第二天早上状态就变成HR面了 HR放假 没有找我
许愿能过 (师兄说一般HR没有权力筛你的)
11.3
聊天很不错 聊了下我大学的生活
口头offer 一周内下来
总结
果然就是大厂, 面试的体验很好, 感觉自己得补补图形学 (??? 明明不是引擎岗)