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

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

头像
快乐的码农
编辑于 2017-11-02 15:17:32
回复24 | 赞 79 | 浏览35931

面试总结

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

二面:

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

好未来面试

  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!!!

24条回帖

回帖
加载中...

本文相关内容

近期热帖

热门推荐

扫一扫,把题目装进口袋

牛客网,程序员必备求职神器

扫描二维码,进入QQ群

扫描二维码,关注牛客网公众号

  • 公司地址:北京市朝阳区大屯路东金泉时代3-808北京牛客科技有限公司
  • 联系方式:010-60728802(电话) admin@nowcoder.com
  • 牛客科技©2018 All rights reserved
  • 京ICP备14055008号-4
  • 京公网安备 11010502036488号