转载yl,yzl大神的面经,顺便自己复习一下专业课的内容

操作系统相关: 什么是进程, 什么是线程。它们之间的区别和联系。

进程管理内存资源+运行过程, 线程只管理运行过程, 线程要在进程提供的资源基础上运行。

设计模式相关: 单例模式及其应用

  这个网上随便找一篇介绍单例模式的文章都有详细地介绍。我就从基本的单例模式到线程安全的单例模式, 用智能指针管理的单例等大概说了说。关于应用, 我就举了 《Effective C++》中的一个例子。定义在两个文件下的全局变量A, B,然后A 需要用 B 来初始化, 但是由于不知道 B 是否在 A 初始化时, 已经初始化了。因此我们可以用单例来封装一下, 从而保证了其 B 在 A 之前初始化。

数据结构相关: 判断一个链表是否有环

  这个也是经典问题了。一个快指针, 一个慢指针, 然后相遇就有环, 不相遇就没环。

bool hasCircle(ListNode* pHead)

{   ListNode* pFaster = pHead;

ListNode* pSlower = pHead;

do{

// 快指针走两步

if(pFaster->next != NULL)

pFaster = pFaster->next->next;

// 慢指针走一步

pSlower = pSlower->next;   }

while(pFaster != NULL && pSlower != NULL && pFaster != pSlower);

if(pFaster == NULL || pSlower == NULL)

return false;

return true;

}

证明: 假设存在环, 且环的周期(环上的节点数)为 T, 环之前有 k 个节点, 则, 第 2T+k 个节点和第 T+k 个节点一定是同一个节点, 否则就会走到空节点。由此可以得到该链表是否有环。

STL 源码中的 hash 表的实现

  将数据实际存放在与 hash 表存储单元相链接的链表中,而不是 hash 的存储单元中。 当产生冲突的时候,将两个数据都链接在同一 hash 存储单元保存的链表中。然后当插入元素的个数和表的大小一样时, 就让表的大小扩大为比最接近之前大小的两倍的质数大小。

写一个快排 
* 这也是老生常谈的问题了。

  //[beg, end)
void QuickSort(vector<int>& datas, int beg, int end){
if(beg+1 >= end) return;
int i = beg, j = end - 1; while(i < j){
while(i < j && datas[i] <= datas[beg]) ++i;
while(i < j && datas[j] > datas[beg]) --j;
if(i < j) swap(datas[i], datas[j]);
++i, --j;
}
swap(datas[beg], datas[j]); QuickSort(datas, beg, j);
QuickSort(datas, j+1, end);
}

(3) 进程和线程的区别

  和前面去哪儿网的面试回答类似。

(4) 介绍一下 STL 源码的内容。

  随便说了说。

(5) vector 的实现

  先申请一定的大小的数组, 当数组填满之后,另外申请一块原数组两倍大的新数组, 然后把原数组的数据拷贝到新数组, 最后释放原数组的大小。 详情参考 《STL源码剖析(侯捷)》。

(6) C++ 与 C 的区别。

C++ 包含 C 几乎全部功能。

C++ 比 C 多面向对象语言部分。

C++ 比 C 多泛型编程部分。

C++ 比 C 多 STL 部分。详情参考 《Effective C++》

在C++中的 const 和 static 用法。 
这个比较多, 详细的可以自己在网上找找。

const 关键字: 用在局部变量上, 用在类成员变量上, 用在类成员函数后面…

static 关键字: 用在全局变量上, 用在局部变量上,用在类成员变量上, 用在类成员函数上…

class A {}; : sizeof(A) = 1;

class A { virtual Fun(){} }; : sizeof(A) = 4(32位机器)/8(64位机器);

class A { static int a; }; : sizeof(A) = 1;

class A { int a; }; : sizeof(A) = 4;

class A { static int a; int b; }; : sizeof(A) = 4;

重载和重写的区别

  重载要求相同的函数名, 不同的参数列表。仅返回值不同的函数不能重载。

  重写要求父类是虚函数, 子类改写其函数体。要求函数签名一模一样。

完美面试问题:

1.C++从源代码到可执行文件经过了哪些过程? 
2.动态链接库和静态链接库的区别? 
3.函数传参有几种方式?传引用和指针有什么区别呢? 
4.删除单链表的某个节点?拓展:不允许判断头节点。 
8.ISO网络模型有几层?每层是什么?分别作用? 
9.TCP三次握手内容?四次挥手内容?TIME_WAIT状态的作用? 
10.谈谈你对OO的理解? 
11.设计模式了解过吗?举例几个? 
12.手写一个C++单例Singleton模式? 
13.知道什么是控制反转吗?简单讲一下? 
14.如何只用减法实现乘法? 
15.只遍历一遍找到数组中次大值。

