一名渣渣C++程序员的心酸春招/秋招记【篇幅较长,慎入】

面试总结

C++后台开发重要知识点总结

算法

  1. 排序:

    • 冒泡排序
    • 简单选择排序
    • 直接插入排序
    • 折半插入排序
    • 希尔排序
    • 快速排序
    • 归并排序
    • 堆排序
    • 基数排序
    • 计数排序
      各种排序的时间复杂度,空间复杂度,是否稳定,时间复杂度是否与初始序列有关?
  2. 查找:二分查找,lower_bound, upper_bound

  3. 分治与递归:逆序对数,大数相加,大数相乘

  4. 贪婪算法

  5. 动态规划:背包问题,找零钱问题,最长公共子序列(LCS)
  6. BFS,DFS,最短路径(Dijkstra算法,Floyd算法)
  7. 字符串匹配算法:KMP算法,BM算法,Sunday算法

  8. 补充:Top-K算法,Bitmap算法, Bloom Filter算法,一致性哈希算法,8数码问题(A*算法,B*算法,IDA*算法)

数据结构

  1. 线性表:数组,栈,队列,链表特点以及应用场景。
  2. 数组:老鼠走迷宫问题,稀疏矩阵压缩
  3. 链表:单链表逆序,单链表去重,单链表删除结点(仅给出删除结点),两个链表交叉求交叉点,判断单链表是否有环以及确定环的入口结点。
  4. 二叉树:二叉树的遍历(递归,非递归),层次遍历;
  5. 二叉树求深度,宽度;二叉树镜像;创建二叉树;
  6. 哈夫曼树,哈夫曼编码。BST, AVL(AVL单侧旋转,双侧旋转),红黑树(红黑树的特征)。
  7. 图:邻接矩阵,邻接表,拓扑排序,最小生成树,trie树
  8. 补充:跳跃表,hashtable

C++

  1. C与C++的区别(面向对象的特点)
  2. 指针和引用的区别?
  3. 悬空指针和野指针有什么区别?
  4. 什么是内存泄漏?怎么产生的?如何检测?
  5. static和const区别?
  6. const和define的区别?
  7. struct和class的区别?
  8. sizeof和strlen的区别?
  9. 32位,64位系统中,各种常用内置数据类型占用的字节数?
  10. virtual, inline, decltype,volatile,static, const关键字的作用?使用场景?
  11. C++中函数指针的作用?由那些属性唯一决定一个函数指针?
  12. C++中如何唯一确定一个重载函数?重载函数默认初始化方式?
  13. C++多态的实现机制?虚函数表的内部实现机制?
  14. C++中重载,覆盖,隐藏的区别?
  15. 深拷贝与浅拷贝的区别?
  16. 派生类中构造函数,析构函数调用顺序?
  17. C++类中数据成员初始化顺序?
  18. 结构体内存对齐问题?结构体/类大小的计算?
  19. static_cast, dynamic_cast, const_cast, reinpreter_cast的区别?
  20. shared_ptr, unique_ptr, weak_ptr的区别?auto_ptr与shared_ptr的区别?weak_ptr主要是为了解决什么问题的?shared_ptr的内部实现?
  21. new/delete和malloc/free的区别?
  22. strcat,strcpy,strncpy,memset,memcpy的内部实现?
  23. new operator, operator new, placement new的区别?
  24. 单例模式?懒汉式?饿汉式?
  25. C++中有哪些容器(序列容器,关联容器)?vetor与list的区别?set与unordered_set的区别?

操作系统

  1. 操作系统加载流程?
  2. 进程与线程的区别和联系?
  3. 进程的常见状态?以及各种状态之间的转换条件?
  4. 静态链接与动态链接的优缺点?
  5. 死锁?死锁产生的条件?预防、避免死锁的方法?
  6. 进程间通信的方式?各种方式的区别以及应用场景?
  7. 经典同步问题解法:生产者与消费者问题,哲学家进餐问题,读者写者问题。
  8. 线程同步的方式?各种方式的区别?
  9. 虚拟内存?使用虚拟内存的优点?
  10. Linux下进程的内存布局?
  11. 页面置换算法?LRU Cache算法?
  12. Linux IO多路复用的机制:select,poll,epoll。三种复用机制的区别与联系?

