自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(200)
  • 收藏
  • 关注

原创 (源码解析)mybatis调用链之获取对应mapper动态代理对象

可以看出,getMapper方法从knownMappers中获取到MapperProxyFactory对象,调用MapperProxyFactory的newInstance方法。从Configuration的mapper接口的动态代理注册中心MapperRegistry中获取,调用MapperRegistry的getMapper方法。初始化MapperProxy实例对象,MapperProxy类实现了InvocationHandler接口,它是增强mapper接口的实现。这里以SqlSession实现类。

2024-01-02 17:56:47 483

原创 (源码解析)mybatis调用链之XMLMapperBuilder解析Mapper

其次创建MapperBuilderAssistant对象,用于辅助XMLMapperBuilder和XMLStatementBuilder解析mapper.xml文件,完善属性信息,并注册到configuration对象。上述cache解析即为解析二级缓存,若是配置了二级缓存,则会通过builderAssistant创建缓存对象,并添加至configuration。parse方法中,首先判断判断是否已经加载该配置文件,若未加载,贼进入configurationElement方法,开始处理mapper节点。

2024-01-02 17:32:03 1271

原创 源码解析:mybatis调用链之执行sql语句并返回结果(一级缓存和二级缓存解析)

多结果集的处理不是重点,暂时不分析。的execute方法,实际上,是执行PreparedStatement的代理对象,由于我们使用PreparedStatementLogger对该对象进行代理,进入PreparedStatementLogger代理类,执行invoke方法,是Executor(BaseExecutor)的属性,而每一个Executor又属于一个SqlSession,所以说一级缓存属于SqlSession级别的,由key(是根据sql语句、入参等算出来的唯一值)值区分。

2023-12-28 10:02:38 894

原创 源码解析:mybatis调用链之XMLStatementBuilder解析解析sql语句节点

首先XMLStatementBuilder类继承于BaseBuilder,与XMLStatementBuilder、XMLConfigBuilder一样调用BaseBuilder构造方法,初始化属性configuration、typeAliasRegistry、typeHandlerRegistry值。默认查询的时候,不需要清除,其他操作都要清除。此处可以看到,MappedStatement中使用了MapperBuilderAssistant对象的currentCache(二级缓存)。

2023-12-28 09:37:24 744

原创 源码解析:mybatis调用链之获取sqlSession

BatchExecutor、ReuseExecutor、SimpleExecutor都继承于BaseExecutor抽象类,BaseExecutor主要用于为一些基础属性如configuration、transaction等赋初始值。在wrap方法中,可以看到,会根据@Intercepts的信息以及目标对象的信息,判断是否需要对该对象进行拦截代理。1)调用Configuration对象方法newExecutor进行创建,根据executorType选择相应的Executor实现类,这里以选择默认的。

2023-12-28 09:29:17 625

原创 混沌的热状态

在第一章里,我们接触了牛顿所描述的太阳系个简单的、可预测的“钟表式”体系。在这一章里,我们涉及的则是一个内含约10的23次方个各自随意飞舞的分子的体系。对于这样的体系,我们永远不可能了解其所有细节。不过,对于它的某些统计学性质,我们还是能够把握得到的。牛顿的太阳系之所以简单,是两个幸运的情势所致。其一,是太阳比所有的行星都重得多,因而,任何一颗行星所受到的来自其他行星的引力作用,都比太阳对它的引万小得多。这样,对每颗行星运行轨道按照其不受其它行星的作用的方式计算,其结...

2022-03-27 20:58:42 157

原创 开普勒:不复为圆