360面试问题:

一面 30min

1.拷贝构造函数在什么时候会被调用? 
2.i++和++i的区别 
3.模板的特化和偏特化? 
4.解释一下函数对象? 
5.模板有什么好处,有什么缺点? 
6.你了解哪些智能指针,都各有什么用处? 
7.谈谈什么是贪心,什么是动态规划,区别? 
8.求一个数组的最大子区间和 
9.什么是虚拟内存,什么是物理内存 
10.windows下的消息机制 
11.多线程下的消息同步 
12.多线程中的资源如何管理,写过线程池吗?

二面 30min

1.写一个类的构造函数、拷贝构造函数、析构函数、赋值运算符。 
2.基类析构函数是否设置为虚函数问题 
3.在继承体系下析构函数顺序 
4.C++的多态实现?(虚函数表那一套…) 
5.项目相关问题。 
6.如何编程,计算类似于1*3+(5-3)/2-4这样的表达式的值 
7.谈谈你了解的最短路径算法 
8.如何最快求2的8次方。

腾讯面试问题:

一面 52min

要求用数组或者vector实现循环队列,接口有,pop,push,size,empty,full。 
这个循环队列在多线程下会有哪些问题?什么情况下会发生这些问题?如何解决? 
互斥锁为什么能避免这些问题的发生? 
map和hashmap的底层实现?对比红黑树和hash表? 
虚函数机制。 
虚函数表相关的问题,存储位置、表大小等等。 
虚函数机制带来的开销有哪些? 
操作系统在运行一个程序背后会有哪些流程? 
进程状态,调度转换等等。 
在程序中栈的作用,函数调用中栈过程 
项目相关问题 
一个游戏在你看来可以分为哪些模块? 
在这些模块中,设计模式又可以做哪些的应用呢? 
固定渲染管线中有哪些比较重要的变换? 
投影变换如何实现的?

二面 27min

一来就是一道数学题,两个圆分别位于(P1,P2)速度为(V1,V2),半径为(R1,R2)求相遇时间。 
你玩哪些游戏? 
在一个游戏中如果你感觉到不流畅可能是哪些原因造成的? 
在没有任何测量工具下,在游戏中如何判断是由于网络原因还是性能原因(肯定面试官不会让看Ping和FPS值的)? 
你了解哪些游戏引擎?你最熟悉哪个? 
你说说你最了解的引擎的优点和缺点? 
你最近在学哪些技术? 
为什么你会学C++11这些东西而不是学习unity相关更深入的知识呢? 
你觉得你的技术薄弱点在哪些地方?

网易雷火面试题目:

一面 45min

1.C++虚函数机制(虚函数表那一套) 
2.C++析构函数可以申明为虚函数吗?构造函数可以申明为虚函数吗? 
3.c++static的作用 
4.项目,主要讨论之前我做的一个小游戏用的战斗框架FSM+GOAP。 
5.谈谈你对MVC的理解 
6.GOAP和FSM或者BT的区别?好处?坏处? 
7.STL的map的实现 
8.如果让你自己做一个俄罗斯方块小游戏,你会如何设计 
9.如果让你实现word里面的撤销功能,你会如何设计 
10.你所知道的排序算法、其时间复杂度和稳定性? 
11.可以实习时间.. 
12.平时玩的游戏.. 
13.你希望做PC端游还是移动端手游?

二面 40min

1.进程有哪些调度算法,算法流程,各自的优缺点? 
2.死锁 
3.为什么要进行字节对齐? 
4.手写代码strncpy,从源字符串拷贝n个字符到目标字符串(char* s1,char* s2,size_t n) 
5.以上题目,如果考虑s1,s2区间有冲突怎么办?如果不开辟新内存怎么解决这个问题? 
6.虚函数相关问题,以及带来的开销? 
7.FSM的相关问题,结合项目相关的一些问题。 
8.std::map的实现 
9.std::sort的实现 
10.如何判断两个轴平行的矩形是否相交? 
11.在游戏中,假如在一个很大的游戏地图上,有障碍,如何实现近似的最短路径,也就是实现游戏中的自动寻路的效果。可以预处理,但是在每次寻路要求寻找结果的算法尽可能的快! 
12.使用过脚本语言吗? 
13.了解过渲染管线相关知识吗?

