人生第一次面试的记录与复盘

人生第一次面试的记录与复盘
Senolytics今天,我的第一次面试告一段落。很可惜,挂了。想在这里记录一下,写些有的没的吧。
投递简历
大三的寒假突然很有一种使命感,觉得再不找实习人生就完蛋了,满脑子想的都是实习。实习!必须实习!抱着这样的想法把寒假摆没了,腾讯提前批也没投,什么都没投,不知道在干什么。
这学期开始之后,陆续投了一些简历,但是杳无音信,大概人家根本都不 care 我这种摆子吧。唯有腾讯速度最快,2 月 28 日投完的简历,两天后就有面试通知,还是有点感动的。
说来也挺奇妙的,原本是在什么后端开发前端开发一通纠结,然后鬼使神差地点进游戏客户端开发一看,诶好像要求不是很高的样子,临时起意爆改简历投递一气呵成。然后就是接下来的故事了。
一面:2025/3/10
几百年没写 C++了,在这之前紧急补了一下 C++的八股
Q: 单例的构造函数用 public, protected 还是 private
A: private,避免外界直接构造一个新的对象
Q: 这样的一个结构体占内存的大小
1 | struct{ |
A: (把各个字段的大小加了起来)不知道有没有内存对齐相关的问题(怎么能不知道啊混蛋)
Q: Awake 和 Start 哪个优先被调用?Awake 一定会被触发吗?
A: Awake 优先;就我目前的理解来说,是一定会被触发的(应该是吧,除非附着的游戏物体一直是 inactive 的)
Q: 说说对 C# GC 的了解?
A: (背诵巨硬官方文档)
Q: (基于上一个问题)内存中堆和栈的区别?
A: 堆用来存放动态申请的内存,栈用来存放局部变量
Q: (基于上一个问题)声明一个 int,它是存在栈里还是堆里
A: 看它的位置吧,如果是局部变量就是存在栈里,如果是类似静态成员变量那种就是在堆里(明明是在静态存储区里)
Q: malloc free new delete 区别;如果 free 一个类,会调用析构函数吗
A: (一通扯);不会
Q: 多线程了解过吗,如何保证线程安全?如何解决死锁?
A: 像在 C#里可以加锁;然后我就在寻思 C#的 lock 到底会不会导致死锁,好像不会吧,会吗?于是支吾了半天没回答
Q: 数组链表区别
A: 内存分布;增删改查复杂度
Q: 讲一讲三种智能指针
A: 纯背
Q: 字符串拼接的操作有哪些?直接进行字符串相加有什么不好的地方?
A: 讲 C#的字符串操作(光记着内插都忘了还有 Format 了);每次相加都会存储临时对象,频繁操作影响内存
Q: 手撕:检测括号合法性,同时括号之间有优先级,例如[]
不能在()
内
Q: 了解过渲染相关的吗
A: 没有
反问环节,问了游戏是什么类型的,回答是 Moba 游戏。没问具体是什么,因为我其实完全没玩过 Moba,要是问了又不知道就不太好了。然后问了使用的引擎,是 Unity。
一开始挺紧张的,但是看到面试官也年纪轻轻甚至有点紧张的样子,感觉像是被迫营业的打工人,于是就没那么紧张了 x 刚面完感觉还可以,第二天复盘的时候就发现很多其实答得并不好,但是居然还是过了。
二面:2025/3/13
二面的面试官看起来就老练很多,感觉就像是项目里比较高层次的负责人。一上来就说明白了项目组是做 LOL 手游的。
Q: 说说对 Unity 架构的理解?为什么要这么设计?
A: 把功能拆分成了组件/脚本的形式,而物体只是承载这些组件的,这样主要是解耦,代码结构会比较清晰良好,也易于拓展
Q: 说说 C++、C#、Java 这三门 OOP 语言有什么不同之处
A: C++没有抽象类、接口、GC;Java 没有值类型(除了基本类型有待商榷)
Q: 说说如果前端的并发数量很高,该怎么处理来自不同用户的请求
A: 在不同服务器上搭载服务,然后做一个反向代理
A: (虽然做过了,但是面试的时候是自己处理输入输出,面试官给的还是力扣形式的输入,导致我一下子不知道怎么处理。后来面试官表示不要纠结输入输出,让我讲一下思路就放走了)
Q: 说说多线程中都有哪些锁,它们的应用场景
A: 互斥锁、信号量。但是操作系统实在有点忘了,答得不清不楚的
Q: 说说从用户点击到角色做出行动这个过程中都经历了什么
A: 一开始说的很简单,组件 Update 捕获到输入然后进行对应逻辑处理。面试官提醒我们是网络游戏,我寻思那得看是什么同步方式,结果误判成了状态同步(倒)
Q: 说说数据从服务器发到用户手机上在网络的各个层次上都经历了什么
A: 一开始不知道该从何讲起,后面面试官引导从 IP 传输、公私网切换等角度进行叙述。但是还是叙述的挺烂的。
Q: 说说路由器如何决定链路转发
A: 两种方式:由一个中心来全局决定或者各路由器之间交互来实现(一个是 Dijkstra,一个是距离向量,当时想到了但是没说)
Q: 说说内存池设计的时候要注意什么,尤其是在内存小、性能有限的设备上
A: 线程安全、避免内存碎片、内存分配尽量连续(然后面试官倒是讲了挺多,比如对内存小的设备,在内存释放上可能可以采用一些激进的方法,如某个内存过了指定时间没有被使用就直接释放)
反问环节,面试官表示我们可以深入探讨一下,然而我已经大脑空空,只问了项目组是否会经常涉及到底层设计和对引擎的修改就没了。本来想问如果二面过了还有没有技术面,但是我知道我铁是过不了了。
总结
原来觉得面试干嘛要考八股真没意思,二面完反而觉得还是多来点八股吧(bushi)二面真的跟我预想的完全不一样,几乎都是情景题叙述题,我一是表达能力不太行二是短时间无法有效思考三是基础知识确实不扎实四是业务经历实在缺乏于是最终大寄特寄。
确实不能指望第一次面试能有多好的结果,尤其面的还是大厂。但收获也是挺多的,算是给我怎么准备面试重新指了个方向。可是缺乏的还是太多了,过去有多摆现在的差距就有多远。一时间很难补上来,只能希望努力的同时还能被运气眷顾吧。