有没有做网站的教程网上商城推广
news/
2025/9/26 5:21:41/
文章来源:
有没有做网站的教程,网上商城推广,网站后台上传模板,借鉴网网站作者 | youzhibing链接 | cnblogs.com/youzhibing/p/9553752.html1.读源码的经历刚参加工作那会#xff0c;没想过去读源码#xff0c;更没想过去改框架的源码#xff1b;总想着别人的框架应该是完美的、万能的#xff0c;应该不需要改#xff1b;另外即使我改了源码… 作者 | youzhibing链接 | cnblogs.com/youzhibing/p/9553752.html1.读源码的经历刚参加工作那会没想过去读源码更没想过去改框架的源码总想着别人的框架应该是完美的、万能的应该不需要改另外即使我改了源码怎么样让我的改动生效了项目中引用的不还是没改的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的两篇文章。慢慢的从一味的网上找资料变成了很多时候会从源码中找答案。不求能读太多的源码但愿自己接触的技术都能读上一读路漫漫其修远兮吾将上下而求索2.我为什么读源码很多人一定和我一样的感受源码在工作中有用吗用处大吗很长一段时间内我也有这样的疑问认为哪些有事没事扯源码的人就是在装只是为了提高他们的逼格而已。那为什么我还要读源码呢一刚开始为了面试后来为了解决工作中的问题再后来就是个人喜好了。说的好听点是有匠人精神说的委婉点是好奇底层是怎么实现的说的不自信点是对黑盒的东西我用的没底怕用错说的简单直白点是提升自我价值为了更高的薪资待遇这里对真正的技术迷说声抱歉。源码中我们可以学到很多东西学习别人高效的代码书写、学习别人对设计模式的熟练使用、学习别人对整个架构的布局等等。如果你还能找出其中的不足那么恭喜你你要飞升了会使用固然重要但知道为什么这么使用同样重要。从模仿中学习从模仿中创新。读源码不像围城外面的人想进来里面的人想出去它是外面的人不想进来里面的人不想出去当我们跨进城内你会发现还是城外好皮城内风光无限源码的海洋任我们遨游3.我是怎么样读源码的内容了解首先我们要对我们的目标有所了解知道她有什么特点有些什么功能。对对方都还不了解就想着进入别人的内心世界那不是臭不要脸嘛我们要做一个有着流氓心的绅士对她有个大致的了解了就可以发起攻势一举拿下。那么怎么样了解了方式有很多我这里提供几种仅供参考最好的方式就是官方参考指南亲生父母往往对孩子是最了解的对孩子的描述也是最详细的比如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用如下方式获取connectionconn DBConnectionManager.getInstance().getConnection(getDataSource());那么我们的job中就可以按如下方式操作数据库了public class FetchDataJob extends QuartzJobBean {// private String dataSourceName quartzDs; // 用此会找不到// private String dataSourceName springNonTxDataSource.quartzScheduler; // 不支持事务// private String dataSourceName springTxDataSource.quartzScheduler; // 支持事务private final String insertSql INSERT INTO tbl_sys_user(name, age) VALUES(?,?) ;private String schedulerInstanceName quartzScheduler; // 可通过jobDataMap注入进来Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {String dsName LocalDataSourceJobStore.NON_TX_DATA_SOURCE_PREFIX schedulerInstanceName; // 不支持事务//String dsName LocalDataSourceJobStore.TX_DATA_SOURCE_PREFIX schedulerInstanceName; // 支持事务try {Connection connection DBConnectionManager.getInstance().getConnection(dsName);PreparedStatement ps connection.prepareStatement(insertSql);ps.setString(1, 张三);ps.setInt(2, 25);ps.executeUpdate();ps.close();connection.close(); // 将连接归还给连接池System.out.println(插入成功);} catch (SQLException e) {e.printStackTrace();}}public void setSchedulerInstanceName(String schedulerInstanceName) {this.schedulerInstanceName schedulerInstanceName;}
}明确我们的目的找到合适的切入点进入断点调试追踪也就容易了。任我说的天花乱坠你仍无动于衷那也只是我一厢情愿只有局中人才能体会到其中的奥妙4.总结与感悟从上至下全部通读的方式个人不太推荐这是建立在很熟悉的基础上的当我们对某个框架已经比较熟悉了再从上至下进行通读彻底了解这是我认为正确的方式但是从不熟悉到熟悉这个过程个人不推荐全部通读而是推荐上面我推荐的方式 - 断点局部追踪。很多时候我们的博文都只是授之以鱼而我们也只是从中得到鱼而这篇的目的则是授之以渔我希望大家从中学到捕鱼的方法而不是一味的等待别人的鱼希望大家能够自给自足也能把鱼和渔都授予其他人。只要我们开始去读源码慢慢的就会形成自己的一套读源码的方式每个人的方式都不一样合适自己的才是最好的。行动起来用合适的方式去俘获你的的她吧纯属个人之拙见欢迎讨论和斧正【END】关注下方二维码订阅更多精彩内容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917880.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!