这还不简单,看看腾讯,字节这些大厂面试题就知到了
1. 【腾讯】C++岗-微信面经
2. 【腾讯】C++岗-暑期实习后台开发(已拿offer)
3. 【腾讯】C++岗-WXG事业群实习-三轮面经
通过面经可以看出,C++ 这块需要掌握的
- 指针与引用的区别,C 与 C++ 的区别,struct 与 class 的区别
- struct 内存对齐问题,sizeof 与 strlen 区别
- 面向对象的三大特性:封装、继承、多态
- 类的访问权限:private、protected、public
- 类的构造函数、析构函数、赋值函数、拷贝函数
- 移动构造函数与拷贝构造函数对比
- 内存分区:全局区、堆区、栈区、常量区、代码区
- 虚函数实现动态多态的原理、虚函数与纯虚函数的区别
- 深拷贝与浅拷贝的区别
- 一些关键字:static, const, extern, volatile 等
- 四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
- 静态与多态:重写、重载、模板
- 四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
- 右值引用
- std::move函数
- 迭代器原理与迭代器失效问题
- 一些重要的 STL:vector, list, map, set 等。
- 容器对比,如 map 与 unordered_map 对比,set 与 unordered_set 对比,vector 与 list 比较等。
- STL容器空间配置器
等等。
根据书来学就可以了,然后学到一些重点,可以重点关注一下。
书籍推荐:
1、《C++Primer》,这本书内容很多的,把前面基础的十几章先看一看,不用从头到尾全啃,后面可以字典来使用。
2、《STL 源码剖析》,必看书籍,得知道常见 STL 的原理,建议看个两三遍。
3、《深度探索C++对象模型》,这本主要讲解面向对象的相关知识,可以帮你扫清各种迷雾。
视频推荐:
可以在 B 站侯捷老师讲的视频,不适合初学者,讲的大部分都是进阶,大家 B 站搜索侯捷就行
面试题:
学完之后可以通过面试题复习,这里整理了:
15万字C++开发面试手册出炉(C++和计算机基础全有)mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100011759&idx=1&sn=d57d89b2abefb6ed8370cf56928ed070&chksm=4e43a53b79342c2d81dd60222ff01df14cef4a4264350514e6221db1abe380ffabfd223b08bc#rdmp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100011759&idx=1&sn=d57d89b2abefb6ed8370cf56928ed070&chksm=4e43a53b79342c2d81dd60222ff01df14cef4a4264350514e6221db1abe380ffabfd223b08bc#rd书籍下载看这里:
少走弯路,必读计算机经典书籍推荐(含下载方式)mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100010970&idx=1&sn=91f14c2c08e9fb8a0539c55b7459d60a&chksm=4e43a00e79342918ed8052851f455faa705a6a137eefec91ee04debc885302bc86c5032f5368#rdmp.weixin.qq.com/s?__biz=Mzg2NzA4MTkx不过呢,除了C++,计算机网络和操作系统这块也经常会问,需要掌握的有
计算机网络
物理层、链路层:
- MTU,MAC地址,以太网协议。
- 广播与 ARP 协议
网络层
- ip 地址分类
- IP 地址与 MAC 地址区别
- 子网划分,子网掩码
- ICMP 协议及其应用
- 路由寻址
- 局域网,广域网区别
传输层(主要就是 TCP)
- TCP首部报文格式(SYN、ACK、FIN、RST必须知道)
- TCP滑动窗口原理,TCP 超时重传时间选择
- TCP 拥塞控制,TCP 流量控制
- TCP 三次握手与四次挥手以及状态码的变化
- TCP连接释放中TIME_WAIT状态的作用
- SYN 泛洪攻击
- TCP 粘包,心跳包
- UDP 如何实现可靠传输
- UDP 与 TCP 的区别
- UDP 以及 TCP 的应用场景
应用层
- DNS 原理以及应用
- HTTP 报文格式,HTTP1.0、HTTP1.1、HTTP2.0 之间的区别
- HTTP 请求方法的区别:GET、HEAD、POST、PUT、DELETE
- HTTP 状态码
- HTTP 与 HTTPS 的区别
- 数字证书,对称加密与非对称加密
- cookie与session区别
- 输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)
书籍推荐:零基础可以先看《图解HTTP》,当然,也可以直接看《计算机网网络:自顶向下》这本书,这本书建议看两遍以及以上,还有时间的可以看《TCP/IP详解卷1:协议》。
帅地也写过一个极简入门教程:
计算机网络入门简介www.iamshuaidi.com/359.htmlwww.iamshuaidi.com/359.html操作系统
总结起来大致:
1、进程与线程区别
2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
3、互斥锁与自旋锁的底层区别
4、孤儿进程与僵尸进程
5、死锁及避免
6、多线程与多进程比较
7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
8、管道与消息队列对比
9、fork进程的底层:读时共享,写时复制
10、线程上下文切换的流程
11、进程上下文切换的流程
12、进程的调度算法
13、阻塞IO与非阻塞IO
14、同步与异步的概念
15、静态链接与动态链接的过程
16、虚拟内存概念(非常重要)
17、MMU地址翻译的具体流程
18、缺页处理过程
19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法
书籍推荐:《现代操作系统》
书籍下载看这里:
少走弯路,必读计算机经典书籍推荐(含下载方式)mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100010970&idx=1&sn=91f14c2c08e9fb8a0539c55b7459d60a&chksm=4e43a00e79342918ed8052851f455faa705a6a137eefec91ee04debc885302bc86c5032f5368#rdmp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=100010970&idx=1&sn=91f14c2c08e9fb8a0539c55b7459d60a&chksm=4e43a00e79342918ed8052851f455faa705a6a137eefec91ee04debc885302bc86c5032f5368#rd操作系统和计算机网络面试题
一、计算机网络 45 道
1. 为什么需要三次握手?两次不行?
2. 为什么需要四次挥手?三次不行?
3. TCP与UDP有哪些区别?各自应用场景?
4. HTTP1.0,1.1,2.0 的版本区别
5. POST和GET有哪些区别?各自应用场景?
6. HTTP 哪些常用的状态码及使用场景?
7. HTTP状态码301和302的区别,都有哪些用途?
8. 在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?
9. HTTP 如何实现长连接?在什么时候会超时?
10. TCP 如何保证有效传输及拥塞控制原理
11. IP地址有哪些分类?
12. GET请求中URL编码的意义
13. 什么是SQL 注入?举个例子?
14. 谈一谈 XSS 攻击,举个例子?
15. 讲一下网络五层模型,每一层的职责?
16. 简单说下 HTTPS 和 HTTP 的区别
17. 对称加密与非对称加密的区别
18. 简单说下每一层对应的网络协议有哪些?
19. ARP 协议的工作原理?
20. TCP 的主要特点是什么?
21. UDP 的主要特点是什么?
22. TCP 和 UDP 分别对应的常见应用层协议有哪些?
23. 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?
24. 保活计时器的作用?
25. TCP 协议是如何保证可靠传输的?
26. 谈谈你对停止等待协议的理解?
27. 谈谈你对 ARQ 协议的理解?
28. 谈谈你对滑动窗口的了解?
29. 谈下你对流量控制的理解?
30. 谈下你对 TCP 拥塞控制的理解?使用了哪些算法?
31. 什么是粘包?
32. TCP 黏包是怎么产生的?
33. 怎么解决拆包和粘包?
34. forward 和 redirect 的区别?
35. HTTP 方法有哪些?
36. 在浏览器中输入 URL 地址到显示主页的过程?
37. DNS 的解析过程?
38. 谈谈你对域名缓存的了解?
39. 谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?
40. HTTPS 的工作过程?
41. HTTP 和 HTTPS 的区别?
42. HTTPS 的优缺点?
43. 什么是数字签名?
44. 什么是数字证书?
45. Cookie 和 Session 有什么区别?
答案看这里:Java面试题必知必会(附答案)
二、操作系统 32 道
1. 简单说下你对并发和并行的理解?
2. 同步、异步、阻塞、非阻塞的概念
3. 进程和线程的基本概念
4. 进程与线程的区别?
5. 为什么有了进程,还要有线程呢?
6. 进程的状态转换
7. 进程间的通信方式有哪些?
8. 进程的调度算法有哪些?
9. 什么是死锁?
10. 产生死锁的原因?
11. 死锁产生的必要条件?
12. 解决死锁的基本方法?
13. 怎么预防死锁?
14. 怎么避免死锁?
15. 怎么解除死锁?
16. 什么是缓冲区溢出?有什么危害?
17. 分页与分段的区别?
18. 物理地址、逻辑地址、虚拟内存的概念
19. 页面置换算法有哪些?
20. 谈谈你对动态链接库和静态链接库的理解?
21. 外中断和异常有什么区别?
22. 一个程序从开始运行到结束的完整过程,你能说出来多少?
23. 什么是用户态和内核态
24. 用户态和内核态是如何切换的?
25. 进程终止的方式
26. 守护进程、僵尸进程和孤儿进程
27. 如何避免僵尸进程?
28. 介绍一下几种典型的锁?
29. 常见内存分配内存错误
30. 内存交换中,被换出的进程保存在哪里?
31. 原子操作的是如何实现的
答案看这里
15万字C++开发面试手册出炉(C++和计算机基础全有)除此之外,还得掌握 MySQL
下面这些是我认为比较重要的知识点:
1、一条 sql 语句是如何执行的?也就是说,从客户端执行了一条 sql 命令,服务端会进行哪些处理?(例如验证身份,是否启用缓存啥的)。
2、索引相关:索引是如何实现的?多种引擎的实现区别?聚族索引,非聚族索引,二级索引,唯一索引、最左匹配原则等等(非常重要)。
3、事务相关:例如事务的隔离是如何实现的?事务是如何保证原子性?不同的事务看到的数据怎么就不一样了?难道每个事务都拷贝一份视图?MVCC 的实现原理(重要)等等。
4、各种锁相关:例如表锁,行锁,间隙锁,共享锁,排他锁。这些锁的出现主要是用来解决哪些问题?(重要)
5、日志相关:redolog,binlog,undolog,这些日志的实现原理,为了解决怎么问题?日志也是非常重要的吧,面试也问的挺多。
6、数据库的主从备份、如何保证数据不丢失、如何保证高可用等等。
7、一些故障排查的命令,例如慢查询,sql 的执行计划,索引统计的刷新等等。
对于 2-4 这四个相关知识,面试被问到的频率是最高的,有时候面试会让你说一说索引,如果你知道的多的话就可以疯狂扯一波了,记得我当时总结了一套扯的模版:
先说从 B 树角度说为啥索引会快-》趁机说一下索引的其他实现方式-〉不同引擎在索引实现上的不同-》系统是如果判断是否要使用索引的-〉明明加了索引却不走索引?
只有你对各种数据结构和索引原理都懂,你才能扯的起来,对于事物和锁也是,当时面试官问了我事务是如何保证一致性的,刚好我研究过 ,redolog,binlog,undolog 这些日志,然后和面试官扯了好久。
书籍:《MySQL必知必会》和《MySQL技术内幕》
具体可以看我写的 MySQL 学习路线:
肝完了,我的 MySQL 学习之路mp.weixin.qq.com/s/uo5_wD1iYySNwQRfDJaHLAmp.weixin.qq.com/s/uo5_wD1iYySNwQRfDJa最后就是网络编程
网络编程这块,有些公司还是问的挺多的,特别是 IO 多路复用,同步非同步 IO,阻塞非阻塞啥的,当时面腾讯基本每次都问,,,,学习 C++ 这块还是要重视一下,下面我说一下比较重要的吧。
1、IO多路复用:select、poll、epoll的区别(非常重要,几乎必问,回答得越底层越好,要会使用)
2、手撕一个最简单的server端服务器(socket、bind、listen、accept这四个API一定要非常熟练)
3、线程池
4、基于事件驱动的reactor模式
5、边沿触发与水平触发的区别
6、非阻塞IO与阻塞IO区别
书籍:可以看一看《Unix网络编程》
书籍我给大家弄好了
少走弯路,必读计算机经典书籍推荐(含下载方式) |