(转)2020校招复盘——秋招不易,致敬每一位追梦者(面经题库)

面经题库

一、C/C++

深入理解的四部分基础

程序编译、链接、装载、运行的过程
函数调用堆栈过程
32位虚拟地址空间布局
C++的内存管理机制

基础知识部分

32位、64位系统下各数据类型所占用的内存空间
C和C++的区别
struct和class的区别
指针和引用的区别
new与malloc的区别 / delete和free的区别
堆和栈的区别
const关键字的用法
static关键字的用法
sizeof和strlen的区别
define 和 const的区别
extern关键字的使用,解决了什么问题
volatile关键字的使用,解决了什么问题
malloc如何管理内存、分配内存?ptmalloc底层实现
结构体的内存对齐,为什么要进行内存对齐
内存泄露的定义,如何检测与避免内存泄露
程序寄存器的作用
C语言如何实现函数重载
main()函数之前会调用哪些函数,如何实现main()函数运行之前打印字符串
大小端问题,如何判断大小端及大小端的转换

C++特性部分

面向对象的三大特性
C++对象生命周期、对象模型与调用优化
内联函数的作用与适用场景,与define定义的宏函数的区别,什么函数不能内联
友元函数的作用、使用场景、使用的注意事项
this指针的功能,this指针是什么类型的
空类的大小,空类默认产生哪些成员函数
成员初始化列表,什么成员必须在初始化列表里初始化
什么时候会调用拷贝构造函数
深拷贝与浅拷贝,浅拷贝可能出现的问题
拷贝构造函数和赋值重载函数的形参为什么要传const引用
模板的用法、注意事项与使用场景
模板的typename和class的区别
重载、隐藏和覆盖(重写)
多态机制: 静多态与动多态
虚函数的底层实现原理、对象模型
静态绑定与动态绑定
多重继承存在的问题,虚继承的底层实现原理、对象模型
哪些函数不能实现成虚函数
析构函数什么时候应该实现成虚函数
纯虚函数、抽象基类的作用与适用场景

STL部分

STL六大组件
STL一二级空间配置器的底层实现原理
STL三类容器(顺序容器、关联容器、容器适配器)的底层实现,线程安全性
vector频繁调用push_back()带来的问题
vector调用push_back(),又调用pop_back(),它的内存大小会回退吗?
deque与vector的效率问题
Map的key是否可以是一个结构体,需要注意哪些问题
哈希表的原理,哈希函数,如何解决hash冲突,各类解决方法的优缺点
常见的泛型算法

C++ 11部分

C++ 四种强制类型转换机制,各自的用法、功能、特点、区别及使用场景
智能指针的作用及其底层实现原理
auto_ptr、scoped_ptr、unique_ptr各自的特点,都解决了哪些问题,底层是如何实现的
shared_ptr、week_ptr的特点,交叉(循环)引用问题,如何实现
右值引用、移动语义、完美转发
什么是左值,什么是右值
异常处理问题、异常的栈展开机制
构造函数、析构函数里抛出异常会怎么样
Lambda表达式、函数对象
bind绑定器

二、Linux

基础知识

Linux目录结构
Linux常用命令:文件管理、进程管理、用户管理、系统资源/内存/监测、Vi编辑器
GDB调试工具,常用的命令,多线程、多进程、指定进程调试命令
怎么知道程序死锁,GDB如何调试死锁。
Gdb的bt命令如何实现
Free命令下buffer、cache、used的区别
Linux文件系统(EXT4,XFS,BTRFS)、文件的分类、文件的权限
文件的三种时间,访问文件的过程
软连接和硬连接
makefile文件的作用、编写
静态库与共享库,如何创建(具体的命令与参数)、各自的作用与区别、存放的位置
Linux I/O模型、阻塞与非阻塞
同步I/O 与 异步 I/O,区别、应用场景
异步IO的缺点
同步和异步
I/O多路复用技术 select poll epoll 的深入理解,具体的区别、优缺点、内部原理、适用场景
ET模式与LT模式的区别,适用场景
为什么ET工作在非阻塞模式
如何实现一个定时器(Libevent定时器如何实现)
线程池的参数及实现
守护进程的作用及使用场景,如何创建一个守护进程

系统编程(操作系统原理相关)

系统调用与库函数的区别,中断的概念
异常与中断的区别
为什么要引入进程、线程
进程的状态、线程的状态,何时发生状态转换
进程与线程的区别、联系(Linux内核如何实现线程:用户级线程与内核线程、混合线程,线程的分类)
子进程共享父进程的哪些资源,线程共享进程的哪些资源,线程自己拥有哪些资源
vfork()和fork()的区别
一个进程可以创建多少线程,影响因素是什么
一个进程可以打开多少文件描述符,与什么有关
进程间通信/同步方式:管道、信号量、消息队列、共享内存、套接字,区别和原理。
如果一个进程的CPU占用太大,如何定位和调试这个进程
如果一个进程的CPU利用率很低,如何定位这个进程,如何提高其CPU利用率
两个进程并发,执行100次,前置++的值有哪些,后置++的值有哪些
如何回收进程,僵尸进程、孤儿进程的问题描述与解决方案
临界区、临界资源的概念
互斥与同步的区别
生产者消费者问题、读者写者问题、哲学家就餐问题(伪代码)
死锁问题,产生死锁的必要条件,如何检测死锁,如何避免和预防死锁
银行家算法的描述
线程间同步方式:信号量、互斥锁、条件变量、读写锁、CAS,区别与联系
CAS的原理,与互斥锁的区别,CAS存在的问题,如何解决
为什么要引入CAS?
多线程模型
线程安全问题与可重入函数

内存管理

