如何有效学习框架源码_直接学框架

hacker|
97

文章目录:

如何去阅读并学习一些优秀的开源框架的源码

对于开发者来说,社区里丰富的开源代码其实是笔极为宝贵的财富。如果能充分利用好开放源代码的资源,不仅可以掌握多种编程方法,提高实践能力,还能获得好的思想,激发编程灵感。开源代码怎么学以及怎样才能学好是大家经常关注的话题,日前,在问答网站知乎上,有人抛出了“如何更有效地学习开源项目的代码?”的话题,众技术好手各抒己见,CSDN软件研发频道对本文内容进行了整理,方便大家学习与参考。盛大创新研究院研究员 庄表伟:学习开源 尽可能在代码里找答案 庄表伟提供了以下9个建议:1.在下载源代码之后,首先要跑起来,编译通过、正常运行;2.在你觉得最有可能运行到的地方,设置断点或者抛出异常,这样,就能够找到一个项目在正常运行时的入口点;3.从入口点所在的那个源文件开始阅读,逐步把握整个项目是如何启动起来;4.随便改点代码,看看会不会报错,如果报错,会从哪里报错;5.试着把报错屏蔽、修复、或者绕开;6.尝试理解一个系统的内部结构,多少组成部分,主线模块是哪些?辅助模块是哪些?7.从实际需要出发,修改这个项目,满足自己的某一个小的需求。(注意在此之前,尽量不要在网络上找答案);8.看看相关的讨论与心得,是否与自己的理解相一致;9.提交bug fix或者某个新的功能代码。在学习开源的过程中,有几个方面会获得大量收获,1.架构与模式;2.开源社区常见的一些惯用法;3.相关领域的结构与算法。总结一点:学习开源,尽可能在代码里找答案,而不是在代码之外找答案,那些都是二手的,而且很可能不准确。互联网评论员 朱晓阳:从简单做起 理论联系实践朱晓阳对此发表了两点看法:首先,从简单做起。刚开始的时候学习一些领域内基础理论,然后找一些简单的东西去实现,不能一开始就去找开源项目。建议大家经常动手写一些小程序,如改进宿舍网络登录客户端等。积小成多,能显著提高自己的编程能力。其次,学习的知识一定要和自己生活或工作有联系,这样才会有乐趣或动力。互联网评论员孙竟:先构想一个想做的项目首先,构想一个想做的项目(比如论坛、博客、微博等);然后,思考需要什么功能,应该怎么去实现,尽可能包括各种细节,有必要时记录下来;最后,去找个类似的开源应用,看看它是怎么实现的,和你的想法有什么差异,有什么可以学习或需要改进的地方。互联网草根hqman:我的5个建议:1.反复地使用软件,熟释软件的组成文件和软件功能,注意IE地址栏内的地址变化;2.打开数据库文件或存放数据的XML文件,参照数据字典了解各个表和字段的数据含意;如果没有数据字典,就运行软件输入数据,参照所输入的数据,了解各个表和字段的数据含义;3.利用Visio进行反向工程,将类图抽出来;4.研究类之间的关系,注释各个类的属性和方法,弄清程序的整体框架;5.另开一个项目,按照软件开发的流程,将代码分段复制进新的项目,进行编译调试,关注一些实现细节,学习一些编程的技巧。在读研究生张伟:在校学生空闲时间多参加一下比赛张伟的建议是大家在空闲时间多参加一些比赛。一个完整的项目,不管再小,只要做完了,就会有收获。多看一些比较大的开源项目源代码,每次看完后都会受益匪浅。从网上成熟的开源代码里,可以学到很多的设计思想。他认为,从项目入手,以项目为驱动,可激励自己进步。当然,是否一定需要看开源代码,这将取决于个人的兴趣和需要。画出程序流程图 理解程序流程思想CSDN博客专家i_like_cpp:曾在CSDN分享了《如何将源代码学好》的博文,对此,他给出了四点建议:1. 画出整个程序的流程图,理解整个程序流程的思想。画流程图的方式更让人很直接的理解程序的整体流程,而不会被代码所干扰,让程序员总体上把握整个程序;2. 对流程各节点(函数或过程)的理解,流程的每一节点是构成整个流程的不可缺少的部份;3.再把流程和流程各节点串起来理解整个程序,可能的话最好写出读书笔记;4. 如果想深刻的学习到源代码的精髓所在,请写一个相近的程序进行操练。理解了这个程序并不表明掌握了这个程序,只有在操练一个相近的程序时,才知道你到底理解了多少,掌握了多少。编后语:源代码的学习是一个从整体到不断细化的过程,是一个极为繁琐的过程同时也是一个不断认清事物本源的过程。

如何去阅读并学习一些优秀的开源框架的源码 来自

没有目标的去看所谓的源码,没有任何的意义。

最适合看源码的就是,你对完成一个功能感兴趣,所以你想要了解他。

比如说Mybatis,你想了解他的代码生成机制,自己先去思考,如果是你做,该怎么做,再去看源码。

