近期游戏开发的笔面试Ⅱ
我的秋招还没结束,而且还得持续到十二月了。
以下是十月底到十一月底的笔试面试记录。除了华子,岗位都是游戏开发(或者叫前端开发啥的,就这意思)。不是时间顺序,随缘写的。
极致游戏笔试
27道选择3道编程,80min
- 选择什么都在考,c++,操作系统,数据结构,甚至还考了好几道数学题,甚至有一道给我很强的小学奥数题的即视感,做烦了乱选了
- 类似于路径总和Ⅱ(lc113)
- 括号的分数(lc856)
- 最长公共后缀(只是从lc14的前缀变成了后缀)
4399一面
纯KPI面。
二十分钟。自我介绍。随便问问项目细节,用了什么优化,最困难的是什么。最近有在学什么(我提到了c++,问我为什么要学这个。然后给我来了两个c++的问题:深拷贝和浅拷贝的区别;普通枚举和强类型枚举的区别)。性格有什么优点和缺点。现在学校那边是什么安排。投递过什么公司。未来1-3年的规划。
面试官说这是技术初面,以后如果有需要会联系我。无反问环节。那就是现在不需要呗,不需要你面我干啥?后来确实就挂了
极致游戏一面
40min。第一次遇到两个面试官
面试官自我介绍,然后我自我介绍
问的八股比较少
- 介绍两个C#的容器
- 字典的哈希是怎么实现的
- 哈希算法有哪些。让你自己设计哈希算法的话会怎么做
- C#的网络编程
- TCP和UDP的区别
- TCP粘包
主要是问项目的具体实现。为什么选择走游戏开发的路。甚至把我跟游戏无关的项目也问了问(Python爬虫,nlp。还问了如果爬取的数据规模很大,该怎么办)。
反问(项目组。base。工作强度。面试官也顺便问了我base的倾向和对加班的看法)
这公司是十月底面完的,两三周没消息,然后我发邮件问了HR,告诉我已经进了储备池。……
Garena笔试
- 20多道(不是25就是27道)不定项选择,大部分是操作系统和数据结构,少部分c++
- 1合并区间
- 2合并有序链表+反转链表
- 3重组数字,找到比原数字小的最大结果
2h。总的来说比较基础和简单,时间也很充裕。也是让我ak上了
华为
一天完成。线上。都追着问了项目(就是我的和软开无关的项目hhh)。聊得挺杂的,以下不完全。
- 一面:C#的GC,反射,序列化。错误和异常的区别。TCP三次握手。输入网址到网页显示的过程。快排的思想。快排为什么比冒泡快。笔试复盘。手撕有效的括号
- 二面:介绍几个C++的容器。指针。内存泄漏是什么,为什么会发生,如何解决。AVL树和红黑树。哪些地方用了红黑树。map底层如何用红黑树做的。TCP三次握手,为什么是三次,两次四次行不行。手撕两数之和
- 主管面:对华为了解多少。职业规划。自己的优势和劣势。(你说你兴趣在编程,为什么当初没有选计算机专业?)另外这个主管居然懂一些游戏引擎和渲染的东西,有点强。
可能真缺人吧,手撕如此简单。1145和25定律也是都应验了,丝滑入池。
Garena一面
二十分钟
一面一上来先简单问了下项目,然后就是三个场景题……每个场景题都展开了聊的。以下是场景题大意
- 大型多人在线的玩家信息同步策略,包括数据结构和算法设计
- 编译器中,脚本互相import了对方,导致重复编译,如何解决
- 10个玩家在副本中跑酷,选择帧同步还是状态同步
反问
广州途游
11.9电话询问我的情况,是不是不想做捕鱼,说广州途游那边有一个在研SLG项目,我有没有兴趣。于是约了面试,开启途游二周目
一面
26分钟。面试官没自我介绍也没开摄像头
自我介绍
- 讲讲BFS,如何实现的,复杂度是多少
- 介绍A*
- 帧同步和状态同步的区别
- 说说你知道哪些游戏是帧同步,哪些是状态同步的
- 在A*中,如果得到的路径全是拐角(像楼梯一样),设计一个算法在最后得到路径的时候优化这条路径让它平滑一些
- 了解Unity近几年的新技术吗?比如DOTS,ECS,Burst。简单讲讲
- 你做项目的这段时间你有什么收获和提升吗
- 如果让你从头再开始写这个项目,你觉得你有哪些需要改进的地方吗
反问(在研项目能再详细讲讲么。听说在研项目的工作强度一般都很高,是吗。我该如何提升游戏开发的技术)
两个小时后电话约二面
15min。面试官自我介绍是研发负责人,但是这一面几乎纯聊天,技术向的纯聊天
问项目。成绩如何?玩过什么游戏?怎么学的unity?了解图形学和渲染吗(此处讲了讲渲染流程)?写过shader吗?
……之后没几天挂了
Garena二面
35分钟。有点想到啥问啥的感觉
自我介绍
- 介绍一下你的项目
- 项目中敌人AI怎么做的?
- FSM具体怎么设计的?
- 状态之间怎么转换的?(我是硬编码的,后来知道了,最好的写法是解耦的)
- 知道或者项目用了什么设计模式吗?
- 项目中用的什么寻路?(A*)项目中的寻路单位之间有碰撞吗?(有)那各单位之间是如何躲避的?(我知道这应该是在问动态避障,但是解决办法只想得起来是叫RVO,具体是怎么做的忘了,所以临场只说了寻路选定一条路径之后会略微提高这条路径的代价,以此减小其他单位选择这条路径的概率,可以在一定程度上起到局部回避的效果)
- 场景:如果有很多玩家同场竞技,如何制作一个排行榜
- 介绍堆
- 向堆中加入新元素时的复杂度是多少?
- 堆一般是用什么数据结构在存储?(数组)
- 为什么堆用数组,而一般的树却常用结点?
- 场景:玩家抽奖,在24h后可以抽下一次,服务器需要在24h到时,向玩家发送通知,如何设计服务端的数据结构?(我答单调队列)
- 进一步:如果每个玩家下一次抽奖的时间不固定(24h变成任意时间间隔),又该如何设计?(我答优先队列。又问还有别的方法吗,思考了一会儿可能可以用哈希表)
- 进程线程的区别
- 进程通信方式
- Unity协程和线程的区别
- Unity协程是如何实现的
- Unity你还了解些什么?(答动画系统和渲染管线)于是问了渲染流程
- 智力题:12个乒乓球,用天平找坏的(还是第一次在面试中被问智力题。虽然我也知道这题很经典,但是真没想到会问到我头上,一直没有提前去看过标准答案,淦)
反问
字节一面
十一月我唯一一次的补录捞人,但也是我秋招至今最残忍的一次c++拷打
项目组是用ue,只能说可惜吧,把握不住机会,我c++确实不熟,技术栈全在Unity
自我介绍
- 你擅长什么语言(C#)我们项目组主要使用c++,所以我还是会问你c++的问题(……)
- 内存对齐
- 一个struct的sizeof的大小由什么决定
- 一个struct中char,int,double类型变量各一个,sizeof是多少
- 如果有三个char呢
- 如果是空的struct,里面什么也没有呢
- 继承与虚函数
- 讲讲虚函数
- 虚函数是如何实现的
- 虚函数表里有什么
- 虚表指针的大小是多少
- 父类和子类的构造和析构函数的调用顺序是怎么样的
- 如果在构造函数中调用虚函数会怎么样
- 如果子类完全没有重写父类的虚函数,那么有几张虚函数表
- 智能指针
- 有哪些智能指针
- unique ptr的特点
- shared ptr是怎么实现的
- STL
- 讲讲vector
- vector扩容时,什么情况下不会发生元素的复制?
- 讲讲map和unordered map的底层实现
- 算法
- A*有什么缺点?什么场景不适合用A*?
- 什么算法才能求出最短路径?
- 讲讲迪杰斯特拉的步骤
- OS
- 进程和线程的区别
- 线程的通信方式(不会,问能不能说进程的)
- 进程的通信方式
- 共享内存是如何实现的
- 共享内存下,进程是如何做同步的
- 场景:如何在游戏中实现一个人一边走一边打拳的动画
- 场景:场景里有很多需要倒计时的东西,如何设计实现倒计时
- 场景里有上千个倒计时,每帧都需要全部遍历?
- 如果很多都是短时间的,难以按时间长短区分?
- 项目有什么难点,是如何解决的
反问
确实是比较常见的C++八股,但是毕竟不太会C++,也没怎么准备,所以遗憾……
秋招是真的要结束了,现在主要在等两家公司推流程,其他的,就保持一下手感吧。还不能松懈……