自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (4)
  • 收藏
  • 关注

原创 spring源码阅读(1)- ioc依赖注入之"helloworld"

public static void main(String[] args){ ClassPathResource classPathResource = new ClassPathResource("iocarch/beanlifecycle2/springcontext.xml"); DefaultListableBeanFactory beanFactory...

2018-10-16 18:02:50 161

原创 mybatis-Binding

binding:定义一个接口,映射对应的配置文件中的特定语句public interface SysUserMapper { SysUser getSysUser(Long userId);}<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati...

2020-04-08 23:07:07 272

原创 mybatis初始化配置——反射组件

这篇我准备介绍下mybatis另一个基础支撑组件,反射组件组。1、Reflector我们来看下Reflector类的属性和构造器,通过属性和构造器我们基本上就能了解Reflector这个类了public class Reflector { private final Class<?> type; private final String[] readableP...

2020-04-08 16:11:28 239

原创 mybatis配置阶段—— xml解析工具

概述接下来我们进入mybatis的初始化配置阶段。配置阶段就是读取mybatis的配置文件及我们编写的XML文件。在讲解mybatis的初始化配置之前,我们先了解初始化配置阶段要用到的基础支撑组件。这一篇讲解的是xml文件解析器组件DOMjava编程中我们常见的XML解析方式有三种:- DOM解析方式:加载整个XML到内存构建DOM树,数据量较大时,较消耗内存- S...

2020-04-07 20:05:04 335

原创 mybatis的世界观

mybatis的世界观mybatis是什么?书面定义:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录。mybatis是一个持久层的框架,也就是操作数据库的框架。...

2020-04-07 16:14:32 135

原创 spring IOC核心类DefaultListableBeanFactory的世界观

IOC作为Spring的核心功能其核心思想:帮用户管理对象,对象的创建不需要再由应用实现,而是交给了spring来管理。也就是对象的控制交给了第三方,也就是控制反转的由来。下面是Spring IOC核心工厂类的结构图从这个类结构图我们可以看出DefaultListableBeanFactory实现了哪些功能1、 是一个BeanDefinition注册器2、 最重要的它是一个...

2019-12-13 17:23:12 183

原创 6、tomcat容器-host、engine

1、容器的功能host:虚拟主机容器,用来区分不同的请求urlengine:管理host的引擎他们都是相对比较简单的,Engine获取对应的Host,Host获取对应的Context,对应的映射功能还是在连接器中的适配器中完成。所以这里不打算花费较大精力来讲解这个,我们只要了解到他们的关系就好了。其中有个小功能我们稍微注意一下,Request的监听器的触发是在Host的基础阀中...

2019-11-21 16:55:57 128

原创 5 tomcat容器-context

1、context容器是什么?直观上面看,context容器就是tomcat的webapps下面的一个应用java的web应用,你是不是一下就想到了servlet,filter,listener这三大神器。context容器就是管理它们的。这篇博文就是了解context如何管理它们的从功能是我们回顾一下servlet:处理能匹配到的请求的类fiter:针对指定请求必须经过的...

2019-11-21 15:07:28 146

原创 4 tomcat容器-wrapper

wrapper是什么wrapper是包装了一个应用实现Servlet类的容器的包装类,管理了这个Servlet的实例化和,初始化,调用及销毁。介绍Wrapper之前我要先说明一下我要过滤掉的几个比较重要的内容1、SingleThreadMode实现了这个类的Servlet,tomcat保证不会有两个线程同时调用同一个该servlet实例,现在已经弃用,因其有误导性,导致很多人以为这...

2019-11-20 21:50:06 217

原创 3 tomcat容器先导篇--管道

一、管道存在意义认为管道是连接Connector与Servlet的关键组件,我们可以把管道想象成一个流水线,每个容器都持有一个子流水线,整个调用流程如图:可以看到,连接器处理好数据到调用Servlet的service,经过了哪些容器的管道,这些管道组装在一起,仿佛就是一个大管道直接连通connector与Servlet。继续看看每个容器管道是怎么进来怎么出去的。先看下管道接口的...

2019-11-20 15:43:54 91

原创 2、连接器Connector

这一篇章,我想介绍一下tomcat容器中的连接器部分,并将tomcat4、tomcat6及tomcat8他们的连接器对比一下,看看做了哪些改进。1、首先我们再回顾一下模拟tomcat容器这个应用中连接器的代码public class Connector implements Runnable { Container container; public Containe...

2019-11-19 23:50:49 301

原创 1、初识tomcat整体脉络

首先我们知道tomcat是用java实现的Servlet规范的优秀的Servlet容器。从上图来看,tomcat对下接收了一个Http的网络请求,对上调用了Web应用实现的其中一个Servlet接口。tomcat调用应用的Servlet提供给应用一个ServletRequest和一个ServletResponse。这就是tomcat实现的核心功能,这样处理有什么好处?优点:容...

2019-11-19 20:22:08 99

原创 BM算法代码深入剖析

BM(Boyer-Moore)算法:是一种高效的字符串匹配算法,性能是相当之高,是KMP的几倍之多。术语在123456abc789中找abc主串:123456abc789为主串模式串:abc为字串BM算法思想通过增加匹配失败后一次移动的字符数,减少无效的匹配次数,从而增加匹配效率。如何在增加移动字符数BM算法充分利用了模式串的不变特性,和在发生不匹配时,已经匹配了的...

2019-08-27 15:40:34 1454

原创 springboot自动配置实战

1、首先设计一个属性获取类,该类是可以在application.yml中配置属性与功能的核心。@ConfigurationProperties(prefix="hello")public class HelloServiceProperties { private static final String MSG = "hello"; private String msg =...

2018-11-01 10:02:04 102

原创 springboot-静态资源默认访问路径顺序

META-INF/resources/hello.html hello.html内容META-INF/resources/hellostatic/hello.html hello.html内容static/helloresources/hello.html 内容resources/hellopublic/hello.html 内容public/hello访问http://local...

2018-10-22 12:56:23 2768

原创 spring源码阅读(2)-aop之源码解析篇

经过一个aop术语介绍和动态代理的深入讲解,我们终于可以来看aop的源码了,下面跟着博主一点点剖析spring aop源码的实现吧我们知道spring使用中我们只要做好相关的配置,spring自动帮我们做好了代理的相关工作。我们从三个方面入手吧1、配置2、创建代理3、获取代理类配置我们从AopNamespaceHandler入手,这个是自定义配置的实现类publi...

2018-10-20 16:37:06 137

原创 spring源码阅读(2)-aop之jdk动态代理深入解析

续spring源码阅读(2)-aop之j动态代理我们从需求作为动态代理发展的切入吧现在有5个已经投产了的run100m的实现,我们新的需求需要监控不同实现的运行性能,如果我们针对这五个实现分别去添加性能监控的代码,如此就造成两个问题:一个是已经稳定的代码需要重新测试,一个是设计上相同的代码出现在项目的各个地方,以后需要修改就需要修改5个地方,如果有新加实现就需要修改更多的处理点。...

2018-10-19 17:56:31 135

原创 spring源码阅读(2)-aop之动态代理

spring AOP动态代理使用的是运行期织入的动态代理方式:有java原生的动态代理和cglib动态代理两种方式可选,下面我们为这两种方式分别编写一个实例,并在原理上做一些较深的介绍。1、JAVA动态代理java的动态代理是基于接口方法的代理,先看一个java动态代理例子:我们先看下程序的类关系图吧 再来看看JdkDemo@Test public void pr...

2018-10-19 16:45:17 98

原创 spring源码阅读(2)-aop概念术语

既然想看aop了我想您应该知道AOP的,我先不介绍等我把几个术语介绍完也就清晰了1、连接点(Joinpoint)我这里就具象化了,这个连接点在spring中就是一个函数的前、后、环绕、返回、异常这些程序可以执行的点。两个信息:一个是方法、一个是方法的方位。2、切点(Pointcut)一个类可以有很多方法,每个方法可以有多个连接点,而切点就是定位方法,如果需要定位到连接点则需要提...

2018-10-18 22:10:20 78

原创 spring源码阅读(1)- ioc依赖注入之bean加载

还是先看下DefaultListableBeanFactory的类结构图 我们从User user = (User) beanFactory.getBean("user");入手进入bean的加载管理流程。这里还是坚持走主线的流程,去掉无关的枝叶,尽量让业务变得简单。开始进入代码,首先我们跟到AbstractBeanFactory这个类下面的doGetBeanprotecte...

2018-10-17 15:31:47 144

原创 spring源码阅读(1)- ioc依赖注入之bean解析

首先我们先大致对BeanDefinition做一个宏观功能上的了解:1、bean的实现类,(可通过实现类的全限定名反射 创建类对象)2、bean属性数据3、bean依赖(父类)4、行为配置-声明周期相关的init-method,destory-method可见BeanDefinition是实例化bean的核心信息。而XmlBeanDefinitionReader是sprin...

2018-10-17 00:14:53 93

原创 activemq故障1-扫码结果查询故障

故障描述中行扫码支付接入系统,并发量稍微高一点,就有不时出现查询任务发送了,但是没有线程接收到任务查询信息的故障。故障原因系统当时设置的消费者并发量是5个,采用了事务消息确认机制,使用了默认的prefetchSize,而事务的prefetchSize默认大小为1000个,(当broker有需要处理的消息后,主动push给某个线程)而我们的业务有这种问题,用户获取了支付页面,但并不支...

2018-10-11 09:54:31 235

原创 数据结构与算法分析-复杂度总结

复杂度作为数据结构与算法中的重中之重,我根据我的认识度做了如下思维导入的概括总结: 对思维导图感兴趣的可以点击下面链接下载:https://download.csdn.net/download/cygodwg/10694023 使用xmind制作...

2018-09-28 17:56:56 273

原创 spring获取资源的classpath与classpath*

二者区别用一个小应用示例说明吧:比如有三个模块一个模块对应一个配置文件,分别是module1.xml,module2.xml.module3.xml均放置到com.smart目录下。每个模块单独打成jar包,classpath*:com/smart/module*.xml能加载三个文件而classpath:com/smart/module*.xml只能加载一个文件。可见...

2018-09-19 10:49:04 145

原创 并发编程-发布与逸出

发布:对象能在当前作用域之外的代码中使用。发布方式:1、对象引用保存到其他地方2、public方法返回对象引用3、引用传递到其他方法某个不该发布的对象发布,这种情况成为逸出封装使得程序的正确性进行分析变得可能,这也是封装最重要的意图,安全的对象构造构造对象的过程中不要让this引用逸出,常见的是在构造函数中启动一个线程。启动线程后,新的线程能够访问该对象的this,...

2018-08-29 23:40:01 173

原创 volatile功能与原理

功能:volatile提供了稍弱的同步机制。被volatile修饰的变量可确保将变量的更新及时通知到其他线程。编译器不会针对volatile修改的变量与其他变量内存重排序。valatile不会缓存到寄存器。访问volatile不会执行加锁操作。使用volatile最亮眼的是它的可见性。从内存可见性角度看:读取volatile相当于进入同步代码、写入volatile变量相...

2018-08-29 16:14:45 257

原创 并发编程的安全性(2)

安全:安全的首先是正确的且是我们预期的,正确性:某个类的行为与其规范完全一致。在良好的规范中通常会定义各种不变性条件来约束对象的状态,以及定义各种后验条件来描述对象操作的结果。我们根据这些规范在单线程中运行获取正确的预期结果,代表这个程序的正确性,即所见即所知。而当多个线程同时访问某个类,这个类始终能保持其正确性,我们就认为这个类是线程安全的。(无状态对象一定是线程安全的)原子...

2018-08-29 14:02:39 91

原创 并发的安全问题1——前奏

进入并发安全性之前,我们得先了解几个概念。临界区:同一时刻,只能被一个线程访问的共享资源,实现临界区的方式很多,我们后面会有列出。阻塞、非阻塞:阻塞就是进入临界区之前,没占到坑位,你得排队,还不能走。非阻塞就是坑位被占,回去,过会来看看是否有线程在使用。进程:简单点,就是一个执行的应用。线程:一个进程下面的运行单元,一个进程下面可以有很多运行单元(多线程)共享变量:java是天...

2018-08-29 10:28:40 118

原创 千篇一律的啰嗦,不重要,也很重要

我们要了解几个问题为什么使用多线程?要充分利用系统的资源,在这个多核的时代,明明有一双手,非要单手干活,这可不做贱自己的能力么,当然作为资格的老程序员,深夜单手的干活还是非常有利的^-^.多线程是否就一定比单线程强?不一定,线程切换需要时间,这就要看切换的时间和多个线程并发所节省的时间哪个更多。多线程的弊端?并发编程真的很麻烦!需要我们下不少功夫。最大的问题就是多线程带...

2018-08-29 10:10:22 94

原创 JAVA I/O与java web编码全面分析

引子为什么要编码首先理解计算机的基本存储单元(byte),其最多能表达256个字符,而世界语言何其复杂,是远远大于256的,所以为了让计算机能表现各种语言,就需要编码。怎么编码:也就是约定翻译规范,下面简要概述一些我们比较常用的字符编码字符编码:1、ASICII:一个字节,128个码2、ISO-8859-1:一个字节,256个码GBK:两个字节,是中国的汉字编码...

2018-08-27 13:09:05 157

原创 vue class与style绑定

vue针对class和style的处理做了增强处理,表达式结果除了字符串还可以是对象或者数组。绑定html class&lt;div id="app"&gt;   &lt;div v-bind:class="{active: isActive}"&gt;active&lt;/div&gt;&lt;/div&gt;&lt;script src="https://cdn.jsdelivr.n

2018-06-23 22:21:03 278

原创 vue的计算属性与监听器

vue模板表达式里面是支持使用js表达式的,例如下面&lt;div id="example"&gt; {{ message.split('').reverse().join('') }}&lt;/div&gt;但如果这样使用了,模板不在是简单的声明式逻辑,阅读起来不在变得愉悦,我们要分析一下才能知道上面表的是将message反转。    我们要降低模板的复杂性,所有的需要复杂表达式的地方需要...

2018-06-23 17:09:51 386

原创 vue模板语法及操作

vue使用了基于html的模板语法,所有的vue.js的模板语法是合法的html。1、文本    使用了{{}}双大括号的形式&lt;span&gt;Message: {{ msg }}&lt;/span&gt;    {{msg}}会被替代为对应数据对象上的msg属性的值,并在绑定数据对象的msg发生改变,内容也会随之变化。    使用v-once指令,执行一次插值,之后不会变化。    &lt...

2018-06-23 01:00:30 299

转载 vue生命周期

每个vue在被创建的时候需要经过一系列的初始化过程-例如,设置数据监听、编译模板、实挂载到dom,数据变化更新dom,处于生命周期不同阶段运行生命周期钩子函数,也给我们添加自己代码的口子。new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 实例 console.log('a is: '...

2018-06-23 00:24:58 81

原创 vue组件化实现

vue允许使用小型、独立和可复用的组建构建大型的应用。vue一个组件本质上就是一个预定义的vue实例。&lt;body&gt;&lt;div id="app"&gt; &lt;ol&gt;   &lt;!-- 创建一个 todo-item 组件的实例 --&gt;   &lt;todo-item&gt;&lt;/todo-item&gt; &lt;/ol&gt;&lt;

2018-06-22 23:55:03 245

原创 vue的双向数据绑定

v-model:可轻松实现表单输入和应用状态之间的双向数据绑定&lt;div id="app-6"&gt; &lt;p&gt;{{ message }}&lt;/p&gt; &lt;input v-model="message"&gt;&lt;/div&gt;var app6 = new Vue({ el: '#app-6', data: { message:

2018-06-22 18:01:16 112

原创 vue的事件处理

vue不仅提供给我们数据绑定的功能,还让我们能够有可以处理事件的事件监听器。下面是例子   &lt;div id="app-5"&gt; &lt;p&gt;{{ message }}&lt;/p&gt; &lt;button v-on:click="reverseMessage"&gt;逆转消息&lt;/button&gt;&lt;/div&gt;var app

2018-06-22 17:55:31 137

原创 vue.js的条件和循环

vue工具也有自己的if,else,下面是使用例子&lt;div id="app-3"&gt; &lt;p v-if="seen"&gt;当seen=true能看到我,seen=false看不到我&lt;/p&gt;&lt;/div&gt;var app = new Vue({ el: '#app-3', data: { seen: true }})当seen为true...

2018-06-22 17:32:36 248

原创 vue之hello world

&lt;div id="app"&gt; {{ message }}&lt;/div&gt;var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }});结果显示:Hello Vue       可以看出数据被渲染入页面,vue.js核心就是能够动态渲染数据的系统,我们客户尝试修改app.message的...

2018-06-22 16:35:25 153

原创 URI编码方法

有效的URI不能包含一些特殊字符,例如空格。因此需要对URI进行编码处理让浏览器能够接受。 Global对象的encodeURI和encodeURIComponent都可以对URI进行编码,encodeURI主要用于整个URI,其不会对本身属于URI的特殊字符进行编码。例如冒号、正斜杠、问好和井字号encodeURIComponent主要用于URI中的某一字段进行编码,其会对发

2017-12-18 10:53:24 220

reflection.zip

mybatis反射组件,这里模拟mybatis的组件,并结合mybatis底层的功能,帮助我们简单清晰理解mybatis的MetaClass、ObjectWrapper、MetaObject三个模块

2020-04-08

mybatis1.zip

mybatis解析模块解析器的简单实现,

2020-04-07

简单的tomcat实现1

手写tomcat,模拟tomcat数据处理脉络,针对tomcat容器的关键部分提取核心代码,通过浅显的代码,讲述tomcat连接器与容器之间的关系

2019-11-19

算法复杂度分析总结思维图

该思维导图全面深入地总结了算法中的复杂度分析,帮住想了解这块的朋友有较清晰的思路学习这块,或者根据该图做简要的回顾复习。

2018-09-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除