阿里C++一面,CTO线
2023.4.24 PM 90min
- 自我介绍
- 面试官访问了我的github和博客
- 你最近学了什么,介绍一下(答分布式、k8s)
- 我们部门最近正好也在开发k8s,介绍一下k8s是什么,结构如何
- pod是什么
- 你觉得为什么k8s能火起来
- 问项目:介绍一下你写的路由器程序
- 详细介绍路由的过程,以及路由器所处运行环境(我用的VMware虚拟机模拟)
- 多线程的使用场景,用的什么锁
- 路由表的管理(我用的map)
- 你的路由的过程是串行的,想想高并发场景,性能瓶颈如何优化 答:使用多线程。 这里面试官开始引导,多线程之后如何分配路由,使用缓冲区的线程安全如何保证…… 最后我还是没答上好的优化方法
- 问c++动态多态如何实现如何找到一个虚函数
- 答:查函数名字。
- 问:不对,查找的复杂度是O(1)的,查函数名怎么找呢,再想想。
- 答:通过名字哈希?
- 问:不对,怎么哈希呢,再想想。。。 然后我狡辩了很久也没用,直接说我忘了,不是很熟。。。然后问我学过编译原理没,面试官提示说想想编译的时候怎么做。。。 后来在引导下,答出来说在编译的时候就确定了,例如给虚函数编号。。。 其实答案是通过找类的虚函数表指针,定位到虚函数表,然后根据虚函数偏移来找到这个虚函数。而这个虚函数偏移量和虚函数表的指针都是编译的时候确定的
- 算法
面试官看到了我在前一个部门(一面挂了)的手撕算法题:实现支持括号的计算器,于是问如下
- 括号匹配如何实现的
- 解析并计算表达式有几种方式,编译原理中的编译器是怎么做的(答了3种,通过符号栈实现,通过分治思想解析表达式实现,通过编译原理中的语法分析树实现)
手撕算法,查找n个有序数组之间的交集
- 问: 你先思考,讲讲思路再写。
- 答:遍历并且二分查找(复杂度o(nlogn))
- 问:不行,复杂度太高了
- (快速思考中)
- 答:使用队列数组(元素是队列的数组)存这几个集合,然后分别遍历第一个元素,看看是否为交集(复杂度o(n))
- 问:为什么使用队列而不是vector
- 队列性能更好。并回答为什么队列性能比vector好
手撕完成后,面试官感觉我撕的有问题,但是看了半天没找到问题所在,并且我举了几个例子,发现似乎没bug
- 反问环节
- c++在k8s开发中有什么用,面试官说其实并不一定c++,面试只是看能力和思维,开发大概率会用其他语言
- 有什么改进的建议嘛
最后说再见之前,面试官问“我看你是四川人,以后打算在哪就业呢,成都吗”“最好是成都吧,其他地方也行的”“我们base在杭州,成都那边是小的分部”“杭州也挺好呀,我倒是都可以”
所以面试官这样问是不是代表一面过了呀 投了一个月了,之前每次都是一面挂,等几天出结果了来更新
总的来说面试体验非常好,没有八股文,面试官很用心,很耐心引导我回答问题,并且说其实招本科实习生并不主要看项目,重点会考察思维和在给定场景解决问题的能力
#如何判断面试是否凉了##我的实习求职记录#