大华服务器面经整理
这是秋招时自己整理的资料,也就是简单做了分类,希望有用
C/C++ 基础
C与C++区别、C++相对于C的优点
C和C++ struct 区别
C的struct可以有函数吗
C 为什么不能在结构体实现函数( C语言结构体里面也可以包含函数,如同类中有方法一样,但是不能通过直接放过一个函数进去,需要通过函数指针的方式
struct 和class 区别
const关键字,const修饰成员函数会怎样
内存对齐有什么用?
智能指针、有啥区别
shared_ptr什么情况下会增加计数,传引用会增加计数吗,为什么
动态库调用的方法
动态链接和静态链接的优缺点,链接库位于哪个存储区
C++内存分配
堆和栈的区别
内存泄漏的场景
i++是不是原子操作
程序编译过程介绍,编译阶段详细介绍
指针和引用的区别
new、delete,malloc、free的区别
Malloc可以生成对象吗?
strcpy和memcpy区别
假如让你写一个memcpy函数,有哪些需要注意的地方?
C++三大特性
类的静态成员占用类空间吗?静态成员有什么作用?
构造,拷贝构造,析构函数
析构函数为啥加virtual关键字
什么情况下需要重写拷贝构造函数
移动构造函数的作用?
C++多态继承
C++多态、实现方式(函数重载,模板函数、虚函数)、多态的实现原理、多态过程
静态多态和动态多态
虚函数和纯虚函数
虚函数是怎么实现的
抽象类(纯虚类,含有纯虚函数的类),为子类提供公共接口,本身不能实例化,子类要实例化,需要实现纯虚函数内容。
多态怎么实现的?哪些函数不能是虚函数?
STL
list、vector的区别
迭代器什么时候会失效,删除时会失效吗
vector 扩容过程
vector 里面删除一个节点以后哪些迭代器失效
vector,list,map,底层实现,扩容,时间复杂度
STL熟悉吗?哪些用的多?如何遍历一个map?(想复杂了,其实答 迭代器/for循环 就够了)
容器用过哪些,底层是什么
map的底层实现 ,存储的是什么
map容器迭代器失效的情况,如何避免,想到了迭代器遍历过程中是通过迭代器自加,遍历的,没想到同样是通过迭代器自加避免失效
Set底层实现
Stack和queue底层怎么实现的
erase注意事项有哪些?
-
要接收erase返回的迭代器
-
erase返回的迭代器自动指向下一个位置,所以代码里有erase的, 要注意只有不运行erase的部分需要 iterator++
计算机网络
TCP 和 UDP区别
TCP 长连接是如何实现的
UDP保证可靠如何实现: 传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。 实现确认机制、重传机制、窗口确认机制
TCP 怎样保证可靠
TCP 为什么是可靠的传输协议
TCP 流量控制,拥塞控制
TCP /IP 四层模型
TCP/IP 五层协议分别是什么
TCP 的三次握手、四次挥手的过程及涉及到的状态转换
TCP 三次握手中accept发生了什么
ping命令用的什么协议,有什么用
网络通信分层、每一层用什么协议
应用层协议有哪些
get和post有什么区别
Socket通信
IO多路复用
Socket是阻塞的吗?
同步阻塞,异步阻塞
阻塞和非阻塞
怎么设置 Socket 非阻塞。
socket 的流程
了解 epoll 吧,能介绍下吗?
LT和ET有什么区别,使用时要注意什么?
epoll 触发方式以及 epoll、select 和 poll 的区别
监控文件描述符的大小不是select底层是数组有限制,我说有个宏设置,然后面试官问我那不可以修改吗,为啥还非得有限制,
计算机系统 & linux
什么是死锁,原因,产生条件
死锁产生必要条件:互斥、请求和保持,不可剥夺,循环等待
无锁结构、cpu优化
线程锁有哪些
协程和线程的区别
线程和进程的相关内容
如何实现进程的同步
进程和线程通信方式
-
进程数据通信方式:管道、消息队列、信号量、socket、信号、共享内存
-
线程通信方式,选一种用过的说说:共享内存和信号量(适用于什么场景下 )
条件变量变化时,阻塞进程持锁问题
内存池:分配内存,提高效率,减少内存碎片,减少开销(线程池)
内存碎片处理
内存管理
linux内存管理,虚拟内存和物理内存怎么理解的
为什么要用多线程?举个例子
多线程安全
进程线程资源分配、内核而言
线程池资源分配、内核方面、最大线程数量、线程池合理分配
互斥操作
有名管道和无名管道的区别(项目中有使用过吗)
操作系统的进程,线程,优先级等,给了一个例子,让写PV操作伪代码。
项目中用的系统调用函数
高并发怎么处理
内核到用户的拷贝过程
Linux文件操作指令
移动文件指令
如何访问没有权限的文件
用过GDB调试吗?用过哪些命令呢?
linux常用命令:查看cpu运行资源的命令free,查看线程的命令ps,查看进程占用资源的命令top
GDB调试怎么用,说说用在哪里,怎么用的
Linux基本命令
查看内存和磁盘管理的命令
makefile用过吗,说说功能是什么,怎么使用的;
Linux查看线程指令
linux怎么修改句柄数?
如何提高一个文件的传输效率
算法
判断链表是否有环(多种方法)
判断一个字符串是否为另一个字符串的子串(多种方法)
知道哪些排序算法;排序算法的事件复杂度,选择排序,快排,堆稳定不稳定,如何判断稳定不稳定
查找算法:二分,哈希以及二分的查找条件
解决哈希冲突的方法
双向循环链表怎么创建?用两句话说清楚(两句话没有说清楚,不用再说了)
输出完全二叉树最右边节点。
单链表快排
讲讲循环链表是怎么实现的;
链表
二叉树应用在哪里(大量信息搜索的优秀数据结构,数据库索引)栈(计算器)队列(打印机,os消息队列)
单链表和循环链表的操作
设计模式
设计模式了解吗
例程模式
单例模式
数据库
索引的实现方式,为啥要用b+树,为啥不用hash表?
主键可以有多个吗?
索引可以有多个吗?
Replace 关键字