计算机网络

  1. OSI 7层网络模型中各层的名称及其作用?
  2. TCP/IP 4层网络模型名称及其作用?
  3. OSI 7层网络中各层的常见协议以及协议作用?
  4. OSI网络模型中工作在各个层次的物理设备以及其作用?
  5. IP层功能?如何用int型变量保存一个IPv4地址?
  6. TCP协议(重点):TCP3次握手,4次挥手详细过程。TCP滑动窗口,拥塞控制,流量控制原理。TCP 建立、断开连接过程中13中状态以及各种状态之间的转换条件? TCP粘包问题?如何解决?
  7. UDP协议:头信息?使用场景?如何使用UDP建立可靠连接?
  8. http协议:各个版本的区别?http请求头,响应头常用属性?常用状态码及其含义?
  9. socket编程:服务端,客户端建立TCP连接调用那些函数?分别对应什么状态?
  10. Linux 常用网络命令的原理:ping, traceroute
  11. 浏览器中点击一个超链接到显示对应页面的全过程?
  12. DNS的作用?什么时候使用TCP?什么时候使用UDP?

数据库

  1. MySQL中MyISAM与InnoDB的区别?
  2. MySQL中索引内部实现是什么?MyISAM和InnoDB中使用的B+树有什么区别?B树和B+树的区别?
  3. SQL常用查询语句的使用?各种连接(外连接,内连接,全连接)的区别?
  4. 数据库范式?1,2,3,BCNF,4, 5
  5. 事务?事务的特点?事务的四个隔离级别,各个级别解决的问题?
  6. 索引?适合创建索引的条件?不适合创建索引的条件?
  7. 索引优化策略?五个优化级别
  8. 存储过程?
  9. 触发器?
  10. 日志

项目

  1. 做了哪些事情?
  2. 遇到什么问题?如何处理的?
  3. 有什么改进方法?为什么这样做?

面试经历

本人(下文简称菜鸟)过完年,听同学说很多公司都在开始找实习了。菜鸟突然感觉压力山大,什么都不会。于是菜鸟像无头苍蝇一般,随便开始复习,梦想能够找个实习。然后惨痛的春招就开启了。

春招的惨痛经历

面试的公司:蚂蚁金服,菜鸟网络,腾讯

  1. 蚂蚁金服面试机会是通过内推获得的。当时菜鸟收到面试电话还挺兴奋,结果一面就挂了,也是尴尬。
  2. 接着又收到菜鸟网络的面试电话,接着被虐,一面挂。
  3. 后来又投了腾讯的内推,应为什么都没有准备,结果可想而知。
    此后,也做了一些公司的实习笔试,如网易,腾讯,京东等,都是石沉大海。

菜鸟经过这段沉痛的打击后,开始自我反省,决定放弃实习招聘,复习基础,准备秋招。

秋招内推惨痛经历

秋招内推了几十家公司,然后就陷入了无穷无尽的内推测评,在线笔试的***中,然后获得面试机会的公司也没有几家。(也或许是自己太水的原因吧!)请结合自身情况决定,以下建议仅供参考,
因此,建议秋招过程以校招为主,不要在秋招内推阶段花费太多经历,既影响心情,又不能认真复习,而且还会对校招造成影响(尤其是大厂)耽误秋招。

校招惨痛经历

同内推一样,陷入了无穷无尽在线笔试的***中,因为不擅长做笔试题,几乎没有收到什么笔试通知,只能通过霸面获得机会了(--捂脸--)。

面试的公司有:中兴通信,CVTE,小米,去哪儿,好未来,海康威视,华为,科大讯飞,浪潮,斐讯。
线下笔试的公司:ThoughtWorks,魅族,科大讯飞,用友,星网锐捷。
时间冲突没有面试的公司:迅雷

中兴面试

一面:

  1. 自我介绍
  2. 介绍一下C++ traits的原理以及作用?
  3. GDB 查看栈帧,寄存器的指令是什么?
  4. GCC常用编译选项有哪些?作用分别是什么?
  5. 进程间通信有哪些方式?各种方式的区别?

二面:

  1. 自我介绍
  2. 项目的代码量有多大
  3. shell熟不熟?
  4. 介绍一下进程间通信,说一下共享内存的原理;说一下信号量的种类,信号量和metux的区别。
  5. 手写代码:实现双向链表插入结点(自己定义结点的数据结构,用C语言实现)
  6. 为什么看Linux内核?
  7. 对薪资的要求?地点的选择?

CVTE面试

一面:

  1. 首先自我介绍
  2. 然后问项目中涉及到的技术:比如C++基础,STL, 进程间通信,多线程
  3. C++中有哪些容器?vector,list,forward_list,stack,queue。set,map,unordered_set, unordered_map。
  4. map底层是什么结构?hashmap底层是什么结构?hashtable的结构?
  5. vector是怎么释放空间的?主要说上层应用
  6. 介绍一下进程通信的有哪些方式?介绍一下共享内存的引用场景?
  7. 手写代码:使用宏定义?完成注册回调函数,解绑回调函数,通过ID获取对应回调函数的宏。
  8. 手写代码:实现一个单例模式
  9. 计算一个类的的大小(虚函数,内存对齐)
  10. 介绍一下socket()。客户端和服务端进行连接过程调用的函数。当客户端与服务端进行tcp连接,服务端没有accept()时,两端会处于什么状态?
  11. 介绍一下你擅长的而且没有涉及到的方面以及有什么问题要问吗?

