C++:
多态:
-
多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载)
-
c语言和c++有什么区别?(大体讲了 一下,继承、多态、封装、异常处理等)
-
C++多态怎么实现的?C++的虚表存放在哪里?
-
虚函数相关,虚析构函数,运行时多态。
-
多态是怎么样的?写个样例?
-
虚函数的内存管理(常见问题,建议把虚函数表、多态的实现过程这些都讲一讲)
C++ 与C/java:
-
c语言和c++有什么区别?(大体讲了 一下,继承、多态、封装、异常处理等)
-
Java的是怎样解决循环引用的,那C++怎么解决呢
-
c++中有哪四种类型转换,举例说明,
-
四种类型转换机制?
-
静态成员函数和数据成员有什么意义?
-
全局与局部静态变量区别(感觉面试官是想问比较深入的内容,但我当时就答了作用域以及内存分配......请大神指点)
全局变量 | 静态全局变量 | 静态局部变量 | 局部变量 | |
---|---|---|---|---|
数据保存位置 | 内存静态储存区 | 内存静态储存区 | 内存静态储存区 | 内存的栈区 |
作用域 | 整个工程文件内 | 定义他的文件内 | 定义他的函数内(程序仅分配一次内存,函数返回后数据不会清零 | 定义他的函数内,但函数返回后会失效 |
初始化值 | 0 | 0 | 0 | 不可知 |
-
类如何实现只能静态分配和只能动态分配(前者是把new、delete运算符重载为private属性。后者是把构造、析构函数设为protected属性,再用子类来动态创建)
-
C++标准库的sort做了哪些优化,用sort处理文本的各种参数
参考:sort源码剖析- 在数据量很大时采用正常的快速排序,此时效率为O(logN)。
- 一旦分段后的数据量小于某个阈值,就改用插入排序,因为此时这个分段是基本有序的,这时效率可达O(N)。
- 在递归过程中,如果递归层次过深,分割行为有恶化倾向时,它能够自动侦测出来,使用堆排序来处理,在此情况下,使其效率维持在堆排序的O(N logN),但这又比一开始使用堆排序好。
-
const关键字的作用?(const成员函数,函数传递,和define的区别)
-
const在类中方法后面的作用,想改变成员的值怎么做。
-
const int *, int * const有啥区别
-
const char* fff(const char * const t ) const;每个const的作用
-
new与malloc的区别,delet和free的区别?
-
如何实现申请一大片连续空间,避免多次使用new等调用(当时说的是allocator,不知道还有没有其他答案)
-
浅拷贝与深拷贝(介绍完按位拷贝等内容后,最好再指出按位拷贝会导致内存多次释放等风险)
-
空类默认生成哪些函数(构造函数、析构函数、拷贝构造函数、以及拷贝赋值函数,参考《Effective C++》)
l 必须在构造函数初始化式里进行初始化的数据成员有哪些?
-
操作符重载(+操作符),具体如何去定义,?(让把操作符重载函数原型说一遍)
-
new 重载?
-
编译器如何识别函数重载(overload,不是override)
-
深层复制与浅层复制?
-
类的封装:private,protected,public
-
迭代器删除元素的会发生什么?
-
为什么要用static_cast转换而不用c语言中的转换?
-
内存溢出有那些因素?
-
模版特化的概念,为什么特化?
-
explicit是干什么用的?
-
异常机制是怎么回事?
-
如何实现只能动态分配类对象,不能定义类对象?(这个牛客上的题目,我把如何只能动态分配和只能静态分配都讲了一下)
-
继承机制中对象之间是如何转换的?、
-
链接指示:extern “C”(作用)
-
内联函数(讲了一下内联函数的优点以及和宏定义的区别)
-
模版怎么实现?
-
内存对齐的原则?(原则叙述了一下并举例说明)
·sizeof原则:
1.vector与string只返回类型固定大小:vector<int> a(10); vectro<string> b; string c = "dfdfdfd"; string d = "sd"; map<int,string> e; sizeof(a) = 16; sizeof(b) = 16; sizeof(c) = 28; sizeof(b) = 28; sizeof(e) = 12; int f[10]; sizeof(f) = 40; sizeof(f)/sizeof(f[0]) = 10;(元素个数)
-
Lambda
-
volatile关键字的作用,被质疑这个关键字真的有用吗
虚函数:
-
虚函数、纯虚函数、虚函数与析构函数?(纯虚函数如何定义,为什么析构函数要定义成虚函数)
-
虚函数,虚函数表里面内存如何分配)?
-
C++中虚函数与虚继承,指针与引用区别,C++11了解不,泛型编程用过没有,override是做什么的,智能指针介绍下,一般怎么调试程序,用什么工具。
-
虚函数,虚表,虚析构函数,派生类的虚表,override之后怎么样,纯虚基类的实例对象大小
-
C++虚函数的实现
-
C++内存模型,类的数据放在什么地方,类的函数放在什么地方,虚函数表,虚函数表指针,虚继承情况下的虚函数表,
-
虚函数表指针初始化是在什么时候
-
四种类型转换(static_cast, dynamic_cast,const_cast,reinterpret_cast)
-
虚析构函数
-
编译器如何判断两个类的指针或引用转换是不是父子类(虚函数表之前会有类型信息)
-
构造函数中可以调用虚函数方法吗
-
虚函数的内存管理(常见问题,建议把虚函数表、多态的实现过程这些都讲一讲)
-
虚继承的底层原理,成员变量怎么共享的; 在执行main函数之前,都会执行哪些操作
-
inline和virtual能够同时修饰吗
-
Virtual能修饰构造函数
-
static相关知识
-
explicit关键字的作用(修饰构造函数,用于抑制隐式转换,“原则上应该在所有的构造函数前加explicit” ----《C++ Primer》)
-
函数调用过程
-
静态链接与动态链接
STL :
-
stl有哪些容器,了解哪一些,展开说一说?
-
对比vector和set的实现,介绍一下红黑树
-
vector和list区别,vector如何开辟的时候内存满了怎么办?
-
vector的push_back为什么要扩容2倍或者1.5倍?内存扩展的参数为什么是2倍,最佳倍数是多少(大于1且小于2间的任意数字)
-
内存扩展导致发生拷贝时,具体是如何拷贝的(STL算法copy函数实现以及模板偏特化)
-
Vector用法
-
vector如何实现动态增长(面过的几家公司都问到这个问题,感觉不能只说resize之类的函数,还需要细化到vector内部的allocator如何工作等细节,具体可参考《STL源码剖析》)
-
map的key和value的类型选择,都有哪些限制(key要支持operator<,如果没有,那么map模板必须增加第三个模板参数,value类型要支持operator=,此map要支持拷贝构造并有默认的构造函数。楼主想到的是这些,欢迎补充)
-
STL中map与unordered_map
-
map\set\unorder_map\unorder_set的区别
-
map与hashmap底层实现(红黑树以及哈希表),哈希碰撞是如何解决的,两种实现各自的优缺点
-
STL中迭代器的作用,有指针为何还要迭代器。
-
strcpy函数的编写?
-
strcpy返回类型是干嘛用的?
-
哈希表解决冲突的方法(开放定址、再哈希、链表、公共溢出区,可以适当深入,比如分析各自的优缺点)
-
STL 内存池,nginx内存池,两个各自优缺点 ,deque底层实现
-
哈希冲突的原理和哈希冲突的解决方法
指针/智能指针:
-
动态绑定怎么实现?(就是问了一下基类与派生类指针和引用的转换问题)
-
指针和const
-
的用法?(就是四种情况说了一下)
-
继承机制中引用和指针之间如何转换?
-
智能指针,auto_ptr与share_prt,auto_ptr类
-
如果要你设计,你会怎么设计智能指针
树:
-
红黑树的定义和解释?
-
二叉平衡树是怎么实现平衡的?
-
判断二叉平衡树
-
AVL树是什么?怎么判断两颗AVL树里含的数据是一样的(这里树的结构可能不一样的)?
-
b树怎么遍历,多少次io
算法:
很多底层实现面试官也没指望你全部答出来,只要整体的知识脉络把握清楚,再想办法转到自己了解更多的问题就行。
-
数据结构中二叉树的前/中/后非递归遍历?(现场画图举例讲解的,所以大家面试的时候尽量多动笔)
-
求一棵树中最大的距离,在一颗树中,两个结点之间所经历的边数(即从一个节点到另一个节点需要经过多少条边)称为距离(递归求解,当前节点的左右子树深度之和,即为经过当前节点的最大距离,然后同步更新所求的最大距离)。
-
洗牌算法,如何证明洗牌的随机性
-
A*算法,寻路,八数码问题
-
x轴上有n个点,已知每个点的位置p和速度v(正表示向右,负表示向左),每当两个点相碰就消失,问最后碰撞的时间t和两个点
-
给n个不相交的区间,查询给定的一个值落在哪个区间,可以预处理区间,要支持多次查询。显然排序加二分
-
n个区间可以相交,求落在的所有区间段?把相交的部分 分离成单独的区间,完全覆盖的记个数就行,然后就变成上一题了。
-
如何得到链表倒数第k个元素
已解决:链表倒数第k个数-答案 -
最大子段和(DP经典问题)
-
二维最大子段和(上一题的拓展,把所有可能的数组两两相加即可,时间复杂度O(n3))
-
一千万游戏玩家,有一个积分排行榜,积分范围在0-99999,找到重复的积分;考虑内存不足,空间复杂度尽量低,如果内存充足?
-
股票买卖问题
-
给10w行数据,每行数据都是由<ipstart,ipend,location>的字段构成,<ipstart,ipend>是一个ip范围字段(ipstart<=ipend),这个范围对应一个唯一的地址location,每个ip范围字段不存在交集。问:输入一个ip地址,怎么得出它对应的地址locaiton ?如果ip范围字段存在交集要怎么处理?
-
Bfs/dfs
-
十大排序原理,平均时间复杂度,最差时间复杂度/何时会差
-
最长递增子系列 优化
-
马走日字,走到特定点最少用了D歩,问给定任意K是否存在一个路径走了K歩也可以走到(小于肯定不行,K-D是偶数随便,要讨论的是K-D是奇数情况)
-
数组中只有一个数出现了两次,求这个数,并使得空间 效率最优
-
有一个3阶魔方,设计一个数据结构来储存,并设计一个算法来求解魔方
-
有500W个QQ号,设计一个合适的数据结构进行储存、查找与维护(这里考虑到查找的高效性,我想的是字典树,但和面试官探讨的过程中,感觉他不是很满意这个答案,大家如有更高效的结构欢迎分享)
-
设计题(设计游戏逻辑,麻将/棋牌/玩过的游戏中的技能,特色玩法实现)
a) 设计一个具有getmaxvalue()功能的队列。
b) 设计一个游戏排行榜的实现:1、获取前K名玩家的信息2、输入一个玩家id,能获取玩家当前的排名
-
两个函数,不互相关联,一个写在一个循环中调用N次,一个分别写在两个循环中调用N次,问什么情况下第二种比第一种快
-
简单概率题,一个圆,往里面随机生成点,要求均匀,怎么办?
-
怎么判断一个点是否在三角形内部?
-
不用碰撞检测怎么检测两个平面相交?
网络:(网络socket编程不一定要求,但基础知识要了解)
-
TCP和UDP区别?为什么TCP能保证可靠传输?
-
TCP三次握手四次挥手流程图,TCP为什么不是两次握手?
-
TCP三次握手有没有被攻击的可能(如果一个恶意攻击的ip一直请求连接,服务器会发送ack确认,但永远等不到回复,就会导致服务器资源浪费)
-
TCP四次挥手时最后一次等待要多久,为什么(如A向B发送挥手,则A需要等待2MSL,MSL为最大报文生命期,这是为了确保A的挥手能到达B,不然B会重传第三次挥手的信息。另外也是确保所有此次通话相关报文在网络中消失)
-
socket流程?
-
网络编程的阻塞模式与非阻塞模式区别?
-
IP是干吗用的
-
ssh协议以及如何预防中间人攻击、如何免去使用密码(这个网上很多都有介绍,回答时记得理清顺序即可)
-
http和https有什么区别(前者运行在TCP,后者运行在SSL/TLS上,安全性更高)
-
select,poll,epoll的区别?io?
-
写一个简单的服务端客户端伪代码,哪里可能会阻塞,怎么解决阻塞的问题?
-
nginx 和 tomcat的原理,优化....
操作系统:
-
线程与进程区别与联系,进程间的通讯方式有哪些。
-
线程间同步
-
线程冲突怎么处理
-
进程切换
-
多线程的优势
-
互斥锁与自旋锁的区别
-
long的大小,不同位数机器上
-
虚拟内存与物理内存
-
函数调用堆栈的变化的整个过程,源文件到可执行文件的整个过程,机器为什么使用补码?
-
二级索引查数据的流程
-
微内核与宏内核
-
行程编码的英文缩写是什么,怎么实现的。
-
打开文件流写入磁盘的过程,机械磁盘的查找过程
图形学:(除非表示会不然已更改不会问)
-
了解多少
-
渲染管线流程
-
图像处理中时空域与频率域各自的操作方法。
-
图像处理中边缘检测的算法知道不
-
视频编码与图像编码问题,接触过没有,傅立叶变换公式?(接触过Jpeg与Jpeg2000,问了下怎么实现压缩的)
-
图形与图像有什么区别
-
光栅化的过程,作用,细分是什么,shader编程的知识,以及锯齿如何解决。
宏观问题:
-
怎么学习新技术,对业务和技术的理解
-
聊一下你简历的项目
-
介绍一下自己最深刻的项目经历
-
玩过什么游戏
-
对国内游戏行业、公司的了解和看法,具体讲讲自己的见解
-
设计模式
-
linux命令
-
sql查询,流程
网友评论