查看原文
其他

小公司出身的程序员,面试咋这么难?!

中华石杉 程序人生 2019-03-31

作者 | 中华石杉

责编 | 伍杏玲

本文经授权转载自石杉的架构笔记  

【程序人生 编者按】这篇文章从一个真实的案例,聊一个很多人感兴趣的话题:小公司的Java工程师和大厂Java工程师一起竞争同一个职位时,小公司出身的人到底输在哪里呢?

如果能弄清楚个中缘由,相信很多中小公司的同学可以对自己当前的情况以及跟大厂之间的差距有更加清晰的认识。从而可以更好的规划自己的职业发展路线,更好的去努力争取一步一步的缩小差距。


小公司出身,被大厂竞争者 KO


以下是一个非常真实的案例,是一个大厂工程师和一个小公司工程师同时求职一个独角兽公司的职位的经历。

一个是985本科学历,出身互联网大厂,四五年经验的样子。技术积累非常扎实,而且参与开发的系统支撑过上亿用户量,有真正的高并发经验。

虽然说那个系统不是他主导设计的,他仅仅是一个资深工程师,负责带几个小弟设计和开发几个子系统。

但是他在这个过程中,全程观察到了大厂里的大规模系统,如何规划、设计、构建以及演进的,如何依托各种各样的技术解决线上很高的挑战。

另外一个同学,普通二本学历,同样五年左右的工作经验,一直都在小公司里工作。平时也还算是比较好学,学了一些技术,各种东西或多或少都了解,在小公司出身的工程师里,整体技术还算是比较好一些的。

这两个人同时去一个几十亿美金估值的独角兽公司去面试求职,大家猜猜,发生了什么事情?

同样的年龄,两个人的面试结果是天差地别。

第一位同学,顺利拿下独角兽的技术专家的职位以及一大笔期权,还能独立带团队。

第二位同学,居然连Offer都没拿到,人家甚至都不愿意给一个高级工程师的职位。

接下来我们从几个方面来分析一下这两种不同的同学,他们之间的差距到底在哪里。


学历:面试官的第一印象


面试官看简历以及面试的时候,第一观感有两个:一个是学历,一个是公司背景,这俩东西几乎就形成了每个面试官对面试者的第一印象。

上述两位同学,第一位同学是名校本科,第二位同学是一个不知名的普通二本。

很多人也许觉得学历这个东西是虚的,关键还是能力。对于这个我是部分认可。

确实我们也见到过,高学历的人他的技术能力、学习能力、人品态度甚至还远远不如一个大专学历的人。

但是也有很多情况下,高学历的同学他的技术底子更好,学习能力更强,更加聪明,后劲和潜力远远比普通学历的同学要好的多。

所以这个学历是不能一概而论的,不能说高学历的同学就一定很牛,也不能说低学历的同学就一定很差。要知道,高学历的同学里也有各方面不好的,低学历的同学里也有各方面极为出色和优秀的。

所以,我的观点一向是不唯学历论,我们在招人的时候,通常情况下都是要求名校本科/硕士学历的。

但是如果是特殊情况下,都会给普通学历的同学一个机会,让他来证明自己的极为优秀的潜力和能力,也可以破格招收。

但是这里有一个很关键的点,那就是从我们过往大量的经验而言,高学历的同学,他当初为了考上名校,往往付出了大量的努力。所以他的学习能力以及潜力,可能往往更好。

而一个普通学历的同学,当初考上了普通的大学,可能是自己没发挥好,但是很多情况下,确实是学习能力没达到那个水平。

所以说,如果拿到两份简历,一份简历是211/985名校本科,一份简历是不知名的本二学校,那么作为面试官,第一印象,其实会潜意识里觉得,这个211/985名校本科的同学,应该学历能力和潜力会好很多,心里会更加期望一些,也会更加认可一些。

那么在面试的时候,面试官内心的个人情感色彩,其实是相对来说对名校同学更加接收程度高一些的。

而对于普通学历的同学,可能就是没什么期待,也没什么负面情绪,就是面试的时候带着很平常的感情色彩来对待。

