序言
本贴是我在测开岗位面试中常见的面试题,以及我认为面试官会在春招常考的一些问题,大家可以针对性的复习
编程语言 C++
- c++机制
- C++与C的区别
- 内存覆盖怎么回事?
- 内存泄漏有哪几种情况以及如何解决
情况:在类的构造和析构函数中未成对使用new/delete操作符;使用了野指针(未初始化的指针/指针所指地址已被释放/指针操作超越了作用域);未正确清除嵌套的对象指针等
解决:使用智能指针(shared_ptr、weak_ptr、unique_ptr) - C++与Java的区别
执行速度、是否面向过程、指针、是否多继承、GC垃圾回收机制、是否可重载等 - 内存的分配方式
静态分配、栈区分配、堆区分配 - 内存分配有哪些区
堆、栈、常量区、全局区、代码区 - 内存分配中堆和栈的区别
管理方式、空间大小、碎片、生长方向、分配效率 - C++11的新特性你知道哪些,用过哪些
auto
nullptr和NULL的区别
智能指针
并发编程
- 面向过程
1.*指针/&引用的区别
内存、sizeof后大小、初始化、指向是否可变、++含义、是否有多级
2.const/define区别
定义数据类型、安全性检查、是否可调试
3.typedef/define区别
用法、所在处理过程
4.sizeof/strlen的区别
5.内存对齐是怎么回事
6.extern的作用
7.struct(c++)与class区别
默认成员权限、默认继承权限、内存
8.c++和c中的struct的区别
9.sizeof、strlen、size、length区别
10.函数模板 template 用法
11.new/delete与malloc/free的区别
12.++i,i++的区别和源码 *
13.#include<>和#include""的区别 *
- 面向对象
1.三大特性
封装、继承、多态
2.执行构造函数/析构函数的顺序
3.重载和重写的区别
4.虚函数介绍一下
虚函数表
5.多态方式
动态多态、静态多态
6.纯虚函数使用方法
7.C++中拷贝赋值函数的形参能否进行值传递
- 容器STL
1.map/set的底层实现和区别
2.vector/list区别
数据结构
十大排序
1.冒泡排序 O(n^2) * 稳定
适用于基本有序、数据量小序列
2.选择排序 O(n^2)
3.插入排序 O(n^2)(直接插入,折半插入)
4.希尔排序 O(nlogn)
5.归并排序 O(nlogn)
6.快速排序 O(nlogn) * 不稳定(枢轴改进方法)
7.堆排序 O(nlogn) * 不稳定
8.计数排序 O(n+k)
9.桶排序 O(n+k)
10.基数排序 O(nk)
重点是上面带的排序算法源码,以及稳定性。其余算法了解即可,会源码更佳。二叉树
1.遍历
前序,中序,后序遍历
递归,非递归
2.平衡二叉树
插入自调整
LL,RR,LR,RL
3.红黑树 *(了解即可,不需要手撕)
应用:c++ set/map java HashMap(数组+链表+红黑树)
当链表长度太长(默认超过8)时,链表就转换为红黑树,利用红黑树快速增删改查的特点提高HashMap的性能,其中会用到红黑树的插入、删除、查找等算法。五大性质:
性质1. 节点是红色或黑色。
性质2. 根节点是黑色。
性质3.所有叶子结点都是黑色。(叶子是NIL(值为空且黑色)节点,虚拟出来的)
性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5.. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。黑色完美平衡
与平衡为二叉树对比(或问,为什么c++和java底层不用平衡二叉树)
4.B、B+树
应用:操作系统的文件索引和数据库索引
性质与区别:请自己查阅
为什么说B+tree比B树更适合实际应用中操作系统的文件索引和数据库索引?
- 图
BFS、DFS
数据库
写一个sql语句
推荐大家先复习完语法后刷牛客/LeadCode上的sql题,中等练完就行,要求不太高重点:
增删改查
多表查询
排序 ORDER BY (AESC/DESC)
聚合
锁
- 多表查询
1.交叉连接 CROSS JOIN
2.自然连接 NATURALC JOIN
3.外连接 *(重点)
左连接
右连接
4.左连接时on/where 的区别
计算机网络
模型 *
七层IOS模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
4层TCP/IP模型:网络接口层、网际层、传输层、应用层
5层综合模型(谢希仁版):物理层、数据链路层、网络层、传输层、应用层各层的作用(字节、阿里问过)
网络层
1.IPv4
1)地址格式
点分十进制
2)地址划分 了解
A/B/C/D/E类2.网络地址转换NAT 了解
3.路由传输协议
RIP 基于距离向量的选择
OSPF 开放 最短路径协议
了解算法内容即可传输层
1.TCP
1)特点 *
面向连接、全双工,面向字节流、可靠传输、有拥塞控制、开销大2)首部字段
序号 seq
确认号 ack
控制位 ACK FIN SYN
检验和(阿里问过)3)如何实现可靠传输 *
校验和、排序(流量控制)、确认机制、重传机制、拥塞控制2.拥塞控制 *
慢开始、拥塞避免、快重传、快恢复
算法过程3.三次握手建立连接 *
1)过程
2)改成两次握手可以吗,为什么
不可以
3)改成四次握手可以吗,为什么
可以,但没必要4.四次挥手释放连接 *
1)过程
2)改成三次挥手可以吗,为什么
不可以
3)客户端收到第二次挥手信息可以关闭监听吗,为什么?
不可以5.UDP
1)特点 *
面向无连接、尽最大努力交付、面向报文、无拥塞控制、开销小
2)TCP与UDP的区别 *
3)TCP与UDP的应用场景
TCP:HTTP
UDP:直播
QQ通信:TCP与UDP应用层
1.HTTP *
1)请求报文与响应报文的格式2)请求方法
post/get的区别
幂等、缓存、浏览器历史、安全性、可见性、size3)状态码
4)HTTP的无状态特性如何解决
cookie和session
2.cookie和session的区别
3.DNS解析过程 *
4.https *
1)http与https的区别
2)SSL通信过程(了解)
3)非对称加密与对称加密区别
5.浏览器输入url发生了什么
- 其他常用协议有哪些
HTTP FTP DNS SMTP DHCP 等
操作系统
- 进程 *
1.进程间的通讯方式 IPC
2.僵尸进程是什么
当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程
3.如何解决僵尸进程
线程 *
1.线程间的通信方式
2.进程与线程的区别 *
本质、拥有资源、切换开销、共享资源程度死锁
1.产生死锁的必要条件 *互斥
不可剥夺
请求并保持
循环等待2.解决死锁的方法
内存管理(了解)
Linux常用命令
一般面试官都会问:你知道哪些linux常用命令/你用过Linux系统吗
也会出一些简单的问题让大家写命令
这部分推荐大家看《Linux环境编程》——姜林美(我们学校老师出的书,当时选修课就是他上的,hhh)动手操作,然后平时多用linux系统。我当时无论课程还是项目部署都接触linux系统比较多,所以比较熟悉,大家还是多练
常用命令 *
ls 显示文件或目录
mkdir 创建目录
cd 切换当前工作目录
touch 创建空文件
echo 可以输出内容到标准输出,以空白分割字符串,并且后面增加换行
cat 查看文件内容
cp 拷贝文件
mv 移动或重命名文件
rm 删除文件-r 递归删除,可删除子目录及文件 -f 强制删除
find 在文件系统中搜索某文件
wc 统计文本中行数、字数、字符数
pwd 显示当前目录的绝对路径 *
scp 复制文件从远端服务器到本机或反过来scp local_file remote_username@remote_ip:remote_folder
scp问题(了解)
scp 复制后如何查看是否完全复制?在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。
解决方法
使用【md5sum命令】系统管理命令
stat 显示指定文件的详细信息,比ls更详细
top 动态显示当前耗费资源最多进程信息-n 设置信息更新次数 -d 设置信息更新时间 -p 显示指定的进程信息
free 显示内存状态
ps 显示当前进程的状态
du 显示目录或文件的大小。
df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息vim(了解,也不常问到,但得知道)
linux三剑客(了解)
grep *
sed
awk
全部评论
(13) 回帖