←←←←←←←←←←←← 快!点关注

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

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

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

聊一聊你对JVM的原理,如何减少Full GC的情况? 针对高并发场景,如何优化,都采用了什么技术? 相比关系型数据库,NoSQL的优势在哪里,你们在什么场景下会用到?

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

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

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

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

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

Part.1 对代码精益求精

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

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

  • 代码是否遵循了规约?接口设计的是否随意?测试用例是否都通过?
  • 满屏的if-else是否可以用合理的设计模式来替代?有没有遵循SOLID原则,KISS原则?
  • 有没有考虑用更合理的数据结构和算法改变代码的复杂性,提升运行的性能?
  • 代码出bug的概率有多大,能否降低?

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

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

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

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

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

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

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

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

Part.3 不去造轮子,前提是得知道轮子的内部结构

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

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

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

首先消费端要想及时获取数据,是否需要建立一个长连接?长连接的实现方式如何? 数据是通过push还是pull方式给到消费端,各自有什么弊端? 如果消费失败,可能是哪些原因引起?如果是因为网络原因引起,该如何解决?

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

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

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

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

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

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

Java程序员注意了

针对Java架构,我这边给大家准备了一些关于Kafka、Mysql、Tomcat、Docker、Spring、MyBatis、Nginx、Netty、Dubbo、Redis、Netty、Spring cloud、分布式、高并发、性能调优、微服务等架构技术的资料,希望能帮助一些技术遇到了瓶颈但是你又拒绝平庸,期待蜕变,想进入一线互联网公司或者给自己涨薪的程序大咖!

资料领取方式:加入粉丝群963944895,私信管理员即可

转载于:https://juejin.im/post/5c875eea518825766355d0ed

【本人秃顶程序员】Java程序员成长三部曲!相关推荐

  1. 【本人秃顶程序员】Java面试题集(意思意思)

    ←←←←←←←←←←←← 我都秃顶了,还不点关注! 一.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于MVC架构的 用来简化web应用程序开发的 ...

  2. 【本人秃顶程序员】高级 Java 必须突破的 10 个知识点!

    ←←←←←←←←←←←← 快!点关注!!! 工作多少年了,还在传统公司写if / for 等简单的代码?那你就真的要被社会淘汰了,工作多年其实你与初级工程师又有多少区别呢?那么作为一个高级Java攻城 ...

  3. java秃顶_【本人秃顶程序员】在Java中使用函数范式提高代码质量

    ←←←←←←←←←←←← 快!点关注 在一个范式和技术堆栈一直在变化的世界中,保持竞争力和提高生产力和质量的斗争有时候证明是一项挑战. 在本文中,我想首先展示一下函数编程(FP)的优势,特别是加强Ja ...

  4. java程序员秃顶,【本人秃顶程序员】使用Azure Function + Cognitive Services 实现图片自动化审核...

    ←←←←←←←←←←←← 快!点关注 假定我们正在运行某个应用程序,此应用程序需要用户在应用程序中提交大量图片文件,那么对于系统管理员来说手动审核这些图片是很消耗时间的,并且对于图片的审核也许并不是即 ...

  5. 【本人秃顶程序员】我简历上的Java项目都好low,怎么办?

    ←←←←←←←←←←←← 快!点关注 这篇文章我们来聊一聊,在系统设计和项目经验这两块,应该如何充分的准备,才能拿出有技术含量的项目经验战胜跟你同台竞技的其他工程师,征服你的面试官,收获各种心仪的of ...

  6. 【本人秃顶程序员】好好讲一讲:到底什么是Java架构师——《架构师的自我修养》

    一.什么是架构师 曾经有这么个段子: 甲:我已经应聘到一家中型软件公司了,今天上班的时候,全公司的人都来欢迎我. 乙:羡慕ing,都什么人来了? 甲:CEO.COO.CTO.All of 程序员,还有 ...

  7. 【本人秃顶程序员】使用Spring Cloud Stream和RabbitMQ实现事件驱动的微服务

    ←←←←←←←←←←←← 快!点关注 让我们展示如何使用Spring Cloud Stream来设计事件驱动的微服务.首先,Spring Cloud Stream首先有什么好处?因为Spring AM ...

  8. 【本人秃顶程序员】过年了,给亲朋好友解释“啥是程序员”

    ←←←←←←←←←←←← 快!点关注 一年一度的春节又到了,作为程序员的你是怎么告诉亲朋好友自己日常到底是做什么工作的呢? 程序员是一个新兴的职业,我在上大学以前不了解程序员到底是做什么的,对编程语言 ...

  9. 【本人秃顶程序员】求求你别再写 bug 了,秃顶程序员告诉你避免空指针的 5 个案例!

    ←←←←←←←←←←←← 快!点关注 空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题. 本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针. 什 ...

最新文章

  1. oracle中导出的sql文件转入mysql中的工作记录
  2. 请简短说明一下你对AQS的理解
  3. Vue电商后台B站的项目需要的材料 密码等
  4. 如何把word文档转换成markdown格式
  5. JVM源码分析之System.currentTimeMillis及nanoTime原理详解
  6. Python ord 函数 - Python零基础入门教程
  7. 生成器 python0 1 8 27 64_python 生成式和生成器
  8. Android Studio (11)---使用主题背景编辑器设计应用主题背景
  9. 研究机构:苹果M1芯片代工订单占台积电5nm工艺25%产能
  10. 几个国内外远程工作平台
  11. Kotlin入门(15)独门秘笈之特殊类
  12. zabbix系列zabbix3.4监控mysql5.7
  13. c++程序设计语言第四版pdf_寒假攻略 | 开启C语言自学模式
  14. 有限元法分析工程实际问题的一般过程
  15. 51la V6蜘蛛统计功能上新
  16. linux中ifconfig命令作用,ifconfig命令作用范围的是什么
  17. 恶搞视频聊天偷拍源码
  18. 浅析API网关——Ocelot[网关]+Consul[服务发现负载均衡]+Polly[服务熔断]+Ids4[服务认证]
  19. 孤独星球android app,孤独星球免费版
  20. 国一大佬也收藏的16个Python数据可视化案例(附源码)

热门文章

  1. 数据三等分离散python_plotnine:Python版的ggplot2包
  2. 微信小程序 地图功能的实现 map
  3. 进阶13 Lambda表达式
  4. java负零_java数据结构从零基础到负基础
  5. python int函数的实现_python实现int函数的案例分析
  6. python封装sql脚本_pymysql的简单封装代码实例
  7. BeanUtils.copyProperties使用
  8. 计算机术语解ssh,将Bash脚本SSH到计算机中而不提示密码和不使用密钥
  9. 如何提取左声道音频_TRS? TRRS? 正式录制前,您确保麦克风的音频线插对了吗?...
  10. python怎么读_锋哥告诉你Python怎么读