双非本科毕业竟能四面阿里稳操胜券,轻松拿 offer,定级 P6+,怎么做到的?!
一面(技术面):
因为我是非计算机专业的学生,面试官在知情的情况下没有过于为难我,关于计算机专业课的问题都问得非常基础:
比如:
项目介绍(项目中最大的技术挑战和技术难点)
JVM 内存分哪几个区,每个区的作用是什么?JVM 有哪些回收算法,对应的收集器有哪些?
GC 的两种判定方法 ?CMS 收集器与 G1 收集器的特点。
Java 容器有哪些?哪些是同步容器,哪些是并发容器?
ArrayList 和 LinkedList 的插入和访问的时间复杂度?
HashMap 检测到 hash 冲突后,将元素插入在链表的末尾还是开头?
新生代分为几个区?使用什么算法进行垃圾回收?为什么使用这个算法?
1.8 还采用了红黑树,讲讲红黑树的特性,为什么大家一定要用红黑树而不是 AVL、B 树之类的?
之后考察了一道系统设计题,说实话当时有些出乎意料,感觉被打了个措手不及,不过按照自己对计算机的理解,在面试官的提醒下,还是设计出了一个较为经典的模型,我也意识到,这方面绝对是我日后要着重改善的弱点之一。
接下来是两道非常简单的代码题,但是需要十足的仔细。
最后是在有限的时间内读懂一个工程中的代码文件,时间有限,而代码中细节的处理却非常繁琐(感觉虽然很规范,但是可读性比较差)。不过凭借 ACM 经历中每天看标程的技能积累,还算完美地完成了面试官的任务。
最后的反问环节问了很常规的问题:入职时间、工作地点、主要职能。
总的来说,技术面第一面的面试过程是非常轻松愉快的,这种轻松愉快主要来源于面试官对节奏和问题尺度的把握,以及我个人(躺平等死)较为放松的心态。也有很大一部分来源于,通过我对这个岗位对各项能力的要求的理解与我个人能力的优劣势的比较所产生的自信。
二面(技术面):
面试的最开始,我就直接坦白了自己计算机系统知识薄弱的弱点,并表明了自己正在努力着手改善的状态(有在学了有在学了)。因为面试中最大的忌讳之一就是不懂装懂,如果来不及改善,积极承认问题并展示“孺子可教”的态度也许会更好。
接下来,面试官询问我是否对数据库有所了解,我表示这学期刚刚开数据库这门课,但是课程的内容明显更偏向数据库运维。不过我对课堂中老师未详细讲解的关于“索引背后的数据结构与算法原理”的内容的好奇心驱使我去额外学了一波。关于国内数据库课程内容设置的看法,引起了面试官的共鸣;并对我好奇心驱使的自我学习表示赞同和欣赏。
接下来的问题比较老生常谈:读研/就业的选择,未来就业方向的选择(AI/数据库),为什么对数据库感兴趣。我的回答也全都是自己的真实想法,自认为表达得还算流畅自信。
然后就到了我最喜欢的 coding 环节,是一道 Leetcode 的 Mid 难度的题目。在向面试官提了几个问题确认了题意后,在 coding 的过程中始终保持向面试官的同步讲解,在需要考虑特殊边界情况的地方也写了一点简单的注释,意识到可能有问题就陷入思考,写写画画之后迅速改正。最后敲好之后自己出了一组比较强的数据,通过人肉 gdb 的方式向面试官讲解代码,面试官表示一遍就 bugfree 了,不愧是久经沙场(听到之后超级开心)。
此次的反问环节可能给面试官留下了比较深刻的印象,展开写一写:
Q1:ob 在 TPC-C 测试中取得了第一名的成绩,首次击败了文鼎 10 年的 oracle,看过 pr 的通稿和一些科技媒体所谓大 V 关于摩尔定律对数据库性能的影响的文章之后,我觉得虽然是很大的成功,但是赶超 oracle 的路依然很长,请问您是如何看待这次成绩的?(此为精简版,面试的时候我问得比较详细)
A1:面试官很喜欢这个问题,而且解释的非常耐心,并在面试后发给我一篇关于论证我问题中的一部分的 pdf,面试官也太有心了!
Q2:分布式数据库 ob 可扩展性相对更强的特点比起其他竞品,是否是更适合阿里的产品生态?
A2:回答的非常详细,表示顶层优化也很重要;
Q3:关于执行引擎和优化引擎的职业前景;
A3:这两部分只要是数据库就会涉及,且视野所及的范围内,数据库长期以来都是不可取代的(数据库常青树);
Q4:我在脉脉上了解到 ob 这边实习生没有代码权限,预研性的工作会贯穿始终。是出于哪些考虑?
A4:(一个令我非常满意的详细解释,而且不是大饼,非常实际)
最后的最后,面试官对我评价很高。有心的同学们可以对照一下这次面试的内容和我曾经为此做过的功课,利用率可以说是比较高了,而且对面试官对我的评价产生了很大的正面影响。
三面(交叉面):
前两面的面试官给的评级很高,所以按照流程进入交叉面 argue 一下高评级,面试流程与上两轮大同小异,还是问了一些面试题
分布式架构设计哪方面比较熟悉
介绍你实践的性能优化案例,以及你的优化思路
介绍项目
谈一个你觉得你学到最多的项目,使用了什么技术,挑战在哪里
各种聊项目,从项目的架构设计到部署流程。
最近有没有学习过新技术?
有什么想问我的?
最近两年遇到的最大的挫折,从挫折中学到了什么?
三年到五年的职业规划?
四面(HR 面):
考虑 redis 的时候,有没有考虑容量?大概数据量会有多少?
Redis 的 list zset 的底层实现
solr 和 mongodb 的区别,存数据为什么不用 solr?
分布式 session 的共享方案有哪些,有什么优劣势
谈谈分布式锁、以及分布式全局唯一 ID 的实现比较?
集群监控的时候,重点需要关注哪些技术指标?这些指标如何优化?
从千万的数据到亿级的数据,会面临哪些技术挑战?你的技术解决思路?
数据库分库分表需要怎样来实现?
排序算法的复杂度,快速排序非递归实现。
消息中间件有哪些?他们之间的优劣势?
结果:
全流程一周结束,评级 A。
下面是我在面试前准备的时候刷过的面试相关资料,由于文章的篇幅有限,把大概的资料图放在这里,有需要的小伙伴可以自行领取哦。
Java 核心知识整理
Java 核心知识
Spring 全家桶(实战系列)
其他电子书资料
写在最后
叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
扫描下面助理小姐姐的微信,即可免费获取以上全部答案
版权声明: 本文为 InfoQ 作者【山田心】的原创文章。
原文链接:【http://xie.infoq.cn/article/7e4458cecfbcdbcafba35e888】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论