- 博客(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 175
原创 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 294
原创 mybatis初始化配置——反射组件
这篇我准备介绍下mybatis另一个基础支撑组件,反射组件组。1、Reflector我们来看下Reflector类的属性和构造器,通过属性和构造器我们基本上就能了解Reflector这个类了public class Reflector { private final Class<?> type; private final String[] readableP...
2020-04-08 16:11:28 265
原创 mybatis配置阶段—— xml解析工具
概述接下来我们进入mybatis的初始化配置阶段。配置阶段就是读取mybatis的配置文件及我们编写的XML文件。在讲解mybatis的初始化配置之前,我们先了解初始化配置阶段要用到的基础支撑组件。这一篇讲解的是xml文件解析器组件DOMjava编程中我们常见的XML解析方式有三种:- DOM解析方式:加载整个XML到内存构建DOM树,数据量较大时,较消耗内存- S...
2020-04-07 20:05:04 403
原创 mybatis的世界观
mybatis的世界观mybatis是什么?书面定义:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录。mybatis是一个持久层的框架,也就是操作数据库的框架。...
2020-04-07 16:14:32 142
原创 spring IOC核心类DefaultListableBeanFactory的世界观
IOC作为Spring的核心功能其核心思想:帮用户管理对象,对象的创建不需要再由应用实现,而是交给了spring来管理。也就是对象的控制交给了第三方,也就是控制反转的由来。下面是Spring IOC核心工厂类的结构图从这个类结构图我们可以看出DefaultListableBeanFactory实现了哪些功能1、 是一个BeanDefinition注册器2、 最重要的它是一个...
2019-12-13 17:23:12 197
原创 6、tomcat容器-host、engine
1、容器的功能host:虚拟主机容器,用来区分不同的请求urlengine:管理host的引擎他们都是相对比较简单的,Engine获取对应的Host,Host获取对应的Context,对应的映射功能还是在连接器中的适配器中完成。所以这里不打算花费较大精力来讲解这个,我们只要了解到他们的关系就好了。其中有个小功能我们稍微注意一下,Request的监听器的触发是在Host的基础阀中...
2019-11-21 16:55:57 139
原创 5 tomcat容器-context
1、context容器是什么?直观上面看,context容器就是tomcat的webapps下面的一个应用java的web应用,你是不是一下就想到了servlet,filter,listener这三大神器。context容器就是管理它们的。这篇博文就是了解context如何管理它们的从功能是我们回顾一下servlet:处理能匹配到的请求的类fiter:针对指定请求必须经过的...
2019-11-21 15:07:28 169
原创 4 tomcat容器-wrapper
wrapper是什么wrapper是包装了一个应用实现Servlet类的容器的包装类,管理了这个Servlet的实例化和,初始化,调用及销毁。介绍Wrapper之前我要先说明一下我要过滤掉的几个比较重要的内容1、SingleThreadMode实现了这个类的Servlet,tomcat保证不会有两个线程同时调用同一个该servlet实例,现在已经弃用,因其有误导性,导致很多人以为这...
2019-11-20 21:50:06 249
原创 3 tomcat容器先导篇--管道
一、管道存在意义认为管道是连接Connector与Servlet的关键组件,我们可以把管道想象成一个流水线,每个容器都持有一个子流水线,整个调用流程如图:可以看到,连接器处理好数据到调用Servlet的service,经过了哪些容器的管道,这些管道组装在一起,仿佛就是一个大管道直接连通connector与Servlet。继续看看每个容器管道是怎么进来怎么出去的。先看下管道接口的...
2019-11-20 15:43:54 99
原创 2、连接器Connector
这一篇章,我想介绍一下tomcat容器中的连接器部分,并将tomcat4、tomcat6及tomcat8他们的连接器对比一下,看看做了哪些改进。1、首先我们再回顾一下模拟tomcat容器这个应用中连接器的代码public class Connector implements Runnable { Container container; public Containe...
2019-11-19 23:50:49 317
原创 1、初识tomcat整体脉络
首先我们知道tomcat是用java实现的Servlet规范的优秀的Servlet容器。从上图来看,tomcat对下接收了一个Http的网络请求,对上调用了Web应用实现的其中一个Servlet接口。tomcat调用应用的Servlet提供给应用一个ServletRequest和一个ServletResponse。这就是tomcat实现的核心功能,这样处理有什么好处?优点:容...
2019-11-19 20:22:08 108
原创 BM算法代码深入剖析
BM(Boyer-Moore)算法:是一种高效的字符串匹配算法,性能是相当之高,是KMP的几倍之多。术语在123456abc789中找abc主串:123456abc789为主串模式串:abc为字串BM算法思想通过增加匹配失败后一次移动的字符数,减少无效的匹配次数,从而增加匹配效率。如何在增加移动字符数BM算法充分利用了模式串的不变特性,和在发生不匹配时,已经匹配了的...
2019-08-27 15:40:34 1495
原创 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 113
原创 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 2789
原创 spring源码阅读(2)-aop之源码解析篇
经过一个aop术语介绍和动态代理的深入讲解,我们终于可以来看aop的源码了,下面跟着博主一点点剖析spring aop源码的实现吧我们知道spring使用中我们只要做好相关的配置,spring自动帮我们做好了代理的相关工作。我们从三个方面入手吧1、配置2、创建代理3、获取代理类配置我们从AopNamespaceHandler入手,这个是自定义配置的实现类publi...
2018-10-20 16:37:06 147
原创 spring源码阅读(2)-aop之jdk动态代理深入解析
续spring源码阅读(2)-aop之j动态代理我们从需求作为动态代理发展的切入吧现在有5个已经投产了的run100m的实现,我们新的需求需要监控不同实现的运行性能,如果我们针对这五个实现分别去添加性能监控的代码,如此就造成两个问题:一个是已经稳定的代码需要重新测试,一个是设计上相同的代码出现在项目的各个地方,以后需要修改就需要修改5个地方,如果有新加实现就需要修改更多的处理点。...
2018-10-19 17:56:31 159
原创 spring源码阅读(2)-aop之动态代理
spring AOP动态代理使用的是运行期织入的动态代理方式:有java原生的动态代理和cglib动态代理两种方式可选,下面我们为这两种方式分别编写一个实例,并在原理上做一些较深的介绍。1、JAVA动态代理java的动态代理是基于接口方法的代理,先看一个java动态代理例子:我们先看下程序的类关系图吧 再来看看JdkDemo@Test public void pr...
2018-10-19 16:45:17 111
原创 spring源码阅读(2)-aop概念术语
既然想看aop了我想您应该知道AOP的,我先不介绍等我把几个术语介绍完也就清晰了1、连接点(Joinpoint)我这里就具象化了,这个连接点在spring中就是一个函数的前、后、环绕、返回、异常这些程序可以执行的点。两个信息:一个是方法、一个是方法的方位。2、切点(Pointcut)一个类可以有很多方法,每个方法可以有多个连接点,而切点就是定位方法,如果需要定位到连接点则需要提...
2018-10-18 22:10:20 89
原创 spring源码阅读(1)- ioc依赖注入之bean加载
还是先看下DefaultListableBeanFactory的类结构图 我们从User user = (User) beanFactory.getBean("user");入手进入bean的加载管理流程。这里还是坚持走主线的流程,去掉无关的枝叶,尽量让业务变得简单。开始进入代码,首先我们跟到AbstractBeanFactory这个类下面的doGetBeanprotecte...
2018-10-17 15:31:47 157
原创 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 104
原创 activemq故障1-扫码结果查询故障
故障描述中行扫码支付接入系统,并发量稍微高一点,就有不时出现查询任务发送了,但是没有线程接收到任务查询信息的故障。故障原因系统当时设置的消费者并发量是5个,采用了事务消息确认机制,使用了默认的prefetchSize,而事务的prefetchSize默认大小为1000个,(当broker有需要处理的消息后,主动push给某个线程)而我们的业务有这种问题,用户获取了支付页面,但并不支...
2018-10-11 09:54:31 257
原创 数据结构与算法分析-复杂度总结
复杂度作为数据结构与算法中的重中之重,我根据我的认识度做了如下思维导入的概括总结: 对思维导图感兴趣的可以点击下面链接下载:https://download.csdn.net/download/cygodwg/10694023 使用xmind制作...
2018-09-28 17:56:56 285
原创 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 152
原创 并发编程-发布与逸出
发布:对象能在当前作用域之外的代码中使用。发布方式:1、对象引用保存到其他地方2、public方法返回对象引用3、引用传递到其他方法某个不该发布的对象发布,这种情况成为逸出封装使得程序的正确性进行分析变得可能,这也是封装最重要的意图,安全的对象构造构造对象的过程中不要让this引用逸出,常见的是在构造函数中启动一个线程。启动线程后,新的线程能够访问该对象的this,...
2018-08-29 23:40:01 182
原创 volatile功能与原理
功能:volatile提供了稍弱的同步机制。被volatile修饰的变量可确保将变量的更新及时通知到其他线程。编译器不会针对volatile修改的变量与其他变量内存重排序。valatile不会缓存到寄存器。访问volatile不会执行加锁操作。使用volatile最亮眼的是它的可见性。从内存可见性角度看:读取volatile相当于进入同步代码、写入volatile变量相...
2018-08-29 16:14:45 288
原创 并发编程的安全性(2)
安全:安全的首先是正确的且是我们预期的,正确性:某个类的行为与其规范完全一致。在良好的规范中通常会定义各种不变性条件来约束对象的状态,以及定义各种后验条件来描述对象操作的结果。我们根据这些规范在单线程中运行获取正确的预期结果,代表这个程序的正确性,即所见即所知。而当多个线程同时访问某个类,这个类始终能保持其正确性,我们就认为这个类是线程安全的。(无状态对象一定是线程安全的)原子...
2018-08-29 14:02:39 103
原创 并发的安全问题1——前奏
进入并发安全性之前,我们得先了解几个概念。临界区:同一时刻,只能被一个线程访问的共享资源,实现临界区的方式很多,我们后面会有列出。阻塞、非阻塞:阻塞就是进入临界区之前,没占到坑位,你得排队,还不能走。非阻塞就是坑位被占,回去,过会来看看是否有线程在使用。进程:简单点,就是一个执行的应用。线程:一个进程下面的运行单元,一个进程下面可以有很多运行单元(多线程)共享变量:java是天...
2018-08-29 10:28:40 130
原创 千篇一律的啰嗦,不重要,也很重要
我们要了解几个问题为什么使用多线程?要充分利用系统的资源,在这个多核的时代,明明有一双手,非要单手干活,这可不做贱自己的能力么,当然作为资格的老程序员,深夜单手的干活还是非常有利的^-^.多线程是否就一定比单线程强?不一定,线程切换需要时间,这就要看切换的时间和多个线程并发所节省的时间哪个更多。多线程的弊端?并发编程真的很麻烦!需要我们下不少功夫。最大的问题就是多线程带...
2018-08-29 10:10:22 100
原创 JAVA I/O与java web编码全面分析
引子为什么要编码首先理解计算机的基本存储单元(byte),其最多能表达256个字符,而世界语言何其复杂,是远远大于256的,所以为了让计算机能表现各种语言,就需要编码。怎么编码:也就是约定翻译规范,下面简要概述一些我们比较常用的字符编码字符编码:1、ASICII:一个字节,128个码2、ISO-8859-1:一个字节,256个码GBK:两个字节,是中国的汉字编码...
2018-08-27 13:09:05 170
原创 vue class与style绑定
vue针对class和style的处理做了增强处理,表达式结果除了字符串还可以是对象或者数组。绑定html class<div id="app"> <div v-bind:class="{active: isActive}">active</div></div><script src="https://cdn.jsdelivr.n
2018-06-23 22:21:03 286
原创 vue的计算属性与监听器
vue模板表达式里面是支持使用js表达式的,例如下面<div id="example"> {{ message.split('').reverse().join('') }}</div>但如果这样使用了,模板不在是简单的声明式逻辑,阅读起来不在变得愉悦,我们要分析一下才能知道上面表的是将message反转。 我们要降低模板的复杂性,所有的需要复杂表达式的地方需要...
2018-06-23 17:09:51 401
原创 vue模板语法及操作
vue使用了基于html的模板语法,所有的vue.js的模板语法是合法的html。1、文本 使用了{{}}双大括号的形式<span>Message: {{ msg }}</span> {{msg}}会被替代为对应数据对象上的msg属性的值,并在绑定数据对象的msg发生改变,内容也会随之变化。 使用v-once指令,执行一次插值,之后不会变化。 <...
2018-06-23 01:00:30 315
转载 vue生命周期
每个vue在被创建的时候需要经过一系列的初始化过程-例如,设置数据监听、编译模板、实挂载到dom,数据变化更新dom,处于生命周期不同阶段运行生命周期钩子函数,也给我们添加自己代码的口子。new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 实例 console.log('a is: '...
2018-06-23 00:24:58 88
原创 vue组件化实现
vue允许使用小型、独立和可复用的组建构建大型的应用。vue一个组件本质上就是一个预定义的vue实例。<body><div id="app"> <ol> <!-- 创建一个 todo-item 组件的实例 --> <todo-item></todo-item> </ol><
2018-06-22 23:55:03 267
原创 vue的双向数据绑定
v-model:可轻松实现表单输入和应用状态之间的双向数据绑定<div id="app-6"> <p>{{ message }}</p> <input v-model="message"></div>var app6 = new Vue({ el: '#app-6', data: { message:
2018-06-22 18:01:16 119
原创 vue的事件处理
vue不仅提供给我们数据绑定的功能,还让我们能够有可以处理事件的事件监听器。下面是例子 <div id="app-5"> <p>{{ message }}</p> <button v-on:click="reverseMessage">逆转消息</button></div>var app
2018-06-22 17:55:31 146
原创 vue.js的条件和循环
vue工具也有自己的if,else,下面是使用例子<div id="app-3"> <p v-if="seen">当seen=true能看到我,seen=false看不到我</p></div>var app = new Vue({ el: '#app-3', data: { seen: true }})当seen为true...
2018-06-22 17:32:36 264
原创 vue之hello world
<div id="app"> {{ message }}</div>var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }});结果显示:Hello Vue 可以看出数据被渲染入页面,vue.js核心就是能够动态渲染数据的系统,我们客户尝试修改app.message的...
2018-06-22 16:35:25 175
原创 URI编码方法
有效的URI不能包含一些特殊字符,例如空格。因此需要对URI进行编码处理让浏览器能够接受。 Global对象的encodeURI和encodeURIComponent都可以对URI进行编码,encodeURI主要用于整个URI,其不会对本身属于URI的特殊字符进行编码。例如冒号、正斜杠、问好和井字号encodeURIComponent主要用于URI中的某一字段进行编码,其会对发
2017-12-18 10:53:24 236
reflection.zip
2020-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人