作者 | 中华石杉
责编 | 伍杏玲
本文经授权转载自石杉的架构笔记
这篇文章,给大家分享一个同学面试阿里某个部门时的经历。
简单说一下这个同学面试的背景,本身技术底子还不错,在几个有一定知名度的中型互联网公司工作过,然后之前打算尝试一下阿里的职位,就去面试了。
第一轮和第二轮面试,全部都通过了,面试官评价也是基本技术素养还可以,基础也不错,定级都是P6+的职级。
但是第三面是那个部门老大P9出来面试他,结果就挂在这里了,所以把这个第三面的一些问题分享出来,给大家参考。
业务背景介绍
这个同学上来先阐述了一下自己的一些项目经历,当前他在公司里主要是负责一个数据类的系统,业务逻辑并不复杂,但是有一点技术难度。
主要是每天都会有人调用他的接口,然后有数据会落入数据库表中。
简化一下来说,大概是这个背景,如下图:
这个系统每天接口调用大概会落入数据库中有20万左右的数据量,那么每个月大概是600万左右的数据量,每年大概是近亿级的数据量会落入数据库中。
但是这是针对整个数据库来说的,平摊到里面核心的每个表,大概每个表每年新增个千万级别的数据量。
架构演进考察
面试官:
现在系统压力其实不大,每天20万新增数据量也不大,每年哪怕单表新增千万级数据其实也还算可以接受。
第一个问题:如果假设你的系统承载的业务量翻了10倍,每天新增200万数据,你的系统架构要如何演进?
如果系统承载的业务量翻了100倍,每天新增2000万数据,你的系统架构要如何演进?
候选人:
我们还没这种需求,所以我暂时还没想过这个问题。
建议:
实际上这类问题在BAT、美团、京东等大公司里面试,都是常问的,为什么呢?
因为大公司里的系统面对的就是业务经常翻倍的增长,系统压力越来越大,所以每年都要做几次技术升级,一直要进行架构演进。
所以在互联网公司里,架构设计能力中非常关键的一环,就是针对业务增长,架构演进的能力是非常核心的。
你要有一个意识说如果你的业务量10倍增长,100倍增长,你的系统架构要如何演进?这几乎是资深工程师必须要有的一个意识和能力。
其实大家可以思考一下,如果10倍增长,单表每年新增近亿数据,还能用单库单表的方式来承载吗?
肯定不行了,所以必然针对10倍增长的场景,需要引入分库分表的技术,保证每个库每个表分散一定的数据量,避免单表单库数据量过大。
那么大家再思考一下,如果100倍增长呢,每年单表新增近10亿数据,你分库分表也不一定够了。因为此时可能会有高并发访问的问题,数据库抗起来很吃力。
此时,你要不要考虑数据异构、冷热分离等数据存储的架构设计?
比如采用MySQL分库分表 + 分布式NoSQL数据库 + Elasticsearch分布式搜索 + Redis缓存的架构,来整体设计这个数据存储架构。
先做冷热分离的架构,比如最热的数据放入分布式NoSQL数据库,专门承载当日数据的高并发写入,以及高性能的读写。
然后每过一段时间,做数据归档,把NoSQL里不再频繁使用的冷数据迁移到MySQL里去归档。
最后就是应对海量数据的检索,可以把索引构建在Elasticsearch里来应对,但是从NoSQL+MySQL的异构存储来提取明细数据即可。
而且针对一些特别热查询的数据,可以依托Redis做一个缓存。
其实那个P9面试官的面试评价里,期望的也是候选人把这一套架构说出来。虽然P6+的职级不一定说有能力完全hold住这个架构,但是起码要有这个意识。
结果候选人完全什么都说不出来,那当然会让人很失望了。
对公司底层技术的原理考察
这位同学他们的系统有一部分的数据是放在特殊存储服务里的,用的是云平台上的存储服务,而且存放在存储服务里的数据还是很核心的数据。
所以面试官就开始问第二个问题了。
面试官:
你能说说你对这种特殊存储服务的理解吗,原理是什么?
你们用的云平台上的服务存储他的架构是什么样的,你们的存储是如何规划的?
候选人:
我一般是调用API往里面写数据,详细的还没太多关注过。
建议:
这是该同学犯的第二个错误,不说资深工程师,就说作为一个高级工程师,应该对自己负责的系统使用到的方方面面都有一定的了解。
比如你要是用了语音转换API,或者是快递公司的查询API,那你起码知道人家背后大致在干什么,或者问清楚人家API的QPS极限,以及访问量是多少。
你们用了特殊的存储服务,起码知道那种存储服务的实现原理是什么,存储的容量规划等等问题,这是一个高级工程师hold住自己工作的起码工作素养。
系统难点的考察
面试气氛尴尬,不过仍然继续。
面试官:
那你觉得这个系统最大的技术难点是什么?
候选人:
我想想(思索10秒后),好像没什么难的,主要就是一些接口,然后数据就落入数据库了。
建议:
大公司面试一定会问你系统的难点是什么,这代表你的项目经验有多少含金量。
哪怕你们项目很Low,平时也得想办法弄点新技术进去,没难点也要凑点儿难点出来,否则去面试必然给人鄙视。
举个例子,比如上面的这个系统,实际上他有一个步骤是要做数据迁移,也就是说把数据库里可能几百万数据量,一次性迁移到另外一套存储里去
那么这个数据迁移的步骤,其实涉及到千万级的数据量迁移。
你如何保证数据迁移的效率?如何保证迁移后的数据准确性?在迁移的过程中如何避免影响数据库的性能?
像这些问题,其实你平时都应该考虑一下,作为一个技术难点好好阐述一下吧。
擅长技术的考察
面试官:
那你说说你认为自己最擅长最有深度的技术吧?
候选人:
我好像平时自己用MQ技术比较多一些。
面试官:
那你说说Kafka、RabbitMQ、RocketMQ几种MQ的对比,还有他们各自的原理。
它们分别如何实现分布式消息队列架构的,底层的机制都聊一下,对比一下特点以及优缺点。
建议:
大公司一定会考察你的技术深度,一般就是对你平时用的最多,或者最熟悉的技术深入挖掘和考察,看你的技术深度有多深。
结果这个同学自己说了MQ,但是对MQ的了解实际上非常的浅薄,深入的东西都说不出来,那么最后一定就是让面试官很无语了。
总结
其实这个同学技术底子还是不错的,包括一些技术的基础,所以前两轮面试都是过了的。但是第三轮面试考察的角度都是完全不同的,一下子暴露出来了他的能力缺陷。
对自己负责系统的架构演进完全无意识,负责系统的难点从没思考过,系统涉及的一些技术的细节不了解,没有技术深度的积累,都导致他在三面表现很不好,最后就是直接挂掉。
所以希望大家通过这篇文章,吸取这位同学的经验教训,平时多思考自己负责系统的技术难点,以及业务量成倍增长时架构如何演进,系统涉及到的各种技术的细节,以及积累相关技术的技术深度。
作者简介:中华石杉,十余年BAT架构经验,倾囊相授
公众号:石杉的架构笔记(id:shishan100)
全面学python的时代,作为程序员你怎么看?
https://edu.csdn.net/topic/python115?utm_source=csdn_bw
<https://edu.csdn.net/topic/python115?utm_source=csdn_bw>
【END】
作为码一代,想教码二代却无从下手:
听说少儿编程很火,可它有哪些好处呢?
孩子多大开始学习比较好呢?又该如何学习呢?
最新的编程教育政策又有哪些呢?
下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)
戳他了解更多↓↓↓
热 文 推 荐
☞ 当过爱因斯坦助理,参加过曼哈顿计划,他还发明受欢迎的编程语言 | 人物志
<http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650719288&idx=1&sn=55e59ca5c3166231162b3d9326053229&chksm=bea6b5eb89d13cfd18be691564df3f3ed37d6585265736bf3905c523f73ee56d93e627ecfe76&scene=21#wechat_redirect>
☞
<http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650719074&idx=3&sn=fd56d2f3379ff706f68359ad5d76a1e2&chksm=bea6b2b189d13ba7cb43bba91d380dbadce5839f4a54af56922d5e2ec1256c7415db72067d57&scene=21#wechat_redirect>
程序员版的「倚天屠龙」,看完泪奔! <https://blog.csdn.net/csdnnews/article/details/89702188>
☞
<http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650719074&idx=3&sn=fd56d2f3379ff706f68359ad5d76a1e2&chksm=bea6b2b189d13ba7cb43bba91d380dbadce5839f4a54af56922d5e2ec1256c7415db72067d57&scene=21#wechat_redirect>
漫画:如何求图的最短路径? | 技术头条 <https://blog.csdn.net/csdnnews/article/details/89702190>
☞准码农自述:我是如何从二本到日本留学,从 C 语言到人工智能的?
<http://mp.weixin.qq.com/s?__biz=Mzg3MDA4NDkxMQ==&mid=2247483902&idx=1&sn=719f7bdcbb88a4f1327a196de39e0219&chksm=ce9279bef9e5f0a8ca5efe2ffafd1ac0610f83b0d1ad27489e013642811fbb93f3a5a493c65f&scene=21#wechat_redirect>
☞ 阿里半跪过,任正非差点跳楼,京东被骗光钱:成年人的生活哪有容易二字?
<http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=2651010624&idx=1&sn=853393082a5351fbbe7afca580455638&chksm=8bad85b7bcda0ca1e0ff8527e4e50d6db5b3b89ee767997740c96464b3af8a988645e2dc9741&scene=21#wechat_redirect>
☞ 回报率29%! 大神用情感分析创建一个比特币交易算法, 原来交易玩的是心理战
<http://mp.weixin.qq.com/s?__biz=MzU2MTE1NDk2Mg==&mid=2247494769&idx=1&sn=abb7bfed45ee3f260bbf1ef3bd3076f1&chksm=fc7fb28ccb083b9a75bef05479cf2f00a63de95a28c488d373e2e48745d3d5bc8bb1a1fed836&scene=21#wechat_redirect>
☞ 硬核粉丝 | 清华双胞胎“YCY Dance Now”杀进超越杯编程大赛决赛
<http://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247504701&idx=1&sn=97da1c9cbd232e4bfd5d63989a482b56&chksm=e99ee0c4dee969d24a6f530de4f0dd897f4fa4ba765185cc7d9fc423d801cb90e862270f94ae&scene=21#wechat_redirect>
☞ 异构计算=未来?一文带你秒懂3大主流异构
<http://mp.weixin.qq.com/s?__biz=MzA3MjY1MTQwNQ==&mid=2649827451&idx=1&sn=15bef6d731a1f1ba59eb35530dc8656f&chksm=871e8f99b069068fa0cc41abddec2cc25c13d7fa83b42da188e74ddc472714bb2c6401902c82&scene=21#wechat_redirect>
☞ 她说:为啥程序员都特想要机械键盘?这答案我服!
System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"
你点的每个“在看”,我都认真当成了喜欢
热门工具 换一换