目录

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工程师呢?

扎心一问!你凭什么成为top1%的Java工程师?的更多相关文章

  1. 远程桌面连接mstsc 超扎心

    搞了一天问了几千个人.最后终于有一位大佬解决了.扎心啊. http://jingyan.baidu.com/article/39810a23edc48bb637fda672.html 就是服务没打开.

  2. 扎心!来自互联网er的2019年度总结,看完笑着流泪……

    转眼2019年已经接近尾声,又到了年度总结的时候了.过去一年,你加了多少班,熬了多少夜,回想起来历历在目.互联网人2019年度总结,看完扎心了-- 01 - 这一年里 你一共提了275个需求 其中27 ...

  3. 闭嘴,给你一个数!1分钟,学完C语言指针,不扎手只扎心的针!

    序言 指针是C语言学习者绕不过的一道坎,也是C语言学习者不得绕过的一道坎.辨别一个人C语言学的好赖就看他对指针的理解怎么样.指针内容也是工作面试经常问到的问题.本文将带你重新认识那个绊倒你的指针,以解 ...

  4. ubuntu linux 修改ip 超扎心。

    老大说“终于搞定了,快记下来,不然以后又忘了”(露出慈母般的微笑) 参考地址:https://jingyan.baidu.com/article/adc815139ddcc4f723bf7339.ht ...

  5. 这道面试必问的JVM面试题70%的Java程序员会做错

    前言 聊聊JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别. JVM可以说和我们是老朋友了 ...

  6. 哪些问题是面试官经常问Java工程师的问题 ? --- 转自quora

    Which are the frequently asked interview questions for Java Engineers ? Vivek Vermani, www.buggybrea ...

  7. 面试官写了个双冒号: : 问我这是什么语法?Java中有这玩意?

    一:简洁 方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方法引用, ...

  8. 一名合格的Web安全工程师之成长路径

    最近经常听到公司的招聘专员反馈应聘者简历“水分”太大,尤其是技术岗位,例如Web安全工程师,明明是初级阶段的菜鸟,就敢写资深Web安全工程师:在几个项目做一些基础打杂的工作,就敢写带过团队,项目经验丰 ...

  9. java版gRPC实战之六:客户端动态获取服务端地址

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. LeetCode刷题191130 --基础知识篇 二叉搜索树

    休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...

  2. vmware vsphere client 虚拟机动态添加磁盘

    0x00 事件 为了在虚拟机添加了磁盘之后,不重启机器加载新磁盘. 如上图,添加了一块 10G 的磁盘之后. 在虚拟机中是看不到新添加的磁盘: 0x01 解决 运行如下命令,通过重新扫描 SCSI ( ...

  3. SQLSERVER预读逻辑读物理读

    预读:用估计信息,去硬盘读取数据到缓存.预读100次,也就是估计将要从硬盘中读取了100页数据到缓存. 物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存再次去读硬盘.物理读10页,从硬盘中 ...

  4. HashMap、HashTable 和 ConcurrentHashMap 线程安全问题

    一.HashMap HashMap 是线程不安全的. JDK 1.7 HashMap 采用数组 + 链表的数据结构,多线程背景下,在数组扩容的时候,存在 Entry 链死循环和数据丢失问题. JDK ...

  5. C++之封装继承和多态

    C++中非常重要的概念,尤其是相对于C语言而言,也是其具有如此高的工程使用性的重要原因. 封装 所谓封装是将某些东西隐藏起来,让外界无法直接使用,而必须通过某些特定的方式才能访问.也即是,将抽象得到的 ...

  6. 【转载】algorithm、numeric、functional

    reference url:http://www.cplusplus.com/reference/algorithm reference url:https://blog.csdn.net/Swust ...

  7. Gluserfs 架构详解【译】官网

    Gluserfs详解 排版看着不舒服的,可以查看[我的简书](https://www.jianshu.com/p/0340e429431b) doc home:https://docs.gluster ...

  8. 高并发 Nginx+Lua OpenResty系列(11)——流量复制/AB测试/协程

    流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线.这其实就需要进 ...

  9. Web前端基础(18):jQuery基础(五)

    1. 事件 前面我们介绍完js的事件流的概念之后,相信大家对事件流也有所了解了.那么接下来我们看一下jquery的事件操作. 在说jquery的每个事件之前,我们先来看一下事件对象 . 1.1 事件对 ...

  10. js鼠标滚轮事件上滚下滚判断

    onmousewheel <script> var scrollFunc = function (e){ //其实我一开始也不知道用啥 //console.log(e)我们可以打印一下 / ...