那么大家想,这个学历的差距,是不是在一开始甚至还没面试的时候,就已经让面试官有了不同的看待了?这就是学历给面试结果带来的第一个影响的地方。

另外,大家可以想象一下。假设两个人的技术水平、项目能力都是一样,但是岗位需求有限,就一个坑,你觉得会招谁?

那想都不用想,肯定是211/985学历的同学!这个就是学历的优势了,在其他方面假设面试结果都差不多的时候,你还是可能会因为学历问题,被竞争对手挤走,然后失去Offer,别人因为学历高,就可以拿到更多的Offer机会。


公司背景的差距:你的人生名片


除了学历之外,你给人的第一印象是公司背景。虽然说很多大厂出身的同学,也有那种能力平庸,技术不太好的情况,小公司出身的同学,反而也有那种技术能力强悍的人。

但还是那句话,大部分情况下,大厂出身的同学,相对技术能力都是比较好的,有保证。

而小公司出身的同学,很多情况下确实技术能力一般,也没做过什么有挑战的技术项目,整体而言比较普通。

所以一般在面试官来看,如果你是知名大厂出身,那么一般刚开始就会对你心里有好感,大家都愿意找知名公司的人进来加入自己,对方的技术和经验有保障。

但是如果你是小公司出身,面试官对你是没任何感情色彩的,不知道你到底怎么样,一切还是要看面试情况。

同样,我们再假设:如果两个人学历差不多,技术能力差不多,项目经验差不多,但是一个是出身大厂,一个是出身小公司,你会要谁?

当然还是会优先选择大厂的同学加入团队了,毕竟人家大厂出身,对大厂自身的一些技术体系见识也多一些,眼界更加开阔一些,哪怕冲着这一点也会让人家进来。



技术差距:硬核能力的欠缺


承接上文所述,接下来上面两位同学开始了几轮面试。

第一位同学的情况之前已经说过,平时非常注重技术积累,经常学习各种技术。

而且这位同学喜欢探索各种开源技术的源码,喜欢研究各种不同场景下技术挑战的解决方案,自己做了大量技术笔记,所以对Java领域完整的技术栈都有很深的积累。

同时,因为在大厂里开发系统,本身在各种技术挑战之下,是有足够的机会实践,将各种技术在项目里落地。

比如说真正用缓存技术来抗每秒几万的并发读请求,或者基于分库分表抗几十亿数据量的存储和查询。

既然如此,面试结果当然是显而易见了。

面试官一定会从并发编程、缓存、JVM、MQ、分布式、微服务、分库分表、NoSQL、高并发等各个环节开连环炮深入的发问,从各种技术的一些基本的原理,到他在项目里的各种结合业务是如何落地实践的,平时遇到哪些坑是怎么解决的,然后深入的一些技术的底层源码级别。

这个同学,都可以回答的非常的好,基本能完全Hold住面试官的各种问题。

但是第二位同学呢,那就差很多了,基本上面试的时候,面试官各种发问之下,确实发现这个人对各种技术都有一定的了解,比如说JUC、RocketMQ、Kafka、Dubbo、Redis等技术,或多或少都知道一些。

但是呢,如果往深了问,比如问他RocketMQ在项目里到底是怎么用的?为什么要用?不用行不行?抗了多大的并发?这些问题,他就没法说了。

为什么呢?因为在一些小公司里,可能对MQ用的很简单,甚至都没用,所以他的实践经验并不是很多,他只是业余时间自己学习过一些基本的使用和原理而已。

然后再往深了问,说能不能来聊聊源码之类的,那他更加是说不出来了,因为根本没能力去精读一个开源技术的源码。

所以最后在面试官的眼里,第一位同学,技术广度足够,技术深度扎实,实践经验也丰富。

第二位同学,技术广度差强人意,还算是知道一些,但是技术深度几乎没有,实践经验也几乎很少。明显第一位同学的技术能力要高出第二位同学一大截。

这就是两个人的硬核技术能力的差距,在面试的时候会直接影响面试官的考察。


架构能力的差距


在面试的过程中除了硬核技术能力之外,非常关键体现不同的人的层次和水平的,还有架构设计的能力的差距。

