杂谈篇之我是怎么读源码的,授之以渔

  • 时间:
  • 浏览:2
  • 来源:极速快3_快3新用户注册_极速快3新用户注册

前言

  开心一刻

    今天上课不小心睡着了,结果被老师叫起来回答问题报告 报告 ,这是背景。无奈之下看向同桌寻求帮助,同桌小声说到选C,结果付进 的人都说选C,向同桌投去有还有一个 感激的眼神后大声说道选C。刚说完教室就笑开了,老师一脸恨铁不成钢的表情说选你个头,我叫你翻译文言文你选C!你出去,你给我出去。看着同桌挤眉弄眼的表情,劳资真想说,这帮畜生

互相抱怨道:你是全是又长胖了?

  路漫漫其修远兮,吾将上下而求索!

  github:https://github.com/youzhibing

  码云(gitee):https://gitee.com/youzhibing

读源码的经历

  刚参加工作那会,没想过去读源码,更没想过去改框架的源码;总想着别人的框架应该是完美的、万能的,应该还不想 还不想 改;另外即使我改了源码,为社 样我想的改动生效了? 项目中引用的不还是没改的jar包吗。回想起来人太好那但是 的想法人太好挺......

  工作了一年多但是 准备跳槽了,但是但是刚结速 了一轮的面试,其中多少面试官就问到了相关的源码问题报告 报告 :ArrayList、HashMap的底层实现,spring、mybatis的相关源码。问源码的面试一般什么都有有回去等消息,但是就没但是了。那但是 但是但是刚结速 意识到,源码这东西在但是 的工作的中感受还不想 ,但是在面试中好像面的还挺频繁的,从此有意识的但是但是刚结速 了jdk次责源码的阅读(主什么都有有集合)。一但是但是刚结速 看源码,看的一阵一阵糙,知道个最少,知道ArrayList的底层实现是数组,HashMap的底层是散列表(数组+链表);更深入一点的扩容、hash碰撞等等就我沒有乎 了。

  读spring源码起于工作中遇到了有还有一个 问题报告 报告 (spring jdbcTemplate事务,各种诡异,包你醍醐灌顶!),排查一段时间最终是处置了,但过程我想非常难受,各种上网查资料、各种尝试,感觉就像大海捞针一样,遥遥无期。我下定决心,我不看后一看spring的源码,于是我买了一本《spring源码宽度解析》,结合着这本书、打开着eclipse,但是但是刚结速 了spring的源码阅读之旅。至此,读源码成了习惯,源码但是进入了我的心里。

  但是,springboot的火热,我想也想蹭上一蹭,于是有了springboot的启动源码系列,人太好还在进行中,为社 你会相信我想将其完成;工作中用到了shiro,我又结合着《跟我学shiro》将shiro的源码看后个最少,有了shiro源码系列博文,还差一篇认证与授权(应该快一点 就能面世),shiro源码系列就封笔了。最近在搭建此人 的后台管理系统,用到了quartz,集成的过程也遇到了一点问题报告 报告 ,但是有了quartz的三篇文章

  慢慢的,从一味的网上找资料变成了什么都有有但是 会从源码中找答案。不求能读很多的源码,但愿此人 接触的技术都能读上一读,路漫漫其修远兮,吾将上下而求索!

我为哪些地方读源码

  什么都有村里人 一定和我一样的感受:源码在工作蕴含用吗? 用处大吗?很长一段时间内我全是原本的问题报告 报告 ,认为哪些地方有事没事扯源码的人什么都有有在装,什么都有有为了提高你们歌词 歌词 的逼格而已。

  那为哪些地方我想读源码呢? 一但是但是刚结速 英语 为了面试,但是为了处置工作中的问题报告 报告 ,再但是什么都有有此人 喜好了。说的好听点是有匠人精神;说的委婉点是好奇(底层是为社 实现的);说的不自信点是对黑盒的东西我用的没底,怕用错;说的简单直白点是提升自我价值,为了更高的薪资待遇(这里对真正的技术迷说声抱歉)。

  源码中你们歌词 歌词 还不想 学到什么都有有东西,学习别人高效的代码书写、学习别人对设计模式的熟练使用、学习别人对整个架构的布局,等等。为社 你会还能找出其中的匮乏,如此 恭喜你,我想飞升了!会使用固然重要,但知道为哪些地方如此 使用同样重要。从模仿中学习,从模仿中创新。

  读源码不像围城(外面的人想进来,里面的人想出去),它是外面的人你会进来,里面的人你会出去;当你们歌词 歌词 跨进城内,你会发现(还是城外好,皮!)城内风光无限,源码的海洋任你们歌词 歌词 遨游!

                 

  你想好入城什么但是?

