自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

转载 RocketMQ事务消息实现分析

这周RocketMQ发布了4.3.0版本,New Feature中最受关注的一点就是支持了事务消息:今天花了点时间看了下具体的实现内容,下面是简单的总结。RocketMQ事务消息概要通过冯嘉发布的《RocketMQ 4.3正式发布,支持分布式事务》一文可以看到RocketMQ采用了2PC的方案来提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息。这张图说明了事务消息的大致方案,分为两个逻辑:正常事务消息的发送及提交、事务消息的补偿流程事务消息发送及提交:发...

2021-05-21 09:47:07 375

转载 SpringBoot从配置文件中获取属性的四种方法

SpringBoot从配置文件中获取属性方式一: @Value基本类型属性注入,直接在字段上添加@Value("${xxx.xxx}")即可.注意这里用的是$,而不是#.@Value注入的属性,一般其他属性没有关联关系.配置文件user: name: Manaphy age: 19 sex: male@RestControllerpublic class ConfigPropertiesController { @Value("${user.name}").

2021-05-21 09:14:17 2248

转载 Mybatis(三):一对多级联查询

主要是使用<collection>来实现关联。package cn.saytime.domain;import java.util.List;/** * 用户 */public class User { private Long id; private String username; private Integer age; //private IdCard idCard; // 一对多 private List<O

2021-05-21 09:10:22 277

转载 Mybatis(二) Mybatis中#{}和${}的区别详解

场景:假设数据库有两个数据一模一样的表。历史表,当前表查询表中的信息,有时候从历史表中去查询数据,有时候需要去新的表去查询数据。希望使用1个方法来完成操作。即根据不同的表名查询数据。使用${}可以查询到数据使用#{}不可以查询到数据${}与#{}区别:${} 是字符串拼接,通过${}可以将传入的内容拼接在sql中且不进行jdbc类型转换。 #{} 是占位符,相当于PreparedStatement使用占位符去替换参数,自动进行java类型和jdbc类型转换,可以防止sq

2021-05-21 09:08:52 258

转载 Mybatis(一):插入操作返回主键

插入数据并返回主键这种需求很常见,所以列出来。一、实现方式1. 使用useGeneratedKeys+keyProperty (推荐)简单来说就是配置:<insert id="" useGeneratedKeys="true" keyProperty="id">将插入的ID赋值给设置的keyProperty对象属性字段里面,一般也就是对象的ID,比如插入User对象,设置赋值主键ID给id字段。2. 使用selectKeyMySQL 数据库可以使用如下方式。.

2021-05-21 09:07:55 10330 1

原创 查看Oracle用户的权限或角色

1.查看所有用户:select * from dba_users;select * from all_users;select * from user_users;2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):select * from dba_sys_privs;select * from user_sys_privs;3.查看角色(只能查看登陆用户拥有的角色)所...

2021-05-18 15:31:51 718

转载 正则表达式工具类RegexUtils

