C++面试系列文章
前言
虽然网上c++面试教程很多,但是无非是人云亦云,就算学习了,也是碎片化的知识点,不系统,为了让朋友们能够系统的学习c++以及c++中面试的常考知识点,对c++进行一系列的总结。
一、C++开发可以做什么?
通常大家总在问c++到底可以做什么?从这个排名中可以看出C++语言应用是非常广泛的。可以用于两个方面,C++语言可以用于以下行业
1、游戏
2、流媒体服务器
3、网络软件
4、人工智能服务器
5、高性能服务器
6、界面编程QT/MFC
7、嵌入式开发
二、面试内容
1. C++基础知识
基础知识
1、c++面向对象,三大特性的理解 继承 封装 多态
2、c++与c的区别(面向对象与面向过程差异)
3、c++三种继承的特点,public、protect、private类型
4、c++重载、重写、重定义
5、构造函数、析构函数、拷贝构造、赋值运算符等
6、继承中构造函数与析构函数的调用顺序
7、深拷贝、浅拷贝
8、虚函数与纯虚函数的区别、以及析构函数为啥继承时须要定义为虚析构函数
9、c++ stl库有那些vector、list、set、queue、deque以及各自的优缺点
10、c++11 c++14 c++17有那些新特性,这次笔试中要求c++17,至少要把c++11 14中的新特性了解下
11、c++四种智能指针,为何会出现智能指针
12、c++四种类型转换
13、RAII原则用法
12、内存分配情况 堆区、栈区、全局区、文字常量区、代码区
13、指针与引用区别
14、堆栈的区别
15、const、static的用法与区别
16、右值、右值引用、左值、左值引用
17、c++完美转发
18、C++程序中如何调用被C编译器编译后的函数
19、虚函数表、虚指针关系
20、模板与泛型编程
21、多种排序算法,如冒泡、二分查找、选择排序、插入排序、快速排序等
22、可执行程序、动态库、静态库编译的过程
设计模式
必会的几种设计模式
1、单例模式、
2、简单工厂模式、抽象工厂模式
3、观察者模式
4、代理模式
5、模板模式
6、装饰模式
2. 计算机网络
1、计算机网络多层网络拓扑结构 如应用层、传输层、网络层、数据链路层、物理层
2、tcp与udp各自特点
3、tcp中三次握手与四次握手流程,为什么?
4、tcp、udp建立socket的sever、client的流程
5、select/poll/epoll实现优缺点,高效的都会用epoll,边缘触发与水平触发的区别
6、tcp连接管理、拥塞控制、流量控制、滑动窗口机制
7、路由器、交换机、集线器各有什么特点
8、子网划分、子网掩码、网关
9、单播、组播、广播
10、IPv4与NAT
11、Vlan基本概念与划分
12、http、https、对称加密、非对称加密、post、get、put等
13、常见的tcp与udp协议有哪些?tcp:http、smtp、ftp、telnet等,udp:dns、snmp等
3. 操作系统
1、cpu
2、内存
3、IO(磁盘)读写文件流程
4、网络IO(网卡接收数据的过程)
5、gpu
6、进程和线程、线程间通信、进程间通信
7、操作系统的组成
8、虚拟内存、cpu缓存
9、死锁与死锁产生的条件
10、进程的状态、线程的状态
11、进程调度 FCFS/SJF/优先级调度算法/时间片轮转调度算法
12、进程同步与互斥
13、中断
14、局部性原理
15、大小端存储方式
16、SRAM与DRAM
4. 数据结构与算法
1、堆与栈
2、数组
3、队列
4、列表
5、二叉树
6、平衡二叉树
7、红黑树
8、Btree,B+tree
9、空间复杂度与时间复杂度
10、前中后序排列
11、各种排序算法
12、左旋、右旋等
5. 工作中常见问题解决
1、内存泄漏问题解决
2、cpu占用率过高解决方法
3、死锁解决
4、死锁避免的方法
5、服务器运行一段时间后,越来越慢
6、长跑中crash问题的解决方法
7、内存越界问题crash问题
8、非必现问题定位
6. 性能优化
优化无非就是以下三方面,将服务器性能用到极限
1、cpu使用率
2、内存占用过高
3、磁盘IO负载过高
性能调试常见的命令有哪些:
//所有资源列表
top -> 1
//io分析
iostat -xc -n 1
//网络带宽
nload
//实时系统监控工具
mpstat -P ALL
//内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息
vmstat
//perf分析热点函数等
perf top -p pid
//google gperftool分析热点函数、内存泄漏、cpu
pperf三项功能
gmc gmp gcp
//进程以树状图显示
pstree
//堆栈分析
pstrace
//内存调试、内存泄漏检测以及性能分析的软件开发工具。
valgrind
netstat -nap
ifconfig
//绑定cpu
taskset -p 0xfe $(pidof app)
//ASAN检查内存问题很准确,推荐开启。
ASAN
//系统调用的性能排查
strace -c -p PID
//设置更高的优先级
renice
总结
以上是本人从事c++工作这么多年来常用常见的问题的总结,希望对你有所帮助把。