-->

大厂晋升指南_20_19_链式_比较_环式学习法怎么多维度提升技术能力

你好,我是华仔。

上一讲,我介绍了三段分解法,教你把十年成为大牛。

这个宏大的目标分解成一到两个月的可落地计划,然后再按周来执行实际的行动。

但是不同级别的核心要求是不一样的。

晋升时评委的核察重点也不一样。

所以在成长过程中,我们主要提升的技术维度也在发生变化。

一般来说,p五、p六p七主要提升技术深度,p七p八主要提升技术宽度。

P八p九主要提升技术广度。

这三个不同的技术维度,分别适合用不同的方法来提升这一讲,我就会为你一一介绍,让你的学习更有针对性。

在回答晋升评委提问的时候,也能做到游刃有余,提升技术深度,最好使用链式学习法。

如果你参加过晋升答辩,一定经历过评委的追命连环问。

比如你在讲解PPT的时候,提到某个项目使用了netty技术评委,首先会问你netty的一些技术点。

当你回答说netty的本质是reactor网络模型时,评委又会问你reactor网络模型的原理。

当你回答说reactor的基础是java NIO的时候,评委又会问你java的NIOBIO的技术细节。

当你回答说java的NIO在linux平台上是基于exprl来实现的时候,评委又会问你linux的eprl、 select等等技术的原理。

面对这种打破砂锅问到底的方式,如果平时没有充足的准备,你很可能会卡住。

所谓链式学习法,顾名思义就是学习的过程。

好像从水里拉起,一根链条拉出一环,后面又接着一环,最后将整个链条全部拉出来。

当知识连接成链条,环环相扣。

你对技术的理解就很透彻,评委问,到底,你就能答到底。

但是知识的锁链不是胡乱连接的,环环相扣的方式很有讲究。

常见的方式有两种,第一种是自顶向下,层层关联,打通一项技术的领域分层。

第二种是由表及里,层层深入,打通一项技术的细节分层。

以netty网络编程为例,相关领域一共可以分为六层,要么上层依赖下层,比如netty依赖java网络编程。

Java网络编程在linux上又依赖linux提供的网络编程接口,要么下层是上层的应用和实现,比如TCPIP是原理。

而linux网络调优和工具是TCPIP的具体应用,它的领域分层图我放在了文稿中,你可以看一下。

同样以netty网络编程为例,技术细节可以分为四层,它的细节分层图我也放在了文稿中。

你记得要看一下链式学习法的第一步,就是要明确一项技术的深度,可以分为哪些层。

具体来说就是画出领域分层图和细节分层图。

一开始呢你可能会觉得画不出来,这恰恰说明你对深度的理解还不够。

而尝试画图本身就是一个梳理结构,强化认知的过程。

画出了两张图之后,第二步就是要明确你自己要学到哪一层,学的太浅,达不到提升深度的目的,学的太深又会耗费太多的时间和精力。

以netty网络编程为例,从我自己实践和指导别人的经验来看,领域分层图的六层不用都学,大部分人学三到五层就够了。

不过细节分层图的四层,还是建议你每一层都学确定了学到哪一层之后,第三步就是要明确每一层应该怎么学。

在领域分层图中,越往上越偏应用,实际工作中用的越学越往上越偏原理,实际工作中用的越少。

所以,总的原则是在上层投入更多时间,更关注细节是熟练使用在下层投入相对少的时间,更加关注原理和简单应用。

比如对于netty网络的领域分层图,如果你不是netty项目的开发人员,而是只想使用netty来搭建自己的系统。

那么linux网络编程这一层,你只要掌握select、 epro等技术原理和优缺点就行了。

Improl提供的API,你有时间可以打概看看,没时间不看也可以。

但是对于netty本身提供供AII,则越熟熟练,越好是细节分层。

图中你需要详细的学习。

每一层要注意的是,对于实现源码这一层,你不需要去掌握每一行源码,只要掌握关键源码就行了,也就是和设计原理以及设计方案相关的源码。

面试学习法主要有两个优点,第一个优点是促使我们主动提升大部分人。

在实际工作中,很多技术都只接触到了领域分层图和细节分层图中的前两层没有进一步的去了解。

而如果采用链式学习法,你就会意识到使用一项技术完成了工作,并不意味着你就完全掌握了这项技术。

你还需要把刚刚自己用到的技术作为切入点,画出完整的领域分层图和细节分层图,然后逐一攻破,这样才能提升深度,达到精通水平。

