一面
12-10 16:00 - 17:00
-
自我介绍
-
讲一下你觉得挑战最大的项目
我讲了一个数据库的项目,语言组织的不是很好,后面还得多练练
-
既然讲到数据库,那你知道数据库索引是用的什么结构吗
b+树
-
b+树相对于其它的树有什么优势
-
堆和栈概念
-
堆和栈性能上的区别,地址生成的方向
这个当时蒙了有一会,想起来微机原理课上讲过栈的原理是向低地址扩展的,应该后面的CPU都是这样的吧,但是堆我还真不太了解。
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意 思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将 提示overflow。因此,能从栈获得的空间较小。 堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储 的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小 受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
-
虚拟内存了解吗?
-
虚拟内存有什么好处
当时只说了扩展可用内存大小,面试官跟我解释说还起到了一个保护数据安全的作用,涨知识了,这块还得多学习
-
进程和线程的区别
-
线程有没有单独的堆和栈空间
这个没答好,现在查了一下才知道线程可以分配到独立的栈,但是堆是共享的
不同的线程有不同的stack栈空间,以及共享的heap堆空间。每个线程确实可以new一片新的内存空间在堆里面,这种方法被称为Thread Local Storage (TLS),但是某一个线程建立的heap空间别的线程也是可以访问的。比如某一个线程使用 Object* o = new Object() 新建一个对象,这个对象是在heap中,而指针o是在stack中,只要这个线程把指针o的值发给别的线程,然后别的线程用另一个指针p来接收,那么别的线程依然能够访问这个线程new的对象,这就是共享heap空间的解释。
-
死锁了解吗
-
说说数组和链表
-
效率上面的差别
一开始我只是很笼统地说了一下,在面试官提示下我才知道要分查找、插入、删除情况来说
-
说说你了解的排序算法还有它们的复杂度
-
那讲讲快速排序的过程
-
哈希碰撞了解吗
-
那怎么解决哈希碰撞的问题
真不知道,随口扯了个二次哈希。。。
-
找出数组中第 k 大元素的位置
一开始没听清,还以为是求第 k 大元素值,直接优先队列。面试官又说了一遍题目才反应过来是求位置,加个哈希表存原始位置再放进优先队列搞定。面试官也被我整乐了。然后他再问如果用快排的思想来做呢?想了一会大概给出了方案,就是判断基准数此时在数组中的位置,小于 k 就往右边搜索,大于 k 就往左边搜索
-
那我们来聊聊计网吧?我们现在用的飞书面试走的是 UDP 还是 TCP?
-
我看你简历上写了一个 TCP 的实现,可以讲讲吗?
这个我也说的挺乱的,看来简历上的东西还是得多准备准备
-
讲讲 TCP 的拥塞控制和流量控制?
-
那来做个智力题吧,八个小球,里面有一个质量比较小的,用最小的次数找出这个球
笑死,一开始自信满满跟他说小学奥数题,答了个三次,被问还有没有更好的办法,我直接懵了。大脑空白想了半天没想出来,面试官一提示第一次两边各放三个,瞬间就明白了。2333
-
100 瓶药水,一瓶有毒,用最少的老鼠试出有毒的那瓶水
-
剑指offer 11 找出旋转数组中最小值
-
今天就差不多到这里,你有什么想问的吗
我问了对我今天的面试有什么评价,面试官说还ok
总体来说这次面试气氛还是挺轻松愉快的,就是自己还是太紧张了,算法题一个挺明显的错误看了半天没看出来,差点没撕过,属实不应该。还有就是一些语言组织的不是很好,还需要多加修炼啊
二面
12-14 20:00 - 21:00
一上来面试官问了问武汉的天气,然后就是经典自我介绍,我依稀听到他说我简历很牛逼??属实吓到我了。
-
c++ 指针和引用的区别
-
引用在内存上的表现,引用可能会为空吗?
-
函数参数里面 (int a) (int &a) 的区别
-
左值引用和右值引用
-
讲讲继承和多态
-
static_cast, 强制转换不一致的话会崩溃吗
-
内联函数 inline,内存上是一份还是多份
-
C++ 编译过程和相应产物
-
静态链接和动态链接,他们的好处
-
HTTPS 和 HTTP 的区别
-
SSL 层面上服务端和客户端的交互
-
中间人截获密钥
-
加密不安全所以需要通过数字证书,讲一下完整的过程
-
最终加密的内容是对称加密还是非对称加密
-
大概讲一下 DNS 协议
-
子网掩码
-
客户端和服务端在建立连接后,如果服务端突然挂掉了,会发生什么
-
链表倒数第 k 个结点(口述)
-
讲一下快排的思想,时间复杂度?
-
画了一个二叉树,写出前中后序遍历还有层序遍历的字母顺序
-
rand5 求 rand7
-
箱子里 100 个球,两个人轮流拿球,每次可以拿 1 到 5 个,确保自己一定要拿到第 100 个球,怎么个取法
-
写代码,最长回文子串
我用了状态压缩 dp,写了差不多 10 分钟过了,还好没像上一次那样犯傻
-
今天就到这里,你有什么想问的吗
能不能介绍一下部门? 影像应用工具相关
部门只负责一个 app 吗? 不止一个,都做
新人培养机制
面试评价 还不错,C++ 底层原理还需要再加深
这次面试还是比上次放松多了。面试官会根据你的回答继续往下扩展直到你不了解为止。面试官看我没学过操作系统基本也就没问。总的来说还是 C++ 的部分需要再补一补,继续加油⑧
三面
12-21 16:00 - 17:00
面试官简单介绍了一下自己,说要对前面的内容做一下补充问答,然后连自我介绍都省掉了,直接开始灵魂发问。
-
实习的时间,对自己的期望
-
聊项目,阿里数据库比赛
-
seda 异步事件框架,异步多线程并发优点
异步事件我这里扯了半天,还是不太了解,估计是没答到点上,他直接跳下一个问题了
-
编译原理,词法解析大致过程
-
语法分析过程
-
聊sql,group by 和 order by
-
一个表没有主键,把重复的行删掉剩一行
-
C++,平常都用在哪
-
左值和右值
-
C++ 为什么需要右值引用
-
智能指针
-
shared_ptr 原理
-
什么时候需要用到 weak_ptr
-
shared_ptr 引用计数
-
OOP 三大特性
-
C++ 多态怎么实现
-
父子结构,父类析构函数声明成虚函数原因
-
不声明成虚函数内存泄漏的是哪一部分
-
C++ 菱形继承带来什么问题
-
C++ 怎么解决这类问题(虚继承)
-
怎么实现一个动态数组(vector)
-
讲一个平衡查找树,AVL树就不讲了
-
STL 里的 map 为什么要用红黑树
-
b+ 树做了什么,为什么数据库要用 b+ 树
-
工程上有没有什么了解,git 和 c++ build system
-
手撕代码,二叉树到叶结点路径和等于目标值
-
如果不用递归可以怎么做
心情有点低落,面完就知道自己差不多凉凉了,这面真的答得稀烂,听录音的时候都像在坐牢。面试官的气场着实有点强,第一个问题就差点把我干蒙了,再往后脑子越来越不清醒,答得连我自己都听不下去了。虽然代码题算是秒撕了,不过挂了还算是意料之中的事情。
怎么说呢,虽然这次面试安排的算是无心之举,和考试周撞了让我也没有很多时间来准备;不过还是能在一定程度上说明一些我学习上的问题的,也希望之后在实践中更多关注到底层的原理,做到知其然也要知其所以然吧