再比如说Log4j.打日志的时候是异步的吗?如果我需要把日志打到另外一台机器上,我该怎么做?

带着这些问题去思考解决方案。

那么天底下的源码都是你的老师。

千万别东一锤子西一锤子的去瞎看。

如何学习java spring框架?

1、打好基础是重中之重

基础部分可能很枯燥,但是一定要耐心坚持下去。因为打基础好比是在造轮子造汽车,没有打好基础在后面的学习就好比走路,可以说后面遇到的百分之七八十的问题都是基础没学好造成的。

2、多看官方文档多读源码

一定要看JDK相关类库、常用框架各种功能的源码,去了解其底层实现的原理。总的来说这个也是在打基础的部分,Java基础非常扎实才能看懂,在我们学习一个类的源码时,肯定会衍生出其他各种各样的问题,供我们来了解和学习,这也就是我们下一步学习的目标和方向。慢慢的,我们就会学习更多的知识,并积累更多的经验。

3、系统性学习,循序渐进

不要急于求成,每个知识点都要看,并且每个知识点都要勤加练习。有的同学在学习过程中觉得这个知识点简单,就跳着学习,其实这是个很大的问题,知识点细节必须要了解。我们学习Java需要循序渐进,一步一步来,不能操之过急。

4、遇到问题

遇到不会做的问题,当然不能置之不理。先在网上查,目前网络上针对很多问题都有完美的解决方案,如果网上没有类似的问题,那可能是你犯了什么小错误。也不要在这个问题上花费太多时间,这需要一定的学习技巧。Java中的知识有很强的相关性,有不懂的地方,可以用其他周边相关知识再回过头来理解,这样既不会耽误学习进度,又能理解自己不懂的地方

1)jvm有很多种,其实jvm是一个标准,sun做的那个叫hotspot,作者就是后来v8的作者lars bak,其他公司也做过jvm,其中做得比较好的有bea的jrockit,其他的包括ibm的r9,apple的jvm等在内,都做得不行,所以jvm主要是整合淘汰掉这些做得不好的jvm(s),整合成一个统一的openjdk。

2)java是典型的oop语言,其执行效率的优化,最早就是lars bak等人从smalltalk等长期优化的经验中总结出来并apply到hotspot上去滴,而smalltalk在早期apple机上搞出了那种拖拖拽拽就开发出app的做法,后来vc,delphi之类的其实都是抄袭或者说借鉴apple的smalltalk的做法,jobs说微软从头到尾都在抄袭apple是空穴来风,这里空穴来风跟王垠使用的空穴来风是一个意思,有趣的是,java的gui并没有继承这种搞法,反而对这种拖拖拽拽就作出app的做法批判有加,到今天,其实java的gui都还不能真正做到拖拖拽拽就作出来,问题很多,个人建议对于纯java的gui开发,还是以写代码为主。

3)jee也是一个或者说是一堆标准,知乎上有些人把maven,jenkins都算做jee是不对滴,jee的标准核心是ejb,其实就是一个xml配置化的java文件,这个标准在4的时候,达到了顶峰状态,几乎所有的挨踢大厂都主动支持该标准,之后开始走下坡路,支持的厂越来越少。

4)java和javascript的关系比很多人认为的要密切,javascript里面的java这四个字母可不是白叫的,比如js的版权和商标都控制在oracle手里,oracle对于js的支持甚至超过其对java的支持,并且喜欢捆绑销售,比如jvm里面就有一个js引擎。

5)jvm里面除了js engine以外还有一个浏览器排版引擎webkit,就是apple safari和google chrome用的那个那个。

6)java支持绝大多数脚本语言,你能叫得上名字的脚本语言,几乎都可以在jvm上执行,比如常见的js,ruby,python,甚至php,lua,只不过除了js以外你需要找到相关的脚本引擎。

7)spring的版权被控制在vmware手里,其实spring的那一大堆东西,本质上是一个非标准的jee实现,比如在jee里面用的inject,在spring里面就是autowire,当然spring曾经深刻滴影响了jee,所以有些东西比如di标准,是spring影响下制定出来的,所以spring的做法会比较特例一点。

8)maven上的jars数量前两天突破800万,其他语言的类库,排名第二的是npm,大概数量是maven的十分之一,也就是几十万,不知道现在突破100万没有,然后是gem,也就是ruby那个,大概是十几万,下来是python的module,大概数量级是几万,没突破十万。

9)java的标准是由一个叫做jcp的组织制定的,所有标准需要经过jcp的执行委员会通过方可执行,jcp几乎包括了你所知道的绝大多数知名挨踢公司和组织,比如google,apple,ibm,intel,arm,red hat,twitter等,还有一些教育机构,比如我国的北京大学,阿里最近一次申请jcp执行委员会成员资格,似乎投票不通过,最近一次执行委员会新增两个成员是arm和jetbrains。

