目录

1、解决生产环境里的突发故障

2、对棘手的线上性能问题进行优化

3、锻造区别于普通码农的核心竞争力

4、打磨架构设计能力

5、你凭什么成为 top1%?

 
你工作几年了?
是否天天CRUD到吐?
项目一个接一个,技术却是原地踏步走。
看似玩过一堆技术,但每个都像黑箱子,天知道里面啥东西?
夜深人静,扪心自问,你离top1%的Java大牛还差多远?

本文咱们不谈技术,来聊一个也许比技术更为重要的问题:

 

为什么精读知名开源项目源码,能帮我们进阶top1%的Java工程师?

相反,如果职业生涯中,对任何开源项目源码都不闻不问,对自己技术成长又有什么“致命”影响?

为了说清楚这个问题,我们来用一个实际工作场景举例和引入。

1、解决生产环境里的突发故障

假设现在你是一个普通的Java工程师,然后在一个团队里,平时你们开发系统都有一套成熟的框架和技术体系,比如说微服务框架用Dubbo,然后另外涉及到了Redis缓存、RocketMQ作为消息系统、数据库中间件。

平时正常开发都没多大问题,就是基于Dubbo写一些服务,然后在里面填充业务逻辑就OK。

也许有时候架构设计会用到Redis,也可能会用到RocketMQ,也会用到数据库中间件来做分库分表的事情,这都没问题,按需引入。

但是事情却没有想象中一般顺利,数据库中间件在进行分库分表操作时,不时出现一些诡异的情况。

什么情况呢?明明SQL执行成功了,结果数据就是没进入数据库;明明数据库里有数据,但是SQL执行之后,却查不出来数据。

这个时候就很麻烦了,大家肯定都知道,数据库层面有问题,对业务是影响非常大的。

那谁能解决这个问题?

答案是:你公司必须得有一个精通数据库中间件源码的专家,否则这种数据库问题基本上无解。

或者就算解决了,那也是瞎猫碰上死耗子,而你运气,不会每次都这么好吧!

为什么说基本无解呢?因为这种生产问题,涉及到了一个中间件底层的执行机制。

那么你必须深入研究过源码,将出问题时候的数据库现场和SQL还原出来,在本地调试,然后一点点看源码执行的过程,到底为什么会出问题。只有这样才能解决这种生产问题。

所以能够读自己系统中用到的开源项目的源码,非常重要。如果你能做到这一点,就可以在混乱的生产故障中,挺身而出,解决线上问题。

并且这种重大生产故障现场,你如果多次出镜,怎能不得到领导的青睐?而你的职业发展之路,自然的会平坦顺畅很多!

2、对棘手的线上性能问题进行优化

再来看一个场景,现在你们的系统用到了Elasticsearch,结果刚开始以为分布式系统肯定可以存储大量的数据,然后高性能的检索。

前面半句没问题,存储大量数据是肯定可以做到的,但是后面半句有问题,高性能的检索,还真的不一定。

Elasticsearch现在非常的火,很多公司都在用,而且一下子会往里面放入大量的数据。

但是问题就在于这里,放入大量数据之后,很多公司发现ES搜索性能特别的差,经常出现要好几秒,甚至几十秒,几分钟才能查出来的情况。

所以对这种性能问题,如果只是网上查查博客,胡乱调节一下参数,这儿试一下,那儿试一下,其实没多大用处。即使调好了,也就是前面说的,瞎猫碰上死耗子。

最主要的,还是要真正的分析性能问题的瓶颈,也就是要深入分析ES的源码,你需要搞明白通过 ES执行一个搜索时,底层到底怎么执行的,性能瓶颈到底在哪里,然后才能针对性的去进行性能的优化。

假设现在ES导致你公司的APP用户搜索的速度特别慢,被大量用户投诉,此时CEO施压给技术团队,技术团队急的团团转。

此时要是你挺身而出,通过源码分析,解决了这个问题,优化了性能,凭借一己之力力挽狂澜,carry全场,那毫无疑问你一下子就能脱颖而出。

领导都喜欢能打仗的技术骨干,中间力量,有问题直接派你上去就能搞定,这个时候升职、加薪一定会把好机会都留给你。

3、码农激烈竞争中的核心竞争力

现在假如你要出去找工作,然后同一个职位有好多人竞争,这些人都有以下一些共同的属性:

  1. 5年以上的工作经验,或大或小的公司都待过,项目经验都还可以

  2. 常见的技术栈掌握的都还可以,Java、并发、IO、ES、MQ、缓存、大数据量,等等

  3. 或多或少都带过一两个人,独立负责过一些项目

