杭州的真的慢,等了好久终于等到了面试
面试官很和蔼,问的一些问题也不是很难。
面试官让我先进行一段自我介绍
然后面试官开始根据我的自我介绍开始问我问题
1.你用unity做过哪些项目?
答:以前用unity做过一些小demo,然后现在正在做的一个****的项目。
说完之后面试官也没问我项目。
2.你对unity的shader熟悉吗,你有自己写过shader 材质什么的吗
答:写过一些简单的shader,大多是根据教程来学的。
3.你对****了解吗
答:我不是很清楚,知识盲区
没听懂说什么。
4.说一下渲染管线
答:就是将三维几何信息转换到二维剪裁空间的几何信息,最后将二维剪裁空间的几何信息光栅化,生成屏幕上的像素信息
接下来面试官开始问我c++内容
5.你了解inline吗?,他的优缺点是什么
答:inline在编译的时候,编译器会将内联的代码,复制到调用内联的地方去。
优点是在代码较为简短简单的情况下,如果频繁调用普通函数,会因为压栈出栈造成neir时间和空间的的消耗,内联可以优化这个问题。
缺点是当代码段长而复杂的情况下,使用内联会复制到调用的地方,编译之后生成的机器码会造成冗余
6.那inline和宏有什么区别
我主要说了一下红的定义,后面感觉和inline差别不大,有点模糊,就说了不是很清楚,现在想想可能是常量和代码段的区别
7.说的一下vector的插入和删除是怎么影响其容量的
我从vector的扩容机制入手,说到容量满时插入,会创建一个新的容量为之前两倍的数组,然后原来的元素复制到新数组,原数组删除。
但是删除的话并不会影响容量,所以要注意大量删除时,要记得收缩内存,以免造成浪费
8.一个结构体,有三个成员变量,一个为int,第二个为char,第三个为 static long ,请问这个结构的的size是多少
答:第一个是int,大小为4字节,后面是char 因为前一个是int,为了对齐内存,需要在两者中间填充三个字节,加上static long的8个 总共16个字节。
这里有应该答错了,static为共享变量,应该为8字节
9.手撕代码,让我用非递归的方法实现二叉树的翻转,也就是左右节点调换
太紧张了,写了20分钟,代码没写出来,然后我果断和面试官说了声抱歉,然后说我可以说一下原理,面试官让我说。
10.你说一下虚函数的作用。
答:是c++多态的基础,有虚函数的对象存在一个虚函数表,根据虚函数表访问对应函数,如果一个虚函数被override 那虚函数表对应指针会指向该函数,从而达到多态的结果
我记得是从一个问题引申过来的,忘了是哪个问题了
11.说一下Tcp的断开连接。
答:有四个步骤。
这个后面说的很隆通,我也不知道自己说的对不对,然后面试官问了一个我听不懂的问题,然后说了不知道,就没问了。
后面是提问环节
我问了两个问题:
1.说了一大堆,问题的核心是,怎么做到将美术,音乐,代码,以及游戏风格融合。
答:他说一个人深入研究一个就好了,我们没有必要面面俱到,如果想做到这个最好是在公司学习,个人学习是很难的。
2.也说了一大堆,核心是,我学校十分不支持游戏开发,你以前有没有遇到类似情况。
面试官可能没理解我的话
答:游戏公司看重你有没有游戏开发的经验,有游戏开发的经验的会有加分,你不用太过担心。
面试官可能真的理解错我的话
然后面试就结束了,可能还有一两个问题漏了,实在想不起来了。许愿offer
第一次面试,感觉结巴的问题没有出现,状态良好。自己准备了好多东西多没问,问的确实简单。下面附上我之前准备的知识点。
帧同步,状态同步
管线渲染
map底层实现,红黑树复杂度
1、TCP是面向连接的(在客户端和服务器之间传输数据之前要先建立连接),UDP是无连接的(发送数据之前不需要先建立连接)
2、TCP提供可靠的服务(通过TCP传输的数据。无差错,不丢失,不重复,且按序到达);UDP提供面向事务的简单的不可靠的传输。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性比较高的通讯或广播通信。随着网速的提高,UDP使用越来越多。
4、没一条TCP连接只能是点到点的,UDP支持一对一,一对多和多对多的交互通信。
5、TCP对系统资源要去比较多,UDP对系统资源要求比较少
6、UDP程序结构更加简单
7、TCP是流模式,UDP是数据报模式
堆和栈的区别:一.堆栈空间分配区别:
1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2.堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二.堆栈缓存方式区别:
1.栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2.堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三.堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
其实在使用的大部分场景下,两者是可以通用的,但是我们还是要知道他两的区别。
1、malloc与free是c++/c语言的标准函数,new/delete是C++的运算符。
2、他们都可用于申请动态内存和释放内存。new/delete比malloc/free更加智能,其实底层也是执行的malloc/free。为啥说new/delete更加的智能?因为new和delete在对象创建的时候自动执行构造函数,对象消亡之前会自动执行析构函数。
既然new/delete的功能完全覆盖了malloc和free,为什么C++中不把malloc/free淘汰出局呢?因为c++程序经常要调用c函数,而c程序智能用malloc/free管理动态内存。
new返回指定类型的指针,并且可以自动计算出所需要的大小
malloc必须用户指定大小,并且默然返回类型为void*,必须强行转换为实际类型的指针
C++内存补齐
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数
1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。
2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。
3:多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数的多态性。
4:多态用虚函数来实现,结合动态绑定.
5:纯虚函数是虚函数再加上 = 0;
6:抽象类是指包括至少一个纯虚函数的类。
纯虚函数:virtual void fun()=0;即抽象类!必须在子类实现这个函数,即先有名称,没有内容,在派生类实现内容。
根本区别:进程是资源分配最小单位,线程是程序执行的最小单位。 计算机在执行程序时,会为程序创建相应的进程,进行资源分配时,是以进程为单位进行相应的分配。每个进程都有相应的线程,在执行程序时,实际上是执行相应的一系列线程。
进程与线程的区别?
地址空间:进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。
资源拥有:进程之间的资源是独立的;同一进程内的线程共享本进程的资源。
进程与线程的区别?
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
进程与线程的区别?
线程是处理机调度的基本单位,但是进程不是。由于程序执行的过程其实是执行具体的线程,那么处理机处理的也是程序相应的线程,所以处理机调度的基本单位是线程。
进程与线程的区别?
系统开销:进程执行开销大,线程执行开销小。
c++11数据结构
c++ 11新特性 https://blog.csdn.net/jiange_zh/article/details/79356417
管线渲染
map底层实现,红黑树复杂度
1、TCP是面向连接的(在客户端和服务器之间传输数据之前要先建立连接),UDP是无连接的(发送数据之前不需要先建立连接)
2、TCP提供可靠的服务(通过TCP传输的数据。无差错,不丢失,不重复,且按序到达);UDP提供面向事务的简单的不可靠的传输。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性比较高的通讯或广播通信。随着网速的提高,UDP使用越来越多。
4、没一条TCP连接只能是点到点的,UDP支持一对一,一对多和多对多的交互通信。
5、TCP对系统资源要去比较多,UDP对系统资源要求比较少
6、UDP程序结构更加简单
7、TCP是流模式,UDP是数据报模式
堆和栈的区别:一.堆栈空间分配区别:
1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2.堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二.堆栈缓存方式区别:
1.栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2.堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三.堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
其实在使用的大部分场景下,两者是可以通用的,但是我们还是要知道他两的区别。
1、malloc与free是c++/c语言的标准函数,new/delete是C++的运算符。
2、他们都可用于申请动态内存和释放内存。new/delete比malloc/free更加智能,其实底层也是执行的malloc/free。为啥说new/delete更加的智能?因为new和delete在对象创建的时候自动执行构造函数,对象消亡之前会自动执行析构函数。
既然new/delete的功能完全覆盖了malloc和free,为什么C++中不把malloc/free淘汰出局呢?因为c++程序经常要调用c函数,而c程序智能用malloc/free管理动态内存。
new返回指定类型的指针,并且可以自动计算出所需要的大小
malloc必须用户指定大小,并且默然返回类型为void*,必须强行转换为实际类型的指针
C++内存补齐
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数
1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。
2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。
3:多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数的多态性。
4:多态用虚函数来实现,结合动态绑定.
5:纯虚函数是虚函数再加上 = 0;
6:抽象类是指包括至少一个纯虚函数的类。
纯虚函数:virtual void fun()=0;即抽象类!必须在子类实现这个函数,即先有名称,没有内容,在派生类实现内容。
根本区别:进程是资源分配最小单位,线程是程序执行的最小单位。 计算机在执行程序时,会为程序创建相应的进程,进行资源分配时,是以进程为单位进行相应的分配。每个进程都有相应的线程,在执行程序时,实际上是执行相应的一系列线程。
进程与线程的区别?
地址空间:进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。
资源拥有:进程之间的资源是独立的;同一进程内的线程共享本进程的资源。
进程与线程的区别?
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
进程与线程的区别?
线程是处理机调度的基本单位,但是进程不是。由于程序执行的过程其实是执行具体的线程,那么处理机处理的也是程序相应的线程,所以处理机调度的基本单位是线程。
进程与线程的区别?
系统开销:进程执行开销大,线程执行开销小。
c++11数据结构
c++ 11新特性 https://blog.csdn.net/jiange_zh/article/details/79356417
全部评论
(4) 回帖