面试官会深入考察你在一个项目里扮演的是个什么角色,首先会摸清楚你们一个完整的大系统是多大规模,你在里面是负责了哪些东西,有没有带人,带人是做什么的。

接着会仔细考察你对自己系统的设计能力,什么样的业务场景,业务多复杂,技术挑战有多高。

然后你如何整体规划和设计你的系统,你如何分配子系统和任务给你带的一个团队,如何把控一个团队来推进一个大系统的开发。

另外,面试官还会出一些你没经历过的系统设计题目,看看你在短时间内,随机应变,能否把一个陌生背景下的系统设计出来一个雏形。

通过这些,可以看出你在系统设计的时候,各个点的考虑是否合理,能否全局把控一个系统,能够把控多大的系统。

这类问题可以完美区分出来一个人的能力。你是到了技术专家的水平,可以带团队负责一个大系统呢?还是说只能带一两个小弟作为高级工程师负责一个大系统中的一两个子系统?通过这一系列的架构能力的拷问,就可以区分出来。

所以第一位同学,他本身就带了几个小弟,算是一个小的团队,而且负责了几个子系统,他可以很好的说出来自己负责的业务场景。

比如说像用户量、并发量、数据量、请求量、技术挑战、技术复杂度,如何规划和设计一个大系统的,如何给小兄弟分配任务的,怎么把控一个大系统不断推进和演进的。这些东西,他都可以说出来。

而第二位同学,就差很多了,他本身在小公司里最多就带过1个小弟一起负责某个子系统的开发,没独立把控过一个大的系统,而且做的系统也没太大的技术挑战,最后说出来的系统架构也很简单,没太多的技术挑战。

所以在这里,又是体现和区分出了两个人的能力的差距。


面试结果的分析


最后综合以上几点,我们先不考虑其他的因素,比如说软素质(沟通能力、表达能力、团队协作能力,等等)。

就上面几块分析,大家就可以看到了。第一位同学:学历更好、潜力更好、技术过硬,能带团队,在大厂把控过有技术挑战的大系统。

所以对于一个独角兽公司而言,在招聘技术专家的时候,是会选择这位同学发Offer的,因为他来了就可以带一个团队,把一个完整的系统抗起来,各种架构设计,团队管理,技术能力,都可以Hold住。

但是第二位同学,学历普通、潜力一般、技术平平没太大亮点,也没太好的架构能力和经验,又一直在各种小公司里干。

最后综合一考量,甚至可能会招聘一个两三年经验的大厂同学到独角兽公司团队给高级工程师的Offer,而不是要一个四五年经验的小公司出身的工程师,所以最后这位同学连独角兽公司的Offer都没拿到。

相信大家看完这篇文章,应该可以从各个层面了解到自己的一些欠缺和差距,以及在求职的时候,出身小公司的同学为什么屡屡受挫,好机会很少。

但是大家也不用因此泄气,小公司的工程师也是可以逆袭冲进BAT大厂的,只要大家坚持和努力,给自己定好明确的规划,一步一个脚印慢慢走,就一定可以做到,最难的,是你决定开始的那一步。

祝你面试成功!

作者简介:中华石杉,十余年BAT架构经验,倾囊相授。

公众号:石杉的架构笔记(id:shishan100)

#欢迎来留言#

你是小公司出身吗?

你觉得从小公司跳槽到大厂,最难的是什么呢?


 热 文 推 荐 

13 岁女学生因两行 JavaScript 代码被捕!

260,000 位程序员哭了:跳槽频繁,年薪却仅有 10 多万?

佛系程序员的一天:打死不改的需求与成功买房的自豪 | 程序员有话说

近 45 亿元拿下开源服务器 Nginx,F5 买断应用交付未来?

16 岁程序媛遭辍学歧视死亡威胁,最终是如何开发出爆款应用的?

中国区块链开发者真实现状:半数只懂皮毛; 数据分析师吃香; Java/Python或成为主流开发语言

波音737连续坠毁,AI要背锅?

人人之间“不简单”,关系图谱“有一套”

没有一个人,能躲过程序员的诱惑!

System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

喜欢就点击“好看”吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存