我招了个“水货”程序员

这篇文章对不少没有高并发经验的程序员来讲,会很是有帮助。程序员

不少程序员可能都遇到过相似的困惑:web

我没有高并发项目经验,可是面试的时候常常被问到高并发、性能调优方面的问题,该怎么办?面试

这个问题怎么解决?和你们说说我招人的一个经历。算法

程序员小张参加工做已 5 年,是一位高级工程师,是我亲自招进公司,表现很出色。数据库

前一阵子,我把小张叫进会议室,想让他单独带个团队。其中,我谈到了面试时,他简历注水的问题。缓存

事情是这样的,大概两年前,公司有个核心项目缺人,须要一位高级程序员。这个岗位很是重要,因此对面试人要求不低:性能优化

  • 有高性能、高并发开发经验
  • 有高可用系统经验
  • 参与中间件研发、优化和系统存储优化

招聘持续了两个月,面试了许多工做五年以上甚至十年的人选,却依然没有招到一个特别合适的。服务器

就在咱们快不抱但愿的时候,同事让我去面试一个有趣的人,他强烈推荐,并顺手把简历递给了我,这人正是小张。网络

接过简历后,我先翻了翻。这一翻,让我皱起了眉头。多线程

简历里,小张的工做经验只有区区三年,这三年全都在一家公司,公司自己尚未什么名气。

更重要的是,我怀疑他的简历作了手脚。

他说本身三年里,负责过两个项目,一个是电商项目,一个是关于这个电商项目的对外开放平台。对这两个项目,他着重强调了项目的高并发,并说本身解决了不少技术难题。

就是这里出现了问题。咱们当时也有电商项目,市面上稍微有点名气的电商平台我都很是清楚,却没据说过他简历里的产品。因此我怀疑,这份简历是包装过分了。

可是,对于这么明显的问题,我不信前面的面试官们都没看出来。那么,为何他们还推荐我去见见呢?

说内心话,对简历包装过分我是比较恼火的,可是这只是个人怀疑。同时,前面的面试官居然是带着一种从未有过的满意语气,叫我必定面面他,对同事们的承认我又比较好奇。

就这样,我带着恼火又好奇的矛盾心思见到了小张。

见到小张的时候,我因为有点恼火,脸色显得很是严肃。他可能看到我如此严肃,不由局促了起来。可是,从他的眼神中,我又看到了很强的自信。我内心想,确实挺有趣的人。我决定要好好的面试下这我的,看看他到底有什么本事,能让个人同事如此满意。

问了下他大概背景后,开始了进入了正题。当进入了正题以后,小张的回答态度就让我大加赞扬。态度自信,不卑不亢,逻辑表达也十分清晰明白。

这时候,我内心决定,若是小张后续的回答,能证实他的实力达到简历描述的八成水平,我会倾向于把 offer 给他。

我先问了问他对高并发的理解,好比

高并发须要参考哪些指标?

他告诉我,高并发因为产品类型不一样,因此指标都不同。以他负责的电商系统来讲,根据模块的不一样,关注的指标不一样。商品浏览看得是 QPS,订单模块则是看得 TPS。同时,他们还须要关注活跃的用户量等等。

这回答真不错。面试以来,哪怕是工做多年的人,绝大多数的答案就是 QPS,无非再多一个 TPS。能把产品类型的不一样和不一样的高并发指标之间关联起来,这说明小张是仔细对这个问题思考过的。

我愈发满意了。在后面,我又追问了集群部署、多级缓存、复杂查询优化等有关性能优化的问题,还附加了系统高可用的各类策略,和如何拆分去保证灵活扩展等实际中咱们正在采用的问题。

等面试完毕后,时间已通过了一个多小时。小张当时并无百分百答好我问的问题。

从实际回答来看,关于性能优化的细节,好比,系统瓶颈的检测和优化,程序逻辑的优化,JVM 优化甚至数据库的优化都答得异乎寻常的出色。

可是,对于高可用的大概策略,好比降级处理,限流处理等,他只知道大的方向,不少答案一听就知道是从书本上或者互联网上看来的。

而对于系统的扩展性相关问题,他甚至答的很是差,不少都回答不上来。

不过瑕不掩瑜,小张依然拿到了 offer,他指望的薪资我也没有打任何折扣,这足以给他一份大大的惊喜了。

在后来的两年里,小张的出色表现,证实我没有看错他。

他为了公司的核心项目作出了巨大贡献,而他的技术水平,也有了肉眼可见的巨大提高。他成为了一名高并发经验丰富的高级程序员。因此,如今打算让他带团队了。

“那么,就剩一个问题了。你面试以前究竟是如何作到熟悉高并发的性能优化的?” 我好奇的问出了我压在心底的问题。

小张不太好意思的挠了挠头,他详细给我讲述了他是如何搞定高并发经验的。

我听完后,真的是对他这些准备赞不绝口。我认为该分享出来,让更多的人看到。

划重点!若是你也渴望有高并发经验,那么下面的内容你要格外关注了。

小张确实是作了电商平台开发的。可是,这个电商平台没多少访问量,QPS 可能一只手都能数的过来。说句难听话,也就是挂在网上而已。

他刚毕业入职开始,就参与维护了这套电商平台。就这样持续了一年后,他发现本身已经没法再有任何提升了。

他想跳槽,可是发现不少高级岗位都是要求高并发经验的,他对此很着急。若是他继续在之前的公司发展,就势必接触不了什么高并发。可是跳槽的话,他又必须有高并发经验才能找到一个不错的岗位去继续提高本身。

