您的位置:首页 > 职场人生

游戏开发实习生的面试总结

2017-05-22 22:52 211 查看

一:背景

大三,都面临着找实习的问题,找实习可以说黄金时期就在3-4月,错过这个点,实习公司质量下降,数量下降,楼主也加入了
今年的实习生大军-_-,主要投递的公司是国内知名的游戏开发公司,例如腾讯网易等,经过不懈的努力,也有幸成功拿到了几个
offer,拿到之后放松了一段时间,有必要总结总结然后进入继续的自我提升中。楼主投递的岗位基本都是C++游戏开发工程师或者
C++相关岗位,所以下面的内容基本是以C++为主。

二:面试问题总结

C++基础:

(1)C++虚函数的实现机制,虚函数的原理
基本每次面试都会被问到,可以说是必需要透彻的理解掌握的知识点,学习资料推荐:C++中虚函数的实现机制C++
类的内存分布详细解析,这两篇博客看完可以对C++虚函数的实现有一个基本清晰的理解,看书的话更花时间,但是更有一个思考
,沉淀的过程,推荐书籍:《C++ Primer Plus (第六版)》和《Effective C++》,还想继续深入理解的同学可以阅读《深度探
索C++对象模型》
(2)构造函数在有虚函数的继承链中的调用过程,普通函数在有虚函数的继承链中的调用过程
这个地方坑比较多,也比较复杂,需要考虑父类声明为virtual 和父类不是virtual但是子类是virtual的情况,以及多重继
承和继承了多代后函数的调用过程,!!!注意,这个地方笔试经常考,而且理解不透彻的话会花很长的时间而且做不对,需要自
己进行实验
(3)模版,模版的显式实例化和显式具体化,模版的特化和全特化
这部分也需要有一定的掌握,毕竟模版还是挺重要的一部分,而这几个概念又容易搞混,并且不同概念的实现又不一样,
学习资料推荐:《C++ Primer Plus (第六版)》,《Effective C++》相关章节,另,博客:之前看的时候忘记收藏了,自己百度
相关关键字把-_-#
(4)指针和引用的区别
这里也是常问的问题之一,不搞清楚区别在使用的时候就会走火入魔,这里不展开介绍,推荐博客:C++指针和引用的
区别和联系,这里注意到链接中区别的第四点:是有int*  const p而没有 int & const p  的意思
(5)C++11的新特性,例如lambda表达式,右值引用等
自行百度关键字C++11新特性即可,有兴趣的也可以去看看C++14和C++17等;
(6)宏的展开
这个问题在面试中没有碰到过,但是笔试过程中经常考到,需要注意的是,宏的展开的时期是在预编译时期,展开方式是
简单的字符串替换,或者是选择
(7)内存释放问题,浅复制和深复制,delete,delete[],delete后为什么要把指针赋值为NULL
这个前面几点在《Effective C++ 》中有详细介绍,为什么要赋值为null则是,delete只是告诉操作系统这块内存可以回
收了,但是内存依然在这里,如果程序再一次使
用了delete的指针,那么依然会指向这块内存,很有可能导致程序崩溃;delete和delete[]的区别
(8)static,const的作用,这个楼主没有被问到,但是依然是C++的常见问题之一
C++中static和const的作用可以看看
(9)C++和C的区别,可以参考《Effective C++》中条款01种对C++的分块进行讲解
(10)...待续

STL:

这部分推荐看《STL源码分析》,不用全看,看原理介绍部分即可,毕竟不是没个人都对STL的源码感兴趣的(1)迭代器失效的情形(2)vector使用过程中的问题,一般是问vector内存重分配相关的问题(3)set和map的相同点和不同点(4)自行设计一个动态数组,即vector
(5)...待续

数据结构和算法:

(1)算法中除了直接让你做题之外,常见排序算法必需熟练掌握,冒泡,插入,选择,快排,shell排序,桶排序,基数排序
算法可以刷刷leetcode和牛客网上的公司真题。。虽然我没去刷,但是感觉自己算法比较薄弱,还是决定要去刷题的
(2)堆和栈的区别和联系,堆和栈的相互实现,即用堆实现栈,用栈实现堆
(3)二叉搜索树的实现,插入删除,二叉搜索树的概念,平衡二叉树的概念,红黑树的概念,最好能实现,不能实现的话原理
一定要掌握
(4)链表的反转,二叉树的左右节点反转
(5)hash表的深入理解
(6)...待续

设计模式:

能知道常用的几种设计模式,并能做一个简单的介绍,例如适配器模式,单例模式,工厂模式等,其中可能还需要考虑线程安
全,需要对C++中的相关原语有所了解,

计算机网络:

(1)TCP,TCP3次握手,4次挥手,状态转换过程;拥塞控制原理,启动过程,恢复过程;
有时间就看看《计算机网络》,没时间就看看网上的博客,大多都比较详细的介绍了这部分
(2)UDP,UDP优点缺点,和TCP的区别?什么时候用UDP什么时候用TCP?使用UDP,TCP的应用层协议有哪些?什么场
景用UDP,什么场景用TCP?
(3)网络编程的socket接口有一定的了解,socket(),bind(),send()..等函数,可以看看《Unix网络编程》
(4)HTTP和FTP的原理和区别,以及HTTP的一些回复代码的含义
(5)...待续
操作系统:(1)进程和线程的区别联系,这个一定要非常清晰的理解,不仅面试需要问到,平时对自己多线程编程也需要加深理解(2)进程间通信和和线程间通信的方式建议详细看看《现代操作系统》中的进程这一章;(3)...待续

三,下面总结一些建议看的书籍:

C++类:《Effective C++》,有一定的C++基础,并且想提升对C++的理解的同学必看     《C++ primer plus(第六版)》,有基本的C++知识,当然没有也可以看,但是会比较累,同时有比较充裕的时间
的同学必看,看完基本对C++中的语法,以及一些细节原理有一个清晰的理解,缺点就是太详细的,所以需要比较认真,要花比较
长的时间进行理解;
计算机网络:《计算机网络》,《Unix网络编程》需要花一定的时间,如果对网络编程不是很感兴趣,同时和后台,网络编程
关系不大的同学可挑里面的部分章节看,但是有时间了建议通读一遍加深理解,前一本偏原理,后一本原理和编程相结合
操作系统:《现代操作系统》,进程和线程部分必看,然后有时间建议看看其他章节加上对操作系统的理解
设计模式:这个看书看完就忘了,建议掌握常见的几种并且编程实验一下,其他的慢慢看,同时在编程中努力用到
数据结构和算法+STL:《数据结构和算法 C++版》,《STL源码分析》,放在一起是因为STL中也是数据结构的运用,并且源
码分析中对各种数据结构有一个比较清晰的讲解
另外,如果没有太多时间进行刷题,复习基础,可以看看《剑指offer》,里面对一些常见的面试问题有所介绍,但是如果有时
间还是以系统的复习为重,因为系统的复习不单单应对面试,也能提升自己对相关知识点的掌握程度,加深理解

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息