亚里士多德物理学中有一项内容,在哥白尼和伽利略之后还在被人们接受着,这就是圆形运动的天然性。事实上,开普勒(Johann Kepler,1571一1630)已经指出,如果行星的运行路径是椭圆而不是正圆的话,形势就会更容易理解——本轮之类的东西就都用不着了。开普勒在1600年当上了丹麦大天文学家第谷的助手,随后又接替了后者的职务在布拉格任德皇鲁道夫二世15(RudolfⅡ)的宫廷数学家,直至1612年。[在此之前,丹麦国王群特烈二世(FrederickⅡ)将一个名叫哈芬的岛屿,拨给第谷营造宏大...

2022-03-26 17:04:55 349

原创 伽利略的世界体系

伽利略于1564年出生于比萨,1592年成为帕多瓦大学的数学教授。1609年,自己制作了一架放大率为20倍的望远镜,而且将它利用到了天文观测上。他发现月亮也像地球一样,有着高低不平的表面,还发现木星有4颗卫星。他还看出金星也和月亮一样会出现盈亏,当它相对于地球而言位于太阳另一面时便处于盈态。而当时托勒密体系认为,金星应当处于在介于太阳和地球之间的位置上,因此永远也不会呈现这种盈态。1632年,伽利略发表了《关于托勒密和哥白尼两大世界体系的对话》,为哥白尼呐喊。而然在,1633年,伽利略被...

2022-03-26 16:07:17 313

原创 哥白尼-进入表象之下

哥白尼,出生在1473年,是一名波兰教士。哥白尼发展了太阳系的日心说,认为地球只是一颗与其他所有行星处于同等地位的行星。在位于金星和火星之间的位置上环绕太阳运动。有了日心说体系,许多东西都能对得上号了,行星之所以有时候会表现得相对于恒星的反其道而行的逆行运动。,其实是地球本身向前的行进,造成行星相对而言有时候看上去似乎是在倒退的表象。在托勒密的体系中,所有行星的所在位置离开地球距离的次序有一定的任意性,而在哥白尼的体系中,行星距太阳远近的顺序则有了自然的安排,即巡行周期越...

2022-03-26 13:23:16 141

原创 深入理解synchronized锁升级过程

1.简介在Java高并发系统中,我们常常需要使用多线程技术来提高系统的运行速度,而多线程带来的数据安全问题就是我们必须要解决的问题。在Java中,可以使用synchronized关键字来实现多线程并发中的数据安全问题。这里简单介绍下synchronized的三种用法:修饰实例方法:以实例对象作为锁,进入同步代码前需要获得当前实例对象的锁修饰类方法(static修饰的方法):以类对象为锁,进入同步代码块前需要获得当前类对象的锁修饰代码块:需要指定一个锁对象(既可以是实例对象,也..

2021-04-02 10:27:52 378 1

原创 索引常用使用原则以及原理解析(明白这些你再也不需要去死记硬背索引使用原则了)

如上图所示,主键索引是排序的普通索引是通过字段值进行排序,然后其data中存储的是主键值1、索引不会包含null的列因为在索引底层是依靠字段的值来进行构建索引的,所以对于一个值为null的索引,是不会放在索引中的,因此不可避免会进行全表扫描2、尽量使用短列索引因为对于较短的列在转化为ascll码时存储占用空间更小3、索引值排序 如果where子句中已经使用了索引,那么后面的order by 索引是不会生效的因为此数据库索引底层默认是排序的...

2020-05-09 16:52:30 947 1

原创 windows执行bat文件闪退情况解决

出现闪退的情况,有很大一部分是因为执行的过程中报错了,但是由于闪退,我们又无法观察到报错的原因。在bat脚本的最后一行,添加pause,这样在报错的时,不会发生闪退现象,我们也可以看到报错日志,根据错误找原因。...

2020-04-17 14:10:49 13514 1

原创 消息中间件深度解析

常用的消息中间件有:activateMQ、rabbitMQ、Kafka、RocketMQ消息中间件在架构方面主要用于解决架构的伸缩性和扩展性。符合开闭原则:扩展开放、修改封闭如果使用传统的RPC去进行消息传递,务必回导致这样的问题:当我们下了订单之后,服务端可能会除了进行相关业务处理,还需要发送邮件,发送短信,如果将这些过程使用传统RPC结构去实现,那么会导致我们下了订单之后,还需要等...

2020-04-08 10:52:45 288

原创 谈谈索引的底层原理

都知道数据库建立索引可以在一定程度上提高查询效率。但是为什么呢?很多人并不知情。索引使用原则网络上那么多条,如果要靠死记硬背,太生范,进而导致我们在使用的时候会感觉艰难,其实可以从底层原理上去理解这些规则。首先我们要知道,查询是信息的获取。在获取信息的时候,我们有时候可以很容易获得,有时候却很难。比如,你想要知道一条绝密的信息,如果光是凭借你自己去寻找答案,可能会找到,但是需要花费你巨...

2020-04-03 20:21:39 1865

原创 zookeeper实现服务注册与发现、分布式锁、配置中心以及集群选举的原理和实践

服务注册与发现:所谓的服务注册与发现,就是提供服务的服务进行注册,使用服务的服务进行发现。例如一个应用有两个模块,订单和产品,做成分布式的两个服务,订单需要获取产品中的服务这个时候,产品服务需要将自身的信息(ip和port)添加到zk中去,这个过程就叫做服务注册。实现:首先,一个产品服务在启动的时候,会获取自身的IP地址和服务的port,然后连接zk服务端,在某个特定的目录下,...

2020-03-26 16:59:16 579

原创 架构改进中常见的解决方案

架构的依据:并发量和数据量1.使用缓存技术,例如redis、memached2、横向拓展(使用集群)3、拆分高负荷服务、独立为单一模块,构建分布式4、大表数据切片(分库、分区、分表)5、使用搜索中间件(solr、elasticsearch)架构解决之session跨域共享问题1、负载使用hash(ip)简单说就是在当一个客户端进行访问的时候,负载在为其分配一个...

2020-03-25 14:54:12 460

原创 集群、分布式以及springCloud的区别

集群与分布式最形象的特征如下图:实际上的用处如下:如下图所示,集群是指将整个应用复制几份,部署在不同的服务器上分布式是将整个应用拆封出来,按照功能分成不同的部分,部署在不同的服务器上,并且这些独立出来的部分如果有需要,也可以复制几份,进行集群,部署在不同的服务器上最下面的订单部分,是在整个订单服务支撑不下去的时候,再次分成不同的两部分,再次分布式紧接着分布式,产...

2020-03-25 13:57:34 1232

原创 mysql数据库还原备份只有表无数据

可能的原因是启用了数据库事务导致1.还原备份时选择高级2.将使用事务取消勾选,勾上遇到错误继续3.问题解决

2020-03-18 16:16:42 2365

转载 司马相如——草根逆袭凭借千古情诗赢得白富美,从此走向人生巅峰

司马相如的人生历程,从最初的买官后不得志、跳槽、失业,到成功策划炒作成名,然后以琴撩妹、拐骗少女私奔、当垆卖酒,迫使卓氏家族接纳自己,获得大量钱财加入富人集团,最后弃商从政,开启人生新的一页,财色并蓄,名利双收,完成从穷苦屌丝到成功人士的华丽转身。西汉年间,四川临邛县发生了一件大事,卓氏集团总裁卓王孙的女儿跟人私奔了。消息传出,全县轰动,一时成为街头巷尾人们热议的话题。卓王孙是全国首富...

2020-02-24 19:40:02 1599

原创 python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multi

python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequencepython读取文件时提示"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 20...

2019-12-26 09:10:04 208

原创 为什么要使用redis

redis该怎么用最近一些人在介绍方案时,经常会出现redis这个词,于是很多小伙伴百度完redis也就觉得它是一个缓存,然后项目里面把数据丢进去完事,甚至有例如将实体属性拆分塞进redis hash里面的奇怪用法等等!原因是什么呢?大家觉得redis火,使用了redis项目就是高大上的,于是不管三七二十一,项目里用上强塞一个用上!这里本人想说的是你知道redis为什么这么火么,应该怎么用么?...

2019-12-12 08:59:20 342

原创 Nginx 在 Linux 下安装与搭建集群

Nginx 在 Linux 下安装与搭建集群搭建集群图例集群搭建图如下,为了简单一点,使用一个Nginx服务器+两个Tomcat服务器,省略数据库部分:环境说明Linux 为 CentOS 7.2 发行版 + Java jdk 1.8 + Tomcat 1.8 + Nginx 1.15Linux 下安装 Nginx下载nginx的tar包...

2019-12-11 17:23:00 186

原创 linux中./和sh的区别

sh是一个shell。运行sh a.sh,表示我使用sh来解释这个脚本;如果我直接运行./a.sh,首先你会查找脚本第一行是否指定了解释器,如果没指定,那么就用当前系统默认的shell(大多数linux默认是bash),如果指定了解释器,那么就将该脚本交给指定的解释器比如a.run文件内容是这个: 1 2 #!/usr/bin/python ...

2019-12-10 15:24:39 11865 2

原创 单页面应用程序

对SPA(单页面应用)的总结1、单页面应用(SPA)的概念:1、single-page application是一种特殊的Web应用。它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML、JavaScript、CSS。一旦页面加载完成,SPA不会因为用户的操作而进行页面的重新加载或跳转,而是利用JavaScript动态的变换HTML(采用的是div切换显示和隐...

2019-11-11 17:37:11 231

原创 vue学习之组件

1、组件中可以有自己的data2、组件的data和实例的data有点不一样,实例中的data可以为一个对象,但是组件中的data必须是一个方法3、组件中的data除了必须为一个方法外,这个方法内部,还必须返回一个对象才行4、组建中的data使用和实例中的data使用方式完全一样5.为什么组件的data必须是一个function因为如果不定义成function,并且返回一...

2019-10-22 09:38:56 126

原创 vue之搭建cli环境

1.v-model绑定input中的value值2.安装vue-cli (1).安装node.js (2)安装 vue-cli安装好了 node,我们可以直接全局安装 vue-cli:npm install -g vue-cli3.首先需要在命令行中进入到项目目录,然后输入:vue init webpack Vue-Project然后进入项目目录...

2019-10-16 18:23:19 242

原创 习题课

列表中字符串一般是不能操作的对于字符串的操作:startswith()以什么开头endswith()以什么结尾index()find()检索,返回位置,找不到报错count()查找一个子串出现了多少次isupper()检测所有字母是否都是大写isspace()检测字符串是否是空字符串istitle()isalpha()检测一个字符串是否是字母组成 返回布尔值isdigit(...

2019-10-11 16:07:38 156

原创 成长记录

在2018年的最后一天,21.18经过多次调试,查找错误,废了我好大功夫,我的第一个爬虫终于在此时此刻完成了,虽然简单,但是确实是一个良好的开始!明年我的本命年,一定是我的大改变之年,我在此立誓!来吧,明年的风雪!...

2019-10-11 16:07:25 178

原创 java内部类和匿名内部类

Java 内部类分四种:成员内部类、局部内部类、静态内部类和匿名内部类。1、成员内部类: 即作为外部类的一个成员存在,与外部类的属性、方法并列。注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。public class Outer{private static int i = 1;private int j=10;private int k=20;public sta...

2019-10-11 16:07:11 105

原创 HTML学习

表单提交get与post两种方式的优缺点get:get是从服务器上获取数据,post是向服务器传送数据;get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB;get安全性非常低,post安全性较高。但是执行效率却比Post方法好;get是把参数数据队列加到提交表单的ACTION属性所...

2019-10-11 16:06:55 121

原创 Jquery

static webjQuery是JavaScript的一个库

2019-10-11 16:06:48 225

原创 终极宇宙-宇宙风暴

土卫六的甲烷雨木星的超级飓风 绝对禁区

2019-10-11 16:06:40 141

原创 终极地球-宇宙风暴

木星的超级飓风 绝对禁区太阳耀斑日冕(大气层)物质喷射高温等离子云磁层 保护我们免受太阳的危害日球层 保护我们免受银河系中心的宇宙射线的危害...

2019-10-11 16:05:38 168

原创 MySql高级之触发器、存储过程、游标

触发器的使用: 什么是触发器? 是一类特殊的事务,可以监测某种数据操作--update insert delete 并触发相关操作 比如我们在商城购买一件东西的时候,购买后,要让相应的商品库存自动减一,此时就可以使用触发器。当然,也可以使用 update去使得库存数量发生变化trigger枪机 触发 引起的意思 四个要点: 监视...

2019-09-30 14:06:06 254

原创 为什么集合中不能放入基本数据类型?

java中泛型必须是类不能是基本数据类型集合中使用泛型,所以只能放如引用数据类型,不能放入基本数据类型使用ava泛型应该注意如下几点:①在定义一个泛型类时,在“<>”之间定义形式类型参数,例如:“class TestGen<K,V>”,其中“K”,“V”不代表值,而是表示类型。②实例化泛型对象时,一定要在类名后面指定类型参数的值(类型),一共要有两...

2019-09-29 19:19:45 4549 1

转载 为什么String要设计成不可变的?

2018.03.03 13:14:48字数 575阅读 5141. 字符串常量池的需要字符串常量池(String pool,String intern pool, String保留池) 是Java堆内存中一个特殊的存储区域, 当创建一个String对象时,假如此字符串值已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象。如下面的代码所示,将会在堆内存中只创建一个实...

2019-09-29 11:01:08 286

原创 Hibernate3.x openSession()与getCurrentSession()得到的连接的区别

测试1:openSession在不开启事务的情况下执行操作Session session= SessionFactoryUtil.openSession(); (1):session.get(UserInfo.class,14L); //执行成功,得到数据 (2):session.delete(new UserInfo(16L)); //执行成功 但数据库数据...

2019-09-28 16:31:05 112

原创 mySQL和oracle的数据类型区别?

1)MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE2)MYSQL: float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位      int(m) 4个字节 范围(-2147483648~2147483647)      double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位      char(n) ...

2019-09-26 16:58:57 881

转载 泛型

泛型<E> 1.使用泛型的好处  1.可以统一数据类型,便于操作。  2.将运行时的异常提前到了编译时,提高了效率。  3.避免了强制类型转换  4.实现代码的模板化,把数据类型当作参数传递,提高了可重用性。 2.泛型的定义  1.定义在类上public class MyClass1<E> { /* * 定义具有泛型的...

2019-09-25 22:09:52 166

原创 什么是数据库的存储过程?

存储过程就是将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,并且这样的语句是放在数据库中的,还可以根据条件执行不同SQL语句, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 存储过程的优点 1.存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以...

2019-09-24 22:22:45 8192

空空如也

空空如也

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

TA关注的人

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