小米面试

一面:

  1. 自我介绍
  2. 手写代码:用模板实现一个栈(内部使用动态申请的数组作为存储结构)。
  3. hash table的结构?hashtable 和hashmap的区别?hashtable是线程安全的吗?
  4. 介绍一下红黑树的特点?介绍一下红黑树插入的一个结点的操作(单侧旋转,双侧旋转)?
  5. TCP三次握手的过程?为什么会有第三次的确认报文?
  6. 手写代码:已知一个又向无环图,确定一个拓扑序列,用代码实现。

二面:

  1. 自我介绍
  2. 手写代码:单链表删除一个结点,只给出被删除的结点指针,写出代码。没有头结点可以吗?(剑指offer原题)
  3. 介绍一下https。http请求报文,应答报文中包含哪些信息?
  4. 手写代码:二叉树层次遍历。
  5. 手写代码:实现生产者与消费者问题。
  6. 手写代码:实现一个简单缓冲区。
  7. 设计一个缓存系统需要考虑什么问题?如何设计一个简单的LRU?
  8. 手写代码:实现一个LUR Cache get,put函数。说明数据结构
  9. 手写代码:字符串处理算法:abc-->abcd,abc(添加),abce(修改),abd(插入)。已知一个序列,判断最好的更改策略。说出基本思路,并用代码实现

去哪儿面试

一面:

  1. 自我介绍
  2. 介绍一下LRU ***的设计思路(笔试题内容)
  3. 信号量是什么?有什么应用场景?
  4. 虚拟内存的原理?虚拟内存的作用?
  5. 操作系统中进程的常见状态转换?
  6. 笔试题第二题的思路?已知一棵二叉树的结点信息,判断是否是BST?
  7. TCP确认重传机制?拥塞控制的机制?
  8. 给你一个系统硬件资源足够多的系统,你认为最多能打开多少个浏览器窗口?(客户端socket数量限制,系统对创建进程的限制)

二面:

  1. 自我介绍
  2. 介绍一下项目:首先介绍空间配置器的原理?在堆中申请空间与申请失败使用第一级空间配置器的区别是什么?内省排序的原理?怎样判断递归深度?直接判断还是递归中判断?
  3. 介绍一下虚拟内存?当使用malloc函数时会发生调页操作吗?
  4. 介绍一下hashtable的原理?
  5. 设计一个LRU ***?
  6. 手写代码: 实现一个LRU ***的get,put函数
  7. 当在LRU ***的链表中使用生存时间时,怎么判定某个记录到期?(使用绝对到期时间:当前时间+生存时间)

好未来面试

  1. 先讲一下视频拼接?怎么解决拼接过程中的重复问题?使用的是CPU还是GPU?
  2. 线程同步的方法?条件变量了解吗?
  3. TCP的拥塞控制?重传机制?
  4. TCP和UDP的区别?UDP一对多的情况?什么情况下使用UDP?
  5. ping,tracerout原理?怎样判断两个IP地址是否属于同一个网段?
  6. 路由器属于那一层?IP层的功能?
  7. DNS原理?DNS是哪一层协议?什么时候使用TCP,什么时候使用UDP?
  8. 内存池了解吗?怎样实现向上取整成为8的倍数?
  9. 虚函数与纯虚函数的区别?应用场景?
  10. private继承会怎样?
  11. 说一下单链表的特点?C++中什么容器和它对应?forward-list和list的区别?forward-list容器中有size()函数吗?为什么?那些容器中内部结构是树型结构?
  12. 二叉树有哪些遍历方式?层次遍历使用什么数据结构实现?
  13. 递归知道吗?递归需要注意什么问题?伪递归知道吗?实现机制?
  14. 介绍一下虚函数表的内部实现?
  15. 定义一个空类,有构造函数吗?构造函数都做了什么?
  16. 手写代码:实现sqrt()函数,不能使用库函数。(Leetcode原题)

海康威视面试

一面:

  1. 自我介绍
  2. 面试官说:看你比较了解C++,我就不问C++基础了,然后就直接问项目
  3. 项目遇到什么问题?怎么解决的?解决的效果如何?怎么想到这个解决方法的?
  4. 对工作地点的要求?薪资要求?
    二面:后来打电话让去二面,因为有事没法去,就放弃了

