- 博客(41)
- 收藏
- 关注
原创 SpringIOC源码解析
可以看到AbstractRefreshableApplicationContext类在执行refreshBeanFactory方法时会销毁之前的容器,然后重新创建一个。接下来的原理分析都以AnnotationConfigApplicationContext类作为案例// 使用构造函数进行Bean的初始化(这里面会有构造函数推断的逻辑,与自动注入模型有关) if(instanceWrapper == null) {/*** 三级缓存,是否需要提早曝光。
2023-07-06 08:59:28 299
原创 七、插件机制
我们看到 DemoPlugin 这个示例类除了实现 Interceptor 接口外,还被标注了 @Intercepts 和 @Signature 两个注解。@Intercepts 注解中可以配置多个 @Signature 注解,@Signature 注解用来指定 DemoPlugin 插件实现类要拦截的目标方法信息,其中的 type 属性指定了要拦截的类,method 属性指定了要拦截的目标方法名称,args 属性指定了要拦截的目标方法的参数列表。
2023-02-11 17:04:30 782
原创 六、mybatis与spring的整合
spring整合mybatis分为两个方面,一个是加载配置以及mapper实例的初始化,这一块主要通过SqlSessionFactoryBean以及MapperFactoryBean来实现,另一方面是执行流程,通过SqlSessionTemplate以及SqlSessionInterceptor实现。
2023-02-11 17:03:34 801
原创 五、StatementHandler参数绑定、SQL 执行和结果映射处理器
StatementHandler 接口是 MyBatis 中非常重要的一个接口,其实现类完成 SQL 语句执行中最核心的一系列操作。StatementHandler 接口的定义如下图所示:可以看到,其中提供了创建 Statement 对象(prepare() 方法)、为 SQL 语句绑定实参(parameterize() 方法)、执行单条 SQL 语句(query() 方法和 update() 方法)、批量执行 SQL 语句(batch() 方法)等多种功能。
2023-02-07 22:28:54 681
原创 四、Executor执行器【无标题】
Executor 接口定义了数据库操作的基本方法,其中 query*() 方法、update() 方法、flushStatement() 方法是执行 SQL 语句的基础方法,commit() 方法、rollback() 方法以及 getTransaction() 方法与事务的提交/回滚相关,clearLocalCache() 方法、createCacheKey() 方法与缓存有关。
2023-02-02 23:01:27 564
原创 三、SqlSession的创建以及执行流程
SqlSession是通过SqlSessionFactory创建的,封装了Execcutor对象获取Mapper接口是通过动态代理完成的,使用MapperProxyFactory创建Mapper代理对象,执行的时候通过MapperMethod中封装的SqlCommand获取绑定的sql,通过MethodSignature确定接口的返回值,最终统一调用Execcutor的逻辑完成整个数据库的操作。
2023-01-29 19:38:46 2882
原创 Mybatis源码解析二:DataSource数据源负责创建连接以及Transaction的事物管理
数据源创建通过数据源工厂指定,工厂类型是在mybatis配置文件中指定的;数据源获取连接是在Executor执行器获取Statement时调用的事务创建也是通过事务工厂指定,同样是在mybatis配置文件中指定的,Transaction在获取到连接后,再进行设置事物的隔离级别以及是否自定提交。
2023-01-08 11:42:44 1211
原创 Mybatis源码解析一: SqlSessionFactoryBuilder以及Configuration解析配置,生成SqlSessionFacroty
SqlSessionFactoryBuilder就是负责解析mybatis配置文件,将解析的配置都存放到Configuration实例中,最后对外提供一个SqlSessionFactory实例。
2023-01-07 20:00:45 1501
原创 一、springcloud-eureka服务注册与发现
Spring Cloud 为开发者提供了工具来快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话,集群状态)。分布式系统的协调导致了样板模式,使用 Spring Cloud 开发人员可以快速建立实现这些模式的服务和应用程序。
2022-11-06 21:03:02 755
原创 线程池原理解析
线程池无非就是调用方不断的提交任务,线程池有一组线程不断的重任务队列中获取任务,如图所示:线程池中到任务队列要设置多长,如果是无界,那么很有可能将应用内存耗尽;不是无界队列,那么当队列满了要如何处理?线程池中线程的个数要如何设置,是否要动态变化?每次调用方提交任务时,是直接创建新的线程处理还是放入到队列中等待线程来处理。
2022-11-03 22:09:46 366
原创 Lock锁之公平锁与非公平锁(AQS实现原理)
在Concurrent包中的锁都是可重入锁,一般都命名为ReentrantX。可重入锁是指当一个线程调用object.lock拿到锁,进入互斥区后,再次调用object.lock,仍然可以拿到该锁。 synchtonized关键字就是可重入锁。
2022-10-22 20:00:20 4230
原创 【读写锁原理分析】
当state为0时,说明没有线程占有锁,当state不等于0时,有可能是写锁或者是读锁,两者不能同时成立,这时只能通过sharedCount和exclusiveCount方法判断到底是读锁还是写锁占用了改线程。对于非公平,写锁不管三七二十一上来就直接抢锁,而读锁不行,因为读线程和读线程是不互斥的,假设当前线程被读线程占用,其他读线程还一直不公平的抢锁,可能导致写线程永远拿不到锁,所以当发现队列第一个元素是写线程时,读线程应该被阻塞。读线程之间不互斥,读线程和写线程互斥,写线程之间也互斥。
2022-10-16 10:54:14 474
原创 适配器模式
适配器模式:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。适配器模式中的角色target:目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类adaptee:适配者即...
2019-10-12 10:51:00 218
原创 按之字形打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:两个栈,一个栈存储一层的节点,根据栈先进后出的特点,可以让每层打印的节点与放入的节点顺序相反。以此来达到每层“逆序”的特点。public ArrayList<ArrayList<Integer>> Print(T...
2019-09-25 19:00:49 178
原创 二叉树的下一个节点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针思路:中序遍历的顺序是先访问左子节点再访问父亲节点再访问右子节点,而本题是为了获取中序遍历的下一个节点,所以必须需要考虑到右子节点的情况当该节点的右子节点不为空时,为了获取该节点的中序遍历的下一个节点,就必须去右子节点查找当右子节点存在左子树的时候,...
2019-09-21 16:30:23 162
原创 删除链表中重复的元素
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。思路:使用一个虚拟头节点(head)指向原来的头节点,p1 = head,p2 = head.next;根据p2.val == p2.next.val判断节点是否重复...
2019-09-20 09:21:28 517
原创 链表中环的入口节点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null思路一:使用HashMap或者HashSet,从头开始遍历链表,如果HashMap中不存在该节点,将该节点放入HashMap中,如果已经存在了,说明该节点一定是环的入口节点。public class Solution { public ListNode EntryNodeOfLoop(ListNode...
2019-09-18 23:28:11 171
原创 第一个出现的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。思路:首先需要想清楚,字符的种类是有限的,所以可以定义一个字符整形数组,初始化时将每个下标对应的值置位-1,当碰到一个字符时,一个字符时将这个字符作为数组下标,判断当前元素的值是否为-1...
2019-09-18 19:26:24 262
原创 对象的创建与访问
对象的创建虚拟机遇到new指令后,首先检查这个指令的参数是否能在常量池定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被,加载,解析和初始化过,如果没有,那必须执行相应的类加载过程。在类加载检查通过后,虚拟机将为新生对象分配内存,对象所需内存的大小在类加载后便可以确定,为对象分配空间的任务等同于把一块确定大小的内存从java堆中划分出来。对象内存分配的方式指针碰撞假设Java堆...
2019-09-17 23:35:09 179
原创 mysql索引
title: mysql索引date: 2019-09-16 13:33:28tags: mysqlcategories: mysql索引索引是一种协助我们快速查找的一种数据结构,在mysql的Inndb引擎中,底层使用的是B+Tree索引的创建创建表时创建索引create table t1_i1( id int primary key auto_increment,# 主键索...
2019-09-16 14:07:38 291
转载 布隆过滤器
原文链接:https://www.cnblogs.com/CodeBear/p/10911177.html 本文是站在小白的角度去讨论布隆过滤器,如果你是科班出身,或者比较聪明,又或者真正想完全搞懂布隆过滤器的可以移步。不知道从什么时候开始,本来默默无闻的布隆过滤器一下子名声大燥,仿佛身在互联网,做着开发的,无人不知,无人不晓,哪怕对技术不是很关心的小伙伴也听过它的名号。我也花了不少时...
2019-09-15 20:02:23 139
原创 GC垃圾回收机制
垃圾回收机制干嘛的当我们运行一个程序时,创建的对象和一些变量是存在内存中,如果我们创建的对象和变量过多,它会占用大量的内存,在程序运行时,有一些对象和变量可能是无用的,我们没必要浪费内存去存储,垃圾回收机制就是帮我们回收这些无用的垃圾。垃圾回收机制主要针对哪些内存JVM运行时内存区域主要包括五大部分,分别是程序计数器,本地方法栈,java虚拟栈,方法区,堆,由于,程序计数器,本地方法栈,j...
2019-09-11 15:21:02 163
原创 CountDownLatch CyclicBarrier Semaphore的使用
CountDownLatch让一些线程阻塞直到另一些线程执行完成,有两个方法,一个是countDown(),一个是await(),调用countDown的线程不会被阻塞,调用await的线程才会被阻塞。countDown方法将计数器减一,只有当计数器为0时,调用await的线程才会被执行。public class CountLatchTest { CountDownLatch count ...
2019-09-09 19:35:45 158
原创 clone() 浅拷贝与深拷贝
clone的用法用来复制一个对象的副本,产生一个新的对象,新对象的属性与原对象的属性一致,而且原对象的改变不影响新对象克隆有浅拷贝与深拷贝,用的时候一定要注意使用对象的clone()方法时,需要实现Cloneable接口,这是一个标志接口,不提供任何抽象方法public interface Cloneable {}浅拷贝先来看一段代码:public class Persion ...
2019-09-09 19:32:34 288
原创 CAS
CAS原理CAS(Compare And Swap)是用于多线程同步的原子性指令,CAS主要通过三个值来实现,原始内存的值,给定的预期值,给定更新值,只有当原始内存的值与给定的预期值相等的情况下,才将更新值返回。假设有两个线程A,B同时执行a=a+1根据JMM内存模型,A,B线程分别拷贝一份副本到自己的内存中,假设此时A线程挂起,线程B对a的值进行修改,线程B首先会判断拷贝的副本值是否与共...
2019-09-09 19:26:16 468
原创 队列一(单向队列的实现)
/** * 单向队列 * @author huyua * */public class Queue { //队列大小 private int maxSize; //队列数组 private int arr[]; //队头 private int font; //队尾 private int end; //有效长度 private int elem; publ...
2019-01-31 11:03:51 390
原创 java实现字符串的反转
利用栈来实现/* * 字符栈 */public class CharStzck { private int maxSize; private char[] arr; private int top; public CharStzck(int size) { this.maxSize = size; arr = new char[maxSize]; this....
2019-01-31 10:08:58 546
原创 Java实现简单的栈
public class MyStack { private int maxSize; private int[] arr; private int top; //初始化栈 public MyStack(int size) { this.maxSize=size; arr = new int[maxSize]; top=-1; } //压栈 public...
2019-01-30 11:01:24 202
原创 插入排序
public class InsertSort {/* * 思路:取出一个数据,和它前面的数据进行比较,找到一个插入点 * 将其插入,并将大的数后移 */public static void insertSort(int arr[]) { int data=0; //取出数据 for(int i =1 ;i<arr.length;i++) { data=arr[i]; ...
2019-01-30 10:15:41 165
原创 选择排序
public class TestSelect { public static void sortSelect( int [] arr) { int min=0; //趟数 for( int i =0 ; i< arr. length-1; i++) { min= i...
2019-01-30 10:14:12 135
原创 java实现简单的冒泡排序
冒泡排序经典的排序算法public class TestMaoPao { public static void sortBub(int [] arr) { //总的交换次数 int count =0; //遍历数组的趟数 for...
2019-01-30 10:12:48 1943
原创 java数组的简单增删改查
public class Demo01 { //数组 private int[] arr; //数组有效的大小 private int size; public Demo01() { arr=new int[100]; } public int getSize() { return size; } public void setSize(int size) { thi...
2019-01-15 15:59:18 1413
原创 spring+springmvc+mybatis整合
首先建立javaee开发的三层结构导入配置文件 jdbc.properties log4j.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/ mybatis?characterEncoding=utf-8jdbc.username=rootjdbc.password=12345...
2019-01-05 08:48:53 184
原创 linux中忘记mysql密码,找回密码的方法,亲测有效
1.首先 打开一个配置文件,在这个配置文件中加入一条语句 skip-grant-tables如:vi /etc/my.cnf[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockskip-grant-tables2.保存退出,重启mysql> #service mysql resart3 . 登陆并...
2018-12-01 17:33:40 209
原创 Navicate远程连接数据库(linux Centos7) 报错 2003 cannot connect mysql on( 10060)
今天在上传一个小项目的时候数据库连接出错,弄得我头大一开始是出现这种错误2003 cannot connect mysql on( 10060)网上很多方法都试过就是不行,最后通过设置端口的防火墙成功连接先设置端口的防火墙/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT/之后测试连接的时候又出现了1045 password...
2018-09-28 21:17:55 2597
原创 java.lang.ClassNotFoundException: com.jdbc.mysql.Driver at java.net.URLClassLoader$1.run(Unknow
这个错误老是发生偏偏自己记得不是很清楚,搞得每次都要花大量的时间解决 今天记下来 在数据库连接的时候这种错误很容易发生 需要注意几点 1 有没有导入jar包 先建一个lib文件放入驱动包 再右键buidlpath addto….. 2 如果导包了还出现错误 一定要注意细节 在配置文件后面 不能出现空格,要不然一定会出错的 今天我 就在小细节出错了 ,哎,所以...
2018-08-21 17:18:38 2584
原创 org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 88; 对实体 "amp" 的引用必须以 ';' 分隔符结尾。
今天在学习c3po数据库连接池的时候,XML文件出错 <property name="jdbcUrl">jdbc:mysql://localhost:3306/transation?useUnicode=true&characterEncoding=utf8</property‘org.xml.sax.SAXParseException; lineNumber: ...
2018-08-21 16:51:06 2467 1
原创 数据库连接出错org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Unknown
今天再写一个数据库连接池的时候出现了这个错误, org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Unknown system variable 'tx_isolation') 在网上找了很久发现是数据库驱动包版本太低,与当前的数据库版本比匹配 我用的是8.0版本的mysq...
2018-08-21 12:02:46 6272 3
原创 第一次解析XML
今天在解析xml时犯了一个很低级的错误 错误提示如下org.dom4j.DocumentException: \XmlDemo\src\xml\Demo1.xml (系统找不到指定的路径。) Nested exception: \XmlDemo\src\xml\Demo1.xml (系统找不到指定的路径。)at org.dom4j.io.SAXReader.read(SAXReader....
2018-08-14 11:39:34 250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人