(文末赠书)亲谈 Java 程序员的职业方向与核心竞争力

点击上方“逆锋起笔”,关注领取视频教程

☞ 程序员进阶必备资源免费送「各种技术!」 ☜

杨绛先生说过,围在城里的人想冲出来,城外的人想冲进去,无论婚姻也罢,职业也罢,人生的愿望大都如此。回想自己在以往的面试经历中,总是遇到这样的问题。每每自己把简历给面试官时,对方总以为我是做大数据开发的,而面试完后,对方给的offer不是Hadoop工程师的职位,就是大数据平台架构部的职位。我觉得挺有趣的,因为每次我投递的职位都是Java工程师。

在实际工作中,我确实研究过一些大数据的技术,比如Hadoop、Spark、Hive之类,但其实我工作的重心是开发各种中间件,比如公司的内存搜索缓存、流计算框架、特征计算引擎等等。这些中间件都是用Java开发的,所以我一直将自己定位为一个Java程序员,并没有刻意地去强调自己要做大数据。

说到Java开发,十有八九的人就以为是SSM(Spring+MVC+MyBatis)那套了。SSM好吗?当然好!可以说,如果没有JavaEE,没有Spring,我也不会成为一个专业的Java程序员。Java是一门工程性非常强的语言,而且特别强调“设计模式”,所以伴随着Java的学习,我们不会感到迷茫,路也不会走得太歪,只需要按部就班的成长就好。而Spring基本上就是各种程序老鸟和大牛数十年的优秀经验和最佳实践总结,这样的框架怎能不是精华?

但正所谓“成也萧何,败也萧何”,很多Java开发者在掌握SSM,并使用SSM做过几个成功的项目后,就止步于Spring框架,以为SSM是Java世界的全部了。这着实有些可惜,因为SSM仅仅是Java非常小的应用领域。

从目前的情况看,作为一个Java程序员,你至少可以在以下四个方向进一步发展:

1)微服务架构体系:Spring Boot + Spring Cloud + Docker + Kubernates

2)嵌入式或移动开发:Android

3)大数据开发:如Hadoop, Spark, Flink等

4)中间件开发:如Kafka、Camel、Ignite、Drools等

在工作几年后,很多职位就会进入瓶颈区。我们以某勾上各个方向的职位在5~10年工作经验后的薪水区间和要求为例:

职位

薪水区间

要求

Android开发

20k-40k

精通Android/JAVA,精通Android系统原理,熟悉Flutter,Kotlin;较好的C++功底,有C++后台开发项目经验;熟练掌握网络通信相关开发,有实际参与过HTTPS、TCP、UDP项目开发;熟练掌握Android内存管理机制和多线程、内存优化、性能优化;

Java研发工程师

20k-40k

精通Java语言,熟悉Java EE架构体系,深入理解面向对象的思想及设计模式,熟悉SpringMVC, SpringBoot,Hibernate, Maven等主流开源框架与开发工具;

Java架构师

30k-50k

精通各种常用框架和技术,如Spring、Mybatis、Netty等,读过开源项目源代码;五年以上使用JAVA开发的经验,熟悉多线程及高性能的设计与性能调优;熟悉分布式存储、搜索、异步框架、集群与负载均衡,消息中间件、分库分表等技术;

大数据工程师

30k-60k

熟悉常见的算法和数据结构,熟练设计数据模型、ETL设计、Cube多维建模、OLAP开发、报表开发等 ; 熟练使用大数据处理框架(Hadoop/Hive/Spark/Impala/Kylin)相关技术;熟悉流式计算引擎,对相关框架(Kafka/Storm/SparkStreaming/Flink)熟悉了解,有实际应用经验优先;

从上面的表格中不难发现,不管是哪个职位,在工作多年后,大家都开始对多线程、并发、高性能、分布式等技术有更严格的要求,而且Java架构师和大数据工程师的薪水区间上限比另外两者更高。

所以,对于习惯了当一个“Spring工程师”的Java开发人员来说,应该怎样提高自己的薪资水平,提高自己未来的职业发展潜能的上限呢?笔者觉得有两个方向。

其一,开阔自己的视野。总是将自己局限在Spring框架的范围内,虽然项目做了一个又一个,但说白了也只是各种业务实体的CRUD,这又怎么能够提升自己的水平呢?你得去思考和学习,高并发、分布式和大数据量场景下该如何解决问题。一个好的起点是微服务框架Spring Cloud,借此还会引出Docker和Kubernates技术。而另一个提升系统吞吐能力和性能的思路,就是将各种同步的处理过程改造成异步的方案,这其中需要使用各种消息中间件,比如Kafka, Nats等,这就涉及到流计算技术了,比如Flink和Spark Streaming等。再就是各种分布式的数据库,比如Redis Clust, MongoDB, TiDB和CockroacheDB等。如果想以后成为一个合格的资深工程师或架构师,必须掌握这些基本的分布式技术以及分布式系统思想。

其二,深刻理解技术背后的工作原理和本质。不要用了N年的Spring,还连个支持高并发的“单例模式”都不会写。高并发的含义有两层:一是线程安全,二是高性能,两者缺一不可。再比如Tomcat的连接器,NIO和BIO的区别在哪里?为什么NIO能够比BIO支持更好的性能?而我们常说的异步编程和流式编程,为什么要用它们,这些技术究竟解决了什么问题?可以说,如果你真的能够将这些问题理解和解释得十分清楚,那在以后的面试中你将无往不利。

如果做到了以上两点,就会成为很多企业争相招聘的“T型人才”,而这将成为你的核心竞争力。你的核心竞争力才会帮助你度过所谓的“35岁”职业危机。那么接下来问题来了,我们怎样才能更快更有效的做到以上两点呢?这里,我想向大家介绍一本书《实时流计算系统设计与实现》。这本书是笔者从一名简单的Java工程师成长为一个能够将各种Java和大数据技术融会贯通的架构师的经验总结。在这本书中,我会跟大家讲解清楚NIO和异步编程的本质原理,然后一步一步地教大家如何从Java中的异步和高并发编程方案CompletableFuture框架出发,构建出一个分布式的“流计算”框架,直至拓展到各种最新的开源大数据技术,如Spark Streaming、Flink等。在此过程中,笔者还会讲述自己对构建分布式系统架构的各种思考。通过本书,不仅会让读者深刻理解Java高并发编程的底层原理和设计技巧,还会帮助读者扩展技术视野,让读者认识和理解一个完整分布式系统所涉及的方方面面。

 

(文末赠书)亲谈 Java 程序员的职业方向与核心竞争力_第1张图片

推荐语:透过现象看本质,掌握高性能、高并发、实时系统设计与权衡之道!

这本书高度抽象出实时流计算系统的技术支撑、架构模式、编程模式、系统实现与协同系统,并从零编写一个分布式实时流计算系统。多位领域专家联袂推荐!

点击链接了解详情并购买

作者简介:周爽,本硕毕业于华中科技大学,先后在华为2012实验室高斯部门和上海行邑信息科技有限公司工作。开发过实时分析型内存数据库RTANA、华为公有云RDS服务、移动反欺诈MoFA等产品。目前担任公司技术部架构师一职。著有《实时流计算系统设计与实现》。

福利时间:本次联合【机械工业出版社华章公司】为大家送上 2 本作者的正版书籍《实时流计算系统设计与实现》

参与方式

  1. 给本文点在看

  2. 关注下方公众号

  3. 回复实时流建议复制

????长按上方二维码 2 秒 

回复「实时流

为避免输错,建议复制

你可能感兴趣的:((文末赠书)亲谈 Java 程序员的职业方向与核心竞争力)