- 博客(40)
- 收藏
- 关注
原创 Mybatis 缓存实现原理
接下来,本文将介绍 Mybatis 缓存的实现原理,具体分析如下几个问题一级缓存和二级缓存具体存放在哪如何判断存在二级缓存二级缓存事务性如何实现缓存的实现类是在什么时候创建的呢?开启了全局缓存,创建 SqlSession 时就会创建一个 CachingExecutor。提一句:开启一个 SqlSession 可以配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。 p
2020-05-13 01:49:47
658
原创 Mybatis 缓存实现原理——案例实践
Mybatis 缓存介绍关于缓存,想必大家早已不陌生。第一次使用查询数据时,Mybatis 将其结果缓存起来,当下次执行相同的查询的时候直接返回(没有声明需要刷新缓存,且缓存没有超时)。默认情况下,Mybatis 只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。一级缓存(本地的会话缓存):只与 SqlSession 有关,不同的 SqlSession 缓存不同。二级缓存:SqlSession 可以共享缓存。缓存(总开关)是默认开启的,如果需要关闭缓存只需在 MyBatis 的配置文件中添
2020-05-12 00:52:27
1005
原创 Commons CLI 使用介绍
Commons CLI 是一个用于表示、处理和验证命令行参数工具的API。有时候启动一个程序,我们会在命令行设置参数,例如启动 RocketMQ 的 Broker 服务public static void main(String[] args) { // args = {"-c","E:\sourceCode\rocketmq\conf\broker.conf","-n","192.168...
2020-03-12 17:54:28
2368
原创 Mysql 函数 STR_TO_DATE
最近遇到一个 STR_TO_DATE 的问题,一直没有找到原因:使用 STR_TO_DATE 函数作为查询条件,可以查询出数据使用 STR_TO_DATE 函数作为删除的过滤条件,却报错了STR_TO_DATE 的简单使用示例SELECT STR_TO_DATE('2020-02-26 12:11:33','%Y-%m-%d %H:%i:%s'), STR_TO_DA...
2020-02-26 21:12:04
585
原创 RocketMQ源码分析——消息索引文件存储
消息存储到 CommitLog 文件中后,需要及时更新 ConsumeQueue 和 Index 文件,保证消息能被及时消费和查询。
2019-08-07 12:51:17
449
1
原创 【Java并发编程实战】——Java线程池ThreadPoolExecutor(二)
Executors 框架最核心的类就是 ThreadPoolExecutor,上篇文章中提到的几个线程池均使用了它做为线程池的实现类。
2019-07-13 22:48:38
142
原创 【Java并发编程实战】——Java线程池ThreadPoolExecutor(一)
创建或者关闭线程需要时间,且线程本身需要占用内存资源,因此生产环境线程的数量必须得到控制,盲目的创建线程对系统性能有影响
2019-07-11 11:20:34
209
原创 【Java并发编程实战】——ConcurrentLinkedQueue
ConcurrentLinkedQueue 是一个基于链表的无界线程安全队列,队列中的元素遵循 FIFO(先进先出)原则。
2019-07-09 15:08:27
261
原创 【Java并发编程实战】——BlockingQueue阻塞队列
阻塞队列(BlockingQueue)是一个支持两个特殊操作的队列:获取元素时等待队列变为非空,以及存储元素时等待空间变得可用。
2019-07-05 22:31:17
408
原创 【Java并发编程实战】——PriorityBlockingQueue
PriorityBlockingQueue 是一个无界优先级阻塞队列,它使用与类 PriorityQueue 相同的顺序规则,并且提供了阻塞获取操作。
2019-07-05 20:03:00
195
原创 【Java并发编程实战】——CyclicBarrier源码分析
CyclicBarrier 是一个同步辅助类,它允许一组线程相互等待,直到全部线程都到达某一公共屏障点
2019-06-26 16:30:15
160
原创 【Java并发编程实战】——CountDownLatch源码分析
CountDownLatch 一个同步辅助类,允许一个或多个线程等待,直到其它线程执行完成一组操作。
2019-06-26 14:24:18
200
原创 【Java并发编程实战】——AbstractQueuedSynchronizer源码分析(一)
AbstractQueuedSynchronizer 源码分析
2019-06-26 10:38:20
155
原创 【Java并发编程实战】——Java内存模型与线程
为了缩短计算机的存储设备与处理器的运算速度的差距,现代计算机都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存来作为内存和处理器之间的缓冲:将运算需要用到的数据复制到缓存中,让运算能快速运行,当运算结束后再从缓存同步回内存中,这样处理器不用等待缓慢的内存读写了。这带来了缓存一致性问题。缓存一致性在多核CPU中,每条线程可能运行于不同的CPU中,因此每个线程运行时有自己的高速缓存(对单核...
2019-06-23 16:54:02
190
原创 【Java并发编程实战】——并发编程基础
并发编程是Java语言的重要特性之一,也是作为Java开发无法不迈过去的坎。不懂并发编程,算是一个合格的程序员吗?不是。并发大家都不陌生,有些东西总感觉自己会,但要实际应用起来的时候总难下笔。本着温故知新,整理下之前的学习笔记,从新梳理并发的整体架构。并发概要计算机处理器的运算速度和它的存储和通信速度差距较大,大量的时间花在磁盘IO和网络IO中。如果不希望计算机的大部分时间处于等待状态,必须...
2019-06-23 11:47:51
225
原创 clone详解
想要复制一个对象的所有属性,简单的方式就是通过Cloneable接口,你还可以使用工具类BeanUtils的copyProperties方法,还可以使用拷贝工厂或者使用序列化。这篇文章主要介绍怎么使用Cloneable来完成对象的拷贝。 Cloneable接口的作用是表明这个对象允许克隆。如果一个类实现了Cloneable,那么Object的clone方法就返回该对象的逐域拷贝;没有实现Clon...
2018-09-01 22:23:12
747
原创 覆盖equals方法时总是要覆盖hashCode
覆盖equals方法 忽略equals的约定,程序很有可能会运行不正常,直至崩溃。因为没有一个类是孤立的,类之间是相互传递调用的。例如集合类,依赖于传递给它的对象是否遵循equals约定。覆盖equals方法,必须遵守的通用约定自反性。对于任何非null的引用值x,x.equals(x)必须返回true对称性。对于任何非null的引用值x和y,当前仅当y.equals(x)返...
2018-05-18 00:10:30
559
原创 预编译防止sql注入
使用PreparedStatement怎么使用PreparedStatement?如何避免SQL注入式攻击?PreparedStatement与Statement有什么区别,有什么样的优势? [TOC]JDBC连接数据库操作步骤public class JDBCTest { public static void main(String[] args) { ...
2018-05-17 13:48:54
13647
原创 怎么提升SQL查询效率
1.使用缓存2.使用数据库索引3.使用PreparedStatement4.使用数据库连接池5.使用JDBC批量更新6.取消自动提交
2018-05-14 16:52:42
309
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人