我是为社 样读源码的

  内容了解

    首先你们歌词 歌词 要对你们歌词 歌词 的目标有所了解,知道她哪些地方地方特点,一点哪些地方功能。对对方都还不了解,就想着进入别人的内心世界,那全是臭不想脸嘛,你们歌词 歌词 要做有还有一个 有着流氓心的绅士;对她有个大致的了解了,就还不想 发起攻势,一举玩转信用卡 。

    如此 为社 样了解了,方法 有什么都有有,我这里提供几种,仅供参考

      最好的方法 什么都有有官方参考指南,亲生父母往往对孩子是最了解的,对孩子的描述也是最删剪的;比如Spring Boot Reference Guide什么都有有对springboot最删剪的描述,为社 样使用springboot、springboot行态等等,通过此指南,springboot在你身旁一览无遗;但是,springboot毕竟是外国人的孩子,但是英语不好,估计读起来一阵一阵头疼了,不过你们歌词 歌词 有google翻译呀,咬咬牙也是能看的。源码世界的丈母娘、老岳丈是非常慷慨的!

      其次是书籍,国外优秀的有什么都有有,国内什么都有有乏好书,比较推荐此方法 ,自成体系,你会们 掌握的知识点不至于太散。这什么都有有好比是源码的闺蜜,对源码非常了解,重点是挺大方,会尽全力帮助你们歌词 歌词 了解源码。

      再次什么都有有博客,人太好但是人太好知识点比较散,但是针对某个知识点却一阵一阵的细,对彻底掌握非常有帮助,园子内全是什么都有有技术大牛,写的博客自然也是非常棒,非常具有学习价值。当然还有社区、论坛、github、码云等等。这什么都有有源码的你们歌词 歌词 圈,你们歌词 歌词 从中不想 获取到非常多关于源码的信息。

  设计模式的了解

    优秀的框架、技术不想乏设计模式;jdk源码中就应用了什么都有有设计模式,比如IO流中的适配器模式与装饰模式、GUI的观察者模式、集合中的迭代器模式等等;spring源码中也是用到了大量的设计模式。设计模式哪些地方地方优点、各适用于哪些地方场景,全是本文的内容,还不想 不想 你们歌词 歌词 你们歌词 歌词 自行去了解。

    你们歌词 歌词 只还不想 不想 对一点常用的设计模式有个大致了解,再去读源码是比较好的;还不想 还不想 将23种设计模式都通读,什么都有有还不想 不想 将常用设计模式删剪理解透;对于删剪通读,你们歌词 歌词 时间有限,另外一点模式人太好不太好理解、用的少,性价比不高,没必要删剪都读。

    推荐书籍:《Head First Design Patterns》(中文版:《Head First 设计模式》)、《Java与模式》;

    常用设计模式:单例模式、工厂模式、适配器模式、装饰模式、外观模式、代理模式、迭代器模式、观察者模式、命令模式

    另外我比较推荐的并是否生活学习设计模式的方法 是读别人博客:java_my_life刘伟技术博客chenssy的设计模式

    设计模式之于源码,就好比逛街购物之于女人女人男人,想顺利勾搭源码,你们歌词 歌词 还不想 不想 好好掌握设计模式并是否生活套路。

  配合ide进行断点追踪

    你们歌词 歌词 通过源码的圈子对源码的了解终究什么都有有停在表皮层 ,终究还是如此 走进她的内心,接下来你会和你们歌词 歌词 分享下,我是怎样走进她的内心的!

    相信看后我的源码博客的小伙伴都知道,我非常喜欢通过idea断点来进行源码追踪,断点追踪源码是我非常推荐的并是否生活方法 。断点不仅还不想 用来调试你们歌词 歌词 的代码,也还不想 用来调试你们歌词 歌词 用到的框架源码。面对未知的、茫茫多的源码,你们歌词 歌词 往往如此 足够的时间、经历和耐心去通读所有源码,你们歌词 歌词 只还不想 不想 去读你们歌词 歌词 关注的次责即可(村里人 但是要说我全是关心,这...)。那为哪些地方要用断掉调试的方法 来跟源码,而全是直接从源代码入手去跟你们歌词 歌词 关注的次责呢?尝试过的小伙伴应该知道,为社 你会们 对源码没熟悉,直接通过源码的方法 去跟,一方面很容易迷路(多态,会有什么都有有子类实现),我沒有乎 接下来跟哪有还有一个 ,此人 面也很容易跟丢,当你们歌词 歌词 跟入的太深了的但是 ,很有但是就忘记上一步跟到哪了。

    下面我会举例来说明我是怎样进行断点追踪的,以spring-boot-2.0.3之quartz集成,也如此 你想的那样哦!spring-boot-2.0.3之quartz集成,数据源问题报告 报告 ,源码探究 为背景来讲,还不想 不想 搞清楚有还有一个 点:springboot是怎样向quartz注入数据源的,quartz是怎样操作数据库的

    springboot向quartz注入数据源

      QuartzAutoConfiguration是springboot自动配置quartz的入口

      将quartz的配置属性设置给SchedulerFactoryBean;将数据源设置给SchedulerFactoryBean:但是有@QuartzDataSource修饰的数据源,则将@QuartzDataSource修饰的数据源设置给SchedulerFactoryBean,但是将应用的数据源(druid数据源)设置给SchedulerFactoryBean,显然你们歌词 歌词 的应用中如此 @QuartzDataSource修饰的数据源,如此 SchedulerFactoryBean中的数据源什么都有有应用的数据源;将事务管理器设置给SchedulerFactoryBean。SchedulerFactoryBean,负责创建和配置quartz Scheduler,并将其注册到spring容器中。SchedulerFactoryBean实现InitializingBean的afterPropertiesSet方法 ,里面有还不想 设置数据源的过程

      还不想 看后通过org.quartz.jobStore.dataSource设置的dsName(值为quartzDs)最全是被替打上去springTxDataSource.加scheduler实例名(你们歌词 歌词 的应用中是:springTxDataSource.quartzScheduler)。springboot会注册有还有一个 ConnectionProvider给quartz:有还有一个 dsName叫springTxDataSource.quartzScheduler,有事务;有还有一个 dsName叫springNonTxDataSource.quartzScheduler,没事务。

    quartz怎样操作数据库

      你们歌词 歌词 通过停止定时任务来跟下quartz对数据库的操作

      发现quartz用如下方法 获取connection

