Java程序员注意了:奠定你发展的黄金五年,你准备如何把握好?

在Java业界流行着一种说法——黄金5年,就是从程序员入职时算起,前五年的工作选择直接影响整个职业生涯的职业发展和薪资走向。如何把握这五年,从一个刚入行的菜鸟蜕变成一个处事不惊的大佬,这是一个涉及到自身的专业知识储备和选择的难题,那么,一个Java程序员如何做才能完成从入行到大佬的晋升之路呢?

参加工作1-2年之间

在这段时间里,想必对Java已经有了一个深入的了解。首先,你要非常熟悉设计模式,看一些关于代码编写优化的书,提高你的代码能力,能够写出一手优雅的代码;其次,你在工作过程中肯定接触过并发,你应该更加深入地去了解并发的相关知识;最后,你要对所使用的框架和Java的类库有一定的研究,还需要去看一些JDK中的类的源码,包括你所使用的框架的源码。总而言之,这个阶段,你需要做的是深入了解Java底层和Java类库,也就是JVM和JDK的相关内容。

参加工作3-4年之间

如果你处于这个阶段,说实话很难再提升代码能力了,因为这个阶段的学习会比较多样化。在前三年的工作中,你肯定不同程度地接触过其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等技术,你能精通任何一项,都将是你未来面试时巨大的优势。因此如果你对某一项技术感兴趣,这时可以深入去研究,这项技术不一定是你工作所用到的,但一定是相关的。

参加工作4-5年之间

参加工作四至五年的程序员,这时,你应该遇到技术的瓶颈了。不要急于提高自己的技术,此时更重要的是提高你的影响力,你可以尝试去一些知名公司提高你的就业背景;你也可以发表一些技术文章去影响更多的人;你还可以去Github创建一个属于你的开源项目,打造属于自己的产品。技术学到这个阶段,很容易遇到瓶颈,而且往往达到一定程度后,你再深入研究的效果就真的微乎其微了,除非你是专门做学术研究的。然而很可惜,大部分程序猿做不到这一步,那是科学家做的事情。这个时候提高影响力主要是影响力可以给你创造更多的机会,所以,你最大的任务是提高自己的影响力,为未来工作生涯做准备。

我有个朋友2011年毕业,作为一名软件开发程序员,踏入软件开发行业已有8个年头了,他做过初级软件工程师、高级软件工程师、项目主管、技术经理、项目经理,近些年带过开发团队、参与招聘面试。我请他把这些年的工作体会分享下,有不同意见的欢迎探讨。

对于软件开发同学而言,首先要客观认识自身的情况,想清楚自己现在要什么、未来要什么,做好职业规划,从而选择不同类型的企业。例如,当前身无几分,急需就业,技术能力较为一般,可以选择人力资源外包临时过渡;喜欢技术专研,对技术有浓厚的兴趣,希望以后成为某个领域的技术牛人,可以选择互联网平台类型;有一定的技术基础,以后想往技术经理、项目经理方向发展,可以选择项目外包类型。接下来将对程序员的职业发挥发展规划提出具体的建议:

你是否有了明确的职业发展规划?

1、 走向架构师

对任何一个Java开发人员来说,架构师都是一个令人向往的角色。那么程序员与架构师之间的主要区别是什么呢?架构师拥有完善和扎实的技术体系,具备较好系统分析和设计能力,丰富的项目研发经验。其实,程序员的成长首先来自自身的学习,而阅读成熟项目的代码会使人受益匪浅;其次是来自所从事领域的经验,要了解分布式系统的特点,在做项目时,要能够关注性能、扩展性、可靠性、可用性等指标。

架构师是一个漫长的积累过程,大部分架构师的年龄在35岁左右,这个阶段就是程序员的黄金期。那么我们如何以一个架构师的标准来加强自己的能力呢?程序员要向一名架构师发展,需要进一步加强技能的修养。对于互联网公司来言,最重要的技能是对网络和分布式系统的理解,比较麻烦的是分布式系统,除了分布式,在现在大型互联网企业中,还需掌握高性能、深入浅出、性能调优、Spring、JVM等技术。当然,良好的驾驭管理开发团队的能力和人格修养,能够让架构师在开发项目中游刃有余,不会出现意外的干扰。

2、 走向项目经理

有一些程序员工作机遇比较好,不但负责项目的设计工作,而且还负责项目的管理工作,对项目经理这个工作有一定的尝试。因此,这类程序员可以审视一下自己,是否合适这项工作,如果自己对这种工作比较满意,而且具备项目经理的要求,则可以向项目经理这个方向发展。项目经理的工作重点已经从编程转移到对人、对技术、对进度、对项目的管理,因此,项目经理必须要了解软件开发的各个环节、了解开发的各种技术和运用、了解开发队伍人员的水平和特点。