说句题外话,其实中国的IT、互联网发展到今天,人才储备可以说很充足了,毕竟每年都有大量的计算机专业的毕业生,还有很多的培训机构在输送大量的人才,这些初级人才经过多年发展之后,基本上都具备以上特征。

因此现在好的职位,竞争是极其激烈的。如果在去年下半年或者今年上半年跳槽过的朋友,应该多少会有一些体会!

那么在这种激烈的竞争中,你凭什么力压群雄,拿下一个大厂的职位呢?

答案是两个:

1、是否对你用过的技术进行过深入挖掘。

正如前面提到的,你需要沉下心来,阅读几个优秀开源项目的源码。

更进一步,能将里面优秀的设计思想融会贯通,运用于自己的实际工作中。

2、是否具备那种有技术挑战的项目经验。

大部分人的项目经验,都没什么技术挑战,都是一些增删改查的东西,很多技术只不过简单用用罢了,也没解决什么技术挑战。

但是如果你的项目里从源码级别解决过大量的生产环境的故障,从源码级别做过复杂的性能优化,你的优势是不是大很多?

4、提升自己的架构设计能力

很多人都不知道自己如何提升自己的架构设计能力,其实答案很简单

像RocketMQ、Elasticsearch、Redis等等,很多中间件系统,都有非常优秀的架构设计。

他们为了解决高并发、高可用、高性能、可伸缩、可扩展、安全性的问题,都在架构里使用了非常多的复杂机制。

如果能把这些开源系统的架构设计思想给研究透彻,那么本身就是在学习如何进行复杂的架构设计。

然后如果自己有机会可以独当一面,负责一个较为复杂的系统的架构设计的时候,就完全可以参考你看过的开源项目的一些核心机制来设计。

但是如果你连这些优秀的开源项目的源码都没看过,那可能还真的没有人放心让你来设计架构。

因为你对架构设计的一些知识积累还是太少,如果纯粹凭借自己的想法来设计架构,对一些优秀的开源项目一无所知,那么是很难设计出来好的架构的。

5、你凭什么成为 top1%

其实学习很多的技术,做很多的项目,是一件很容易的事情。

我们花点钱买一些书,参加一些培训课程,就可以学很多的技术怎么来使用。自己就一直工作,工作个七八年,也能积累很多项目经验。

但是真正能让你完成蜕变,进阶top1%程序员的关键,其实是你在源码上的研究。

阅读世界级大牛开发的优秀开源项目,参悟其优秀的设计思想,提升的,是你的内功修为。

同时,你通过阅读源码积累的大量宝贵的解决线上问题的经验,会成为你最宝贵的技术财富。

So,那就行动起来呗!开始你的第一个开源项目,有谁想一直做CRUD工程师呢?

最新文章

  1. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)
  2. BZOJ1192 [HNOI2006]鬼谷子的钱袋
  3. swif-throws异常抛出
  4. maven pom.xml示例
  5. onSaveInstanceState(Bundle outState)的调用时机
  6. 改变tabbar的高度做法
  7. 【Linux C中文函数手册】之 目录操作函数
  8. iOS开发——新特性OC篇&IOS9 系统新特性
  9. java时间格式大全
  10. beforefieldinit释义
  11. js小数处理
  12. javascript 函数详解
  13. Spring AOP四种实现方式Demo详解与相关知识探究
  14. 易被忽略的Python内置类型
  15. JAVA获取计算机IP地址
  16. PowerShell 知识点总结
  17. Spring Cloud Stream
  18. 外观(Facade)模式
  19. JQuery UI之Autocomplete(3)属性与事件
  20. Qt OpenGL:学习现代3D图形编程之四,透视投影浅析

热门文章

  1. Git仓库分支管理
  2. 基于Redis扩展模块的布隆过滤器使用
  3. linux_ext4恢复超级块.txt
  4. 特殊权限SUID
  5. Ubuntu系统修改资源为阿里云镜像
  6. pytest系列(二):筛选用例新姿势,mark 一下,你就知道。
  7. spring boot 2.2.0开始freemarker模板默认扩展名改为ftlh了
  8. 数理统计(二)——Python中的概率分布API
  9. 25.md5 collision(NUPT_CTF)
  10. 【pat】algorithm常用函数整理