在这个IT系统动辄就是上亿流量的时代,Java作为大数据时代应用最广泛的语言,诞生了一批又一批的新技术,包括HBase、Hadoop、MQ、Netty、SpringCloud等等 。

一些独角兽公司以及腾讯、阿里、百度、网易等知名大厂对Java人才的需求量连年升级,有2年工作经验的优秀程序员能轻松达到30w+的水平,但与此同时对人才的要求也越来越高。

比如,大厂的面试官经常会以如下句式来询问:

聊一聊你对JVM的原理,如何减少Full GC的情况?

针对高并发场景,如何优化,都采用了什么技术?

相比关系型数据库,NoSQL的优势在哪里,你们在什么场景下会用到?

可以看到,对于社招同学而言(特别是有2~5年工作经验的同学),不仅仅会问一些编程语言、设计模式等基础问题,还要对一些项目有深入的实战经验。

但现实却是,很多同学在技术生涯最初几年都会沉浸在业务开发中,忽视了对系统知识的梳理和技术视野的扩展。日复一日,导致很多同学就以为这就是技术的全部,同时在重复的体力劳动中也丧失了对技术细节的深入探讨。

每个程序员都追求“成就感”,而获得成就感最好的方式就是自己在技术上的突破。

技术的突破需要依赖业务场景的需求和自身刻意的规划学习,二者缺一不可,但前者是机会,往往不是自己能完全把控的,如果在自己工作中没有实践场景,最好的办法就是系统的学习与梳理,为自己制定一个不同时间段的发展道路,待机会来临时就能一展身手。

以工作前5年的规划为例,至少需要突破三个层次:

对代码精益求精

最开始工作的时候,我们会抱怨业务需求对技术没挑战,觉得在学校学到的这么多知识却没有用武之地。

实质上这是忽略了技术开发的本质,技术开发是一个工程项目,而工程项目的落地最重要的就是细节控制,也就是代码的品质,比如:

代码是否遵循了规约?接口设计的是否随意?测试用例是否都通过?

满屏的if-else是否可以用合理的设计模式来替代?有没有遵循SOLID原则,KISS原则?

有没有考虑用更合理的数据结构和算法改变代码的复杂性,提升运行的性能?

代码出bug的概率有多大,能否降低?

这是程序员的立足之本,基本是工作1年左右要达到的。在这一阶段看书是比较好的提升方式,比如:《Java编程思想》、《effective java》等。但要注意的是,在看书的过程中一定要思考能否运用书中的经验来改善自己写的代码,运用到实处,比如看到final和static,想想自己代码中用的是否合理。

此外,还可以看些常用的开源框架,如果你用的是Spring框架等,那么下面一个很好的知识结构:

 

跳出来,主动了解技术全貌

在将基础打牢之后,需要主动突破舒适区,不断的去扩大自己的技术视野,做到有广度。

这一步比较难,因为很多同学会被公司的技术和业务牵着走,比如公司当前的业务规模决定了技术上不需要分布式技术,那么很多同学就不会去思考如果规模大了之后,如何利用分布式技术解决该问题。

如何解决这个问题?除了寻找更大规模的业务外,要时刻保持时刻跳出当前层级和环境来思考的习惯。比如,你只用了关系型数据库,那么有没有想过数据一直产生,到达TB级别的时候该如何快速检索与保存呢?

此外,技术的全貌还包括各种技术之间的关系,你用了Dubbo,那么Duboo和Netty是什么关系,为什么会用到Zookeeper呢,和Spring Cloud又是什么关系?如果能在学习新技术的时候,将繁杂的技术关系理顺,会有一览众山小的感觉。

在工作的2~3年时间内达到这个水平,30w的年薪就离你不远了。如果你对高并发和分布式技术感兴趣,那么下面一幅图会有帮助:

 

不去造轮子,

前提是得知道轮子的内部结构

如果说,第二步是增加你的知识广度,那么造轮子就是增加你的技术深度,通过造轮子,才能真正把握技术的来龙去脉。

很多人信奉“不去造轮子”,看似性价比很高的一句话,却不知道这句话是有前提的,那就是“你得知道轮子的内部结构”,否则就是自我麻痹。接下来需要选择某一个或几个方面深入研究下去,构建自己的核心竞争力。

比如,消息队列在高并发分布式系统中一个及其重要的组件,起到削峰填谷、系统解耦的作用。我们以消费端如何快速获取数据来看思维是如何一步步深入的:

首先消费端要想及时获取数据,是否需要建立一个长连接?长连接的实现方式如何?

数据是通过push还是pull方式给到消费端,各自有什么弊端?

如果消费失败,可能是哪些原因引起?如果是因为网络原因引起,该如何解决?

这些问题都会在你自己造轮子的过程中暴露出来,从而加深你的理解和技术深度,一个有技术深度的程序员才是有灵魂的。而大厂也是愿意为有趣的灵魂买单的,这个时候看的就不仅仅是工资水平,更多的是在于晋升和发展前景的广阔性。

在Java语言上有所建树的开发者,都经历过以上3个层次。但可惜的是,囿于外界环境和自身设限,大部分的Java开发者却只停留在了第一个层次中,在日复一日的体力劳动中丧失了对技术细节的深入探讨,也丧失了晋升和薪资谈判中的筹码。