以上内容转载自:天道酬勤,记春招之路(完美世界,360,腾讯IEG,网易雷火)

2017年暑假实习面经: 去哪儿网(一面, 二面, HR面, Offer), 腾讯IEG(一面, GG...), 百度(一面, 二面, 三面, offer)

面试相关-转载-well,yzl——持续更新的更多相关文章

  1. ubuntu相关软件合集(持续更新中)

    本人使用的是Ubuntu-Kylin14.04,自带了日历.输入法.优客助手等易于上手的应用.省的每次安装完原生的系统再麻烦的安装,下面介绍默认应用外的相关常用软件: 一.Keylock Applic ...

  2. Linux相关——记一些ubuntu相关快捷键&操作(持续更新)

    (有一些是windows通用的...放上来凑字数...) 1, ctrl + alt +  t.调出终端,这个没什么好解释的. 2, win + s.可以快速查看打开的窗口,并进行切换 3,win + ...

  3. python相关小技巧整理[持续更新]

    1. pdb的非常方便的debug,抛弃print吧~ 参考https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ impor ...

  4. Java线程池底层源码分享和相关面试题(持续更新)

    线程池各个参数讲解 public ThreadPoolExecutor(int corePoolSize, //线程池核心工作线程数量,比如newFixedThreadPool中可以自定义的线程数量就 ...

  5. (持续更新) C# 面试技术点、常见SQL技术点 和 解决高并发的相关技术

    这篇博客 持续更新. 方便小伙伴们学习与面试前的复习

  6. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

  7. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  8. 4W字的后端面试知识点总结(持续更新)

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  9. 【前端面试】Vue面试题总结(持续更新中)

    Vue面试题总结(持续更新中) 题目参考链接 https://blog.csdn.net/weixin_45257157/article/details/106215158 由于已经有很多前辈深造VU ...

随机推荐

  1. 2017年最受欢迎的UI框架

    前端领域最近几年发展的特别迅速,可以说是百家争鸣.在底层的前端框架领域中,最早是jquery称霸互联网,近两年MVVM类型的框架慢慢成为主流,Vue.React和Angular三大框架并驾齐驱.可以说 ...

  2. phalcon——Paginator分页

    phalcon使用的分页器是Phalcon\Paginator. 首先先展示一个比较完整的使用例子: 控制器代码: use Phalcon\Paginator\Adapter\Model as Pag ...

  3. Spark SQL数据源

    [TOC] 背景 Spark SQL是Spark的一个模块,用于结构化数据的处理. ++++++++++++++ +++++++++++++++++++++ | SQL | | Dataset API ...

  4. C++ regex库的三种正则表达式操作

    关于正则表达式的语法和字符含义,网上已经有很不错的博客教学,我当初参考的是 读懂正则表达式就这么简单 - Zery - 博客(http://www.cnblogs.com/zery/p/3438845 ...

  5. 【JAVA零基础入门系列】Day12 Java类的简单应用

    俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...

  6. Ubuntu配置OpenStack 二:配置时间同步NTP和安装数据库Maridb以及问题总结

    继上一节Ubuntu配置OpenStack 一:配置主机环境,下面继续为安装时间同步,以及配置openstack的安装包源和安装数据库Maridb.(全文截图都是由自己徒手搭建完成并且截图) 一.安装 ...

  7. dynamic_cast 转换示例

    dynamic_cast 转换示例 /* 带虚函数与不带虚函数转换的区别 dynamic_cast:必须要有虚函数才可以转换 dynamic_cast:只能处理转换指针或引用,不能转换对象 dynam ...

  8. [转载]ACM搜索算法总结(总结)

    原文地址:ACM搜索算法总结(总结)作者:GreenHand 搜索是ACM竞赛中的常见算法,本文的主要内容就是分析它的 特点,以及在实际问题中如何合理的选择搜索方法,提高效率.文章的第一部分首先分析了 ...

  9. ios video标签部分mp4文件无法播放的问题

    问题描述: 部分MP4文件在ios的微信浏览器中无法播放,点击播放后缓冲一下之后显示叉,而另外一些mp4文件正常,同时在安卓全部下正常. 分析: h264编码的压缩级别问题导致. 苹果官方文档中对 i ...

  10. 轻松驾驭Tomcat

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...