华为面试

一面:
主要围绕项目,研究方向和简历提问;主要问项目

  1. 自我介绍
  2. 手写代码:实现一个栈(C/C++均可)
  3. 手写代码:实现二叉树的层次遍历
  4. 画出项目的大致框架?画出自己负责的模块的大致框架?为什么要这样设计?遇到什么问题?怎么解决的?
  5. 了解过什么开源项目?在github上提交过代码吗?
  6. 对设计模式了解吗?常用的设计模式有多少种?说一下常见的设计模式?
  7. UML知道吗?能用UML绘制常用的设计模式吗?
  8. 介绍一下STL。STL空间配置器的原理?vector实现?hashtable内部实现?内省排序的原理?
  9. B+树的原理?B树和B+树的区别?为什么MySQL使用B+树?
  10. 红黑树的特点?为什么使用红黑树?应用场景有哪些?红黑树的旋转(单侧旋转,双侧旋转)
  11. 进程间通信的方式有哪些?信号量的原理?管道原理?消息队列原理?
  12. 多线程同步的方式有哪些?条件变量用法?条件变量和信号量的区别?
  13. Radis的特点?以及应用场景?常见的数据结构及特点?
  14. C陷阱与缺陷 中主要讲了什么内容?简单介绍一下
  15. 看了那些Linux相关的书籍?简单介绍一下印象最深的一本

科大讯飞面试

一面:

  1. 自我介绍
  2. 直接问我本科学校(本科学校不好,然后就对我没有兴趣了。。。)面试不到10分钟就结束了。
  3. 对存储过程了解吗?
  4. 计算类的空间大小?
  5. 写了个C++继承的例子,说一下删除基类指针调用了那些析构函数(主要考察虚析构函数的作用)

浪潮面试

开发类岗位主要招Java, C/C++招的人很少
一面:四个人一起面试,每个人简单做一下自我介绍,然后面试官回答大家的疑问,然后就结束了。主要看有没有做过项目,是不是Java方向
因为不是java,直接悲剧

斐讯面试

面试前会有一个笔试,三道算法题,手写代码,20分钟完成

一面:

一面主要讨论面试前的笔试题。看看基本功

  1. 自我介绍
  2. 讨论笔试题,考察算法基本功,语言表达能力,沟通能力

二面:

运气好,直接跳过了二面

三面:

又是聊家常

  1. 兴趣爱好
  2. 聊周围的朋友
  3. 对公司的了解
  4. 对工作地点的要求
  5. 对薪资的要求
    。。。。

面试官考察要点(个人观点,仅供参考)

  1. 足够的自信:如果你都不相信自己,怎么让别人相信你呢?
  2. 对应聘岗位相关的基础知识的掌握:这是毫无疑问的了,地球人都知道。
  3. 分析和解决问题的能力
  4. 项目经验
  5. 语言表达能力和沟通能力
  6. 抗压能力

持(zhao)久(gong)战(zuo)过程中的一点个人拙见

  1. 一定要早点准备,能够在春招解决的决不拖到秋招
  2. 春招找实习时,尽量通过内推,能不做笔试就不做
  3. 实习时最好能进大厂,不能进大厂不如好好在学校复习
  4. 最开始面试时,先找小公司练手,不要一开始就面大公司(虽然这样做不太厚道)
  5. 找工作时,最好能够抱个大神或者和应聘相同岗位的同学一起复习,共同学习、讨论
  6. 对于应聘开发岗的同学,坚持每天写代码是个好习惯。
  7. 做一份好的简历可以获得更多笔试机会。
  8. 适当放松,找工作是个持久战(至少对于大多数人是这样,大佬除外)。当感觉效率低下时,适当放松很有必要。

温馨提示:

  1. 一份好的简历可以获得更多的青睐,至少能够通过简历这一关。建议对照大厂对某个岗位的要求修改简历,尽量契合公司对对应岗位的要求。不会的赶紧恶补。
  2. 要对照着简历仔细看,你写上去的每一个知识点,都有可能成为面试官提问的点,一定不要把自己不会的写上去。重要的事情所三遍。一定不要把自己不会的写上去。一定不要把自己不会的写上去。
  3. 对于自己不是很熟的知识点,一定不要写成熟悉,no zuo no die。切记,切记。
  4. 多看大佬们的面经,对照着面经模拟面试,不会的或者不熟的赶紧恶补,再难的知识点都是能学会的,要相信自己。始终记住,只要想学,什么时候都不晚!!!

C++资料推荐

推荐按先后顺序学习,也可根据自身情况选择性学习

