时刻保持对新技术的敏感度,并定期更新自己的技能储备,是每个技术人的日常必修课。
要做到这一点,最高效的办法就是直接跟 BAT 等一线大厂取经。说白了,平台足够大,就会有更多资源和更广阔的发展空间,在前沿技术领域的研究和投入也更大一些。
但话说回来,并非所有程序员都混迹北上广。我们中的相当一部分人,平时很难有机会接触国内外大厂的实战经验,对这些最佳实践的认知,基本停留在技术公号那些内容换汤不换药的干货文上。
其实,有些文章光看标题就能猜出个大概,而在技术圈,变化才是永恒不变的主题。与其收藏那些“趋势预测文”,不如听当事人讲讲大厂到底是怎么做的。
3 年经验的大厂程序员,是 HR 眼中的香饽饽,本应在招聘市场上受到追捧,然而,最近我发现一名履历不错的程序员,跳槽时未能通过技术面,此反常结果令我感到疑惑。 在与他交谈后,我又与多名相似履历的程序员进行沟通,发现不少 3 年工作经验的大厂程序员,会因技术瓶颈陷入职业困境中。
观察数名程序员所陈述的焦虑表现无非是:失去了主动学习的热情,不再刻苦钻研技术,长时间消息闭塞,对新技术、新领域不了解。 他们处在自信与焦虑的挣扎点,一方面对现有工作得心应手,另一方面又找不到技术和职场的突破口。当程序员们技术处在瓶颈期时,自然会恐慌:无论资本处在狂热还是寒冬,无法成长的人,注定是竞争中的牺牲品。
我认为,他们患上了「大厂通病」。
大厂通病:3 年时遇见技术瓶颈
技术瓶颈的外在表现,往往源于内因。根据候选人们的表述,无法提升的内因如下: 1)成为熟练工种后,不再尝试挑战
2)大厂加班过多导致缺乏个人思考时间
3)精力过于分散,无法集中精力做编程
然而,细究所谓「大厂通病」,我们难以认同这些「内因」,它们更像是借口,也形成悖论:熟练工种会认为工作无压力,真正觉得工作轻松的人,会常无效加班、精力易分散吗? 让我们分别分析「内因」背后的「借口」是什么。
借口一 : 成为熟练工种后,不再尝试挑战
很多出现技术瓶颈的大厂程序员表示:他们技术提升最快速都在工作第一年,会花费大量时间钻研与学习。理由无非有二:1. 刚毕业具有冲劲和好奇心 2. 工作对于新人难度大,会在磨练中成长。 当技能逐渐熟练,解决工作内容显得得心应手时,他们会失去好奇心,失去压迫感,从而满足现状:放低自身要求,认为编程技术在满足开发软件需求情况下,编出来就行,如果要达到更苛刻标准,纯看上司要求,或自身兴趣,无奈他们已然没了兴趣。 拆穿借口:熟练是伪装外皮,无危机感、无上升意识是本质。他们最大问题在于:技术仍停留在一两年前,没有所谓 3 年工作经验,错将重复性操作当作技能经验。
借口二 :大厂加班过多导致缺乏个人思考时间
一名 4 年工作经验的 Java 候选人,正在 100offer 看机会,如今有份 A 厂的 offer 摆在他面前,leader 虽认可他的技术基础能力和业务理解能力,但仍在观望中,offer 还未给到我们的候选人,深究原因,令人深思—— A 厂目前在布局大数据,需要大量人才,在缺少 Scala 工程师的前提下,A 厂会需要 Java 工程师来做大数据工作。该候选人表示:首先,这与他现在做的 SDN 开发有太大出入,其次,他虽然有 4 年 Java 经验,但大厂通常爱加班,导致他几乎没有个人时间,从而渐渐失去了解新领域、新技术的精力和兴趣,对于大数据崛起也只是略有耳闻。 认为加班使得个人成长停滞不前的人不止他一个人,骇人听闻的996、周末轮班工作等制度,会让他们精力过多被消耗,对待工作稍显应付,回到家中也无暇思考。 拆穿借口:不关注外界信息和加班多无必然联系,并且,问题在于,他们自身成长速度完全取决于其工作内容的强度和难度,当工龄久了,工作只有加班强度,没有技术难度,成长便会停滞。
借口三 :精力过于分散,无法集中精力做编程
某 F 轮后 O2O 大厂的 Java 候选人,正在准备寻求新机会,问他为何选择离开前景大好的公司时,他和我们描述了两个原因。
第一,该公司盈利重点处在转型期,餐饮、金融、物流都打算发力,战略转型使得各部门资源都不足,打法显得混乱,甚至有争夺资源产生内耗的现象。身为基层技术 leader 的他,渐渐感觉精力过于消耗。
第二,新任领导的管理风格更让他不满,作为中间层的技术管理,大部分时间和精力都浪费在了上下级的沟通中,至于技术,很早以前就处于停滞不前的状态了。 不止他一人有以上烦恼,3 年工作经验的程序员,不会再只做编程,还会参与到软件设计、项目管理、与用户或领导沟通中,精力难以集中。如果遇上公司转型期或动荡期,更会分身乏力,导致无论是主动学习还是钻研技术上,都失去热情。
拆穿借口:不需要沟通的技术人员根本不存在,合理利用精力用于沟通,是用技术解决问题的快捷方式之一。
我并不是否认以上三点「大厂通病」不存在,的确是多数3年工作经验大厂程序员的共有困惑,但是,撕下借口的伪装,从逼迫自己改变开始,才是正解。
如何解决「大厂通病」所带来的技术瓶颈?
扔掉借口从改变环境做起,跳槽 or 转岗?无论怎么选,都是逼迫自己改变的开始,陷在悖论中倒不如去打破僵局,打破的方法是什么呢?
学习了解目前互联网最新最流行的技术
首先是大厂面试高频考点:分布式技术 到底什么是分布式经验,想要回答好面试官的问题,需要会哪些和分布式有关的知识呢,大概可以总结如下:
分布式服务框架。如Dubbo、SpringCloud
分布式事务。2PC、3PC、TCC
分布式锁。Redis实现、zk实现
消息中间件。Kafka、RabbitMQ、RocketMQ
分布式缓存。Redis、Memcached
分布式搜索系统。Elasticsearch
分布式理论。CAP、BASE
高性能、高可用、高并发。分库分表、读写分离、缓存、限流、降级、异步消息
如果没有实操经验,那就充实自己的理论知识,争取早日进入大厂,把理论付诸于实践。
阅读源码
大部分Java开发者去大厂面试前,都会把一些基础的源码慢慢都啃了一遍。
•最基本的HashMap 和 ConcurrentHashMap
•线程池的源码实现
•阻塞队列BlockingQueue相关实现
•ReentrantLock 实现,以及其内部同步器Sync的实现原理
•Future的实现原理
•AtomicXXX是如何运转的
•JDK源码
• 不过,说到源码,有些朋友似乎比较反感,总觉得会写代码就成,为什么一定要去了解源码是怎么实现?
看源码的几个好处:
•从源码中学习如何性能优化、设计模式等
•深入源码,才能了解真相
•了解源码,才能更好的解决问题
•你懂源码,面试官更懂你
• 源码怎么读,才比较有效率?
•从问题出发,带着问题看源码
•面向debug学源码
•写写写,做笔记
• 好了,希望大家都养成读源码的好习惯,轻松搞定面试官刨根问题的面试方式。
最后,给大家推荐一些免费的分布式、源码等学习的资料,有需要的可以关注一下小编,也有Java资料群可以加 894180257