面试相关-转载-well,yzl——持续更新
转载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——持续更新的更多相关文章
- ubuntu相关软件合集(持续更新中)
本人使用的是Ubuntu-Kylin14.04,自带了日历.输入法.优客助手等易于上手的应用.省的每次安装完原生的系统再麻烦的安装,下面介绍默认应用外的相关常用软件: 一.Keylock Applic ...
- Linux相关——记一些ubuntu相关快捷键&操作(持续更新)
(有一些是windows通用的...放上来凑字数...) 1, ctrl + alt + t.调出终端,这个没什么好解释的. 2, win + s.可以快速查看打开的窗口,并进行切换 3,win + ...
- python相关小技巧整理[持续更新]
1. pdb的非常方便的debug,抛弃print吧~ 参考https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ impor ...
- Java线程池底层源码分享和相关面试题(持续更新)
线程池各个参数讲解 public ThreadPoolExecutor(int corePoolSize, //线程池核心工作线程数量,比如newFixedThreadPool中可以自定义的线程数量就 ...
- (持续更新) C# 面试技术点、常见SQL技术点 和 解决高并发的相关技术
这篇博客 持续更新. 方便小伙伴们学习与面试前的复习
- BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js
BAT 前端开发面经 —— 吐血总结 目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...
- [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)
linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...
- 4W字的后端面试知识点总结(持续更新)
点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...
- 【前端面试】Vue面试题总结(持续更新中)
Vue面试题总结(持续更新中) 题目参考链接 https://blog.csdn.net/weixin_45257157/article/details/106215158 由于已经有很多前辈深造VU ...
随机推荐
- 2017年最受欢迎的UI框架
前端领域最近几年发展的特别迅速,可以说是百家争鸣.在底层的前端框架领域中,最早是jquery称霸互联网,近两年MVVM类型的框架慢慢成为主流,Vue.React和Angular三大框架并驾齐驱.可以说 ...
- phalcon——Paginator分页
phalcon使用的分页器是Phalcon\Paginator. 首先先展示一个比较完整的使用例子: 控制器代码: use Phalcon\Paginator\Adapter\Model as Pag ...
- Spark SQL数据源
[TOC] 背景 Spark SQL是Spark的一个模块,用于结构化数据的处理. ++++++++++++++ +++++++++++++++++++++ | SQL | | Dataset API ...
- C++ regex库的三种正则表达式操作
关于正则表达式的语法和字符含义,网上已经有很不错的博客教学,我当初参考的是 读懂正则表达式就这么简单 - Zery - 博客(http://www.cnblogs.com/zery/p/3438845 ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
- Ubuntu配置OpenStack 二:配置时间同步NTP和安装数据库Maridb以及问题总结
继上一节Ubuntu配置OpenStack 一:配置主机环境,下面继续为安装时间同步,以及配置openstack的安装包源和安装数据库Maridb.(全文截图都是由自己徒手搭建完成并且截图) 一.安装 ...
- dynamic_cast 转换示例
dynamic_cast 转换示例 /* 带虚函数与不带虚函数转换的区别 dynamic_cast:必须要有虚函数才可以转换 dynamic_cast:只能处理转换指针或引用,不能转换对象 dynam ...
- [转载]ACM搜索算法总结(总结)
原文地址:ACM搜索算法总结(总结)作者:GreenHand 搜索是ACM竞赛中的常见算法,本文的主要内容就是分析它的 特点,以及在实际问题中如何合理的选择搜索方法,提高效率.文章的第一部分首先分析了 ...
- ios video标签部分mp4文件无法播放的问题
问题描述: 部分MP4文件在ios的微信浏览器中无法播放,点击播放后缓冲一下之后显示叉,而另外一些mp4文件正常,同时在安卓全部下正常. 分析: h264编码的压缩级别问题导致. 苹果官方文档中对 i ...
- 轻松驾驭Tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...