10)微软也曾经是jcp甚至是java的主要贡献者,但是利益驱使下,想扩展java,从而破坏java跨平台的特性,所以跟sun闹翻,其本质原因就是想让客户写的java代码跟windows绑定,sun坚决不同意,闹翻,今天回头看这个结果,只能说:双输,sun挂了,微软的ria也离挂不太远了,silverlight已经放弃了,比起当年ie自带有jvm的支持来说,那完全就是两回事。

11)除了微软以外,jcp还缺少一个重要组织apache,因为apache跟oracle也闹翻了,oracle似乎并不在乎开源组织,而更在意商业公司的支持。

12)java曾经有一个内置的数据库,9之后被剥离。

13)j2me是j2se的子集。

14)vert.x作者tim fox最早在vmware做spring时候看到了node.js,萌生出了制作支持多核的node.x的想法,并在离开vmware后加入red hat将其实现,vmware看到后开始耍无赖,claim node.x后来改叫vert.x的版权,不惜跟red hat打官司,后来各方妥协,将其交给eclipse foundation。

15)oracle在收购bea之前,一开始的目标并不是bea和bea的weblogic,而是jboss,但是jboss表现出了极为有种的一面,在oracle收购成功之前,投入了red hat的怀抱,因为都是开源组织,从此jboss成了red hat的一个子部门,oracle收购jboss失败之后,转向bea,庄思浩气死了,但是没用,最后还是被恶意收购。

16)sun在玩不下去之前最早尝试接触的目标是ibm,ibm嫌太贵,放弃之后,被转手给了oracle。(Java学习交流QQ群:589809992 我们一起学Java!)

17)vert.x的作者tim fox在离开red hat之前曾经发过twitter抱怨,外人比如我们,猜测是因为red hat内部已经有了一个jboss,所以跟vert.x在应用上有了重叠,所以导致tim fox的出走,但是出走之后,red hat答应对vert.x做持续性的战略投入,所以vert.x core的几个developers,其实拿的是red hat的工资,但是vert.x的版权并不在red hat手里,而在eclipse foundation手里。

18)vert.x的几个核心开发人员都是google summer of code的导师,每年年初时候会招收在校大学生搞项目。

19)教育机构相关:scala的作者马丁是德国人,eth的博导,groovy的主要领导人是法国人,jruby背后是东京大学,jboss的作者是法国大学校x的校友,x就是伽罗瓦考不进去的那所大学,伽罗瓦进不了x,所以改读巴黎高师,tim fox毕业于帝国理工,主席去的那个,netty作者trustin lee是acm银牌,现在line工作,毕业于sky里面的延世大学,kotlin是毛子公司jetbrains的作品,看linkedin,很多人毕业自圣彼得堡大学,spring作者rod johnson是悉尼大学的音乐博士,hibernate作者gavin king是澳洲莫那什大学的数学本科毕业生,james gosling这种cmu和calgory的估计烂大街了,sun是斯坦福大学网络的意思,夹带两个私货,aspectj有一个维护小组在mcgill,hbase跟waterloo关系密切。

20)java早期被人认为慢,跟java坚持不用硬件加速渲染有关,死活就是不肯接入directx和opengl,7之后总算开窍,搞了一个图形引擎接入了directx/opengl。

21)casssandra是facebook做失败的项目,被贡献给了apache之后老树开花。

22)groovy被贡献给了apache,现在叫做apache groovy,ceylon被贡献给了eclipse,现在叫做eclipse ceylon。

23)netflix现在是java shop,之前是用.net的。

先想到这么多,有空再写。

4条大神的评论

  • avatar
    访客 2022-07-09 上午 08:41:25

    这四个字母可不是白叫的,比如js的版权和商标都控制在oracle手里,oracle对于js的支持甚至超过其对java的支持,并且喜欢捆绑销售,比如jvm里面就有一个js引擎。5)jvm里面除了js engine以外还有

  • avatar
    访客 2022-07-09 上午 05:47:11

    进新的项目,进行编译调试,关注一些实现细节,学习一些编程的技巧。在读研究生张伟:在校学生空闲时间多参加一下比赛张伟的建议是大家在空闲时间多参加一些比赛。一个完整的项目,不管再小,只要做完了,就会有收获。多看一些比较大的开源项目源代码,每次看完后都会受益匪浅。从网上成熟的开源代码里

  • avatar
    访客 2022-07-09 上午 08:21:48

    献给了apache,现在叫做apache groovy,ceylon被贡献给了eclipse,现在叫做eclipse ceylon。23)netflix现在是java shop,之前是用.net的。先想到这么多,有空再写。

  • avatar
    访客 2022-07-08 下午 10:10:44

    内的地址变化;2.打开数据库文件或存放数据的XML文件,参照数据字典了解各个表和字段的数据含意;如果没有数据字典,就运行软件输入数据,参照所输入的数据,了解各个表和字段的数据含义;3.利用Visio进行反向工程,将类图抽出来;4.研究类之间的关系,注释各个类的属性和方法,

发表评论