第二个优点是将知识和技能系统化,明确知识和技能点之间的关联关系,有助于更好的理解和应用这些知识和技能。

例如,如果我们要在linux平台上基于netty开发并发十万连接的高性能服务器,既要深入掌握netty的技术细节,又要深度掌握领域深度相关的技术,包括netty技术细节,需要设置la TI的相关参数。

Java网络编程调试的时候,需要知道java的网络编程API等等。

Linux网络工具需要使置linux网络工具定位问题。

Linux操作系统配置需要修改linux的最大文件句柄数,既要优化linux的TCPIP参数。

只有使用链式学习法,你才能系统的了解到这些关联的知识和技能,以及如何将它们串起来。

现在我们回顾一下链式学习法的重点。

第一点,链式学习法是让知识形成锁链,环环相扣,主要用来提升技术深度。

第二点,链式学习法的步骤包括,明确一项技术的深度,可以分为哪些层,明确要学到哪一层,明确每一层应该怎么学。

第三点,链式学习法的优点有,促使我们主动提升,将知识和技能系统化,提升技术宽度,最好使用比较学习法。

如果你有过晋升p七或者更高级别的经历,肯定被问到过大量跟y有关的问题。

比如,为什么选择REDIS?为什么不用memory的?为什么选择mysql,而不是REDIS?选择flink的理由是什么?这些问题大部分都是考察你思考、判断和决策的逻辑和过程。

如果你只有技术深度而没有技术宽度,这时就会陷入窘境。

单个技术细节你都很熟悉,但是却无法解释为什么用这个而不用那个所谓比较学习法,就是横向比较同一个领域中类似的技术梳理他们的异同,分析他们各自的优缺点和适用场景,这样你就能加深对整个领域的理解。

评委问的每个为什么你都能回答的有理有据?比较学习法的具体操作步骤是这样的。

首先,用链式学习法掌握某个领域的一项技术,将这个领域的关键技术点整理成表格。

然后基于整理好的技术点,学习这个领域的另一项技术,将他们在技术点上的差异整理成思维导图。

接下来找出差异比较大的技术点将背后的原理和对应用场景的影响。

整理成表格。

下面呢我以缓存领域的memory cash的和REDIS为例,说明一下缓较习习法的用法。

首基基于试习习掌掌memory cache的技术,整理出缓存领域的六个关键技术点。

然后基于这六点快速掌握REDIS技术,整理出memory、 cash、 ed和REDIS在这些点上的差异。

接下来找出差异比较大的技术点,包括并发方案、数据结构高、可用和持久化,整理出他们背后的原理和对应用场景的影响。

比较学习法主要有三个优点。

第一点,学的快,同一个领域的技术,在功能上大多是类似的,区别,往往在于实现方案和细节。

所以当你掌握了一项技术之后,再去学习同一个领域的另一项技术,就不需要从零开始了。

因为基础的部分你已经学会了,只要重点关注它们的差异,点就能够快速掌握。

第二个优点,学的全整理关键技术点和制作思维导图的过程,会促使你把一个领域的技术体系化,更全面,更系统的掌握这个领域。

第三个优点,学的深,从差异点到背后的原理,再到应用场景的思考过程,会让你对技术的取舍之道理解的更深,在每一次技术选择时,都能给出让人信服的理由。

现在我们回顾一下比较学习法的重点。

第一点,比较学习法是横向对比,让选择有理有据,主要用来提升技术宽度。

第二点,比较学习法的步骤包括整理领域关键技术点,整理不同技术的差异点。

整理差异点背后的原理和对应用场景的影响。

第三点,比较学习法的优点,有学得快,学的全,学得深,提升技术广度,最好使用环视学习法。

很多人呢一听要提升广度,就意为学的越多越好。

想到什么牛就学什么,看到什么热就追什么。

学了一段时间感觉学了很多,但好像啥也不会。

网撒的很广,却没捞到几条环。

如果环视学习法,就是构建一个完整的闭环过程,将多个领域的鱼一网打尽。

技术上常见的闭环式功能环代表某个功能的处理过程。

以一个最简单的用户登录为例,如果它的实现方式是前端,在手机app上用作登录页面后端用了微服务架构来存储,那么就可以构建出一个功能环。

具体可以看一下文稿中的图片。

这里要说明一点,环视学习法更加适合业务系统相关的技术人员,而不太适合中间件相关的技术人员。