conn = DBConnectionManager.getInstance().getConnection(getDataSource());

      如此 你们歌词 歌词 的job中就还不想 按如下方法 操作数据库了

      明确你们歌词 歌词 的目的,找到最少的切入点,进入断点调试追踪也就容易了。

  任我说的天花乱坠,你仍无动于衷,那也什么都有有一厢情愿,还不想 不想 局中人不想 体会到其中的奥妙!

总结与感悟

  从上至下删剪通读的方法 ,此人 不太推荐,这是建立在没熟悉的基础上的,当你们歌词 歌词 对某个框架但是比较熟悉了,再从上至下进行通读,彻底了解,这是我认为正确的方法 ;但是不想熟悉到熟悉并是否生活过程,此人 不推荐删剪通读,什么都有有推荐里面我推荐的方法 - 断点局部追踪。

  什么都有有但是 ,你们歌词 歌词 的博文都什么都有有授之以鱼,而你们歌词 歌词 也什么都有有从中得到鱼;而这篇的目的则是授之以渔,假若你们歌词 歌词 从中学到捕鱼的方法 ,而全是一味的停留别人的鱼;希望你们歌词 歌词 不想 自给自足,不想 把鱼和渔都授予此人 。

  假若你们歌词 歌词 但是但是刚结速 去读源码,慢慢的就会形成此人 的一套读源码的方法 ;每此人 的方法 全是一样,最少此人 的才是最好的。行动起来,用最少的方法 去俘获你的的她吧!

  纯属此人 之拙见,不喜请喷!