我的2021春招面试经验

前言

参加了一个星期的面试,终于定下来了,把面试经验记录一下(全凭回忆,问题可能不全)

Qt开发(未发Offer)

  1. 你的线程池是怎么实现的
  2. 你的线程池有什么地方可以改进的
  3. 简单讲一讲epoll
  4. 你对Qt有多少了解(不怎么了解,只在大学用Qt做过课程作业)
  5. C++与C的区别
  6. 虚函数的原理
  7. C++类对象初始化的顺序?
  8. 那析构的顺序呢?

技术面试自我感觉答的还可以,过了后,经理就一直在说你不会Qt,要学习啥的,反正就在强调自学能力和用人成本…说的我不耐烦了,他看我不咋想听就结束面试了

初创公司Java实习(已发Offer)

  1. 自我介绍
  2. 你以前用过IoC框架,那么请你解释一下IoC和DI
  3. 你以前用过RabbitMQ,请你描述一下消息队列的应用场景
  4. RabbitMQ的3大模式 (这里只说出来一种,2年前用的,忘了)
  5. 请说一下浏览器访问一个网页的全过程 (基本细节都说到了,面试官说可以把DNS解析那块再说详细点)
  6. ArrayList和LinkedList的区别(Java八股文,完全不会,和面试官解释我的Java只停留在最最最基础后,表示没关系)
  7. 说一说数组和链表的区别
  8. 你知道哪些数据结构
  9. 手写代码,统计左右括号合法匹配的个数 (用栈,很简单)
  10. 反问环节

最好的一次面试体验,面试官全程面带微笑,也会鼓励你去思考,鼓励你尝试手写代码。也是唯一一家面试官主动给我倒开水的,让我感受到了无比的尊重。

医疗器械C++开发 (已发Offer)

  1. 自我介绍

基本就一直在聊天,聊对医疗器械的看法,对业务的看法,对公司的看法,没有问技术

通信协议C++开发 (已发Offer)

进来直接写笔试题

  1. 你觉得if (n == 1)if (1 == n)哪种更好 (当时没太理解,但我平时写代码大多用第一种。后来说第二种可以防止失误写成if (n = 1)…确实有点道理)
  2. 以下代码有什么问题 (代码不贴了 1. malloc没有free 2. malloc返回值是void*需要显式类型转换)
  3. 指针和引用的区别
  4. 什么是内存泄漏?如何避免
  5. 如果遇到了内存泄漏,如何解决
  6. 什么是虚函数?
  7. 什么情况下会调用复制构造函数(3种,当时写出来2种。后来一想,参数值传递时也是会调用复制构造函数的)
  8. delete和delete[]的区别
  9. 析构函数为什么需要定义成虚函数?
  10. 浅拷贝和深拷贝的区别

写完后和经理聊,以及一些反问环节

模拟仿真C++开发 (已发Offer)

先填个人信息,然后两个面试官技术面

  1. 自我介绍
  2. C++和C#的区别
  3. 托管代码和非托管代码的优劣 (这个没答好,当时说托管代码没啥特别的好处,面试官让我回去再思考思考,哈哈)
  4. 编译时多态和运行时多态的区别
  5. 请细致的说一下虚函数和纯虚函数(这里聊的特别深)
  6. 虚函数有性能损失吗,为什么?
  7. 了解哪些设计模式
  8. 单例模式有哪些实现方式
  9. 单例模式里的懒汉模式,饿汉模式有什么区别?分别有什么应用场景?
  10. 请细致说一下抽象工厂模式的实现方式,有什么应用场景
  11. 智能指针是什么?
  12. 请你详细对比一下shared_ptr、unique_ptr和weak_ptr的区别
  13. shared_ptr的原理和weak_ptr的原理(这里weak_ptr的原理不知道)
  14. vector和list的区别,vector是如何扩容的?扩容时会发生什么?
  15. 你知道哪些数据结构
  16. 如何判断链表有没有环(快慢指针)
  17. 你知道哪些STL容器
  18. set和unordered_set的区别是什么?
  19. set的顺序是什么样的?(不知道,哈哈)
  20. 排序算法了解哪些?时间复杂度分别是多少?
  21. 快速排序的原理是什么?时间复杂度什么时候最差,什么时候最好?
  22. TCP和UDP的区别?三次握手和四次挥手了解吗?
  23. 什么是TCP粘包?如何解决?(这个不知道,网络基础还是太差了)
  24. select、poll、epoll的区别?你为什么选择epoll?
  25. epoll一定能保证性能是最好的嘛?
  26. 请你设计一个select、epoll融合的多路IO转接
  27. 多线程了解多少,多线程之间如何同步?
  28. 信号量有几个状态(不清楚,信号量用得少。平时互斥锁和条件变量用的比较多)
  29. 对Qt有多少了解?(不怎么了解,只在大学用Qt做过课程作业)
  30. 反问环节

这家公司的HR是最有亲和力的,也是最好的,会和你综合分析手上的offer,个人发展前景等等

