面...面筋!软滑Q弹!2024秋招个人面经汇总
一.网龙——游戏客户端开发(已挂)
- 一面:技术面试(过)
- 自我介绍
- Unity和虚幻引擎的区别
- 问项目——如何设计接口、如何制作关卡设计器等
- C++部分
- std::vector和std::queue的区别:std::queue是分段连续的
- C++会默认为类生成什么函数:注意移动构造和new、delete
- 反问环节
- 总结:面试官比较和善但未开摄像头,问题难度总体不大,几个小时之后通过了
- 二面:技术面试+HR面试
- 自我介绍
- Unity和虚幻引擎在开发体验上的区别
- 问项目
- 解决的最大的问题是什么:回答能够实现不断迭代需求且不会产生耦合,这个回答影响了面试官后续的提问
- 当需求不稳定且不可控时如何在程序上保持可控:不会,但面试官说这是加分项
- 怎么用虚幻引擎的AI系统IGenericTeamAgentInterface实现伪装系统,即自己被友军和敌军识别为友军,但自己的友军仍会被敌军识别为敌人:不会,面试官说这个问题只是为了启发我需求的变化是不可控的
- C++部分
- 列举一些STL容器:vector,list,stack,queue,unordered_set,unordered_map,set,map
- vector和list的区别:底层实现分别是数组和链表,vector有随机访问迭代器而list没有
- 数组和链表的优缺点:回答链表无法排序,这个回答影响了面试官后续的提问
- 如何给链表排序:面试官说这个问题是想要启发我数据结构的选择是考虑到效率高不高,而非考虑能不能做
- 算法部分
- 给定非负整数,如何判断是否是2的整数次幂:题目很简单但我想复杂了,被面试官提示(T_T)
- 面试官建议多刷一点算法(暴击)
- HR部分
- 游戏开发是否是自己课外学习的内容:是
- 为什么想走游戏道路:从儿时经历方面回答
- 在这么多制作游戏的经历中,认为自己更擅长程序还是策划:程序,从个人优势回答
- 为什么想去沿海城市发展(网龙公司在福州):希望能有更好的见识,并且愿意在沿海地区长期发展
- 反问环节
- 总结:面试官非常好且很有耐心,具有启发性,但由于未开摄像头且面试官网络信号差而降低了面试体验,个人感觉没有发挥好,运气好可以通过,运气不好大概率挂(T_T)——更新:已挂(9.27)
二.多益网络——游戏客户端开发(已挂)
- 一面:HR面试(挂)
- 自我介绍
- 询问实习经历,包括业务内容和感悟
- 是否了解过公司,了解过什么
- 关于产品:了解过公司的游戏产品,反问为什么没有玩过,回答全心全意准备秋招,没有时间
- 关于其他方面:猜测可能是关于网络上对于此公司的负面评价,回答不是很喜欢关注网友们的七嘴八舌,因为真假难辨(个人不给出明显的倾向)
- 为什么不留在实习公司,是否未通过实习考核:尽量回答得高情商
- 对于找工作最看重的是什么:尽量不回答薪资,因为此公司开的工资较低
- 是否接受加班(委婉地):非常重要!回答不接受一定挂,回答接受可能挂
- 核实身高体重(???????离谱)
- 观点题回答部分
- 为什么认为世界上大多数事物都是不公平的:个人从相对公平和绝对公平的区别回答
- 为什么认为宠物狗不该在小区里被禁止:个人从动物是生命的角度回答
- 反问环节
- 总结:面试官的面相透露出的情绪不是很友善,耐心值不高,反问环节拒绝回答一些常规问题,周末结束后挂
三.网易互娱——游戏客户端开发(已挂)
- 一面:技术面试(大概率挂)
- 无自我介绍
- 询问实习经历,其中最具有挑战性的、值得一说的工作是什么
- C++部分
- C++程序从代码到.exe中间发生的过程
- std::map和std::set
- 这两个容易的底层数据结构是什么:红黑树
- 红黑树的最坏查找效率是O(logn)吗:是
- 指针和引用的区别
- 虚函数的实现原理、内联函数不能是虚函数的原因:前一个问题的答案是虚函数表,后一个问题的答案忘记了
- std::shared_ptr和std::weak_ptr的区别
- C++内存分布
- 全局变量和静态变量是否存储在一个区:都在全局区
- 局部变量和静态局部变量是否存储在一个区:一个在栈区,一个在全局区
- 静态局部变量会被初始化几次:一次
- 为什么相较于switch更推荐用if-else:不会
- 数据结构部分
- 在一个游戏场景中有非常多个敌人对象,如果敌人距离自己太近就要显示敌人身上的UI控件,每一帧遍历所有敌人的距离计算量太大且没有必要,如何优化计算量:多级队列可以适量优化计算量但面试官认为不是最佳答案,最优解是世界分区,将场景分成多个网格
- 单链表如何判断是否有环:哈希表或快慢指针(https://www.nowcoder.com/share/jump/4995603211693970224972)
- 哈希表如何解决哈希冲突:链地址、开放地址、再散列
- 堆排序和快速排序的时间复杂度区别:考虑最坏情况(一个是O(n^2),一个是O(nlogn))
- 操作系统部分——从这一部分开始接触到了一些没听过的名词,因此记忆丢失较为严重qwq
- 静态链接库和动态链接库
- 各自的优缺点
- 速度快慢
- 线程池
- 如何在写代码前确定大致线程的个数:不会
- 线程的数量应该和什么有关系:不会,只因!
- (记忆丢失,也可能没有丢失,看我这部分基础一般就没咋问了TAT)
- 计算机网络部分
- TCP和UDP
- 为什么TCP的挥手比握手多一次:只有在服务器在接收到FIN时没有需要发送的数据时才会合并发送ACK和FIN转而变成三次挥手
- TCP和UDP的区别
- 是否接触过KCP:没有
- Socket的头部由哪些变量确定:忘记了,只因!
- (记忆丢失,也可能没有丢失,看我这部分基础一般就没咋问了TAT)
- 算法部分
- 给定圆心的坐标和圆的半径,设计一个随机生成点的算法,使其能够在圆内生成均匀分布的点:不会,只能生成不均匀分布的点,只因!(更新:某扣478题)
- 反问环节
- 总结:面试官态度较为敷衍,加上自身八股文基础薄弱和HC少,大概率要挂——更新:已挂(9.11)
四.上海域起网络——游戏客户端开发
- 一面:技术面试+HR面试
- 自我介绍
- 是否学习过lua:没有
- C#数据结构部分
- 栈和队列的区别是什么
- 哈希表如何解决哈希冲突:老问题了,参考本文——三.1.d.iii
- C#的HashTable存储的是什么类型
- C#的List和ArrayList有什么区别
- C#的List是如何扩容的
- 什么是闭包函数
- 设计模式部分
- 观察者模式的应用场景
- 状态模式的应用场景
- 单例模式的应用场景
- 迭代器模式的应用场景
- Unity引擎部分
- Unity如何在编辑器里查找Asset
- 对象池的应用场景
- 项目中提到的动画系统如何实现:我并没有实现一套自己的动画系统,而仅仅是对Unity的动画系统进行了一层封装
- 什么是协程
- 协程和线程的区别
- 有无使用过多线程:在C#中没有,在C++写过
- 如何存档(json和二进制文件)
- 如何实现数据表读取
- 计算机网络部分
- 用对话模拟TCP的三次握手和四次分手(什么鬼,为啥要叫分手,面试当场绷不住了)
- 项目中和游戏服务器开发成员合作经历以及使用API:以WebRequest的Post为主
- HR部分
- 户籍和现居地
- 为什么要学习Unity和虚幻两个引擎:Unity用来参赛
- 游戏开发是否是自己课外学习的内容:是
- 是否介意入职后使用的引擎和公司的base:Open
- 是否愿意提前实习:是
- 意象薪资
- 为什么不留在实习公司:老问题了
- 找工作最看重什么:不要说不加班
- 反问环节
- 总结:本人是游戏引擎双修选手,但由于几个月没接触Unity,部分细节生疏了,好在影响不大,大概率可以通过
五.腾讯云智——客户端开发
- 一面:技术面试
- 自我介绍
- 设计模式部分
- 在实习期间用了什么设计模式:工厂模式、适配器模式、观察者模式、代理模式、状态模式、迭代器模式
- 工厂模式的应用场景
- 手写抽象工厂模式
- 计算机网络部分
- 简述TCP的三次握手和四次挥手
- 为什么是四次挥手:有点生疏了,只因......
- 有无了解过网络框架:没有,个人项目经验均未涉及服务器
- C++部分
- virtual的作用是什么:好像没有回答出最好的答案
- 虚函数是如何实现的
- static的作用:局部变量、全局变量或函数、类成员变量或函数
- 可不可以在static成员函数中访问非static成员变量:不能直接访问
- std::map和std::unordered_map的区别:一个是红黑树,一个是哈希表
- 数据结构部分
- 什么时候用红黑树,什么时候用哈希表:当需要保证序列有序时用红黑树,当需要很高的查找效率时用哈希表
- 两种map的key是否可以重复:不可以
- 数组和链表的区别
- 链表插入元素的最坏时间复杂度:没完全理解面试官的意思,插入节点之前可能需要查找插入位置,所以最坏是O(n)
- 算法部分
- 某扣第2题变式,给定两个非空的链表,表示两个非负的整数。它们每位数字都是按照顺序的方式存储的,并且每个节点只能存储一位数字,请将两个数相加,并返回一个表示和的新链表,并自己处理输入输出:想用stack但被面试官打断了,最后使用逆转数组的方式解决,输入输出格式和本人编写代码在下方
- 反问环节
- 总结:是一位女面试官,人很好,十分温柔,奈何本人基础薄弱,算法题折腾了很久(大约35分钟)才做出来,好害怕挂了TAT——更新:已挂(9月15日)
输入:[1, 3, 6, 8], [9, 4, 3] 输出:[2, 3, 1, 1] 解释:1368+943=2311 输入:[1, 2, 3, 4], [9, 0, 0, 0] 输出:[1, 0, 2, 3, 4] 解释:1234+9000=10234
/*struct LinkedNode { int val; LinkedNode* next; };*/ class Solution { LinkedNode* reverse(LinkedNode* head) { if (!head) { return nullptr; } if (!head->next) { return head; } LinkedNode* curr = head; LinkedNode* next = head->next; LinkedNode* prev = nullptr; while (curr) { curr->next = prev; prev = curr; curr = next; if (curr) { next = curr->next; } } return prev; } public: LinkedNode* calc(LinkedNode* headA, LinkedNode* headB) { headA = headA->next; headB = headB->next; headA = reverse(headA); headB = reverse(headB); LinkedNode* nodeA = headA; LinkedNode* nodeB = headB; LinkedNode* res = new LinkedNode{-1, nullptr}; LinkedNode* node = res; int bit = 0; for (; nodeA && nodeB; nodeA = nodeA->next, nodeB = nodeB->next) { int sum = bit + nodeA->val + nodeB->val; bit = sum / 10; sum %= 10; node->next = new LinkedNode{sum, nullptr}; node = node->next; } for (; nodeA; nodeA = nodeA->next) { int sum = bit + nodeA->val; bit = sum / 10; sum %= 10; node->next = new LinkedNode{sum, nullptr}; node = node->next; } for (; nodeB; nodeB = nodeB->next) { int sum = bit + nodeB->val; bit = sum / 10; sum %= 10; node->next = new LinkedNode{sum, nullptr}; node = node->next; } if (bit) { node->next = new LinkedNode{1, nullptr}; node = node->next; } res = reverse(res->next); return res; } }; //main.cpp int main() { std::string linkA, linkB; std::getline(std::cin, linkA); std::getline(std::cin, linkB); LinkedNode* headA = new LinkedNode{-1, nullptr}; LinkedNode* headB = new LinkedNode{-1, nullptr}; LinkedNode* nodeA = headA; LinkedNode* nodeB = headB; for (const auto& chA : linkA) { nodeA->next = new LinkedNode{chA - '0', nullptr}; nodeA = nodeA->next; } for (const auto& chB : linkB) { nodeB->next = new LinkedNode{chB - '0', nullptr}; nodeB = nodeB->next; } Solution* sol = new Solution(); LinkedNode* res = sol->calc(headA, headB); for (LinkedNode* node = res; node; node = node->next) { std::cout << node->val << " "; } }
最后附一下鄙人的简历可供参考(双非本,其实没啥好康的,评论区有个朋友想要了解一下就给放粗来了,轻喷QAQ)
此文章会持续更新,面试题回答得错误、不准确以及不会的地方希望且欢迎大牛们批评指正!
2023年9月27日
#面经##24届软开秋招面试经验大赏##悬赏#