字节朝夕光年ue4客户端实习面经

1.自我介绍blahblah

2.什么时候能实习,能一直实习不?下学期就要回学校吗?(貌似是想招个实习生一直实习),我跟他说还要准备秋招呢,面试官说同学你知不知道你一直实习的话后面是会给你发转正offer的(感觉在给我画饼?毕竟我是不信的,hc啥时候这么多了?)

3.玩过什么游戏?(我说泰拉瑞亚,邪恶冥刻),面试官说一个没听过,因为他们那个项目《晶瞳》貌似是二次元手游,所以他又问我有没有玩过手游,我说我不玩手游。

4.什么是静态多态和动态多态?(函数重载和虚函数)

5.int a[10],int*p=a,问p[0]和a[0]哪个访问更快?(我说这就是间接寻址和直接寻址的区别,数组在编译器看来就是一个地址,而指针是地址的地址,所以指针多了一次访问指针变量本身的步骤,这个看看汇编就很容易看出来,所以肯定是数组更快)

6.虚函数能是内联函数吗?(看情况,看是动态绑定还是静态绑定,比如直接对象调用或者构造函数里调用就是静态绑定,指针引用调用就是动态绑定,通过域名访问符::也是静态绑定,静态绑定就有可能成为内联函数,因为他在编译期就确定了类型)

7.c++如何管理内存泄露,我说智能指针,跟他说了智能指针引用计数的原理,他问我计数器是什么时候释放的(这个我说的当计数器为0的时候),他又问我那为啥计数器为0的时候weakptr还能访问usecount?这个我当时没回答出来。大家都知道shared_ptr底层是由一个计数器来实现引用计数的,这个计数器也是通过new创建出来的,那么有个问题出来了,我此时知道引用计数为0的时候就该释放我所持的那个对象了,这个问题的本质就是问:对象我知道啥时候要释放了,那计数器啥时候释放呢?那我是不是还得加一个计数器来实现?答案就是这样,其实这个计数器有两个计数,一个叫shared_count,一个叫weak_count,我们都知道weak_ptr是能转换成shared_ptr的,它实现的关键就是这个weakcount,大体结构如下

struct Counter
{
	atomic<int> shared_count;
	atomic<int> weak_count;
};

template<typename T>
class SharedPtr
{
	T* object;
	Counter *  counter;
};

template<typename T>
class WeakPtr
{
	T* object;
	Counter* counter;
};

void test()
{
	SharedPtr<int> s1,s2;
	WeakPtr<int> w1;

	s1 = s2;// 如果是两个SP,则导致 shared_count++
	w1 = s1;// 导致weak_count++ ,当然这里还会导致原来的计数器weak_count--,当shared_count和weak_count同时为0的时候,释放计数器
}

8.无序map和map的区别(红黑树和哈希表)

9.移动语义(大伙都知道的就不详细说了)

10.内存对齐,然后我说有没有位域占位,面试官问我位域是啥?我想让他来问我位域对齐的东西的,这玩意儿在ue里面到处都是,结果好像面试官没理睬我。

11.函数的三种调用方式?(我只说了_cdecl和_stdcall,前者是在被调用的函数里面进行栈平衡,后者是在调用的函数里面进行栈平衡)

12.指针和引用的区别(从底层来看它俩没啥区别,引用就是一种被限制的指针,实际上传指针和传引用都是将地址入栈,后面在函数里直接操作的都是变量的地址,当然使用性质区别还是挺大的,比如const引用会创建临时变量,还有引用坍塌这些东西。。。)

13虚继承为了解决什么问题?它是怎么实现的?(菱形继承,会将虚基类的成员放到内存布局的最后面,当然vc是这样实现的,虚继承也是会多一根指针,这根指针会指向一个数组,这个数组存储的是虚基类在该类中的偏移量,当访问到虚基类的成员变量的时候会先去访问这个偏移数组,再偏移到虚基类的数据成员,跟虚函数表一样存储在只读区)

