作者
中华石杉
责编
伍杏玲
你有没有这样的经历?工作两三年,做过大大小小的项目,可在写简历的项目经验时却发愁,不知道写啥,感觉没什么项目能拿出手的,均是些增删改查的业务项目。这篇文章我们来聊一聊在系统设计和项目经验这两块,应该如何充分的准备,才能拿出有技术含量的项目经验战胜跟你同台竞技的其他工程师,征服你的面试官,收获心仪的Offer。
高级工程师必备:系统设计能力
在招聘高级及以上工程师的时候,一定会严格考察一项能力:系统设计能力。
因为如果一个开发者仅是对各种各样的技术都熟悉,即使有技术广度,也有一定的技术深度,实际上是不够的。如果他的系统设计能力不到位,可能导致他在开发系统的时候会乱用技术。
比如说,有的系统有一些自己特殊的业务场景和技术挑战,实际上在这个场景之下比较合适的是采用“缓存+数据库”的技术方案来应对。
但是有的工程师会很多技术,但是缺少这种准确的分析系统问题,提出合理的技术方案的能力,也就是缺少系统设计能力,导致他可能会引入Elasticsearch这种技术来尝试解决这个问题。
那么结果必然是失败的。之前很多人找我问问题,说我在XX场景下,用了XX技术,但是没有起到想要的那个结果啊?
我一看,这不是必然的么?你的XX技术应该用在YY场景下,结果你用到XX场景下,肯定是不行的。
这就是系统设计能力的重要性。
那么落地到现在的互联网行业的面试,大家应该会注意到,很多大厂都会越来越开始问一些系统设计类的问题,举几个例子来看看:
1.如果让你设计一个秒杀系统,你会如何设计?
2.如果让你来设计一个消息中间件,你会从哪些方面来考虑?核心的架构以及数据结构如何设计?
3.如果让你来负责一个电商双11大促系统,你会如何来考虑和设计?
4.我们公司有这样的一个业务场景,XXXX,我给你画个图,YYYY,就根据这样的一个场景以及面临的问题。如果让你来设计这个系统,你会如何考虑?
其实如果你在面试的时候遇到上面的那些问题,就是典型的系统设计问题。
面试中的系统设计问题主要分为两类,一类是常规性的,比如秒杀系统的设计,另外一类是那个公司自己的业务场景下的系统设计。
第一类系统设计问题其实很好快速突击准备,你可以到网上搜互联网公司常问的系统设计问题。
收集好典型问题之后,百度技术博客给出的技术架构设计的思路,将这些思路自己进行整理总结,然后转化为自己的语言,最后落地到纸上画出架构图。
到面试现场,你能够画图把这个系统设计思路说清楚,这个基本就OK了。
这个准备时间不长,突击的话可能几天时间也足够了。
当然,最好的结果,必然是你自己本身做过类似的一些有挑战的系统。
此时你遇到这种系统设计问题,直接说,这类系统我之前做过,然后把自己之前的项目经验都现场画图给说出来。
第二类系统设计问题就不太好准备,这考验的真正的系统设计能力,短时间内针对一个业务场景和技术难点,能否迅速给出一个初步的架构设计和技术方案。
第二类系统设计问题,从长期积累和准备的角度,我的建议是在平时自己在开发系统的时候多思考,自己的这个系统有没有什么技术难题,针对这个技术难题应该用什么技术,什么方案来解决,这就是潜移默化的在积累系统设计能力。
但是如果从临时抱佛脚的角度,平时没那样的积累,遇到第二类灵活开放的系统设计问题,那也不能一问三不知,大眼瞪小眼。
因此,我的建议是:
对于你要面试的公司,尽可能的多做了解。比如公司业务背景、用户量。