在日常的工作和生活中就得逐步锻炼这方面的能力,其次,学习一些项目管理的知识,例如:PMP、CMMI、敏捷开发管理等。从程序员到项目经理可以使项目经理更好地理解程序员在项目中的地位和作用,了解软件开发的各种规律性的东西,从而保证项目的正常完成。而且,项目经理的收入在公司中的地位也是比较高的,因此,我认为走向项目经理是程序员的另一个发展空间。我想提醒一下,程序员在担任项目经理之前最好要把软件设计工作做好,这样在做项目经理的时候,就会有很好的基础。

3、 走向管理者

很多程序员希望自己能成为公司中的主管、经理、老总、老板,这样在公司无论是收入还是地位都相对高一些。另外,有些程序员可能厌倦了年复一年的编程工作,希望能摆脱这种步步紧逼的工作状态,走向管理者程序员要比一般人做更多的准备,做更多的转型工作。但是,如果你有这个志向,又积累了这方面的工作经验,可以努力往管理者发展。由于软件公司的管理者不同于一般公司的管理者,专业能力越强,管理起来就越得心应手,没有专业能力的管理,遇到的问题很多,也很难解决。 因此,我的建议程序员最好要把编程、项目设计、项目管理等基础打好,这样转型到管理者成功率就会高一些。

4、 原地踏步

当然也有程序员惰性比较大,安于现状,也无可厚非。对待这些程序员,我的建议是原地发展,把本职工作做得更好,把自己的技术水平再提高一步。在这个过程中他们的能力和自信心都会得到提高,他们的想法自然不会一成不变。不管做哪一行,都应尽早做好职业规划,人都需要有一个目标去激励自己,Java程序员更是如此,朝着一个目标逐步提升自身实力总会比原地打转好,相信聪明的你该知道怎么做。

据不完全统计,截至目前(2019.3)为止,中国Java程序员的数量已经超过百万。而且,随着IT培训业的持续发展和大量的应届毕业生进入社会,Java程序员面临的竞争压力越来越大。那么,作为一名Java程序员,怎样努力才能快速成长为一名高级的程序员或者架构师,这不仅是一个刚踏入职场的初级程序员,也是工作三五年后开始迷茫的老程序员,都必须要面对和明白的问题。为了帮助大家少走弯路,我总结出一个Java程序员的工作2-5年成长路线。

Java程序员应该掌握的技术

1、通信协议

各个子系统之间要进行通信,必须要选择一种或多种通信协议,现代比较常见的是基于HTTP的协议。建议了解更多协议对于学习安全也有很大的帮助,比如MySQL和PostgreSQL的协议都有安全的设计。

2.、序列化

系统之间通过网络传输,或者存储到文件时,肯定只有一种格式,就是字符串。要将复杂的数据结构与字符串之间进行转换,就需要用到序列化,简单的序列化如JSON和XML,稍微复杂些的有protobuf、thrift等。需要了解所有这些序列化方式之间的优势和劣势。,比如JSON和XML只能用于传递数据,而protobuf与thrift还可以用来做RPC协议,至少要确保每种序列化方式都自己尝试过hello world。

3.、数据库

要形成自己的数据库选取风格,就需要先对自己常用的数据库有足够深入的了解。对于关系式数据库,除了一般的Create、Query、Delete、Update操作外,还需要能自行建立索引、数据库的平行扩展、了解如何进行性能调试,以及了解常见查询操作的性能级别、常见的查询性能瓶颈点。一个较好的例子是 "SELECT COUNT(*) FROM table WHERE dt_create-86400>NOW();" 。

4、 存储

存储分为几种类型。NAS等各家产品有所不同,大多是通过NFS来访问的,问题是NAS的价格很高,而且在去IOE的趋势中很多人也不愿意再用,所以经常会有基于文件系统建立小规模存储的需求。需要关注的是每个目录下的文件数不应该太多,当一个目录下文件数(实际是inode数量,包括文件和目录)超过1000时,性能就很差了。所以,建议将一个系统中要存储的对象ID做16进制,随后每2位16进制做成一级目录,这样可以确保每个目录下的文件数不会超过256个。现代云计算,如Amazon S3已经把存储的问题解决的很好了,如果可能,尽量用好。

5、应用框架

此事在各个语言之间各有选择,多注意了解自己关注方向的所有框架的优势和劣势,至少当有个毛头孩子问你为什么不选择某个最新的框架时,能清楚用自己的观点答复。对于常见的框架,十分推荐自己重新实现一个来当作锻炼,实现一个WEB框架,不到200行代码就实现了。

6、接口