可能是因为我简历上写了对c++基础有够深的理解和掌握,然后面试官一直问我c++,接下来就是ue的一些东西了。

14.ue4的root motion?(没回答出来)

15.ue4的客户端和服务器的交互方式有哪两种?(我只说了rpc)

16.remote_role有哪几种?(权威,自主代理,模拟代理)

17.给你10000个数,怎么快速找到最大的前10个数,刚开始没回答出来,本人的算法思维确实很弱(力扣刷题不到100),他提示我说你知道哪些排序,我说快排和堆排比较熟,然后我就感觉这个就是个堆排,面试官说然后怎么做,我还是没想出来,面试官直接说了,先选十个数出来,然后进行建堆,他说大根堆还是小根堆?我说小根堆,小根堆每次都能从这里面剔除最小的一个出来,这样全部遍历完过后就是最大的十个数了。

18.出了个算法题,很简单,就是合并重叠的区间,可惜我在那种情况没写出来,因为面试官给我的感觉就是很急,他说时间不多了,等会他要去开会(我估计多半就是凉了,毕竟你开会跟我说干嘛😂,就是不想浪费时间了),然后他一急我就开始急了,我心理默默对自己说,你先别急,后面秋招有的你急的。然后面试官一直告诉我该怎么做那个题,最后在他的一步一步的引导下,那道题他也没让我写了。

19.最后反问环节。我说我整个面试的表述清楚吗(因为面试过程中面试官有时候没太明白我的回答,说白了就是面试经验太少了,一下子紧张了说了太多,第一次面试还是腾讯公开课那次,当时问的问题也很简单跟这次一样,但是当时没考算法题,所以我过了那次面试),他说你是重庆的,有点方言味儿,其实我知道就是想委婉的说我表述得不清楚😂

总结就是自己刷题刷的太少了(真的太重要了),然后项目经历也不是很够(想做游戏就特么该直接学ue或者unity去做!),本科就去啃了个c++和一些八股,学的东西杂,图形学,dx12都学过(这玩意儿我暑假花了两个月还是没入门),实践动手的太少了,一直想着自己写个小型引擎。打算考研深造去了,研究生好好搞搞项目和刷刷题吧(理想状态下,说不定会被科研逼疯),我知道肯定很多朋友会说到时候更难,但是我真的很难接受现在的自己,一身理论却少有实践,希望我本科这些东西没有白学,希望有一天真的能灵活的运用起来,也很感谢字节面试官给我这个机会,毕竟我如果是面试官的话我肯定不会接受现在的自己。

最后祝各位牛友在这一年中都能拿到自己心仪的offer,今年我感觉会比去年好很多的,因为我那种没实习经历没竞赛的简历都能进面。

全部评论
做游戏不建议读研,除非搞图形学,可以深造
3
送花
回复
分享
发布于 2023-03-25 12:54 广东
比较好奇红黑树会问的深么
2
送花
回复
分享
发布于 2023-04-10 20:38 台湾
滴滴
校招火热招聘中
官网直投
请问楼主投递的岗位是base哪里的呀
1
送花
回复
分享
发布于 2023-03-17 21:17 山东
感谢楼主分享hr联系我的时候也是说的北京那个项目组
1
送花
回复
分享
发布于 2023-03-18 16:49 福建
我投的校招服务端,上周一天一面结果三面没过,给我感觉是想找学历高而且技术栈特别match的人
1
送花
回复
分享
发布于 2023-03-18 21:05 广东
弱弱问一句,那个找最大的十个数,大根堆是要快一点吧,毕竟大根堆只需要找10次,而小根堆一直剔除最小的数,那么就需要剔除10000-10个数,效率上来说大根堆好点。当然这个题也可以用快速选择来做,原理是快速排序。最后也提下,这个面试题其实比较常见了,叫Topk算法
1
送花
回复
分享
发布于 2023-03-24 10:52 湖南
刊误, 11题_cdecl和_stdcall反了
1
送花
回复
分享
发布于 2023-04-12 15:53 江西
大佬tql
点赞
送花
回复
分享
发布于 2023-03-19 09:46 广东
感谢分享,lz很厉害了,只不过算法题没写出来有点可惜,可以面试前刷一刷CodeTop,继续加油吧,祝好运
点赞
送花
回复
分享
发布于 2023-03-19 10:18 浙江
想问一下有笔试吗?
点赞
送花
回复
分享
发布于 2023-03-20 09:23 广东
楼主c++学的很不错了,但问的感觉也不难,cpp primer和effective cpp搞懂了就差不多了;算法确实差的有点多,但是刷个300道题不到一个月,也很快就能补上来 ps:为什么没问ue5和计算机图形学那些?
点赞
送花
回复
分享
发布于 2023-03-20 16:55 北京
有没有朝夕光年校招的小伙伴呀 hr面后一周多没消息了 麻了
点赞
送花
回复
分享
发布于 2023-03-24 15:10 上海
题主有后续吗
点赞
送花
回复
分享
发布于 2023-04-11 16:35 四川
更正:函数调用方式那里写反了,然后虚基类表和虚函数表一样都存放在常量区
点赞
送花
回复
分享
发布于 2023-04-17 01:12 重庆

