- 博客(123)
- 收藏
- 关注
转载 SpringBoot源码解析:创建SpringApplication对象实例
上篇文章SpringBoot自动装配原理解析中,我们分析了SpringBoot的自动装配原理以及@SpringBootApplication注解的原理,本篇文章则继续基于上篇文章中的main方法来分析SpringApplication这个类@SpringBootApplicationpublic class DemoApplication { public static ...
2019-09-22 23:32:00
290
转载 SpringBoot自动装配原理解析
本文包含:SpringBoot的自动配置原理及如何自定义SpringBootStar等我们知道,在使用SpringBoot的时候,我们只需要如下方式即可直接启动一个Web程序:@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { ...
2019-09-20 09:09:00
272
转载 面试官:你知道Spring中有哪些可以让我们扩展的地方么
大家都知道我这段时间陆续更新了Spring系列源码分析以及各种扩展点的文章,到了今天可以总算可以更新这篇文章了首先列举一下一个经典的面试题:Spring中Bean的生命周期:开始初始化容器加载BeanFactoryPostProcessor实现类执行BeanFactoryPostProcessor的postProcessBeanFactory方法加载BeanPostProce...
2019-09-19 09:27:00
265
转载 Spring事件监听机制
前言Spring中的事件机制其实就是设计模式中的观察者模式,主要由以下角色构成:事件事件监听器(监听并处理事件)事件发布者(发布事件)首先看一下监听器和发布者的接口定义public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { vo...
2019-09-17 09:25:00
283
转载 Spring扩展点之Aware接口族
引言Spring中提供了各种Aware接口,方便从上下文中获取当前的运行环境,比较常见的几个子接口有:BeanFactoryAware,BeanNameAware,ApplicationContextAware,EnvironmentAware,BeanClassLoaderAware等,这些Aware的作用都可以从命名得知Aware处理其中BeanNameAware、BeanCl...
2019-09-17 09:22:00
115
转载 Spring扩展点之BeanPostProcessor
前言BeanPostProcessor接口是Spring中一个非常重要的接口,它的接口定义如下public interface BeanPostProcessor { Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException; Obj...
2019-09-16 23:12:00
221
转载 Spring扩展点之BeanFactoryPostProcessor
前言BeanFactoryPostProcessor接口是Spring中一个非常重要的接口,它的接口定义如下public interface BeanFactoryPostProcessor { void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansExcept...
2019-09-16 11:58:00
180
转载 Spring扩展点之FactoryBean接口
前言首先看一下接口定义public interface FactoryBean<T> { /** * 返回对象实例 */ @Nullable T getObject() throws Exception; /** * 返回对象类型, */ @Nullable Class<?...
2019-09-16 11:54:00
119
转载 有哪些你不知道的阅读源码的技巧
1. 先看官方文档和架构图优秀的开源组件官方都会维护文档和架构图,这份架构图上或许有一些最重要的组件之间的关联关系、或许哪些功能的调用流程、或许有一些别的东西,但是相信我,这些东西一定都是从总体来描述这个项目的,这个一定是你要阅读源码时第一个要看的2. 再看项目的组织结构下载下来代码之后,不要急着开始。先看一下各个包名和包里的类名,对照着文档和类名先简单猜一下各个类的大致作用3....
2019-09-11 00:36:00
96
转载 为什么我建议你去阅读优秀的源码
最现实的原因如果你想进大厂,没有大厂的面试官会不问你常用组件的源码实现。虽然很多人都说大厂都是面试造火箭,入职拧螺丝。但是人家拧螺丝也要招那个会造火箭的人来拧解决问题的速度当线上出现问题时,阅读过源码你很快就想到,这是由什么原因引起的,你需要现在去怎么做可以最快的解决这个问题。而如果没有阅读过源码,可能最快的方法是去Google一下了,但是Google出来的答案能不能真的解决这个问...
2019-09-10 09:31:00
98
转载 Spring源码解析系列汇总
相信我,你会收藏这篇文章的本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题。喜欢的同学可以收藏起来以备不时之需SpringIOC源码解析(上)本篇文章搭建了IOC源码解析的demo环境,启动这个环境即可开启阅读Spring源码的第一步开始源码阅读时介绍了Spring容器中最经典的容器ClassPathXmlApplicationContext,...
2019-09-06 09:52:00
416
转载 Spring事务源码解析(二)获取增强
在上一篇文章@EnableTransactionManagement注解解析中,我们搭建了源码阅读的环境,以及解析了开启Spring事务功能的注解@EnableTransactionManagement的实现逻辑在进行接下来的源码解析之前我想大家应该知道,当我们使用传统的jdbc应用事务的时候是不是做了如下操作:开启事务save、update、delete等操作出现异常进行回滚...
2019-09-04 09:07:00
98
转载 Spring @Import注解源码解析
简介Spring 3.0之前,创建Bean可以通过xml配置文件与扫描特定包下面的类来将类注入到Spring IOC容器内。而在Spring 3.0之后提供了JavaConfig的方式,也就是将IOC容器里Bean的元信息以java代码的方式进行描述。我们可以通过@Configuration与@Bean这两个注解配合使用来将原来配置在xml文件里的bean通过java代码的方式进行描述...
2019-09-03 09:04:00
160
转载 基于注解的SpringAOP源码解析(二)
在上篇文章中我们搭建了一个阅读源码的demo工程,然后简单介绍了一下@EnableAspectJAutoProxy注解,这个注解最重要的功能就是为向Spring中注入了一个beanAnnotationAwareAspectJAutoProxyCreator,本篇文章就继续来撸AOP的源码前文已经简单提到了这个类的功能,不过这里还是要先看一下这个类的继承图观察类图可知,Annota...
2019-09-02 11:14:00
140
转载 SpringJDBC源码解析
读完本篇文章需要很长很长时间。。。。传统JDBC相信大家对传统的jdbc已经很熟悉了,无非就是下面这个流程1234567891011//1.加载驱动程序Class.forName("com.mysql.jdbc.Driver");//2. 获得数据库连接Connection conn = DriverManager.getConnection(URL, USER, PASSWOR...
2019-08-27 11:09:00
136
转载 基于注解的SpringAOP源码解析(三)
注意,读完本篇文章需要很长很长时间在之前的2篇文章:AOP源码分析(一)AOP源码分析(二)中,我们搭建了SpringAOP源码分析的环境,介绍了@EnableAspectJAutoProxy注解和postProcessBeforeInstantiation方法是如何加载所有增强的。本篇文章则将描述一下AOP中剩余的实现逻辑postProcessAfterInitializat...
2019-08-23 09:31:00
109
转载 Java代码中可以优化性能的小细节
避免对boolean类型的判定反例:12if("a".equles("a")==true)`{}正例:12if(Objects.equles("a","a"))`{}**多用条件判断符 **反例:1234567if(a<0)`{ return 0;}else{ return 1; }``` 正例:a<0?0:1;12345678910111213...
2019-08-12 09:00:00
112
转载 k8s时区问题解决方案
前几天在使用k8s中的CronJob时发现了一个很奇怪的问题, 按照官方文档的demo跑起来是没有任何问题的,但是当我想要设置每天一个固定时间点例如12点20执行一个job的时候,到了时间之后无论如何都不会执行。一开始怀疑是cron表达式写的有问题,但是经过多次试验倒是没问题,然后就想到了时区的问题。首先我先尝试使用PodPreset来修改所有容器的时区(在pod 创建时,用户可以...
2019-08-09 08:59:00
766
转载 如何参与一个开源项目!
1、首先在github上注册一个自己的账号2、然后在左上部分搜索一个开源项目,比如说我的项目syj-ratelimit3、进入项目之后,单击右上角的fork按钮,github就会在你的帐户下fork一个同样的项目。4、此时点击右上角自己的头像,可以看到一个your repositories,点击进入就可以看到刚才的那个项目了5、现在你就可以在这个项目里取发挥你的个人才智进行...
2019-08-08 09:05:00
119
转载 SpringIOC源码解析(下)
注意,看完这篇文章需要很长很长很长时间。。。本篇文章是SpringIOC源码解析(上)的续集,上一篇文章介绍了使用XML的方式启动Spring,然后追踪了BeanFactory容器的创建、配置文件的解析、Bean的注册等。12. finishBeanFactoryInitialization()前方超长篇幅预警。。。刚才我们提到了bean还没有初始化。这个方法就是负责初始化所...
2019-08-06 09:04:00
111
转载 SpringIOC源码解析(上)
注意,看完这篇文章需要很长很长很长时间。。。准备工作本文会分析Spring的IOC模块的整体流程,分析过程需要使用一个简单的demo工程来启动Spring,demo工程我以备好,需要的童鞋自行在下方链接下载:1https://github.com/shiyujun/spring-frameworkDemo工程示例...
2019-08-04 23:58:00
152
转载 Spring所有注解大揭秘
声明bean的注解@Component 组件,没有明确的角色@Service 在业务逻辑层使用(service层)@Repository 在数据访问层使用(dao层)@Controller 在展现层使用,控制器的声明注入bean的注解@Autowired:由Spring提供,根据类型进行自动装配,如果组合@Qualifier使用将按名称进行装配@Inject:由JSR...
2019-08-02 17:29:00
108
转载 容器,到底是什么东西?
通俗的来说容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。不过,这两个能力说起来简单,但要用技术手段去实现它们,确并不是很容易。所以,本篇文章就来剖析一下容器的实现方式我们知道一个程序被执行起来之后,它就会从磁盘上的二进制文件,变成了计算机内存...
2019-08-02 10:18:00
286
转载 RabbitMQ如何实现高可用
RabbitMQ一共具有三种模式:单机、普通集群、镜像集群单机模式单机模式,就是我们平常玩的demo,生产上肯定不能用。具体安装部署过程可以参考我的这篇文章:CentsOS原生RabbitMQ安装过程普通集群普通集群就是在多台机器上启动多个实例。每个队列只会存在其中的一个实例上,然后所有实例同步这些队列的元数据。消费者在进行消费的时候,如果连接的实例上恰好不是队列所在的实例,就会...
2019-07-31 14:47:00
124
转载 RabbitMQ高级面试题
本文涉及:投递失败的消息怎么处理、如何实现延时队列、如何指定消息的优先级、消息的持久化是如何实现的、如何保证消息不丢失投递失败的消息怎么处理首先投递失败存在如下两个情况当交换器无法根据自身的类型和路由键找到符合条件的队列如果交换器在将消息路由到队列时发现队列上并不存在任何消费者解决方案:在生产者投递消息时指定mandatory或者imrnediate参数设为 true ...
2019-07-31 09:26:00
90
转载 Kubernetes是什么东西?
Kubernetes一词来源于希腊语,翻译来的意思就是舵手或者船长的意思,而它的logo也是很符合这个词的至于k8s则是通过将ubernetes这8个字母替换为8而导出的缩写Kubernetes是什么?k8s是Google开源的容器集群管理系统(思想来源于谷歌内部系统Borg)。在Docker技术的基础上,为容器化的应用提供以下一系列功能来提高大规模容器集群管理的便捷性:服务...
2019-07-30 17:09:00
96
转载 五大基础排序算法
选择排序假如我们现在要排序的数组为[3,1,0,2,8,4,2]。那么选择排序的排序流程为:在这个数组中找出最小值与第一个元素交换,现在数组为[0,1,3,2,8,4,2]在这个数组中除了第一个位置的元素外找出最小值与第二个元素交换,因为第二个元素就是最小的所以此次没有发生变化。现在数组为[0,1,3,2,8,4,2]在这个数组中除了第一个、第二个位置的元素外找出最小值与第三个...
2019-07-27 00:13:00
197
转载 阿里巴巴云原生实践 15 讲
阿里巴巴从 2011 年开始通过容器实践云原生技术体系,在整个业界都还没有任何范例可供参考的大背境下,从最初独自摸索到拥抱开源回馈社区,阿里巴巴逐渐摸索出了一套比肩全球一线技术公司并且服务于整个阿里集团的容器化基础设施架构。九年的前行,让阿里巴巴在交流互动中不断吸收和贡献好的理念、技术、思想,也积累了最为丰富和宝贵的实践经验。2019年6月24日至6月26日,在由 Cloud ...
2019-07-16 09:14:00
112
转载 垃圾分类逼疯上海人?别笑!马上轮到北京,天津等46个城市
“你是什么垃圾?”谁能想到,这直击灵魂深处的拷问,有一天竟成了上海朋友的日常。垃圾分类成为上海人的社交新话题。去上海出差旅游要小心了!7月1日起,游客扔错垃圾也会被罚!这一改善环境节约资源的新举措未来如何向全国推广,记者28日从住房和城乡建设部获悉????到2020年底,先行先试的46个重点城市,要基本建成垃圾分类处理系统。...
2019-07-10 21:52:00
218
转载 阿里巴巴Java开发手册更新了!
自2017年,《阿里巴巴Java开发手册》发布,现已有超过260万位工程师下载及查阅手册,在数以千计的企业应用,手册成为受业界认可的开发规范。昨天,《Java开发手册》再次更新,此次更新包含以下内容: 新增21条新规约 修改描述112处 完善若干处示例 修正了过往历史版本的两个错误 对部分略显艰涩的示例做了更生动的解释下载...
2019-06-21 16:16:00
66
转载 RabbitMQ集群安装
首先参考上一篇文章【CentsOS原生RabbitMQ安装过程】在两到三台机器上先安装单独的RabbitMQ节点修改一下hostname1234[root@rnode1 ~]# vim /etc/hosts172.16.20.110 rnode1172.16.20.111 rnode2172.16.20.112 rnode3...
2019-06-18 09:10:00
104
转载 CentsOS原生RabbitMQ安装过程
版本依赖问题RabbitMQ安装时与Erlang的版本一定要保持以下的对应关系,否则会引发无法启动的问题安装Erlang下载Erlang依赖1wget http://erlang.org/download/otp_src_20.3.tar.gz解压后进入资源文件夹1tar ...
2019-06-17 09:22:00
86
转载 初窥MySQL性能调优
本文涉及:MySQL自带的性能测试工具mysqlslap的使用及几个性能调优的方法性能测试工具—mysqlslapmysqlslap是MySQL自带的一款非常优秀的性能测试工具。使用它可以模拟多个客户端并发向服务器发出查询、更新等请求,然后输出简单的报告可选参数–engines:代表要测试的引擎,可以有多个,用分隔符隔开–iterations:代表要运...
2019-06-05 09:21:00
92
转载 MySQL架构与SQL执行流程
MySQL架构设计下面是一张MySQL的架构图:上方各个组件的含义如下:Connectors指的是不同语言中与SQL的交互Management Serveices & Utilities:系统管理和控制工具Connection Pool:连接池管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求,接收...
2019-05-31 09:14:00
104
转载 MySQL索引失效及使用索引的优缺点
本文所有实验基于MySQL5.7.21,实验将会用到Explain工具,不了解的同学可参考此文章:MySQL性能优化神器Explain详解联合索引失效先创建一个包含三个字段的联合索引,索引顺序如下:由以下三张图的key_len字段我们可以得出三个索引的长度分别为:title长303,author长122,price长5.联合索引使用时遵循最左匹配原则,如果...
2019-05-29 09:15:00
82
转载 MySQL性能优化神器Explain
本文涉及:MySQL性能优化神器Explain的使用简介虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句的通过Explain,我们可以分析出以下结果:表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化...
2019-05-28 09:15:00
76
转载 MySQL调优之数据类型选择原则
本文涉及:高可用数据库设计时数据类型的选择原则在进行数据库设计时,如果能够选择最恰当的数据类型就可以为后期的数据库调优打好最坚实的基础选择数据类型的原则更小的通常更好例如存储订单状态字段很多时候使用0、1、2表示使用tinyint类型存储就够了,没必要搞个int、long甚至varchar来。越小的数据类型代表着占用越小的磁盘、内存和CPU,也就代表着越快的速...
2019-05-27 09:24:00
79
转载 MySQL里默认的几个库是干啥的?
本文涉及:MySQL安装后自带的4个数据库:information_schema、performance_schema、sys、mysql的作用及其中各个表所存储的数据含义information_schemainformation_schema是mysql自带的一个信息数据库,其保存着关于mysql服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表...
2019-05-24 09:17:00
134
转载 MySQL常用sql语句大全
创建数据库1create database dbname;删除数据库1drop database dbname;选择数据库1use dbname;创建表12345678CRE...
2019-05-23 09:16:00
109
转载 微服务监控神器Prometheus的安装部署
本文涉及:如何在k8s下搭建Prometheus+grafana的监控环境基本概念Prometheus提供了容器和云原生领域数据搜集、存储、处理、可视化和告警一套完整的解决方案,最初时是由SoundCloud公司开发的。自2012年开源以来社区成员就不断递增。如今的Prometheus已经发展到继Kubernetes后第2个正式加入CNCF基金会的项目Promethe...
2019-05-23 09:08:00
545
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人