-
智能指针
为了解决C++中分配了内存之后忘记delete,造成悬空指针的情况。从而造成了内存的泄漏。智能指针可以更好地控制对象的生命周期。
智能指针分为std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array、boost::weak_ptr、boost:: intrusive_ptr共7种。 -
map的实现机制
红黑树
增删查也都是O(log(N)) -
模板类的偏特化
https://www.jianshu.com/p/0d8d02e9f8f7
全特化会确定所有的参数,而偏特化的参数未被全部确定下来。
函数只能被全特化,类可以被全特化也可以被偏特化。
&&&具体实例 -
动态加载dll和静态加载dll的区别
-
线程和进程的区别
-
TCP的四次挥手协议
-
给定两个数组a和b,求所有在a数组中不在b数组的元素;
-
快速排序的平均时间复杂度是多少,证明它的平均时间复杂度等。
-
虚函数和纯虚函数的区别
-
一个for循环里面嵌套fork的题,
-
让我画了四次挥手的时序图,然后让我简化成三次,
-
做了一道后序遍历二叉树的题,
-
又问了我数据库事务的特性(我数据库没怎么看 只记得原子性),
-
然后问我too many files是怎么产生的,用什么方法可以发现这个问题,怎么解决这个问题
-
网络攻击方面的问题;
-
问了右值引用是什么东西;
-
问了hash和map的差别
-
C++多态的实现方式,
1)静态多态(函数重载和运算符重载)
是在编译的时候,就确定调用函数的类型。
(2)动态多态(虚函数实现)
在运行的时候吗,才确定调用的是哪个函数,动态绑定。运行基类指针指 向派生类的对象,并调用派生类的函数。 -
虚函数的底层实现细节
虚函数实现原理:虚函数表和虚函数指针。
纯虚函数: virtual int fun() = 0; -
继承类调用构造函数顺序和析构函数顺序,
-
什么时候要将 析构函数定义为虚函数。
-
引用与指针区别
-
new 与 malloc的异同处。 5:
-
结构体内存对齐方式。
-
TCP与UDP区别
算法与数据结构: 1:给一个正整数n,现在想将n分成若干个正整数,使得它们的乘积最大。 2:经典的n个数求前k大的数。分两种情况,第一是没有相同的数,另外一种是有。 3:和百度二面问的一模一样,两个文件A和B,求A中没有但B中有的单词。
linux和os:
netstat tcpdump ipcs ipcrm (如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率较小 _ ,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验)
cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握
awk sed需掌握
共享内存的使用实现原理(必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?)
c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)
ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)
使用过哪些进程间通讯机制,并详细说明(重点)
makefile编写,虽然比较基础,但是会被问到
gdb调试相关的经验,会被问到
如何定位内存泄露?
动态链接和静态链接的区别
32位系统一个进程最多多少堆内存
多线程和多进程的区别(重点 面试官最最关心的一个问题,必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)
写一个c程序辨别系统是64位 or 32位
写一个c程序辨别系统是大端or小端字节序
信号:列出常见的信号,信号怎么处理?
i++是否原子操作?并解释为什么???????
说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问)
列举说明linux系统的各类异步机制
exit() _exit()的区别?
如何实现守护进程?
linux的内存管理机制是什么?
linux的任务调度机制是什么?
标准库函数和系统调用的区别?
补充一个坑爹坑爹坑爹坑爹的问题:系统如何将一个信号通知到进程?(这一题哥没有答出来)
c语言:
宏定义和展开(必须精通)
位操作(必须精通)
指针操作和计算(必须精通)
内存分配(必须精通)
sizeof必考
各类库函数必须非常熟练的实现
哪些库函数属于高危函数,为什么?(strcpy等等)
c++:
一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键)
虚函数的作用和实现原理(必问必考,实现原理必须很熟)
sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)
指针和引用的区别(一般都会问到)
多重类构造和析构的顺序
stl各容器的实现原理(必考)
extern c 是干啥的,(必须将编译器的函数名修饰的机制解答的很透彻)
volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻)
static const等等的用法,(能说出越多越好)
数据结构或者算法:
《离散数学》范围内的一切问题皆由可能被深入问到(这个最坑爹,最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)
各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等等
hash, 任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)
网络编程:
tcp与udp的区别(必问)
udp调用connect有什么作用?
tcp连接中时序图,状态图,必须非常非常熟练
socket服务端的实现,select和epoll的区别(必问)
epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)
大规模连接上来,并发模型怎么设计
tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)
tcp头多少字节?哪些字段?(必问)
什么是滑动窗口(必问)
connect会阻塞,怎么解决?(必考必问,提示:设置非阻塞,返回之后用select检测状态)
如果select返回可读,结果只读到0字节,什么情况?
网络编程:
tcp与udp的区别(必问)
udp调用connect有什么作用?
tcp连接中时序图,状态图,必须非常非常熟练
socket服务端的实现,select和epoll的区别(必问)
epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)
大规模连接上来,并发模型怎么设计
tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)
tcp头多少字节?哪些字段?(必问)
什么是滑动窗口(必问)
connect会阻塞,怎么解决?(必考必问,提示:设置非阻塞,返回之后用select检测状态)
如果select返回可读,结果只读到0字节,什么情况?
keepalive 是什么东东?如何使用?
列举你所知道的tcp选项,并说明其作用。
socket什么情况下可读?
db:
mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标
最后:补充一个最最重要,最最坑爹,最最有难度的一个题目:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?
参考:
腾讯后台开发面经+答案