相关推荐

OC了,感谢牛友们的面经帮助,散点面经回馈一下3.25投递,3.29下午打电话约了一面一面55min(4.1)计算机基础部分1.&nbsp;什么是栈内存,什么是堆内存,有什么区别?2.&nbsp;刚你提到了栈的内存比较小,那你说明一下什么是栈溢出3.&nbsp;为什么堆的分配比较慢?这个问题有没有什么解决方案?4.&nbsp;游戏引擎有没有什么对内存的管理操作?5.&nbsp;堆空间只申请不释放会造成什么?(内存泄漏)如何避免(从编程语言的层面上解释)?(Java/C#&nbsp;内存管理GC,&nbsp;C++智能指针)6.&nbsp;你知道哪些智能指针?(unique_ptr,&nbsp;shared_ptr)?还有一个你知道吗?(没说出来,面试官提醒能解决循环引用的weak_ptr)7.&nbsp;栈的访问效率比堆高,你能解释一下吗?8.&nbsp;垃圾回收内存管理GC机制,能不能深入说一下底层如何实现?9.&nbsp;说一下什么是虚拟内存?存在的意义是什么?数据结构部分10.&nbsp;描述一下数组和链表的区别?各自的优缺点11.&nbsp;说明一下什么是二叉树手撕部分12.&nbsp;递归前序遍历二叉树写一个函数,输入是二叉树的根结点,返回它结点的前序遍历13.&nbsp;用BFS遍历树追问:DFS和BFS这两种遍历策略,一般用来解决什么问题?有没有什么优化方案策略?开放问题15.&nbsp;树这种数据结构在你项目开发中有什么应用?C++中有没有什么容器是用树实现的?16.&nbsp;说明什么是面向对象,有什么特点?17.&nbsp;C++中可以实现多态,请你从虚函数表的方面描述一下重载一个虚函数的过程?(往虚函数表,虚函数指针上扯)。虚函数指针占多大空间?(就是普通指针,32位机器4,64位机器8)拷打简历18.&nbsp;开发MOBA项目中遇到的最大难点是什么?19.&nbsp;FPS项目中,NPC巡逻的逻辑?你这种检测方法会把NPC背后的敌人也检测进来,有没有什么改进方法?20.&nbsp;简单说一下你了解的unity物理引擎?其他问题21.&nbsp;你平常玩哪些游戏多一些?STEAM上的单机游戏玩过吗?你CF玩得多,你觉得CF哪些功能做的不错?22.&nbsp;除了游戏开发,你还有哪些其他方面技术上的兴趣?23.&nbsp;你打过不少算法比赛,你觉得你的算法水平在你们校队能排到top多少?反问面试官人很温柔,聊起来也挺舒服的,面完二十分钟后官网就显示通过了
点赞 评论 收藏
转发
23 160 评论
分享
牛客网
牛客企业服务