【面试】C++后台服务器应用开发面试问题汇总

声明:本来这就是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知识点总结”,知识点基本上就那些。如果有较长的准备时间,还是建议认真看下书籍,动手复现下,系统学习下 。

你可能感兴趣的:(C++)