因为中间件的技术更加专注于深度和宽度和具体的业务关系不大,对技术广度的要求并不高。

当然如果你已经达到了p八加p九这个级别,无论什么领域都可以采用环视学习法来学习跨领域的技术。

除了功能环以外,还有很多构建闭环的思路。

比如业务上常见的业务环,它代表某个业务的处理步骤,以及管理上常见的流程环,它代表某件事情的处理步骤。

所以,环式学习法不但可以用来提升技术广度,也可以用来提升业务能力和管理内容。

就视学习法的第一步就是把闭环画出来。

具体的画法是将完整的闭环分为几个关键的环节,然后标出每个环节的关键内容。

就拿用户登录这个功能环来说,它可以分为前端客户端、网络层机房、入口、NGINX、用户中心、安全中心和数据中心,总共八个环节。

每个环节又会涉及不同的技术,比如客户端涉及GS、 bridge和OKHTTP用户中心,涉及微服务、mysql和REDS等,总共涉及的技术有十八项。

通过这么一个简单的功能环,你就可以看出技术广度的边界和范围。

而且这些技术都是业务上实际用到的,你完全不用担心自己是没有目的的。

乱学环视学习法。

第二步就是由近及远,逐步攻克闭环上的各个节点。

就算是同一个闭环,不同领域的人学习顺序也是不同的。

还是以用户登录这个功能环为例,前端的人先要学客户端的JS、 bridge和OKHTTP等知识,然后再去学服务端相关的知识。

而服务端用户中心的人需要先学NGINX和安全中心相关的知识之后,再逐步扩展到客户端和前端。

通常来说,职业等级越高技术,广度的要求也越高,所以功能环上要求掌握的相关技术也越多。

对于单个技术,你还是需要用链式学习法来学习。

但是因为数量太多,全部严格按照链式学习法的要求来学是不太现实的。

我的建议是可以先不去研究源码,只要学习接口、设计、设计、原理、设计方案这三层就行了。

在合适的时候或者有时间的时候,可以看看核心源码,加深理解。

很多技术人员有一个误区,认为业务设计是产品经理不事情,产品经理设计好了,技术人员再把自己负责那部分做好就行了。

这种想法会让你在工作中非常被动,而且可能吃大亏。

常见的吃亏场景,包括第一个讨论需求的时候,因为不懂业务,就算产品的业务需求不合理,实现代价很高,实也发现不了。

结果到了设计甚至是编码阶段,你才发现自己做的累死累活效果还不好。

第二个场景,处理线上故障的时候,因为不熟悉业务,只能被动接受别人的分析和推断,很容易背锅。

第三个场景因为不熟悉业务,无法承担整体需求分析和方案设计,这种任务导致个人能力得不到锻炼,失去很多晋升机会。

无论是前端客户端还是服务端的技术人员,最好多花点时间,通过业务环来了解业务的整个流程。

文稿当中有张图片展示了用户登录的业务环供你参考。

注意这个图只是示例,省略了很多分支和细节。

实际的业务流程图比这个要复杂,导以直接参考产品经理的需求。

文档环视学习法有两个优点,第一个培养全局视野,在画出完整闭环的过程中,你可以端到端的了解全流程涉及哪些系统或者模块,每个模块的关键技术是什么,从而培养出全局的视野和能力。

第二个优点,避免盲目的广撒网却捞不到鱼。

环视学习法划定的范围是实际工作的闭环,能够形成一套有效的组合拳,而不是东一榔头西一棒槌的胡乱搭配。

能够大大提升学习效率,所以你只要对照环来提升就可以了,不用再担心广撒网却捞不到鱼了。

现在我们回顾一下环视学习法的重点。

第一点,环视学习法是构建闭环,打出组合拳,主要用来提升技术广度。

第二点,环视学习法的步骤包括,先把闭环画出来,然后由近及远,逐步攻克闭环上的各个节点。

第三点,环视学习法的优点,有培养全局视野,避免盲目的广撒网,却捞不到鱼。

好了,这就是今天的全部内容,留意到课后思考题给你在你的面试或者晋升的过程中,有没有因为某个专业方面的问题没答上来而留下遗憾的经历。

学完今天的内容后,你觉得可以用什么方式来学习?学完以后再留下类似的遗憾呢?欢迎你把答案写到留言区,和我一起讨论。

相信经过深度思考的回答,也会让你对知识的理解更加深刻。