阿里两个部门共七轮面试面经
所有面试都是电话面试,所以都有电话录音 以下是按照电话录音整理的
第一次投的是polarDB。
一面:
19点开始,电话面试 一共面了一个小时十分钟左右。
自我介绍。
说一下C++的多态是怎样实现的
如果继承了两个父类,那子类的虚函数表长什么样子?谁先谁后呢?
说一下拷贝构造函数所有的调用场景有哪些?想到的都说一下
指针和引用有什么区别
通常什么时候该用指针,什么时候用引用呢?
说一下volatile关键字的作用,什么场景一定要用volatile关键字呢?
说一下C++是怎么实现哈希表的(其实问的是STL里面的map和unordered_map)
解决哈希冲突的方法有哪些
unordered_map支持并发读取吗?如果让你实现一个支持并发的unordered_map的话要怎么实现
说一下你对归并排序的理解
机器内存比较小,数据量比较大的情况下 要怎么排序
说了一下我的研究课题
问了几个跟研究课题相关的问题
操作系统里面的内存管理的模型是什么样的 一个进程里面的内存管理是怎样的
说一下PCB的概念,干吗用的?里面有什么?
操作系统从一个进程切换到另一个进程 和从一个线程切换到另外一个线程的过程有什么不一样吗?
为什么线程切换的开销比较小?那为什么进程切换开销比较大?
进程间常见的通讯方式有哪些
IP协议是用来干啥的?
为什么TCP是一个面向连接的可靠的传输协议?
TCP为了保证可靠传输有哪些机制呢?
为什么TCP的连接要三次握手啊?
说一下拥塞控制的几个算法
说一下什么是索引
简单说一下MySQL的B+树是一个什么样的索引
B+树跟B树有什么性能上的差异?
数据库的并发安全是怎么做到的呢?
除了B+树,有没有学过其他树的变种,如LSM树?(记得好像是LSM树)
说一下事务的属性
事务的原子性是怎么保证的
事务的提交过程是怎么提交的呢?
事务的隔离性是怎么做到的呢?
简单介绍一下你对MVCC的理解
数据库的隔离级别
什么是幻读
R级别会不会有幻读
SI级别了解吗
除了MySQL你平常还接触过哪些数据库?
MySQL的查询引擎你有没有了解(说了innodb,他说这是存储引擎,不是查询引擎)
mysql的查询过程是什么样的
MySQL的join是怎么实现的,底层实现
如果MySQL里面有一条查询跑的比较慢,你要怎么找呢?
如果它已经走了索引但是还是很慢怎么办呢
说说你对分库分表的理解,之前有做过这相关的吗,分库分表的原理有没有了解过呢?
spark的流处理原理是怎样的呢
spark是怎么划分stage的呢
如果有些任务失败了,它是怎么做容错的呢?
spark的内存管理这块有没有了解过
做编程题,合并K个排序链表 加微信,在文本文件上写代码,不用跑,写完微信发给他 ( 当时秒了, 面完之后发现写错了 完了 )
最后反问,我写完编程有点懵了,想了半天想不出来问什么,尴尬
互相祝周末愉快,结束.
求个二面
更新: 整整一周后迎来了二面,二面全程不问基础知识,都是项目深挖和设计题。下面记录几个值得参考设计题。
二面:
如果让你实现一个mutex你要怎么设计呢?
多线程下载比单线程下载快是为什么呢?
笔试的编程题你还记得吗,有什么思路吗?(我几乎0ac hhhhhhh)
中间冷不丁问了一下我怎么看待加班。。。
要你存整个中国的地图数据你打算怎么存?设计什么样的数据结构?
差不多也是一个小时,求个三面吧
三面:
三面同样是二面后一周,也是个电话面,不过要手撕代码。
三面应该是考察技术深度的,大部分都在问操作系统底层
项目中使用了什么C++的特性,或者什么python的特性
对多线程有多少了解 进程和线程的区别
多线程要操作同一块数据,有什么需要注意的地方 那多进程要操作同一块数据要怎么处理
多进程要怎么进行同步
了解操作系统的内存管理吗 一个OS有16个G内存,它是怎么管理的 在内存管理上有哪些策略
清楚系统调用这个概念吗 内存相关的系统调用有哪些 分配或者释放内存的时候涉及到哪些系统调用
对常见的内存泄漏的解决方法有什么了解
其他编程语言是怎么进行内存管理的
(面试官解释了为什么他们部门如此重视内存管理和操作系统底层原理,因为他们部门是做数据库的,需要处理高并发等情况)
讲一讲你了解的数据库不同的隔离级别
(他说其实对数据库知识要求并不高,可以进来再学)
然后开始在线编程,面试官发了一个阿里伯乐在线测评链接,在这个链接上编程双方都可以看到。
编程题是实现一个FIFO的queue。实现一个push和pop方法
实现完之后面试官进一步要求实现支持多线程的queue。
实现完多线程之后面试官要求当queue满了之后要阻塞线程。
实现完阻塞之后面试官要求queue为空的时候也阻塞。
笔试之后面试官介绍了他们部门在做的东西,讨论了下数据库现在的发展情况,技术相对来说比较成熟,部门里有很多岁数比较大经验丰富的大牛
面试结束,大概一个小时。
太难了 还是厚着脸皮求下个面试
对多线程有多少了解 进程和线程的区别
多线程要操作同一块数据,有什么需要注意的地方 那多进程要操作同一块数据要怎么处理
多进程要怎么进行同步
了解操作系统的内存管理吗 一个OS有16个G内存,它是怎么管理的 在内存管理上有哪些策略
清楚系统调用这个概念吗 内存相关的系统调用有哪些 分配或者释放内存的时候涉及到哪些系统调用
对常见的内存泄漏的解决方法有什么了解
其他编程语言是怎么进行内存管理的
(面试官解释了为什么他们部门如此重视内存管理和操作系统底层原理,因为他们部门是做数据库的,需要处理高并发等情况)
讲一讲你了解的数据库不同的隔离级别
(他说其实对数据库知识要求并不高,可以进来再学)
然后开始在线编程,面试官发了一个阿里伯乐在线测评链接,在这个链接上编程双方都可以看到。
编程题是实现一个FIFO的queue。实现一个push和pop方法
实现完之后面试官进一步要求实现支持多线程的queue。
实现完多线程之后面试官要求当queue满了之后要阻塞线程。
实现完阻塞之后面试官要求queue为空的时候也阻塞。
笔试之后面试官介绍了他们部门在做的东西,讨论了下数据库现在的发展情况,技术相对来说比较成熟,部门里有很多岁数比较大经验丰富的大牛
面试结束,大概一个小时。
太难了 还是厚着脸皮求下个面试
交叉面:
交叉面一共44分钟。交叉面听说是个p9大佬,约我周六早上九点面试。我一开始还寻思为什么这么早,后来面试官告诉我他人在北美。。。好吧 现在是他晚上九点应该
自我介绍
讲一下最近在做的或者印象最深刻的一个项目。讨论了大概十五分钟,大佬的问题真的一针见血。
然后又做了一个很有意思的小讨论。怎么实现malloc和free方法。先做了个起码能够保证正确的实现(说思路不用写代码),然后不断优化,最后我实在优化不下去,时间又到了,面试官就让我回去再想想。
反问环节问了下面试官对程序员职业生涯只有35岁有什么看法。面试官笑了。然后说一方面人要不断提升自己,在任何年龄都不应该是一个终点。另一方面,在polarDB这样的部门接触的是底层技术,做基础技术的程序员与做业务的程序员不同,技术才是核心竞争力,在阿里云也有很多年龄很大的程序员,35岁对于他们来说不是终点,而是巅峰时期。
行吧 不管过不过这次面试,我都有收获很多。但还是求个下一面
更新:
polarDB🈚了,等了三周后被另一个部门打电话来捞,问了下面试官说我之前的几次面评都是A。 本来觉得这个部门有刷kpi的嫌疑就拒了,但是部门的人前后打了三次电话来争取,感觉再拒就很不给面子了,最后决定再面一次。
一面是个代码面,面试官发了个伯乐链接,出了三道题,给半个小时写。
(1)实现将一个非负整数逆序后,存放到一个数组中,过程不能使用stl栈容器。
(如:123456存放数组a后,a[0]为6 a[1]为5 ... a[5]为1)
(2)求一棵二叉树第H层节点的个数
(3)既不用加减乘除,也不用库函数,实现求两个数的和的方法。
题目难度适中,写了十五分钟就交卷了,剩下的时间跟面试官交流部门的情况和我关心的问题。面试官说让我保持手机畅通。
这个再挂我可就不面了啊
更新:
这次的面试异常迅速,第二天二面,第三天三面。
二面问了几个基础题:
海量数据求TOP-K
高并发服务器客户端主动关闭连接和服务端主动关闭连接的区别
描述最短路径算法(迪杰斯特拉算法)
map容器如果key是类对象,对类有什么要求? 追问为什么只重载<操作就OK?
逻辑题:2根粗细不均匀的蚊香,每根可以精确烧1小时,如何确定一段精确的15分钟时间。
三面聊研究生的研究领域和人生
希望能到hr面拿offer吧 七面下来也太顶了
更新: 三面后整整一周hr面
这回是一面的面试官一直帮我跟进流程和催促人事,感觉效率着实高了很多
hr迟到了十分钟然而没有道歉。这次hr面是用阿里郎视频会议进行的,也是本次秋招阿里第一回视频面试。阿里的hr面真是难顶。一共四十多分钟,问的都好有水平,一不小心就给你挖坑
没有自我介绍,上来先问你拿了哪些offer。
问了给自己大学以来的各个时间分个区间,每个区间自己都在做什么,收获了什么,哪个区间成长最大。
导师对你最放心什么,最不放心什么。
选择一个公司最看中哪几个要素,排个序。
挨个要素问,觉得阿里在这方面跟xx公司比怎么样。
感觉hr也是见过世面的,我一说客套话,她就直接看穿🤣 用一声大大的“害”表示你还too young
更新: 面试官告诉我hr面通过了,希望这回能顺顺利利#阿里巴巴##面经##校招##C++工程师#