主要是指接口协议,或者RPC协议。系统之间进行RPC调用很常见,注意选择自己能熟练使用的,并且有所深入研究,并了解其常见的限制。RESTful API就是个比较常见的选择,但是性能并不好,自己要对性能等参数有量化的了解,而不是简单的一句好或不好。短连接接口在三次握手时是串行操作,要了解其为何耗时。

除了要在如上的各种不可或缺的组成部分中有所了解,还要能清楚地知道一些常用系统模块的原理,并能够很深入的玩起来。几个值得注意的:

  1. HTTP服务器:常见的无非是nginx、apache,自己要能进行基本配置,包括静态文件、fastcgi转发等。
  2. 关系式数据库:常见的如mysql、postgresql、sqlite,自己要对每一种都有深入的了解,可以做一遍常见操作的性能测试,并牢记于心。比如sqlite虽然并不需要走网络,但是实际查询性能很差。
  3. NoSQL数据库:memcache、redis、mongodb等,近几年有很多,挨个了解其实现原理,以及各种常用操作的性能,当有需要时,随时能拿得出手来用。
  4. 云计算平台:几种常见的云计算平台的应用方式要有了解,如Google的资源方式和Amazon的,每种云计算平台往往还会提供一大堆附加服务,比如可靠数据库,存储,缓存等,也要分别有所了解。
  5. 加密/签名技术:常见如truecrypt、openssl、gnu pg、sha1、md5、scrypt等,了解各种加密/签名技术的安全性、字长等,并都能自己做过hello world。

那如何快速学习并精通呢?

针对当前互联网公司的技术需求以及结合主流技术,我自己整理了一套系统的架构技术体系,当你技术过硬的时候,能够解决技术问题才会服众。不少公司都很重视高并发高可用的技术,特别是一线互联网公司,分布式、JVM、spring源码分析、微服务等知识点已是面试的必考题,这些东西可能你们平时在工作中接触过,但是缺少全面系统的学习。

个人推荐分享一套全面的知识图谱,无论走架构,管理还是项目经理的路线这些技术你都应该有一定的了解及掌握!(迷茫的朋友可以参考下学习方向)

一、框架源码解析专题

应用框架spring

  • spring IOC源码解析
  • spring Aop源码解析
  • spring MVC源码解析
  • spring注解试开发
  • spring 5新特性

ORM框架MyBatis

  • MyBatis 快速掌握
  • MyBatis 源码分析
  • MyBatis 徒手实现

设计模式

  • 设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • 设计模式对比及应用场景

二、并发编程专题

  • JVM内存模型
  • 并发同步处理
  • 并发包之tools限制
  • 并发包之atomic原子操作
  • 阻塞队列BlockingQueue详解
  • 并发Map、List与Set详解
  • Executor线程池详解及核心源码剖析
  • ForJoin

三、性能调优专题

JVM性能调优

  • JVM类加载机制详解
  • JVM内存模型
  • 垃圾收集机制详解
  • 垃圾收集算法详解
  • JVM调优工具详解
  • GC日志详细分析
  • JVM调优实战

Mysql性能调优

  • Mysql索引数据结构深度讲解
  • Mysql 执行计划与索引讲解
  • Mysql锁机制与事务隔离级别详解
  • 慢查询Sql调优实战

Nginx调优

  • Nginx快速掌握
  • 熟练掌握Nginx核心配置
  • 掌握Nginx负载算法配置

Tomcat调优

  • 整体认知Tomcat项目架构
  • 生吃环境配置
  • 掌握Tomcat 线程模型背后原理

四、分布式框架专题

分布式消息中间件

  • Rabbitmq
  • RocketMq
  • Kafka

分布式储存中间件

  • Redis
  • MongoDB
  • FastDFS
  • Elasticsearch

分布式框架

  • Zookeeper
  • Dubbo
  • ShardingSphere
  • Netty

五、微服务系列专题

  • 微服务架构变迁史
  • spring boot源码剖析
  • spring cloud Netflix源码剖析
  • spring cloud Alibaba源码剖析
  • 虚拟容器

六、项目实战专题

双十一电商平台

  • 电商项目架构设计及核心技术点整理介绍
  • 基于spring cloud微服务架构拆分
  • 电商平台技术解决方案

分布式调用链平台

七、互联网工具专题

  • Git
  • Maven
  • Jenkins
  • Linux
  • 虚拟容器

最后针对上述知识体系我也总结了一套对应的架构视频、核心笔记及面试真题(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料)给大家,希望对大家有所帮助,也帮大家节约时间找学习资料!

资料获取方式:

面试文件获取方式:

点赞+关注小编后进小编的学习交流群:909666042 免费领取资料!(助你升职加薪)

合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

原文地址:https://blog.51cto.com/14570694/2458499

时间: 2025-01-09 00:08:45

Java程序员注意了:奠定你发展的黄金五年,你准备如何把握好?的相关文章

