某公司秋招提前批游戏开发岗一面
(如有错误或遗漏,敬请留言指正)
一.C++简述题
1.静态库与动态库的区别
- 动态库和静态库的本质区别是,动态库是在程序运行时链接的,而静态库在编译时把代码加入目标程序,那么程序运行时就不需要了。所以使用静态库时生成的目标程序可以脱离源码运行,而动态库生成的目标程序,还需要先安装库才行
- 使用gcc编译的静态库,在生成目标程序链接的过程中也只能用gcc编译;同理使用g++编译的静态库在生成目标程序链接的过程中也只能用g++编译。否则会报错"undefined reference to 'Fun1()'
- 用gcc编译目标程序时,main.c中可以不需要#include "lib.h",会报warning,但是不会报error;但是用g++编译时,一定要加 #include "lib.h",不然编译不通过,因此用g++编译的静态库,还需要它的所有头文件才能使用。
- 当你更改库文件的一些宏定义或者其他东西时,需要重新编译静态库,不然你的修改没有起作用。
(from:https://www.jianshu.com/p/be7354745aaf)
2.#define与const的区别
【考官重点问的:二者的生效时间】
#define是预编译期间,const是编译期间保存到符号表中,通常不分配内存。
其他:
- #define不做类型检查,容易出错
- 作用域不同
- #define替换的地方都会在内存中存储,有n个备份,n=替换数,而const只有一个备份,节省内存空间;
- #define无法调试,const可以调试。
3.某struct有char与int成员各一个,问该struct占用内存空间。
注意有对齐规则,详见:https://blog.csdn.net/changyang208/article/details/78668462
二. 算法题
1.以顶点形式给出两矩形,如何判断是否重叠。
当时现场给出一种思路是以此对A矩形4个顶点依次判断点是否在矩形内(图形学最基本的东西),后来想想其实不对,因为重叠不一定意味着点在矩形内。考官说可以用八叉树,但是完全不懂。。。现在还没搜到靠谱的算法。(望指教!)
2.给一个vector和一个待搜索的值val。返回val在vector中出现的次数,并将vector中的val全部山区,返回剩下的vector。
现场给出的算法时间复杂度O(n平方),考官居然不追问了。。。(可能真的是对我弃疗了)
三.其他非技术问题
为啥想做游戏?玩过哪些游戏?做过什么游戏?职业生涯规划?
四.其他要记录的
1.报的技术栈c++/c#/unity,结果unity啥也没问,全部c++
2.明显是有题库,考官从题库里挑题