算法与数据结构

  1. 数据结构(C语言版) 严蔚敏
  2. 算法(第四版)Robert Sedgewick著   力荐
  3. 大话数据结构

操作系统

  1. 计算机操作系统   汤子瀛     力荐
  2. 现代操作系统 [美] Andrew S·Tanenbaum
  3. 深入理解计算机系统(CSAPP)

计算机网络

  1. 计算机网络  谢希仁
  2. TCP/IP协议族     力荐
  3. TCP/IP详解 卷一:协议

数据库

  1. 数据库系统概念
  2. 深入浅出MySQL
  3. 高性能MySQL

Linux相关书籍

  1. 鸟哥的Linux私房菜:基础学习篇(第三版)
  2. Linux命令行和shell脚本编程宝典
  3. Linux Shell脚本攻略
  4. Vim实用技巧

C++相关书籍

  1. C++语言程序设计   郑莉 (若无C++基础)
  2. C++ Primer(第5版)     力荐
  3. STL源码剖析        力荐
  4. Effective C++       力荐
  5. 深入探索C++对象模型
  6. Linux高性能服务器编程
  7. UNIX环境高级编程(APUE)       力荐
  8. UNIX网络编程 卷一:套接字联网API  力荐
  9. UNIX网络编程 卷二:进程间通信

其他书籍

  1. 大话设计模式
  2. Redis入门指南
  3. Redis设计与实现
  4. Linux多线程服务端编程
  5. 大规模分布式存储系统:原理解析与架构实战
  6. 深入理解Nginx:模块开发与架构解析

面试相关网站及书籍推荐

书籍:

  1. 剑指offer    力荐
  2. 程序员面试经典
  3. 编程之美

网站

  1. LeetCode 一个神奇的刷题网站,手撕代码的题库
  2. 牛客网(程序员找工作必备,尤其是专项训练,真题和在线编程板块)
  3. google
  4. stackOverFlow(程序员值得拥有)
  5. github(没项目的就靠它了)
  6. 博客园,CSDN

最后,预祝,大家都能拿到心仪的offer!!!

#去哪儿##小米##华为##中兴##广州视源电子科技股份有限公司##C++工程师#
全部评论
各个公司的面试详情,后续更新。
1 回复 分享
发布于 2017-10-22 15:11
坐等楼主完善,先加精啦。
点赞 回复 分享
发布于 2017-10-22 17:27
大佬,unix三件套都看了,膜拜
点赞 回复 分享
发布于 2017-10-22 22:08
谢谢分享
点赞 回复 分享
发布于 2017-10-23 11:54
我觉得你比我牛逼不知道哪里去了
1 回复 分享
发布于 2018-09-10 15:59
小米二面这么多手撕代码,有点过分了啊
1 回复 分享
发布于 2020-09-14 23:04
给校友捧场
点赞 回复 分享
发布于 2017-10-22 15:16
题主最后去了哪家
点赞 回复 分享
发布于 2017-10-22 17:00
牛逼,学习一个
点赞 回复 分享
发布于 2017-10-23 16:53
楼主,有新手项目推荐吗?
点赞 回复 分享
发布于 2017-10-24 13:17
我也是c++,回顾下你的知识点。 顺便,恭喜了,
点赞 回复 分享
发布于 2017-10-24 22:49
可以安照这个复习了
点赞 回复 分享
发布于 2017-10-25 13:29
可以当做学习计划来看了
点赞 回复 分享
发布于 2017-11-07 21:03
谢谢楼主,真可以当学习计划看了
点赞 回复 分享
发布于 2017-12-20 15:10
没有项目怎么破?如果没有项目找工作难吗
点赞 回复 分享
发布于 2018-01-07 23:00
前辈,能加个qq(765846560)么,有些问题想请教以下,拜托了,谢谢
点赞 回复 分享
发布于 2018-01-20 16:53
给楼主跪了,太庞大了
点赞 回复 分享
发布于 2018-04-10 21:32
楼主关于面试准备和简历的提示非常有道理,可惜我太迟看到了… 在简历中把某个了解的编程语言写成熟悉,结果面试官刚好就是为这一点而来,当场跪了
点赞 回复 分享
发布于 2018-04-12 08:25
前辈,你看的这些书 花了很多时间?我感觉啃透一本书要好长时间,根本没有那么多时间啊。
点赞 回复 分享
发布于 2018-04-12 22:29
好厉害,我也像找c++方向的,但是啥也不会,看起书来好费劲
点赞 回复 分享
发布于 2018-06-23 13:38

相关推荐

158 1574 评论
分享
牛客网
牛客企业服务