(1)高级工程师必备:系统设计能力面试
咱们通常在招聘高级及以上工程师的时候,必定会严格考察一项能力,系统设计能力。数据库
由于若是你仅仅是对各类各样的技术都熟悉,有技术广度,也有必定的技术深度,其实是不够的。若是你的系统设计能力不到位,可能致使你在开发系统的时候会乱用技术。缓存
好比说,有的系统他有一些本身特殊的业务场景和技术挑战,实际上在这个场景之下比较合适的是采用 “缓存 + 数据库” 的技术方案来应对。数据结构
可是呢,有的工程师会不少技术,可是缺乏这种准确的分析系统问题,提出合理的技术方案的能力,也就是缺乏系统设计能力,致使他可能会引入Elasticsearch这种技术来尝试解决这个问题。架构
那么结果必然是失败的。因此以前不少人找我问问题,说我在XX场景下,用了XX技术,可是没有起到我想要的那个结果啊?并发
我帮他一看,这不是必然的么,你的XX技术应该用在YY场景下,结果你用到XX场景下,确定是不行的。微服务
这就是系统设计能力的重要性。高并发
那么落地到如今的互联网行业的面试,你们应该会注意到,不少大厂都会愈来愈开始问一些系统设计类的问题,举几个例子来看看:架构设计
1设计
若是让你设计一个秒杀系统,你会如何设计?
2
若是让你来设计一个消息中间件,你会从哪些方面来考虑?核心的架构以及数据结构如何设计?
3
若是让你来负责一个电商双11大促系统,你会如何来考虑和设计?
4
咱们公司有这样的一个业务场景,XXXX,我给你画个图,YYYY, 就根据这样的一个场景以及面临的问题。若是让你来设计这个系统, 你会如何考虑?
其实若是你在面试的时候遇到上面的那些问题,就是典型的系统设计问题。
面试中的系统设计问题主要分为两类,一类是常规性的,好比秒杀系统的设计,另一类是那个公司本身的业务场景下的系统设计。
第一类系统设计问题其实很好快速突击准备,你能够到网上搜一搜互联网公司常问的一些系统设计问题。
收集好一些典型问题以后,百度一些技术博客给出的技术架构设计的思路,将这些思路本身进行整理总结,而后转化为本身的语言,最后落地到纸上画出架构图。
到面试现场,你可以画图把这个系统设计思路说清楚,这个基本就OK了。
这个准备时间不长,突击的话可能几天时间也足够了。
固然,仍是那句话,最好的结果,必然是你本身自己作过相似的一些有挑战的系统。
此时你遇到这种系统设计问题,直接能够很牛叉的说,这类系统我以前作过,而后把本身以前的项目经验都现场画图给说出来。
第二类系统设计问题就不太好准备了,由于彻底考验的是你实打实的系统设计能力,短期内针对一个业务场景和技术难点,可否迅速给出一个初步的架构设计和技术方案。
第二类系统设计问题,从长期积累和准备的角度,个人建议是在平时本身在开发系统的时候多思考,本身的这个系统有没有什么技术难题,针对这个技术难题应该用什么什么技术,什么方案来解决,这就是潜移默化的在积累系统设计能力。
可是若是从临时抱佛脚的角度,平时没那样的积累,遇到第二类灵活开放的系统设计问题,那也不能一问三不知,大眼瞪小眼。
所以,个人建议是:
对于你要面试的公司,尽量的多作了解。好比公司业务背景,大概用户量,这些均可以了解一下。
若是目标公司有官方的社区或者官方公众号,关注一下,看看上面的技术分享。
而后若是面试时,面试官针对他们公司的具体业务出了一个系统设计题目,你若是没有思路,建议尽量的结合第一类的常规系统设计题目来思考套用。
举个例子,好比你面试一个p2p金融业务的公司,若是被问到大量用户同时抢标,如何设计架构?
你没有作过,可是你能够结合一些常规的系统设计题,好比秒杀系统的设计思路,套用在这个新的业务上。
而你若是在面试这家公司前,大体了解了其业务背景,那么对你回答这类系统设计相关的题目,确定也是颇有帮助的。
(2)如何让你的项目经验更有技术含量
在解决了系统设计问题以后,任何一个公司,任何一个面试,都必定会涉及到你做为一个工程师最最核心的价值和能力,就是你的经验,具体来讲就是你作过的项目。
这块是面试准备时的重中之重,应该做为最高优先级来对待。
有不少同窗,作的项目其实挺不错,可是平时疏于总结,面试前也不许备,结果面试时支支吾吾,半天答不上来,白白浪费面试机会。
好比一个很是典型的项目经验的面试考察情景以下:面试官反复的追问项目的各个地方的技术实现细节,就想看看有没有哪一个地方是有必定的技术难度的,能够体现出这个候选人的一些项目上的亮点。
可是呢,候选人说来讲去,老是从业务的角度去说,就说有哪些子系统组成,分别是干什么的,如何交互的,看来看去都是系统业务的东西,就是没看到什么有技术含量的东西在项目里体现出来了。
若是出现上述的状况,那么这个候选人要拿大厂offer的几率就很低了。
由于你的项目里没看出来什么东西,没什么亮眼的地方。你看起来就跟千千万万个普通的工程师没任何区别。
并且,在薪水方面,你要价23k,可是另一我的要价是20k,还有一我的要价是18k。
在这种状况下,你以为你的offer好拿么?咱们为何不找一个更年轻,更有活力的,有冲劲的小伙子,他也作过跟你相似的一些没太大技术含量的项目。
虽然你工做了5年,人家就工做了3年,可是从技术和项目两块考察,你跟他没太大区别。你不过就是比他多工做了2年,多作了几个没技术含量的项目罢了。
可是在薪资要求方面,你可比人家多了5k,在这个时候,面试官在没更好选择的状况下,必定会找那个薪资要求仅18k的小伙子。
这也是为何不少同窗很差好准备出去面试,结果面半天,总是被人家说:你先回去等通知,咱们要再多面试几个候选人综合考察一下。到最后面试好屡次也拿不到几个offer。
其实缘由很简单,你没什么能打动面试官的亮点,没什么太突出的能力。而你的工做年限越长,薪资要求越高,就越是不容易拿到好公司的offer。
上面说的,是一个极端,这类同窗对本身作过的项目绝不重视,致使没法在面试中复现项目中的各类技术细节、技术难点。
这样,即便你的项目很牛,那又有何用,你当时作项目的时候,面试官又不在场。。。
然而,也有很多同窗,他们的项目其实并不高端,甚至是有点low。可是呢,人家凭借本身精心的准备,加上一些面试技巧,巧妙的让本身的项目脱胎换骨,瞬间变得高大上。
因此说,项目准备,百转千回,这里面有很多门道,接下来我们就来聊聊。
一样,我们分为两条路线来谈:一个是长期准备型;一个是短时间突击,临阵磨枪。
对于前者,我我的的建议,仍是像以前说过的同样,平时你工做的时候,必定多给本身设立技术挑战。总结起来一句话:没有困难,制造困难也要上。
这里面可能会存在对于架构的过分设计的问题,站在公司的层面会以为花那么多时间设计这些架构实在是无用功,可是从我的发展的角度,为了你的职业生涯发展,你有时不得不过分设计一下。
何况,这个对公司也未必是一件坏事,万一你公司之后规模发展起来了呢?这个谁又说的清楚。
举个例子,你在公司目前是负责一个OA办公系统,就内部几十我的使用,主要就是写写业务,crud啥的,看起来很low的项目。
而后呢,你使用的技术就是简单的SSM,可能连SpringBoot都没上,整个项目就部署的一个单体工程,没有微服务、没有缓存、跟全部高并发高可用等技术彻底绝缘。
确实,几十我的用,你何须杀鸡焉用宰牛刀呢?
可是想象一下,若是你的公司是一个世界500强,这套OA系统有上万人使用,那么状况确定就不一样了,可能就须要另一套技术架构。你彻底能够在工做中给本身作这样的假设,设置这样的难题。
固然,这只是笔者举的一个例子,之因此用这个举例,是想说明一下,不管你作的是什么项目,你均可以从某种角度出发,给本身制造各类技术难题,而后解决难题。
你能够在不要给工做量增添太多的状况下,尽量从公司发展的角度去考虑,向领导阐述你的考虑,这样公司将来发展5~10年,这套架构都够用了。
而且在面试时,你在阐述项目经验的时候,可让面试官看到你在里面有更多的技术架构的设计,考虑到了解决更多的技术问题,那么天然你的面试表现就会更好,就更加容易会拿到更好的offer了。
上述就是所说的第一点,长期状况下应该如何积累本身的项目面试经验。
接下来讲说第二点,项目的短时间突击应该如何进行,才能尽量的让咱们的项目显得更加吸引人。我估计可能更多的同窗须要这方面的技巧。
可是笔者仍是事先强调,这种短时间突击、临阵磨枪,效果确定是比不上长期的一步步稳扎稳打,这只是一种应对面试的退而求其次之选。
若是你们有时间,或者说经过这种短时间突击的打法拿到了心仪的offer,仍是应该沉下心来,一步步积累,技术的东西,来不得半点马虎。
若是你以前由于种种缘由,在面试前没有作过多的长期积累,那么短时间的状况下,应该如何临阵磨枪呢?
我这里的建议是,你本身至少应该反复思考,你目前负责的系统应该引入什么样的技术架构,采用何种技术方案,才能抗住各类冲击。
突击准备,你确定没有大把时间来付诸实践,可是你必定要本身思考,同时百度一下国内大型互联网公司的技术架构,他们使用了哪些高大上的技术,对于某个技术难点采用了什么技术方案。
而后在面试的时候,能够对面试官阐述一下你对这个项目一些问题的思考,以及技术方案、架构如何来设计,这样设计能够解决什么技术问题,有没有更好的方案选择。
这样一来,你起码比普通工程师多一些思考,提出更多的方案,这也能成为你更加亮眼的地方。
仍是那句话,作,总比不作强。你对本身的项目思考了不少的技术方案,这样和面试官总还有一些技术上的交流和探讨的东西。你的项目也不至于说充满了各类CRUD,毫无亮点可言。