- 博客(12)
- 收藏
- 关注
原创 线程间的通信
当前实现线程间通信有两种方式,一种是Object对象中的wait和notify机制,另一种是ReentrantLock和Condition配合的await和signal机制,下面分别进行阐述。Object的wait() notify()机制方法wait的作用是使当前执行代码的线程进行等待,wait方法是Object类的方法,该方法用来将当前线程置入“预执行队列”中,并在wait所在的代码行处停止执行,直到接到通知或被中断为止。在调用wait前,该线程必须获得该对象的对象级别锁,即只有在同步方法或者同
2020-12-10 11:36:00
125
原创 myBatis中的插件机制
插件的配置与使用在mybatis-config.xml配置文件中配置plugin结点,比如配置一个自定义的日志插件LogInterceptor和一个开源的分页插件PageInterceptor:<plugins> <plugin interceptor="com.crx.plugindemo.LogInterceptor"></plugin> <plugin interceptor="com.github.pagehelper.PageIn
2020-11-24 21:32:31
366
4
原创 myBaits的缓存机制
myBatis缓存综述为了避免相同的查询重复去数据库中取值,myBatis形成了两级缓存机制,先从第二级缓存中获取,获取不到时从第一级缓存中获取,仍然取不到时才会实际的去库中查询。其中二级缓存是SqlSessionFactory级别的,所有由同一个工厂构建出来的SqlSession共享缓存,而一级缓存是SqlSession级别的,每个SqlSession独享缓存。在实现上,myBatis以Cache接口为核心、以PerpetualCache为基本实现,构建了多个单一职能的缓存组件,这些组件,有的实现了缓
2020-11-23 16:49:44
156
原创 myBaits sql的配置方式与加载原理
整体流程myBatis提供了四种方式寻找sql映射语句,包括使用相对类路径的资源引用、完全限定资源定位符、类名或者包名等,相应的myBatis-config.xml的mapper结点配置为:<mappers> <!-- 使用相对于类路径的资源引用 --> <!-- <mapper resource="mybatis/CountryMapper.xml" /> --> <!-- 使用完全限定资源定位符(URL) -->
2020-11-18 22:11:04
262
原创 myBatis中的事务管理机制
使用方法概述事务是指满足ACID属性的一组完整操作,是数据库数据完整性和一致性的基本保障。在myBatis中有两种管理事务的方式,一种是依托于底层JDBC的事务管理,另一种是本身不处理事务,将回滚和提交操作置为空操作,由Spring等容器的事务管理机制进行接管。这两种方式在配置文件中将transactionManager属性分别配置为JDBC和MANAGED,比如配置为JDBC:<environments default="development"> <environme
2020-11-18 16:59:09
528
原创 myBatis sql的执行过程
整体流程myBatis中的sql查询从整体上由三部分构建组成,SqlSession提供对外的接口,包括数据的增删改查和事务的提交回滚等控制。Executor组件负责协调数据操作、集成事务控制Transaction和增加缓存层等。由第三层Handler实际的执行数据操作。Executor组件CachingExecutor在sql的执行过程中加一层缓存,实际从库中查询过后,将查询结果放入缓存中,下一次同样的查询将直接从缓存中取,以提升查询效率。使用代理模式来加一层缓存,CachingExec
2020-11-18 10:47:16
179
原创 代理思想在程序设计中的应用
代理模式代理模式综述 在客户端和真实的服务之间引入了一个中间层作为代理,在代理层以面向切面的方式拓展服务的功能,比如在调用服务的前后打印日志、跟踪审计等。同时遵循开闭原则(对拓展开放,对修改关闭),在不修改原有服务的前提下增加业务处理逻辑。 一般的,按照代理对象的生成方式,将代理模式分成两类,静态代理和动态代理。静态代理以硬编码的方式直接为被代理类编写代理类,以组合的方式拓展被代理类的功能。在服务较多而代理层逻辑相似的情况下,重复的工作量很大。动态代理很好的解决了这个问题,不直接编写代理类,而
2020-11-15 13:38:43
238
1
原创 Java类加载器
import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.Arrays;import java.util.List;public class MyClassLoader exte...
2019-03-20 15:28:52
131
原创 动态规划算法Dynamic Programming
动态规划与分治法相似,都是通过组合子问题的解来求解原问题。不同的是,分治法将问题划分为互不相交的子问题,递归的求解子问题,再将他们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题。在这种情况下,分治法会做许多不必要的工作,他会反复求解那些公共子子问题。而动态规划只会对子子问题求解一次,将其保存在一个表格中,从而避免每次求解时都重新计算。现在我...
2018-11-20 15:06:11
237
原创 回文字符串问题
回文字符串,是指正读和倒读的结果一样的字符串,从结构上来看,两侧的字符呈中心对称。在汉语中,有很多有趣的回文诗词,回文对联熟语,比如“响水池中池水响,黄金谷里谷金黄”、“雾锁山头山锁雾,天连水尾水连天”等。根据其结构特征,我们很容易设计出一个判断字符串是否回文的算法:isPalindromic(s)boolean flag=truechar[] chars=s.toCharArray()...
2018-11-13 14:44:24
1527
原创 缓存思想在算法设计中的应用
1.问题引入我们先看一下简单的斐波那契数列的递归算法。百度百科中对该问题是这样定义的:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F...
2018-11-12 13:59:05
326
原创 基于双指针的滑动窗口方法在数组问题中的应用
LeetCode中有道题:取一个字符串中不含重复字符的最长子串的长度。原题是:Longest Substring Without Repeating CharactersGiven a string, find the length of the longest substring without repeating characters. 最直接的想法是暴力法穷举所有的子串,取其中不...
2018-11-11 22:18:32
264
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人