自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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源码分析——事务消息

事务消息的原理

2019-08-16 02:26:33 526

原创 RocketMQ源码分析——消息的消费与进度存储

RocketMQ源码分析——消息的拉取与消费

2019-08-13 16:16:51 468

原创 RocketMQ源码分析——消息的拉取

RocketMQ源码分析——消息的拉取与消费

2019-08-13 12:47:42 322

原创 RocketMQ源码分析——消息可靠性

RocketMQ支持消息的高可靠,影响消息可靠性的几种情况

2019-08-07 12:52:15 354

原创 RocketMQ源码分析——消息索引文件存储

消息存储到 CommitLog 文件中后,需要及时更新 ConsumeQueue 和 Index 文件,保证消息能被及时消费和查询。

2019-08-07 12:51:17 449 1

原创 RocketMQ源码分析——消息的存储

RocketMQ 主要通过 MappedByteBuffer 对文件进行读写操作(Mmap...

2019-08-05 14:24:27 547

原创 RocketMQ源码分析——消息发送的高可用

消息发送的高可用 RocketMQ 是怎么做的

2019-08-02 17:21:49 1149 3

原创 RocketMQ架构设计及工作流程

RocketMQ架构上主要分为四部分

2019-08-01 00:09:43 1382

原创 RocketMQ源码分析——消息的发送与接收

如何发送消息?如何负载?如何高可用?批量消息如何保证一致性

2019-07-29 22:31:46 447

原创 为什么选择RocketMQ

消息中间件,是在分布式系统中完成消息的发送和接受的基础软件,为分布式应用系统提供异步解耦、削峰填谷的能力。

2019-07-27 13:36:00 565

原创 【剑指OFFER】——Java实现(面试题53-59)

数据结构-基本算法分析

2019-07-25 15:50:55 119

原创 【剑指OFFER】——Java实现(面试题39-52)

数据结构-基本算法分析

2019-07-24 17:44:03 120

原创 【剑指OFFER】——Java实现(面试题27-38)

数据结构-基本算法分析

2019-07-23 17:16:15 94

原创 【剑指OFFER】——Java实现(面试题1-26)

数据结构-基本算法分析

2019-07-19 14:21:49 168

原创 【数据结构】——斐波那契数列

求斐波那契数列的第N项

2019-07-17 16:30:21 1670

原创 【Java并发编程实战】——ThreadLocal源码分析

线程本地变量

2019-07-15 18:21:58 116

原创 【Java并发编程实战】——FutureTask详解

FutureTask 代表一个可取消的异步计算。

2019-07-14 17:08:29 1589

原创 【Java并发编程实战】——Java线程池ThreadPoolExecutor(二)

Executors 框架最核心的类就是 ThreadPoolExecutor,上篇文章中提到的几个线程池均使用了它做为线程池的实现类。

2019-07-13 22:48:38 142

原创 【Java并发编程实战】——Java线程池ThreadPoolExecutor(一)

创建或者关闭线程需要时间,且线程本身需要占用内存资源,因此生产环境线程的数量必须得到控制,盲目的创建线程对系统性能有影响

2019-07-11 11:20:34 209

原创 【Java并发编程实战】——Exchanger

Exchanger 提供一个同步点给其他线程来配对交换数据。

2019-07-10 15:47:49 110

原创 【Java并发编程实战】——ConcurrentLinkedQueue

ConcurrentLinkedQueue 是一个基于链表的无界线程安全队列,队列中的元素遵循 FIFO(先进先出)原则。

2019-07-09 15:08:27 261

原创 【Java并发编程实战】——LinkedTransferQueue

LinkedTransferQueue

2019-07-08 16:24:38 218

原创 【Java并发编程实战】——BlockingQueue阻塞队列

阻塞队列(BlockingQueue)是一个支持两个特殊操作的队列:获取元素时等待队列变为非空,以及存储元素时等待空间变得可用。

2019-07-05 22:31:17 408

原创 【Java并发编程实战】——PriorityBlockingQueue

PriorityBlockingQueue 是一个无界优先级阻塞队列,它使用与类 PriorityQueue 相同的顺序规则,并且提供了阻塞获取操作。

2019-07-05 20:03:00 195

原创 【Java并发编程实战】——ReentrantReadWriteLock源码分析

ReadWriteLock 读写锁,它维护了一个读锁和一个写锁

2019-06-30 02:24:54 110

原创 【Java并发编程实战】——Semaphore源码分析

Semaphore 一个计数信号量。从概念上讲,信号量维护了一个许可集。

2019-06-28 16:13:04 170

原创 【Java并发编程实战】——CyclicBarrier源码分析

CyclicBarrier 是一个同步辅助类,它允许一组线程相互等待,直到全部线程都到达某一公共屏障点

2019-06-26 16:30:15 160

原创 【Java并发编程实战】——CountDownLatch源码分析

CountDownLatch 一个同步辅助类,允许一个或多个线程等待,直到其它线程执行完成一组操作。

2019-06-26 14:24:18 200

原创 【Java并发编程实战】——AbstractQueuedSynchronizer源码分析(二)

AQS 中 Condition 源码分析

2019-06-26 10:42:46 116

原创 【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关注的人

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