C++方向面经
第一篇
**一面 2020/3/29 **
1、进程和线程、上下文切换了什么、共享了什么
2、线程独占什么、切换时候内核做了什么
3、七层模型、协议有哪些、arp、rarp
4、为什么要有 ip 和 mac、mac 地址是如何来的
5、C++多态、继承、重载
6、Map 的种类
7、数据库语句 count(*)、count(1)、count(字段)
8、group by、order by、distinct
9、一条 sql 语句,数据库做了什么?
10、缺页了怎么办,物理内存如何分配的
11、虚拟内存和物理内存,为什么
12、B+树和红黑树
13、红黑树和一般的平衡二叉树,增、删、改、查的过程和效率、时间复杂度
14、有序数组,找出和为 k 的数对
二面 2020/3/29 牛客网
1、数据库组合索引,最左前缀,为什么
2、数据库事务特性
3、隔离机制有哪些,分别避免了什么
4、http1、x 的新特性
5、长连接和短连接,什么时候会出现
6、长连接是如何维持的,心跳机制,如果一直想要连接着怎么办
7、输入一个 url 发生了什么
8、二叉树各层节点数,递归、非递归,时间、空间复杂度
9、静态多态和动态多态
10、重载和覆盖
11、聚簇索引和非聚簇索引,实现区别,索引存在哪里了
12、主键索引存放
13、死锁是什么,死锁发生了怎么办
14、什么叫字节流,什么叫数据报
第二篇
**一面 2020/3/9 **
1、unordered_map 和 map 区别
2、STL,vector,list
3、C++多态,虚函数机制
4、进程通信
5、进程线程差异
6、TCP 三次握手四次挥手细节
7、算法题:最长不重复字串(HashTable,O(N))
**二面 2020/3/15 **
1、C++多态(看程序说结果,比较复杂,考了有关虚函数表,还考察了 override 和 overwrite,
虚函数内部调用非虚函数是调用指针类还是对象类)
2、二叉搜索树
3、B 树 b+树
4、红黑树删除算法
5、用互斥锁实现读写锁,写者优先
6、算法题:有 100 个方格,每个上面有毒蘑菇和体力蘑菇,毒蘑菇减体力体力蘑菇加体力,
当前体力是能跳到的最远距离,求是否能跳到最远方格,如果可以,求落在第 100 格上的
最大剩余体力
第三篇
**一面 2020/2/6 **
1、自我介绍和项目延伸
2、讲了寄存器/cache 优化的项目
3、顺着项目问:如果要做一个栈,用数组的结构还是链表?数组和链表哪一个遍历的效率
高?
4、cache 和内存关系?
5、循环展开知道吗?
6、weak_ptr 了解吗
7、move 语义?
Volatile?
template 了解吗
8、元编程(meta programming)了解吗
9、原子操作?
10、它可以用来解决什么问题?
11、TCP 和 UDP 区别,UDP 使用场景
12、算法:[1 2 3 4 5 6] 排列成[1 3 5 2 4 6] (奇数排右边,偶数排左边,不考虑顺序)(剑
指 offer 原题)
13、股票问题 ([1 3 5 7 2 3 ]是每日股票价格,买一次卖一次,问如何使得收益最大,即
求最大差)
**二面 2020/2/11 **
1、protobuf 向后兼容怎么做的
2、C++里面虚函数怎么实现的
3、智能指针
4、C++单例模式实现
第四篇
**一面 2020/3/25 **
1、自我介绍
2、实现一个类,该类在一个局部作用域中修改外层作用域的值,当局域作用域结束的时候,
恢复外层作用域原来的值(析构函数和泛型编程)
3、给你 n,k 求一个数 x 使得 x 的 n 次方等于 k,x 保留五位有效数字(二分)
4、多个区间,问区间的最大重叠数量
5、一个整数数组,求区间 min 乘以区间 sum 的最大值(前缀和+单调栈)
6、对 C++的泛型了解吗,底层如何实现?
7、进程间通信的最快方式?
8、使用共享内存通信有什么缺点?
9、有什么想问我的?
**二面 2020/3/25 **
1、socket 编程服务端和客户端调用函数的流程
2、accepted 函数的参数和返回值分别是什么
3、C++的打开文件函数 freopen 和系统调用的 open 函数关系和区别
4、TCP 的拥塞控制
5、网络中的丢包原因
6、现场写了一个多态,问各种情况的运行情况,内存对象模型,问的比较底层
7、一个整数数组,两个人一次分别从左边或者右边拿走一个数,两个人足够聪明,求第一
个人拿到数的最大和
第五篇
**一面 2020/3/19 **
1、tcp 和 udp
2、tcp time_wait 状态
3、udp 如何可靠
4、进程,线程和程序
5、动态库
6、文件系统,创建文件时发生了啥
7、进程控制块
8、linux 命令行,top strace df fdisk
9、题目:大数加法
10、题目:斐波那契数列,优化时间,空间
11、题目:字符串反转
**二面 2020/3/20 **
1、题目:链表相加
2、题目:实现 atoi,溢出怎么处理
3、问个人项目
4、http
5、数据库范式
6、数据库事务
7、微信扫码实现原理
第六篇
**一面 2020/3/14 **
1、自我介绍
2、介绍简历上的项目
3、reactor 和 proactor 的区别
4、内存分配原理
5、三次握手和四次挥手
6、僵尸进程,孤儿进程
7、fork 原理
8、线程同步的方法;进程通信七种方法
9、Python 生成器和迭代器;Python 代码是怎么执行的
10、C++11 新特性
11、mysql,B+树
12、算法题:删除注释
**二面 2020/3/14 **
1、自我介绍
2、找只出现一次的数字,其他都出现两次
3、孤儿进程;僵尸进程,怎么预防,怎么解决
4、进程间通信方式
5、阻塞 IO 和非阻塞 IO;异步 IO
6、一些开放性题目
7、职业规划
第七篇
**一面 2020/3/12 **
1、为什么选 c++岗
2、说说 C/C++/Java 的区别
3、多态怎么实现?虚机制
4、new 和 malloc,malloc 如果越界访问会怎么样?free 怎么实现的?为什么不用指定大
小?
5、智能指针?环形引用?怎么解决?
6、进程线程的区别,什么情况下需要多线程频繁切换?
7、进程怎么通信,有哪些方式
8、死锁怎么造成?怎么解决?
9、cpu 怎么调度进程?调度算法?
10、进程切换做了什么?
11、快排/冒泡
100G 的文件,放的整数,怎么排序
12、删除单链表中结点,手打代码
**二面 2020/3/12 **
1、自我介绍
2、介绍项目/问项目
3、TCP、UDP 区别,UDP 使用场景
4、http 是什么、用的 tcp 还是 udp,https 是什么
5、对称密码、非对称密码
6、同步互斥、信号量
7、代码题
第八篇
**一面 2020/3/16 **
1、C++为什么是面向对象的程序设计语言
2、C++有哪些特性
3、解释一下多态
4、继承方式
5、为什么可以由子类对象 new 一个父类对象,反之不行
6、封装实现原理
7、TCP/UDP 简述
8、为什么 TCP 是一个可靠的通信方式
9、为什么 TCP 可以保证顺序的传输,如果 ACK 丢失了,TCP 进行怎样的修复操作
10、TCPIP 网络层次模型简述
11、拥塞控制描述
12、进程与线程简述
13、进程切换时,会发生什么
14、进程的状
15、虚拟内存解释
16、虚拟地址和内存地址的转换
17、计算机的存储结构
18、cache 的用途
19、输入一个数组,返回其中能被 3 整除的元素
20、如果把 3 改成 4,能不能有代码复用的方法(使用函数指针做)
21、给定 N 个有序的链表,合并他们
**二面 2020/3/16 **
1、代码文件到可执行程序的过程
2、可执行程序具体来说是什么
3、机器指令是完全由 0/1 组成的,那么机器怎么对这些 0/1 进行划分
4、虚拟内存简述
5、页置换简述
6、页在你的理解中究竟是什么
7、主机 A,主机 B,分别有 IP 地址,请从 ip 层及以下的层面描述主机 A 怎么和主机 B 进
行信息交互
8、什么是 cookie
9、互斥锁有了解吗
10、同步和异步是什么
11、寄存器的作用
12、进程和线程
13、进程的各个状态
14、多核处理器的进程调度
15、练手题,回文字符串判断
16、给一组字符串和一个目标字符串,组里面的字符串可以被多次使用,判断能不能不重叠
地组成目标字符串
第九篇
**一面 2020/3/13 **
1、自我介绍
2、聊项目
3、主要用什么语言
4、面向对象的特点
5、C++指针和引用的区别
6、内存里堆区和栈区的区别
7、给定二叉树前序遍历和中序遍历,构造这棵树
8、两个有序数组,找中位数
9、TCP UDP 区别
10、HTTP HTTPS 区别
11、从输入 URL 按回车到浏览器渲染出网页都发生了什么
12、简单描述一下虚拟内存、虚拟内存解决了什么问题
13、页面置换算法
14、死锁的四个条件
**二面 2020/3/15 **
1、面向对象是怎么回事
2、虚函数是怎么回事,析构函数为啥一般都得是虚的
3、ACID 讲一下
4、信号量讲一下
5、单链表怎么找倒数第 n 个节点
6、给定二叉树前序遍历和中序遍历,求后序遍历
7、代码题:给定分子式,形如 ‘HMg2(H2O(N3Ag)2)3N2’,求每个原子出现多少次,输出
一个 map,如 map
(这个代码是 LeetCode 原题(726、原子的数量)
第十篇
**一面 2020/2/24 **
1、lower_bound 和 upper_bound 区别,写一下 lower_bound
2、二维 vector 的写法,先行再列和先列再行遍历
3、结构体{int 学生学号,float 成绩},按成绩排序两种实现
4、重载小于号和函数指针
5、stl 容器的内存增长
6、malloc 发生了什么
7、fork 进程共享哪些内容
8、父进程被 kill 子进程会怎么样
9、为什么 free 不需要传块大小而 malloc 需要
10、free 一个块发生了什么
11、空闲链表怎么组织的
12、空闲链表怎么节省存链接的空间
13、信号量是什么,见过哪些 linux 的锁,信号量和锁的区别
14、你怎么实现信号量
15、讲讲流量控制和拥塞控制是啥,分别减轻哪里的压力
16、慢启动算法
17、nagle 优化什么时候开什么时候不开
18、epoll,select 性能差异
19、epoll 的边缘触发为什么用非阻塞读
20、数据库为什么能加速数据存储
21、讲了下 b+树原理
**二面 2020/2/24 **
1、实习干了啥
2、你觉得可不可能不需要 ack 实现完美传输
3、怎么降低重传率
4、https 的安全怎么实现的,接触过其他安全相关的技术吗
5、讲了下自己服务器改 ssh 端口禁密码登录设置公钥登陆啥的
6、堆栈区别,越详细越好
7、代码题,树的最小深度
8、局部性
9、代码题,用一个 70%返回 1 的函数构造一个 50%返回 1 的函数,给个框架就可以
求职必备刷题官网:https://github.com/bennyrhys/interview
【更多互联网公司笔试面试真题请关注“让我遇见相似的灵魂”公众号】