当前位置: 首页 > news >正文

大咖发声 | 亲谈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高并发编程的底层原理和设计技巧,还会帮助读者扩展技术视野,让读者认识和理解一个完整分布式系统所涉及的方方面面。

 

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

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

点击链接了解详情并购买

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

更多精彩回顾

 书单 | 5月书讯 | 华章IT图书上新啦!重磅新书在线投喂...

干货 | 73页PPT,教你从0到1构建用户画像系统(附下载)
榜单 | 423世界读书日 | 华章精品IT书单独家推荐

收藏 | 这10本书助你从容应对数字化转型中可能出现的各种挑战


相关文章:

  • 世界一流大学的计算机专业,在用哪些书当教材?
  • 用户画像有什么用?怎样用?6个场景案例给你详细解答
  • ​渐进式Web应用PWA的未来
  • G1垃圾回收算法概述
  • 【第7期】云计算监控——Prometheus监控系统
  • 一行简单的管道命令快速创建、原型化复杂的功能
  • 数据分析师的案头工具书都在这了
  • 薅当当羊毛的机会又!双!!叒!!!叕!!!来了
  • 520 情人节 :属于Python 程序员的脱单攻略大合集(视频版)
  • 高端科普系列——领略前沿科学的魅力
  • 周志明虚拟机最新版,大厂面试必备宝典
  • 对话阿里云 MVP:跨界半生,不改赤子之心
  • 想一探Greenplum内核的奥秘?这场直播不容错过!
  • 创建字节跳动之前,张一鸣读过哪些硬核技术书?
  • 周志华领衔撰写,历时4年,宝箱书问世!
  • 10个最佳ES6特性 ES7与ES8的特性
  • GraphQL学习过程应该是这样的
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • nodejs实现webservice问题总结
  • node入门
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用权重正则化较少模型过拟合
  • 栈实现走出迷宫(C++)
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 移动端高清、多屏适配方案
  • ​2020 年大前端技术趋势解读
  • # C++之functional库用法整理
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (强烈推荐)移动端音视频从零到上手(上)
  • (原)Matlab的svmtrain和svmclassify
  • (转)EOS中账户、钱包和密钥的关系
  • (转)VC++中ondraw在什么时候调用的
  • .gitignore文件---让git自动忽略指定文件
  • .Net 4.0并行库实用性演练
  • .NET 4.0中的泛型协变和反变
  • .NET Core 成都线下面基会拉开序幕
  • .net framework profiles /.net framework 配置
  • .NET 的程序集加载上下文
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • @JoinTable会自动删除关联表的数据
  • @staticmethod和@classmethod的作用与区别
  • [.NET]桃源网络硬盘 v7.4
  • []我的函数库
  • [383] 赎金信 js
  • [Assignment] C++1
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [C++]类和对象【下】
  • [CentOs7]图形界面