前言
由于之前跟着实验室做的项目还没结,自己还在当工具人,时间缩水,没有好好准备面试,结果面的很菜,当时就觉得自己凉了。没想到竟然通知我复试。
一面能有三四十分钟,二面二十分钟就差不多了,这也太弹性了吧。
建议大家还是尽早准备相关的内容,特别是不要太因为各种事情荒废时间,我现在就觉得在实验室当工具人太久了,该学的早学完了,又没空学/准备其他的,太亏了。
面试
初试(一面)
语言基础
因为我说我用C#比较多,所以主要问了C#的问题。
- C#的值类型和引用类型
- C#的int占用的字节数(这里因为很久没看答错了,应该是4个字节,long是8个)
- 只占用一个字节的数据类型(同上面,答成了char,事实上char是2个字节,byte才是一个字节)
- 使用类和结构体的区别(答不上来)
- (举例Unity)Vector3是什么类型,A赋值给B后,A改变了B还会变吗?如果是类呢?(我都答的不变,但是实际上类的赋值是引用,所以应该会一起变才对)
这里贴上C#的数据类型表
8位就是一个字节
数据结构
- 队列和栈的区别(还主动说起了应用,结果队列的应用就没说上来。其实排队类型的需求都可以用队列)
- 二叉搜索树如何搜索(刚开始人傻了在答深度和广度优先遍历,后来在面试官的引导下反应过来了)
网络
- TCP和UDP的区别(因为没看所以不会)这里附上找到的TCP和UDP区别博客、三次握手和四次挥手
- 还问我做过的游戏里没有用到过网络吗,我说我没做过网络的,都是本地的单机。(实在是惭愧)
图形学
- 问我知不知道比如平面切割算法之类的(我说我图形学不会)
操作系统
- 线程和进程的区别 进程的死锁(没答上来,只知道线程崩了进程会跟着崩)附进程和线程的区别
- Unity的协程是运行在主线程还是其他线程(我答的其他线程,但实际上是主线程,因为Unity本身不支持多线程)
查了一下,进程死锁是由于进程之间抢夺资源或者顺序颠倒导致的(等待等不来的资源)。这里贴一个介绍死锁的博客。
Unity
- 向量的点乘和叉乘(当时脑子突然空了,竟然答点乘可以计算距离…事实上是可以计算两个物体的前后方位的)
- (具体情境)场景内AB两个角色,如何知道A在B的左还是右边(我答的使用叉乘结果的符号判断)
设计模式
- 在做过的项目中,都使用过什么设计模式(我只记得用过单例模式)这里贴上菜鸟教程里的设计模式文档
- 在Unity中,如何为游戏实现撤回功能(答不上来,也想不出来要用哪个设计模式,实际上应该是用命令模式)
美术
因为说看我简历里有不少美术的,可以考虑TA,就问我了相关的问题
- 使用sp制作贴图的时候,都做过哪些类型的贴图(法线贴图之类的)
复试(二面)
语言基础
可能因为从一面的面试官听说了C#的事情,这一次就问我除了C#还有什么比较熟悉的语言,我就说了C++,于是就问我C++了。
下面是问的问题(可能有遗漏)
- 一个字节是多少位(8)
- 一个int占多少位(4*8=32)
- 64位系统是什么意思(没了解过,查了一下,是指令的处理支持64位,寻址也支持更长的地址,寻址能力更强)
- C++模板类,泛化和特化(有印象但是不知道,查了一下,泛化是通用性,特化是为了指定类型做特殊优化,而且还有个偏特化,是原本两个模板参数变成了一个,其中一个则是指定好的类型)
- 操作符重载,new能不能重载(问new的时候我说应该不能,但是告诉我说能)
- 父类与子类的构造与析构
- 声明一个局部变量,会存储到栈,如何让它存储到堆(答不上来,就说应该是有个关键字,现在想来,应该指的就是用new关键字)
- 学过Lua吗(没有学过,但是有这个想法)
数据结构与算法
- 背包问题(不会,查了一下好像是要做动态规划,附查到的文章链接:背包问题)还有动态规划
- 两个有序的int数组,如何算出他们的交集(当时我答的是双指针,两路归并的算法,别的没有想出来,查了查才明白确实有很多种方法,包括哈希表查询、在长数组中对短数组进行二分查找等方法)
- set个map的区别(不会,当时以为是都是键值对,现在才发现set只有键,键值是同一个)
设计模式
- 适配器模式(详见设计模式菜鸟文档)
图形学
- 问我了不了解图形学(不了解)
- 光栅化是什么(真的都不记得了,就说我只知道跟光栅有关的逐行、隔行扫描什么的,查了查才想起来光栅化是把图案对应和像素信息算出来)这里附一下图形学的渲染流程解释博客
美术
因为见我接触过shader,就问我shader一类的问题了
- 自己都做过哪些shader
- 如何实现一个描边shader(因为没做过,也没了解过,就老老实实说没做过,然后硬是想了一个算法)
想问面试官的
- 问了如果入职会接触到哪些项目和工作
- 竟然没问前边不会的问题(我也太傻了吧,只能自己查了)