金融人工智能C++开发 (已发Offer)

初试

进来也是直接写笔试题

7道算法题,全部手写,因为赶时间(当时下午约了两场面试),只写了前5道

  1. 二分查找(左闭右开区间版本的实现)
  2. 统计子串在主串里的个数(KMP算法,这个我熟哈哈)
  3. 写一个排序算法(写了快速排序)
  4. 实现atoi函数(把int值溢出也考虑了进去,惊艳到了面试官,哈哈)
  5. 反转链表(写了递归的实现)

问答环节:

  1. 快排的另一种实现方法了解吗(了解,双指针的方法)
  2. 反转链表的迭代实现会么(会)
  3. KMP算法的原理是什么
  4. sizeof的一些题目(一般这类题目都是看你了不了解 C/C++中字符数组初始化会携带结束符、数组会自动退化成指针、空类默认占1个字节等…)
  5. 内存对齐是什么?为什么要内存对齐?
  6. 关于内存的的一些基础知识(指针是值传递、堆内存和栈内存的区别等等)
  7. std::future了解吗?

复试

  1. 聊一聊你对面向对象特性,封装、继承、多态的理解
  2. 抽象工厂模式的具体实现?有什么好处?
  3. 虚函数原理(同样聊的也比较深)
  4. 类的成员函数怎么分辨不同对象实例(非静态成员函数调用时会隐式传递this指针,然后通过offset访问对象的成员变量。会逆向的不可能不知道这个)
  5. vector和list的区别,vector是如何扩容的?扩容时会发生什么?
  6. STL里的算法,容器是如何联系在一起的?(迭代器、类型萃取。还好看过STL源码解析,哈哈)
  7. 说一说epoll
  8. 你的线程池是如何实现的?
  9. std::future是干嘛的,能解决什么问题?
  10. 线程同步有哪些方法?实际应用时如何做抉择?
  11. 智能指针shared_ptr的原理?
  12. weak_ptr和shared_ptr的区别?应用场景是什么?
  13. make_shared的优势有哪些?(可以用auto保证语句简洁、保证了异常安全。没说出性能优势:make_shared会一次性在堆上分配足够容纳控制块和管理对象的内存。而使用构造函数会触发二次堆分配,产生额外的开销)
  14. 反问环节

这家感觉面试难度应该是最大的了,需要写这么多算法题…

音视频C++开发 (未发Offer)

进来依旧是笔试题

  1. sizeof的题目
  2. i += (i++), i += (++i)(++i) += (i++), (i++) += (i++)的弱智题目…我告诉面试官除了最后一个会报错(i++是右值,无法+=),其他题目看不出有啥实际的考核意义,顺便表示谁要是在真正的开发中写出这种代码,我非打死他不可(当时面试官好像对我的想法不太认同)。
  3. 手写在一个数组里找到第二大的数(写的O(N)的实现,当时表示还有排序的方法,但时间复杂度是O(NlogN))
  4. 手写添加节点到链表尾部
  5. 手写删除链表中指定节点 (这题面试官说说有问题,我再看了一遍,确定没问题,给他讲了一遍,他发现是他错了)

自此,这个面试官恼羞成怒,开始故意刁难我…

问答环节:

开始问项目

  1. 我觉得你的线程池问题很大
  2. 我觉得你这个小顶堆有问题
  3. 我觉得你这样做,性能会很差呀

和他解释了半天,发现他连小顶堆都不是很清楚,就是为了故意刁难我,所以我后面直接拍桌子走人了

体验最差劲的一次面试,真是家垃圾公司…

信息安全Go开发 (已发Offer)

leader直接微信联系的我,表示看过我的Github和博客,技术方面很信任,就没怎么问技术问题

  1. 自我介绍
  2. 目前手上Offer情况
  3. 反问环节

表示对人才的渴望,并开出了很有竞争力的薪资,非常好的leader。期待以后可以有合作

信息安全C++开发(已发Offer)

没有笔试,没有算法,面试难度不大

  1. 自我介绍
  2. Windows内核了解到什么程度?(ring3进入ring0的过程,SSDT/SSSDT,32位下SSDT Hook,进程/线程的内核结构及与Linux系统的不同)
  3. 你以前实习用过Vue,请你解释一下Vue数据绑定的原理(因为我女朋友是写前端的,而且正好是Vue方向的,所以这题我当然烂熟于心,哈哈)
  4. 看到你技术博客里有Sunday算法,请你解释一下Sunday算法
  5. 你的改进版Sunday算法是如何实现支持通配符的?
  6. C++的一些基础题
  7. 你觉得你自己最大的优点是什么?
  8. 你觉得你自己最大的缺点是什么?
  9. 你在以前的项目开发中,遇到最大的难题是什么?
  10. 你对信息安全的理解?
  11. 你知道哪些的攻击方式,你有过实战吗?(XSS攻击还真有实战经验)
  12. 反问环节

总结

共面试了9家,7家拿到了Offer

目前已签最后一家信息安全公司