import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexUtils { private static Pattern r; private static Matcher m; public RegexUtils() { } public sta...

2021-05-18 15:23:08 658

原创 随机数工具类RandomUtil

/** * 随机数工具类 */public class RandomUtil { /***0-99之间取5个不重复随机数 */ public final static Set<Integer> FIVE_RANDOMSET_INT = randomIntSet(0, 99, 5, 5, null); /***0-99之间取10个不重复随机数 */ public fina...

2021-05-18 15:13:45 1696

转载 单点登录,从原理到实现

一、单系统登录机制1、http无状态协议 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求;要鉴别浏览器请求,必须清楚浏览器请求状态。既然http协议无状态,那就让服务器和浏览器共同维护一个状态吧!这就是会话机制。2、会话机制  浏览器第一次请求服务器,服务器创建一个会话,并将会话的id作为响应的一部分发送给浏览器,浏览器存储会话id,并在后续第二次和第三次请求中..

2021-05-18 15:10:02 212

原创 AOP系统日志入库

@Aspect@EnableAspectJAutoProxy@Componentpublic class LoggerAop { private static Logger logger = LoggerFactory.getLogger(LoggerAop.class); @Pointcut("execution(public * com.ll.common.serv...

2021-05-18 11:33:51 191

原创 SpringBoot接口返回数据封装

public class Result<T> implements Serializable { private static final long serialVersionUID = 9586256688859632L; private int code; private String message; private T data; p...

2021-05-18 11:32:46 407

原创 SpringBoot全局异常处理@RestControllerAdvice

public abstract class BaseException extends RuntimeException { private static final long serialVersionUID = 310158626341330120L; private int errorCode; BaseException() { this((Re...

2021-05-18 10:55:03 186

转载 mybatis动态 SQL和SQL语句构建器类

https://mybatis.org/mybatis-3/zh/dynamic-sql.html

2021-05-18 09:04:19 233

转载 JDK/Dubbo/Spring 三种 SPI 机制,谁更好?

SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。本文主要是特性 & 用法介绍,不涉及源码解析(源码都很简单,相信你一定一看就懂)SPI 有什么用?举个栗子,现在我们设计了一款全新的日志框架:super-logger。默认以XML文件作为我们这.

2021-05-18 09:03:16 95

原创 设计模式——生产者消费者模式

@SuppressWarnings({ "rawtypes", "unchecked" })@ManagedResource(objectName = QueuesHolder.QUEUEHOLDER_MBEAN_NAME, description = "Queues Holder Bean")public class QueuesHolder { /** * QueueManager...

2021-05-18 08:59:09 102

原创 浅拷贝/深拷贝克隆工具类CloneUtil

public class CloneUtil { private static final Logger log = LoggerFactory.getLogger(CloneUtil.class); /** * 无需进行复制的特殊类型数组 */ @SuppressWarnings("rawtypes") static Class[] ne...

2021-05-17 14:56:04 732

原创 AES加解密Util

public class ByteUtil { /** * 将byte数组报文(根据ASCII码值)转换为字符串 * @param bs * @return */ public static String byteArray2String(byte[] bs){ StringBuffer sbLogRet = new StringBuffer(); for(...

2021-05-17 14:53:59 335

原创 SpringBoot单元测试基类

依赖: <!--单元测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.2.10.RELEASE</version>

2021-05-17 14:44:16 148

转载 盘一盘 synchronized (二)—— 偏向锁批量重偏向与批量撤销

在本文讲解之前,先来简单了解一下为什么会有批量重偏向和批量撤销。批量重偏向:当一个线程创建了大量对象并执行了初始的同步操作,后来另一个线程也来将这些对象作为锁对象进行操作,会导偏向锁重偏向的操作。批量撤销:在多线程竞争剧烈的情况下,使用偏向锁将会降低效率,于是乎产生了批量撤销机制。JVM的默认参数值通过JVM的默认参数值,找一找批量重偏向和批量撤销的阈值。设置JVM参数-XX:+PrintFlagsFinal,在项目启动时即可输出JVM的默认参数值intx Bias...

2021-05-17 14:32:35 588

转载 盘一盘 synchronized (一)—— 从打印Java对象头说起

盘一盘 synchronized (二)—— 偏向锁批量重偏向与批量撤销

2021-05-17 14:20:27 116

转载 synchronized实现原理和锁升级过程

https://baijiahao.baidu.com/s?id=1654344500475304827&wfr=spider&for=pc

2021-05-17 11:48:04 305

原创 带标签的break和continue

一:语法细节1. Java中的命名规则:package:统一使用小写字母class:首字母大写,使用驼峰标识method:首字母小写,使用驼峰标识field:首字母小写,使用驼峰标识static field:统一使用大写字母,并用下划线分割单词2. import和import staticimport com.xxx:常规导入某个包下的类import static com.xxx:会导入某个包下的...

2021-05-17 11:23:48 442

原创 HttpClient工具类PostMethod添加重试策略

public class HttpClientUtil { private static final Log logger = LogFactory.getLog(HttpClientUtil.class); public static String doPost(String url, Map<String, String> params) { l...

2021-05-17 10:55:55 704

原创 HttpServletRequest入参校验方法

/*** HttpRequest的转换类*/public class RequestUtil { private static Pattern filePattern1 = Pattern.compile("[/./.\\\\/:,&lt;&gt;+\"^]"); private static Pattern filePattern2 = Pattern.compile("[/./.\\\\...

2021-05-17 10:49:33 901

原创 SpringBoot中使用@VALUE取配置文件中的LIST和MAP配置

application.properties配置文件,然后需要配置一个map类型的配置,然后在程序的其他地方获取这个配置。配置内容data.map={"key1": "value1", "key2": "value2"}data.list=topic1,topic2,topic3在使用该配置的地方,使用@Value的使用获取:@Value("#{${data.map}}")private Map<String,String> map;@Value("#{'${data.

2021-05-17 10:40:06 2907

转载 ThreadLocalRandom替换Random

前言最近在写一些业务代码时遇到一个需要产生随机数的场景,这时自然想到 jdk 包里的Random类。但出于对性能的极致追求,就考虑使用ThreadLocalRandom类进行优化,在查看 ThreadLocalRandom 实现的过程中,又追了下Unsafe有部分代码,整个流程下来,学到了不少东西,也通过搜索和提问解决了很多疑惑,于是总结成本文。Random 的性能问题使用 Random 类时,为了避免重复创建的开销,我们一般将实例化好的 Random 对象设置为我们所使用服务对象...

2021-05-14 17:35:11 204

转载 Redis 6.0引入多线程

Redis 作为一个基于内存的缓存系统,一直以高性能著称,因没有上下文切换以及无锁操作,即使在单线程处理情况下,读速度仍可达到11万次/s,写速度达到8.1万次/s。但是,单线程的设计也给Redis带来一些问题:只能使用CPU一个核; 如果删除的键过大(比如Set类型中有上百万个对象),会导致服务端阻塞好几秒; QPS难再提高。针对上面问题,Redis在4.0版本以及6.0版本分别引入了Lazy Free以及多线程IO,逐步向多线程过渡,下面将会做详细介绍。单线程原理都说Redis是...

2021-05-14 16:32:15 202

原创 将本地项目推送到github简单教程

一,idea 配置github账号,这里采用token方式登录之后:填写note,,然后点击生成token复制token,点击Add Account,添加成功会展示github账号二,在github上新建一个仓库,获取仓库地址;拿到仓库的git地址,注意是HTTPS形式的;二,创建本地仓库,将本地仓库推到github的远程仓库;假设要将本地的demo目录下的测试文本.txt推送到远程仓库demo;进入demo目录,输入cmd回车:...

2021-05-14 11:36:54 652

原创 解决:class path resource [] cannot be resolved to absolute file path

读取resources下的文件order_data.xlsx使用:File file = ResourceUtils.getFile("classpath:order_data.xlsx");报错:java.io.FileNotFoundException: class path resource [order_data.xlsx] cannot be resolved to absolute file path because it does not reside in the

2021-05-14 10:31:02 12879 2

转载 Easyexcel生成excel直接发送邮件

依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.2.10.RELEASE</version> </dependenc

2021-05-13 17:01:43 2293 2

转载 Redis原理面试题

面试官:你好,小张。我看了你的简历,熟练掌握Redis,那么我就随便问你几个Redis相关的问题吧。首先我的问题是,Redis是单线程还是多线程呢?小张:Redis不同版本之间采用的线程模型是不一样的,在Redis4.0版本之前使用的是单线程模型,在4.0版本之后增加了多线程的支持。在4.0之前虽然我们说Redis是单线程,也只是说它的网络I/O线程以及Set 和 Get操作是由一个线程完成的。但是Redis的持久化、集群同步还是使用其他线程来完成。4.0之后添加了多线程的支持,主要是体

2021-05-11 15:27:38 690

转载 关于 Redlock 的讨论

为了引出本文要讨论的关于 Redlock 的神仙打架的问题,我们就得先通过一个面试连环炮:Redis 做分布式锁的时候有需要注意的问题? 如果是 Redis 是单点部署的,会带来什么问题? 那你准备怎么解决单点问题呢? 集群模式下,比如主从模式,有没有什么问题呢? 你知道 Redis 是怎么解决集群模式也不靠谱的问题的吗? 那你简单的介绍一下 Redlock 吧? 你觉得 Redlock 有什么问题呢?单点的 Redis 做分布式锁不靠谱,导致了基于 Redis 集群模式的分布式锁解决方案

2021-05-11 14:45:26 1410

转载 设计索引的原则是什么?怎么避免索引失效?

前面的文章我们讨论过,索引的设计要根据WHERE条件和ORDER BY还有GROUP BY后面的字段进行设计,至于原因具体在我前面的文章MySQL索引的原理有详细介绍。这里我们再简单概述下。MySQL针对主键索引会维护一个B+树的结构,这个我们称之为聚簇索引,针对非主键(一般都是建立的联合索引)会对索引字段依次排序,然后从第一个字段值开始比较,第一个字段值相同就针对下一个字段值进行比较,依次往后推。如果联合索引中的字段值都是一样的,那么就根据主键来排序。另外聚簇索引(主键索引)的B+树中...

2021-05-10 18:16:03 402

转载 MySQL 一张表单个索引最多支持创建16个字段

一、MySql官网文档解释在**mysql5.***中描述如下Different limits related to tables and indexes. For example, the maximum number of ordered indexes in the cluster is determined by MaxNoOfOrderedIndexes, and the maximum number of ordered indexes per table is 16.**mysq

2021-05-10 17:30:42 2176

转载 MySQL一张表到底能放多少个字段?

1. 官方文档说明2. 测试表字段数限制2.1 测试innodb引擎表因官方文档介绍了innodb表字段限制是1017,因此可以写程序进行模拟。思路如下:a) 创建一张1个 char(1) 类型的innodb表b) 循环往该表新增字段 直至报错我使用的是python 脚本进行测试,脚本如下:#!/usr/bin/python# coding=utf-8import pymysql asmdbimport os sor_conn = mdb.connect(hos.

2021-05-10 17:24:12 3181

原创 CommandLineRunner和ApplicationRunner接口

两者功能相同,都可以在程序启动之前执行任何任务,我一般用来打印启动的日志:@Slf4j@EnableRedisHttpSession( maxInactiveIntervalInSeconds = 604800, flushMode = FlushMode.ON_SAVE, redisNamespace = "spring:session:rebate.xxx.user")@MapperScan("rebate.xxx.user.infrastruc

2021-05-10 14:50:54 88

转载 【分布式锁】05-使用Redisson中Semaphore和CountDownLatch原理

前言前面已经写了Redisson大多的内容,我们再看看Redisson官网共有哪些组件:剩下还有Semaphore和CountDownLatch两块,我们就趁热打铁,赶紧看看Redisson是如何实现的吧。我们在JDK中都知道Semaphore和CountDownLatch两兄弟,这里就不多赘述,不了解的可以再回头看看。Semaphore使用示例先看下Semaphore原理图如下:接着我们看下Redisson中使用的案例:RSemaphore semaphore .

2021-05-10 14:12:01 1702

转载 【分布式锁】04-使用Redisson实现ReadWriteLock原理

前言关于读写锁,大家应该都了解JDK中的ReadWriteLock, 当然Redisson也有读写锁的实现。所谓读写锁,就是多个客户端同时加读锁,是不会互斥的,多个客户端可以同时加这个读锁,读锁和读锁是不互斥的Redisson中使用RedissonReadWriteLock来实现读写锁,它是RReadWriteLock的子类,具体实现读写锁的类分别是:RedissonReadLock和RedissonWriteLockRedisson读写锁使用例子还是从官方文档中找的使用案例...

2021-05-10 13:53:34 578

转载 【分布式锁】03-使用Redisson实现RedLock原理

前言前面已经学习了Redission可重入锁以及公平锁的原理,接着看看Redission是如何来实现RedLock的。RedLock原理RedLock是基于redis实现的分布式锁,它能够保证以下特性:互斥性:在任何时候,只能有一个客户端能够持有锁;避免死锁: 当客户端拿到锁后,即使发生了网络分区或者客户端宕机,也不会发生死锁;(利用key的存活时间) 容错性:只要多数节点的redis实例正常运行,就能够对外提供服务,加锁或者释放锁;RedLock算法思想,意思是不能只在一个redis

2021-05-10 11:48:16 526

转载 【分布式锁】02-使用Redisson实现公平锁原理

前言前面分析了Redisson可重入锁的原理,主要是通过lua脚本加锁及设置过期时间来保证锁执行的原子性,然后每个线程获取锁会将获取锁的次数+1,释放锁会将当前锁次数-1,如果为0则表示释放锁成功。可重入原理和JDK中的可重入锁都是一致的。Redisson公平锁原理JDK中也有公平锁和非公平锁,所谓公平锁,就是保证客户端获取锁的顺序,跟他们请求获取锁的顺序,是一样的。公平锁需要排队,谁先申请获取这把锁,谁就可以先获取到这把锁,是按照请求的先后顺序来的。Redisson实现公平锁源码分析

2021-05-10 11:37:47 1858 2

3DSMax2010注册机

注册机好用

2012-11-22

空空如也

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

TA关注的人

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