为Java程序员金三银四精心挑选的五十道面试题与答案

1.面向对象的特征有哪些方面? [基础] 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),

Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解

在上篇博客中,我们介绍了<hibernate基本概念和体系结构>,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基本配置.核心API的底层实现和源码解析将在以后的博客中一一为大家讲解. 首先我们一起来看一下开发一个hibernate应用程序的大体流程是什么样的(流程顺序可以颠倒): •创建Hibernate的配置文件 •创建持久化类 •创建对象-关系映射文件 •通过Hibernate API编写访问数据库的代码 关于配置

Java程序员的职业发展方向

历届与软件相关专业的大学生,都想找一份开发类的工作.Java会是一个不错的选择,小伙们还在犹豫的是Java程序员到底可以从事哪些职业呢?方向又在哪里?未来的路在何方? 今天小编就带着小伙伴们一起看看Java程序员的4大职业方向: Java互联网方向 Java在互联网方向的应用非常多,当然这也有更多的细分.目前采用Java开发互联网网站及应用的IT企业越来越多,这也增加了Java开发工程师的需求. Android及手机开发 目前,Android开发工程师已成为3G行业最炙手可热的岗位之一,初入行平

作为Java程序员,这九个最具有潜力的发展方向,你都了解吗?

Java语言是一门随时代迅速发展的计算机语言程序,其深刻展示了程序编写的精髓,再加上其简明严谨的结构及简洁的语法编写为其将来的发展及维护提供了保护 .现在Java培训非常热,是因为通过学习java能够快速的就业.那么,对于拥有Java技术的程序员来说,他们的职业道路是十分宽广的,Java就业主要有以下方向. Java就业方向一:Web开发 Web前端开发工程师是一个很新的职业,是从事Web前端开发工作的工程师.主要进行网站开发,优化,完善的工作.网页制作是Web 1.0时代的产物,那时网站的主要

10招让你成为杰出的Java程序员(转)

如果你是一个热衷于技术的 Java 程序员, 那么下面的 10 个要点可以让你在众多 Java 开发人员中脱颖而出. 1. 拥有扎实的基础和深刻理解 OO 原则 对于 Java 程序员,深刻理解 Object Oriented Programming(面向对象编程)这一概念是必须的.没有 OOPS 的坚实基础,就领会不了像 Java 这些面向对象编程语言的美.光学习 OO 原则的定义用处不大,关键是要学会如何应用这些原则用一种 OO 的方式去设计解决方案.因此,我们应该对对象建模.继承.多态.设

做什么职业,也别做程序员,尤其是Java程序员

千万别做程序员,尤其别做Java这种门槛低,入门快的程序员(别跟我说Java搞精通了也很牛之类的,原因不解释,做5年以上就知道了),程序员本来就是我见过最坑爹的职业了...Java程序员更是,现在满地都是Java培训机构,不出3年,你就不值钱了,就像3年前的C++一样!而且Java贬值更快,因为他比c++简单多了,培训个3个月,直接上岗,你说你怎么保证自己是不可替换的?而且现在Java程序员的整体工资,已经有不断下降的趋势! 我就用我的亲身经历告诉你,你这个想转程序员的人:别做这行,因为你不知道

金九银十,浅谈关于java程序员面试的一些事项

本篇博文针对的是应届毕业生以及工作两三年左右的java程序员. 为什么要跳槽? 这是一个很广义的问题,每个人心中都有一份答案. 例如: 公司的待遇不好, 薪资涨幅不符合预期要求, 厌倦了出差的荒无天日的繁重工作, 公司的妹子太少, 领导太傲娇, 同事之间关系太逼格, 某某同学跳槽到某某公司之后涨到了多少多少钱, 某某同学的朋友的同事的三姑妈家的大儿子的好基友在某某高就, 等等辞职理由. 咱们就不多说了,还是谈谈怎么应付面试吧. 以下内容是我在面试中总结的一些经验,希望这些可以给各位带来帮助和启迪

JAVA程序员必看的15本书-JAVA自学书籍推荐

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们.此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识.一.Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是"囫囵吞枣不求甚解",先对Java熟悉

网管员转java程序员之路

好久没有写了,就讲讲我自己网管转向java程序员的这条路吧.希望能给一些朋友一点启发. 从12年的10月份后我开始在领导的支持和同事的帮助下开始学习JAVA.买了一本李刚老师的<疯狂JAVA讲义>,学习JAVA的道理就开始了.网管员是一个蛮轻松的职业,特别是在一个企业里面经过2年的整改,不管什么东西都很熟了,所有的事情都处理起来比较轻松,人际关系也非常的融洽.每天早上正式上班前和晚饭后我都在学习,每一页的翻,照着书上的案例去敲代码,完全就是在COPY.大概看了二个多月后,我们的副经理专门负责开