自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程间的通信

当前实现线程间通信有两种方式,一种是Object对象中的wait和notify机制,另一种是ReentrantLock和Condition配合的await和signal机制,下面分别进行阐述。Object的wait() notify()机制方法wait的作用是使当前执行代码的线程进行等待,wait方法是Object类的方法,该方法用来将当前线程置入“预执行队列”中,并在wait所在的代码行处停止执行,直到接到通知或被中断为止。在调用wait前,该线程必须获得该对象的对象级别锁,即只有在同步方法或者同

2020-12-10 11:36:00 99

原创 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 319 4

原创 myBaits的缓存机制

myBatis缓存综述为了避免相同的查询重复去数据库中取值,myBatis形成了两级缓存机制,先从第二级缓存中获取,获取不到时从第一级缓存中获取,仍然取不到时才会实际的去库中查询。其中二级缓存是SqlSessionFactory级别的,所有由同一个工厂构建出来的SqlSession共享缓存,而一级缓存是SqlSession级别的,每个SqlSession独享缓存。在实现上,myBatis以Cache接口为核心、以PerpetualCache为基本实现,构建了多个单一职能的缓存组件,这些组件,有的实现了缓

2020-11-23 16:49:44 139

原创 myBaits sql的配置方式与加载原理

整体流程myBatis提供了四种方式寻找sql映射语句,包括使用相对类路径的资源引用、完全限定资源定位符、类名或者包名等,相应的myBatis-config.xml的mapper结点配置为:<mappers> <!-- 使用相对于类路径的资源引用 --> <!-- <mapper resource="mybatis/CountryMapper.xml" /> --> <!-- 使用完全限定资源定位符(URL) --&gt

2020-11-18 22:11:04 229

原创 myBatis中的事务管理机制

使用方法概述事务是指满足ACID属性的一组完整操作,是数据库数据完整性和一致性的基本保障。在myBatis中有两种管理事务的方式,一种是依托于底层JDBC的事务管理,另一种是本身不处理事务,将回滚和提交操作置为空操作,由Spring等容器的事务管理机制进行接管。这两种方式在配置文件中将transactionManager属性分别配置为JDBC和MANAGED,比如配置为JDBC:<environments default="development"> <environme

2020-11-18 16:59:09 468

原创 myBatis sql的执行过程

整体流程myBatis中的sql查询从整体上由三部分构建组成,SqlSession提供对外的接口,包括数据的增删改查和事务的提交回滚等控制。Executor组件负责协调数据操作、集成事务控制Transaction和增加缓存层等。由第三层Handler实际的执行数据操作。Executor组件CachingExecutor在sql的执行过程中加一层缓存,实际从库中查询过后,将查询结果放入缓存中,下一次同样的查询将直接从缓存中取,以提升查询效率。使用代理模式来加一层缓存,CachingExec

2020-11-18 10:47:16 123

原创 代理思想在程序设计中的应用

代理模式代理模式综述​ 在客户端和真实的服务之间引入了一个中间层作为代理,在代理层以面向切面的方式拓展服务的功能,比如在调用服务的前后打印日志、跟踪审计等。同时遵循开闭原则(对拓展开放,对修改关闭),在不修改原有服务的前提下增加业务处理逻辑。​ 一般的,按照代理对象的生成方式,将代理模式分成两类,静态代理和动态代理。静态代理以硬编码的方式直接为被代理类编写代理类,以组合的方式拓展被代理类的功能。在服务较多而代理层逻辑相似的情况下,重复的工作量很大。动态代理很好的解决了这个问题,不直接编写代理类,而

2020-11-15 13:38:43 202 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 106

原创 动态规划算法Dynamic Programming

动态规划与分治法相似,都是通过组合子问题的解来求解原问题。不同的是,分治法将问题划分为互不相交的子问题,递归的求解子问题,再将他们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题。在这种情况下,分治法会做许多不必要的工作,他会反复求解那些公共子子问题。而动态规划只会对子子问题求解一次,将其保存在一个表格中,从而避免每次求解时都重新计算。现在我...

2018-11-20 15:06:11 182

原创 回文字符串问题

回文字符串,是指正读和倒读的结果一样的字符串,从结构上来看,两侧的字符呈中心对称。在汉语中,有很多有趣的回文诗词,回文对联熟语,比如“响水池中池水响,黄金谷里谷金黄”、“雾锁山头山锁雾,天连水尾水连天”等。根据其结构特征,我们很容易设计出一个判断字符串是否回文的算法:isPalindromic(s)boolean flag=truechar[] chars=s.toCharArray()...

2018-11-13 14:44:24 1423

原创 缓存思想在算法设计中的应用

1.问题引入我们先看一下简单的斐波那契数列的递归算法。百度百科中对该问题是这样定义的:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F...

2018-11-12 13:59:05 293

原创 基于双指针的滑动窗口方法在数组问题中的应用

LeetCode中有道题:取一个字符串中不含重复字符的最长子串的长度。原题是:Longest Substring Without Repeating CharactersGiven a string, find the length of the longest substring without repeating characters. 最直接的想法是暴力法穷举所有的子串,取其中不...

2018-11-11 22:18:32 204

空空如也

空空如也

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

TA关注的人

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