学习方法总结

一、代码学习和研究的步骤:

总纲:

      以整体流程的设计为总纲学习思路,重点学会完善整个流程,可以结合流程图等各种表达方式,一定要把流程搞清楚。看文档不能解决流程的问题,一定要注意。

        1、看介绍

        2、看DEMO

        2、看入门

        3、自己做DEMO

        5、manual/reference

        6、应用

        7、看总结

        8、看心得

        9、思考(对于源码记不住的问题,可以一条一条线路去记,另外,画图是一种很好的学习方式)

        10、看源码(一条分支分支的看,比如先看主线分支,可以自己手动实现一个,然后再去看副本分支,去实现和调试副本分支,参考repository的实现原理教程:2022年spring data & Spring boot &redis 技术整合入门到案例实战精讲_哔哩哔哩_bilibili

        11、调试源码

        12、修改源码

        13、自己做简单实现

        14、不断完善

        如何阅读大型项目的代码?这是个非常好的问题。从这个问题我们可以感受到,题主强烈的学习愿望,以及想快速提高技能水平的决心。但是反过来,我们需要思考一个问题,为什么我们要阅读大型项目源码?我们的目的是什么?目的不同,就会导致我们阅读的方式也不一样。我不知道题主说的大型项目是现在工作中要维护的项目,还是自己的兴趣爱好,从网上找到的某个开源项目。

        但是不管是什么类型的项目,我都建议题主先列清楚自己具体想达成一个什么目标,然后再去分解自己的这个目标。比如说,是自己工作中需要的项目,那么其实,就会有很多同事其实对这个项目比较了解了,也会积累了一些文档,甚至在线上已经在运行了这个项目的一些实例跑了一些业务,题主可以跟周围的同事先交流沟通,了解下这个项目的背景,大概的架构设计、业务和代码情况,然后再去看看相关的文档,了解一下整体的思路,特别是如果有一些设计和业务相关的文档,这样的话有助于我们对这些整体的代码结构的理解。然后呢,我们可以把这个系统跑起来,把这上面所有的功能都操作一遍,这些功能的操作有助于我们理解代码到底在干嘛,到底实现了什么样的一些功能?反过来是对我们去理解代码本身的设计,会有一定的帮助。

        如果是工作中需要的代码,但我那么我们还需要了解一下他相关的一些代码规范,脚手架,开发测试和上线发布运维流程。最好能一开始聚焦在一个明确的小目标上,因为我们需要快速介入研发工作状态,这就要先找到一个突破口,然后能够迅速的上手去完成一些简单的功能,比如修复一个bug和添加一个小的功能点。这时候就需要我们对这一小块代码特别了解,所以优先去看这一小块代码,把它看透,把所有的测试跑一遍,然后尝试着去修改少量的代码,是一个好的上手方式。这是上手的“点”,搞定了这个点,就可以考虑这个功能模块的“线”,一点点的搞清楚,去维护住。然后是整个系统这个“面”。点线面都贯通了,你就hold住了这个大型项目的代码。

        如果呢,我们是去看一个大型的开源项目,比如spring的源代码,那么我们可能呢,就需要先去用spring来写几个demo,先把它用起来,跑起来,知道有什么功能,怎么用。然后在我们用熟练的应用的基础上,再去看我们的demo设计的那一块的代码,最好能够在我们项目里把spring源码debug起来,看看运行过程,调了一下代码调用的流程和结构,通过这些来学习spring的源码和原理。这时候我们可以去看一些spring原理介绍的文章和书籍。比较熟练了以后,其实我们可以直接去看spring本身的代码,此时也一样我们要按模块,每次可以去了解一个模块的源码,比如bean怎么加载和装配的,AOP怎么回事,事务怎么处理,JDBC怎么封装等等。把很多的模块了解清楚了,整体的架构也清楚了。总之要先会用,然后熟悉调用关系,再按模块学习代码。知名的大型开源项目,原理相关的文档和书都很多,资料比较丰富,坐下冷板凳来潜心学习,很快就能学会。

        还要注意几个问题:

        1、我们去看源码的项目里,一般会引用大量的第三方的一些技术和代码,所以这时候呢,我们需要把它记下来,没看到一块,依赖于某个技术,我们还需要再去了解下这个技术相关的背景知识,功能和它的一些代码。大型项目是一个完全的知识体系,也是一个技术的宝库,可以通过一个大项目,学到非常多的技术、知识和技巧,也能看到高手们留下的一些设计思想和处理问题的经验,这些都对我们成长有很大的价值和意义。

        2、我们学习带一个大的项目的源码,一定不能有一蹴而就的心理,图大图快,而是必须稳扎稳打,了解大致的全貌,了解用法,然后再去了解每一个部分。先知道整体设计,再去看看一些具体的实现技巧和细节,从大到小,从粗到细,逐渐的把它学会,这个过程中特别强烈的建议去写一些笔记,因为人都是会忘记的。学习笔记把一些学习的过程和思路记下来,可以多次的去看源码,同时每次对照上次的笔记,每一次就会发现自己对这一块的代码理解得更深了一场,以前理解的不够,现在就知道了他为什么要这样设计,而不是那样的设计,他为什么这里的代码这么实现而不是那样实现?越了解得越来越深,其实对这个框架,或者项目就会掌握的越来越好。

        总结:

  •   1点线面的方式、冷静的形态,以小的点切入、从小的应用切入。
  •   2看文档,分析源码
  •   3善于总结归纳,对比,找出共同点和区别,加深印象
  •   4善于做笔记画图(类图/流程图/c4 model等等)  
  •   5很多东西需要写出来,总结出来才是自己的知识
  •   6 对于很多不明白的东西,无论敲多少遍可以说没什么用,这种时候要站在巨人的肩上,该放过的内容需要放过。比如在学习有些东西的时候,如果老师没有将其中有些东西细节,你可能听的模模糊糊的,这个时候你不要急,可以跳过他们,回头再去摸索,不要浪费时间在记笔记这些无聊的事情上面。
  • 7接上面一条,对于很多东西,老师讲过的内容,我们有时候不需要重新抄写一遍,我们需要的是对于老师内容的直接复现(所以,重要的是老师的代码/资料/视频,环境这些是非常重要的),对于有些不懂的内容,接上一条,我们要查阅大量的资料作综合的分析和归纳,这样就能够得到完整的流程。
  • 8对于知识的纵向扩展,很多人没有方向,这是不合理的,简单一点就是:
    • 基础->进阶1->进阶2->进阶n->最底层(自己认为不需要再次深入为止)
  • 9对于知识的横向扩展,已经老生常谈了,以终为始,找工作就看招聘要求。
  • 10对于学习的过程,不仅仅要学习到知识,更要学习到老师学习和分析问题的思路和方法
  • 11 所有问题的解决步骤:提出问题-》分析问题-〉解决问题,从上层我们可以看到这个这个人思考的点是什么,以及他是如何进行拆分的,我们可以体验到一个完整的流程,从下层往上层看,我们可能会偏离目标,但是有时候又必须从底层上层看,不断对照图纸进行修正,类似修房子,我们必须从底层修。举例:我们需要了解springboot的listeners的实现方式,ok,那么此时我们就需要去看源码,看的过程中我们发现我们需要了解ioc/aop,那么我们又需要去了解他们,最终我们可以根据8的方式搞清楚了listeners的实现方式,下一次我们🈶️需要搞清楚springboot的自动配置的实现原理,我没又需要重复同样的步骤,我们透过以上步骤可以看到一个大型的产品(Springboot)往往由多条(多种)路线交叉形成,类似一个n叉树,中间可能还有各种交叉,所以我们不可能一上来就说精通springboot,这是不可能做到的,学习其他技术也是如此,扎实根基,打好基本功,一条一条线路去分析研究,从实际出发,我们方能掌握整个框架完整流程。
    • 很多人存在一种学习的误区,对于一个东西都不知道如何使用,就开始分析源码巴拉巴拉,这是非常搞笑的,就相当于你都不清楚造一个汽车要什么技术硬件,你一上来就开始拆一辆汽车,而且中间好多配件还被你拆坏了,最后看着一地的配件懵逼了,还装不回去,这是典型的浮躁心态,我们只有搞清楚他各个配件的作用,一个一个的分析原理,然后制造,我们才能造出一辆汽车,而不是拆了甚至能装回去就好像能制造汽车了,就像路边上维修电脑的,他们能装电脑,但是他们能制造电脑吗?显然不会,而很多人连装电脑都是不会的,一上去就拆机,由于复杂的机构很容易就劝退一大波人,形成畏难情绪
  • 12 学习需要发挥主观能动性,举例,对于RedisTemplate他的原理我们通过源码分析了解清楚了,但是我们需要思考:为什么他要这么封装,有没有更好的办法,相比较于其他Template,比如RestTemplate/JDBCTemplate,他们具有什么共通性,他们又具有什么差异性,如果是我们来实现,我们如何来封装和实现。

二、学习目标

我想这是很重要的一块内容,人的生命是有限的的,那么学什么东西就很重要了,比如找工作,那就要看招聘要求,如果创业,就要看你的项目。先要有深度再有广度

技术方面终究目标:

    各种同质性框架一看就懂并且能迅速对比出优劣;

    对于框架能做二次开发,取长补短;

    具有一定的探究能力,掌握一些常见工具的使用,比如想jconsule,jmx等;对于一些行业常见问题,具有自己的行业积累,能够快速确定技术方案。

三、思维模型总结

     对于很多东西需要思维模型作为辅助,

  • 递归思想

对于一个大的问题我们无法得到答案。但是我们知道一个大的问题又多个小的问题构成比如我们知道如下条件:

n问题=n-1问题+2*n-2问题。我们要知道n问题的答案,我们只需要直到n-1问题的答案和n-2问题的答案就够了。说白一点,只要找到递推关系就可以解决整个问题的答案,扩展一下,对于树形数据结构的前中后序遍历都是递归问题:无论是bfs还是dfs.

举例:东哥手把手带你套框架刷通二叉树|第一期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值