如何过渡到第二、三个层次?除了上文谈到的内容,这里我还想给你2个切身的建议:

1、扩宽自己的眼界,学着从全局看待问题,并且勇于挑战别人眼中的难题

2、持续提升你的学习能力,虽然有很多人以「在公司学不到东西」为理由离职,但你要知道:公司的目的是盈利。盈利的前提下,公司会尽力培养你,但是更多的时候能力成长还是得靠自己。学习能力弱的人,在哪里都没用。

掌握精通以下技术知识点年薪50W不是小kiss?

 

项目实战

 

高性能架构

 

架构师筑基

 

开源框架

 

设计模式

 

团队开发

 

微服务架构

如果你依然觉得有些茫然,不如跟有十余年Java开发经验的资深工程师聊一聊。

 

架构资料

 

架构资料

 

欢迎工作一到五年的Java工程师朋友们加入架构华山论剑【836442475点击进入】(大牛聚集地)一起交流学习探讨!

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

“五年经验”年薪50W分享Java程序员掌握什么技术才不会被淘汰的更多相关文章

  1. 分享Java程序员50多道热门的多线程和并发面试题(答案解析)

    下面是Java程序员相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  2. 2020年薪30W的Java程序员都要求熟悉JVM与性能调优!

    前言 作为Java程序员,你有没有被JVM伤害过?面试的时候是否碰到过对JVM的灵魂拷问?   一.JVM 内存区域划分 1.程序计数器(线程私有) 程序计数器(Program Counter Reg ...

  3. “大话架构”阿里架构师分享Java程序员需要突破的技术要点

    一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...

  4. 2017年 Java 程序员,风光背后的危机

    不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ...

  5. Java程序员的两项通用能力

    工作这几年来,经历了很多.从小白到中级(手机里有一款叫中国象棋的游戏,里面给对弈中电脑水平分为小白.菜鸟.新手.入门.初级.中级.高级.大师.特级大师,编程我暂且按照这样来区分). 学校教给我的是从小 ...

  6. 《Java程序员由笨鸟到菜鸟》

    <Java程序员由笨鸟到菜鸟> 在众多朋友的支持和鼓励下,<Java程序员由菜鸟到笨鸟>电子版终于和大家见面了.本电子书涵盖了从java基础到javaweb开放框架的大部分内容 ...

  7. Java程序员怎么不断进阶 必须要掌握哪些技能

    Java程序员怎么不断进阶?必须要掌握哪些技能?成为架构师是Java程序员职业规划中的重要一环,但如何才能快速实现进阶困扰了许多Java程序员.无论是从技能深度还是实战经验,架构师都远超于普通的Jav ...

  8. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主 ...

  9. Java程序员如何在竞争中保持优势

    Java程序员入门容易,进阶很难,想要在竞争中保持优势,脚踏实地的同时也要仰望星空规划自己的未来.时间在流逝,年龄在增加,你期望的薪水也在不断增多,你总得让自己能力持续增加以配得上想要的收入吧. 从初 ...

随机推荐

  1. java之路 数据类型-常量

    class Demo1{ public static void main(String[] args){ //数据类型 类名 = 初始值 int age = 10; int age1 = 20; Sy ...

  2. 常见的hbase jar

  3. S系统的不好的实践

    多个项目 多个分支放在一个SVN里边维护,导致多股力量并行开发时候的代码覆盖的风险可能性很大,,  好的实践是维护独立的SVN,彼此分离开来

  4. eclipse中修改maven本地仓库方式

    1.安装maven,教程可参考:https://jingyan.baidu.com/article/4f7d5712a1306c1a21192746.html 2.安装成功后,可以打开eclipse新 ...

  5. beego笔记

    beego学习笔记一:创建第一个beego Web项目 Go语言beego框架快速搭建体验五分钟讲解01 beego框架图文简介五分钟讲解02 beego框架图文简介五分钟讲解03-go语言简单方式操 ...

  6. Maven学习3(中央仓库)

    Maven项目在运行的时候,会首先找本地仓库是否有需要的jar,如果没有则去调用远程仓库. 解读Maven在仓库中的存储路径: 1.基于groupId准备路径,将句点分隔符转成路径分隔符,就是将  & ...

  7. python csv读写

    https://blog.csdn.net/taotiezhengfeng/article/details/75577998

  8. PDF分享:国外优秀数学教材选评

    <国外优秀数学教材选评>推荐书目下载 具体内容请查看原内容: http://www.library.fudan.edu.cn/wjzx/list/373-1-20.htm 或者http:/ ...

  9. mac下crontab定时任务使用

    这篇文章的作用 BREAK TIME 本地pc配置定时任务,开机后每隔一小时执行一次,open这个页面,休息半分钟 cron创建备忘 首先创建定时任务 crontab -e 0 */ * * * op ...

  10. C++ Thrift服务端记录调用者IP和被调接口方法

    Apache开源的Thrift(http://thrift.apache.org)有着广泛的使用,有时候需要知道谁调用了指定的函数,比如在下线一起老的接口之前,需要确保对这些老接口的访问已全部迁移到新 ...