内存管理的概念
段式内存管理与页式内存管理、内存如何寻址
Linux三级页表映射机制
虚拟内存机制
buddy system 伙伴系统算法、slab内存分配机制
分段和分页的区别
页面置换算法,如何实现LRU、LFU算法

网络编程(计算机网络相关)

OSI七层模型与TCP/IP四次模型的区别与联系
各个层的作用、功能、具体的协议有哪些
数据链路层ARP协议与RARP协议的工作原理
局域网内多主机通信的整个过程是怎样的
网络层的作用,常见的路由选择协议工作原理及其区别:RIP、OSPF、EGP、BGP
IP数据包首部大小,重要字段
IP分片的原因与具体实现,工作过程
MSS 和 MTU 的区别
Ipv4地址划分、子网掩码、NAT地址转换
路由器的功能,路由转发的过程
传输层协议TCP 与 UDP,区别与联系
无连接服务与面向连接服务的区别
字节流服务与数据报服务的区别
TCP首部大小、字段的具体含义
连接过程中需要协商什么,系统需要给TCP连接双方分配什么资源
TCP发送缓冲区、接收缓冲区
TCP三次握手与四次挥手的详细过程、状态、必要性、SYN泛洪攻击
TIME_WAIT状态何时出现、存在的原因、为什么要等于2MSL的时间
如何解决系统中存在大量的TIME_WAIT状态的问题
TCP的粘包、拆包问题的原因和解决方案
TCP的可靠传输实现:序号、确认号、超时重传、应答确认、流量控制、拥塞机制
流量控制:滑动窗口协议、选择确认机制,滑动窗口会有什么问题
拥塞控制:慢启动、拥塞避免、快速重传和快速恢复,整个过程,拥塞窗口何时变化、怎么变化、为什么要这样变化
TCP流量控制与拥塞控制的区别
TCP接收方窗口与发送方窗口的变化由谁来控制
TCP的Nagle算法
如何快速的判断网络拥塞已经发生
UDP协议的首部长度,字段含义
UDP为什么不可靠,如何实现可靠
TCP与UDP的适用场景有哪些
既然TCP是可靠的,为什么要有UDP,存在的意义是什么
Socket的tcp与udp编程流程
非阻塞socket、非阻塞connect,如何设置,作用是什么
recv、send可以用在UDP中吗
Sendfile零拷贝技术实现原理
浏览器中输入URL后到页面返回的详细过程,各层所用到的协议,数据的流动是怎样的
DNS的功能,查询的详细过程,具体的细节,DNS迭代查询与递归查询的区别,为什么DNS使用UDP
应用层使用TCP的协议有哪些,使用UDP的协议有哪些
知名端口号有哪些,用户能使用的端口号有哪些
http协议的功能、作用
http协议的请求报文、响应报文的首部格式
http的各种方法,get与post的区别
为什么get的效率比post高?
http的状态码
http 1.0、http 1.1、http 2.0,区别、改进了哪些地方
https与http的区别,由http升级为https需要做哪些操作
https用到的加密算法有哪些,如何确保安全性
https的具体的、详细的加密过程(SSL/TLS)
session和cookie的区别
URL 的组成,包含哪些部分
URL与URI的区别
对称加密与非对称加密算法
数字证书的了解
Ping命令的整个过程,用到了哪些协议,如何实现,与Traceroute命令的区别
traceroute命令的执行过程,用到的协议

三、数据结构与算法

数组与链表的区别,使用场景
栈和队列的特点,使用场景
单链表和二叉树的使用场景
用栈实现队列、用队列实现栈
八大排序算法,手撕算法,最好/最坏/平均的时间复杂度、空间复杂度、稳定性,算法的优化,何时最差何时最好
二叉树的前序、中序、后序遍历(递归与非递归实现),时间复杂度、空间复杂度
二叉搜索树BST、平衡二叉树AVL
红黑树的特点,插入与删除,使用场景
回溯算法(子集树、排列树),求子集、全排列、N皇后问题
动态规划(01背包、完全背包、LIS、LCS、最大子段和、硬币问题)
动态规划的思想,与贪心算法的区别
并查集
海量数据处理:TOP K问题、去重问题
Bitmap 与 布隆过滤器
一致性hash算法

四、数据库原理

关系型数据库与非关系型数据库的含义,常见的都有哪些,各自的优点
常用的SQL语句
内连接和外连接的区别,左连接和右连接的区别,连接查询和子查询的区别,效率问题,适用场景
MySQL的索引类型
聚集索引和非聚集索引的区别,唯一性索引和主键索引的区别
索引的底层实现,B-树与B+树的区别,为什么不采用红黑树
索引的最左前缀匹配问题
Hash索引与B+树索引的区别
数据库事务的ACID特性,具体的含义
数据不一致性的问题
数据库的隔离级别,MySQL和Oranle的默认隔离级别
MVCC多版本并发控制机制
分布式事务
隔离性如何实现,锁的种类、加锁的方式、锁的兼容性
大数据下如何分库分表,采用的策略有哪些
MySQL的主从复制、读写分离技术
MySQL的四类日志,功能是什么

五、设计模式部分

单例设计模式手写,设计思想,懒汉模式与饿汉模式,线程安全性的不同实现方式,资源释放的内部嵌套类,适用场景
简单工厂、工厂方法、抽象工厂的区别与联系,代码手写,适用场景
观察者模式、迭代器模式等常见设计模式的思想与适用场景

转载声明:本文仅供学习交流,侵联删,致敬每一位追梦者

原文链接:2020校招复盘——秋招不易,致敬每一位追梦者(含网易、京东等19家互联网公司后台/Server端面经)

你可能感兴趣的:((转)2020校招复盘——秋招不易,致敬每一位追梦者(面经题库))