这貌似成了一个死结。

在百般无奈之下,他决定本身模拟高并发去得到经验。

如今总结下来,其实他的练习能够粗略分为三个阶段:

第一阶段

这个阶段,小张完成了在高并发条件下,对单机性能优化的学习。

小张用 Docker 容器去运行他维护的电商项目。而后用 jmeter、wrk 等工具去压测。

在压测期间,他敏锐地发现了因为系统每一个模块不一样,因此性能表现就不同,这种现象引起了他的思考。他通过网络搜索和查询资料,明白了不一样模块、不一样产品对并发指标的要求是不同的。

基于这种状况,他又根据产品的业务逻辑编写了复杂的压测脚本,能自动实现不一样模块的压测任务。

就是在这种不断地压测探测下,他明白了如何探测问题,如何经过优化代码、JVM 去解决问题。

好比,解决误用 HashMap 致使死循环的问题。又好比,误用不带缓存的文件 IO 流,去读取文件的问题等等。

在程序和 JVM 优化完毕后,他又发现数据库也存在问题。因而,他又学会了如何优化数据库 SQL,如何对数据库分表等问题。

也是在这个阶段,他认识到了缓存的必要性以及同步缓存数据状态的重要性等重要知识点。

小张在搞了单机优化后,他以为也没有办法再经过单机的压测学到什么新的东西了。因而,他转向了第二阶段。

第二阶段

小张从阿里云买了两台机器,他开始尝试使用负载均衡去分担高并发的压力

一样的,也是借助压测工具去模拟了高并发。在压测期间,负载均衡和系统屡屡出现和单机彻底不同的问题。

好比,负载均衡自己的性能问题。好比,在一些时候,负载均衡后面的机器负载是不平衡的,须要对负载算法进行调整。

这个阶段,小张理解了负载均衡中大部分的细节。

可是,高并发中,不少系统的构成会很复杂,以致于须要分布式架构系统的程度。他们须要各类中间件作通讯,作存储。

因此,小张根据招聘的一些需求,他作了第三阶段的练习。

第三阶段

为了能熟悉市面上各中间件的使用,小张把他那套电商平台改了又改。

好比,一些本地调用的方法,被他替换成了 Dubbo 远程调用。好比,一些模块间调用,被他替换成了 MQ 中间件传消息。再好比,一些放在关系数据库的被频繁访问的数据,被他改存在了 MongoDB 中……

固然,压测依然继续。就这样,小张又实践了不少中间件和分布式框架的使用。

在模拟高并发练习的同时,小张不忘去读各类高并发高性能的书籍。好比,《大型网站服务器容量规划》、《互联网创业核心技术:构建可伸缩的web应用》等书籍。

在来到咱们公司面试以前,小张如此练习了两年左右。

虽然小张面试的时候表现也存在不少不足,可是我当时看中他的一些优势是:

1. 小张知足具备高并发经验的要求

为何咱们须要找有高并发经验的人?

说白了,咱们想找的程序员实际上是:

  • 不会乱写性能不好的代码
  • 能敏锐感知到影响系统的问题
  • 能独立的处理因为高并发引起的问题

小张经过他的练习是掌握了这些技能的。

2. 小张知足熟悉高可用的要求

咱们找熟悉高可用的人,其实并不要求这我的必定能给出什么独特的高可用方案。咱们要求的是,他能知道高可用的知识后,去意识到高可用的重要性。

好比限流功能出现问题,他要能立刻认识到这是个很重要的问题,从而把解决的优先级提到很高。

小张经过学习,明白了高可用的重要性,也知道了高可用的大方向,这就够了,剩下的细节,咱们有信心带小张在实际工做中学出来。

3. 小张能参与咱们的中间件研发和存储优化

小张主动改造过他们的电商系统,并且使用了不少的中间件,并对这些中间件都进行过优化。对这些中间件的特性比较熟悉,而且在实践中,他也了解了不少原理。

除此以外,小张的主观能动性尤为打动咱们。他对技术的主动钻研、主动学习,代表了他是一个喜欢走出温馨区,愿意挑战本身的人。而这样的人,有哪一个团队不欢迎呢?

因此,其实没有高并发经验并不可怕。

若是在工做中你接触不到高并发的项目,那么也不必太纠结。公司作什么项目你改变不了,你能改变的只有你本身。关键仍是本身要去主动学习,主动练习,主动提高。只有这样的人,机会才会去垂青。

最后,毕竟在程序员这个圈子,90% 以上的人可能都没有真正的高并发经验,因此在此也但愿各位面试官,在招人的时候,若是遇到好苗子能够适当宽容一些,给新人们一点机会,说不定能找到一匹千里马。

码字不易,看完以后若是以为有帮助,但愿你能帮忙随手点个赞,你的支持对我很重要

最最后,推荐一本高并发相关的开源书籍:《深刻浅出Java多线程》

本书的做者们都是阿里、ThoughtWorks 等大厂的高级程序员。

我看了一部分,虽然还没所有看完,可是我已经火烧眉毛的想给这本书点赞了。

很少说了,咱们直接看目录:

书里还有不少例子,能够说是图文并茂。

获取方式:关注个人公众号【四猿外】,关注后在后台回复 666

还有更多干货资料不按期更新


你好,我是四猿外,一家上市公司的技术总监,管理的技术团队一百余人。

我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。

我会把本身的成长故事写成文章,把枯燥的技术文章写成故事。

相关文章
相关标签/搜索