声明:本来这就是copy,我没有声明版权啊,不要追究这个东西。只是为了方面复习、方面查缺补漏,所以把其他人的经验汇总起来了,顺便分享出来。
来源:个人的应聘经验以及牛客网上各大互联网公司的面试经验汇总。
前言
知识点量很大,更像一个大杂烩,很多问题都很简单、很常规,应该针对自己的薄弱点深入去剖析,而不是泛泛地去看,这样效率可能会更高些。本来我是想把问题极其答案都总结上的,但是因为知识点量太大、工作量巨大,所有就只总结了问题而没有答案。这篇博文相当于一个索引吧,具体深入了解还是要专门搜索。
*表示高频考点
C++语言、STL源码
- C++多态、继承、重载*
- 引用是怎么实现的?*
- static变量,static函数*
- 四种类型转化方式
- 虚函数机制*
- 写代码求虚函数表地址
- vector和数组的区别?*
- vector、list、set、map、unordered_map几种容器的操作、底层实现原理*
- STL的线程安全*
- C++调用C函数,C++和C混合编译
- New和malloc区别*
- 智能指针*
- C++11新特性*
- Struct和class区别*
- 多态机制的实现*
- sort底层实现
- C语言的内存管理机制*
- define的宏定义过程
- #define与const区别*
- extern关键字
- Struct内存对齐,为什么要做内存对齐?*
- 内存拷贝函数memcpy、strcpy原理
- free和delete区别*
- delete / delete[]区别*
- 重载和覆盖
- 为什么基类的析构函数要是虚函数*
- C语言如何实现对象
- 指针和引用区别*
- 智能指针,是否线程安全*
- 栈内存和堆内存,区别,优缺点*
- null 与 nullptr
- 深拷贝、浅拷贝*
- inline 和 宏定义的区别
- sizeof和strlen的区别
- atomic
- decltype
- 右值引用
- lambda
- override final关键字有什么用
- 宏函数定义
数据结构、算法
- 排序算法*
- 二叉树的前序遍历代码,递归和非递归形式
- 写堆、快速排序代码*
- 快速排序的复杂度,最优和最差*
- 如何找到搜索树的下一个元素
- 举例LRU,用STL实现LRU*
- 布隆过滤器
- hash表的实现、冲突解决方案*
- 红黑树和AVL的区别,红黑树的优势*
- 红黑树和一般的平衡二叉树,增、删、改、查的过程和效率、时间复杂度*
- 双向链表删除一个节点
- 堆排序过程*
- 各种排序算法时空复杂度以及稳定性*
网络编程、操作系统、计算机网络
- 用户态和内核态的区别,用户态和内核态切换的代价*
- 环形缓冲区的好处
- TCP如何实现可靠,如何实现流量控制和拥塞控制?*
- 本机不同进程间用socket通信,数据是否经过网卡
- 如果让你实现一个服务器应用的开发,怎么做
- Select/poll/epoll(IO复用、区别)*
- 进程和线程区别、进程的状态,*
- 进程哪些资源线程可以用
- 怎么查看TCP状态
- 进程的通信,哪个效率最高,为何*
- socket网络编程的过程*
- 举例多线程可能的问题
- 进程调度算法*
- TCP与UDP*
- 快重传和快恢复*
- tcp三次握手为什么是三次?不能是2次或者4次呢?(TCP四次握手同问)*
- http状态码*
- reactor与proactor
- 页式内存管理,虚拟内存映射到物理内存怎么实现,内存分级*
- 锁机制、各种锁*
- 公平锁和非公平锁
- 线程池了解吗?他是怎么实现的?
- 如何实现线程切换
- 消费者与生产者模型
- 线程是不是越多越好?*
- http与https的区别,https是怎么实现加密传输的*
- 对称加密与非对称加密的区别*
- get与post的区别
- Linux系统常用的命令行指令*
- 输入网址后发生的一系列过程(用户http请求,从客户端到服务器端,经历了什么)*
- 虚拟内存是什么?*
- 内存泄漏诊断
- protobuf
- 网络安全攻击有哪些
- DDOS有哪些,如何防范
- 虚拟机逃逸过程
- Openstack明文存储的好处
- IP地址跳变时,若有服务正在使用怎么办
- CDN了解吗,有什么好处
- 网卡字节流->用户interface,内核干了什么
- Core dump发生了什么
- 系统调用过程*
- ssl协议
- 粘包和分包
- 死锁,解决方法*
- mmap是什么*
- DNS递归查询和迭代查询过程*
- 公钥和私钥*
- 段表、页表(段页式存储管理)*
- 中断机制*
- 四次挥手2MSL,time-wait*
- 动态链接和静态链接发生了什么
- 零拷贝什么思想,为什么零拷贝,节省了什么
- tcp flooding攻击,如何防范
- 中间人攻击,如何防范
- 消息队列使用
- 如何实现可靠的udp*
- 网络七层模型、协议有哪些*
- 为什么要有ip和mac、mac地址是如何来的
- 缺页了怎么办*
- 虚拟内存和物理内存,为什么要这样设计
- 长连接和短连接,什么时候会出现*
- 长连接是如何维持的*
- 心跳机制*
- 什么叫字节流,什么叫数据报*
- 内存泄漏的场景、处理方法
- Post数据包的结构
- 进程同步方式*
- linux权限管理
- 乐观锁悲观锁*
- 理解ip地址和端口
- linux查看网络配置命令*
- 路由算法及特点
- 段错误原因有哪些
- 介绍大小端存储模式*
- 几种页面置换算法
- 常用调试工具
- 信号和信号量的区别
- 系统调用*
- Nagle算法
- gdb调试*
- 布隆过滤器和bitmap的区别
- 多线程与单线程的优劣
- CAP定理
- DNS为什么用UDP
- 定时器是怎么实现?
- 什么是惊群问题?*
- ELF
MySQL数据库
- 数据库引擎的区别*
- 事务的ACID*
- 事务的实现原理
- 事物隔离等级*
- MySQL的索引,使用索引会带来什么额外的开销?*
- 一致性哈希*
- 主键和唯一键的区别*
- 数据库注入过程,如何防范
- 索引的实现原理,B树/B+树区别*
- 什么时候不能用索引
- mysql如何实现可重复读
- 最左前缀*
- 聚簇索引和非聚簇索引,实现区别,索引存在哪里了
- 什么是外键*
- 读写分离*
设计模式
23个设计模式,我看的这个视频,挺好,通俗易懂
https://www.bilibili.com/video/BV1kW411P7KS?from=search&seid=4001930910329357704
撕代码
《剑指offer》吃透*
leetcode
项目经验
- 说一个自己做过的项目*
- 项目用到技术是什么*
- 为什么要这样做*
- 项目的难点是什么*
其他
- 自我介绍
- 为什么要做C++后台开发
- 智力题
- 读过什么书
- 大学经历
- 实习时间
- 还有什么要问面试官的
… …
书籍总结
《C++Primer》
《Effective C++》
《More Effective C++》
《C++标准程序库》
《深度探索C++对象模型》
《STL源码剖析》
《数据结构》
《现代操作系统》
《Linux内核设计与实现》
《UNIX高级环境编程》
《UNIX网络编程 第1卷》
《UNIX网络编程 第2卷》
《Linux多线程服务端编程》
《Linux高性能服务器编程》
《POSIX多线程程序设计》
《深入理解计算机系统》
《计算机网络》
《图解HTTP》
《TCP/IP详解》
《程序员的自我修养》
《设计模式之禅》
《高性能MySQL》
《剑指offer》
结束语
基本上把所有面试问题都包含进来了,对付面试是绝对够用了。我把一些我认为高频的问题都标记了出来,如果我总结的不是很好, 可以针对某一部分搜索”XXX知识点总结”,知识点基本上就那些。如果有较长的准备时间,还是建议认真看下书籍,动手复现下,系统学习下 。