Java程序员如何用2年时间获得大厂3年实战经验?

1. 自己学习(这是首要条件)

2. 多参与技术讨论,增加自己人员,这个对于新手来说很重要,软件这个行业喜欢内推

3. 写自己的开源项目,这积累互联网上的高手

这东西,出路无非三个,第一升职高管,管理层,第二挣点钱转行回家卖煎饼果子,第三留给大佬们回答

1.加班

2.八小时外的自学

3.不断挑战自己的弱点

4.多熬夜,多做项目

要想做人上人,就得吃得苦中苦,永远不要相信有什么一步登天的道理,说白了,就一句话:天道酬勤

时刻保持对新技术的敏感度,并定期更新自己的技能储备,是每个技术人的日常必修课。

要做到这一点,最高效的办法就是直接跟 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学源码
  • 写写写,做笔记

好了,希望大家都养成读源码的好习惯,轻松搞定面试官刨根问题的面试方式。

相关代码参考