自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (2)
  • 收藏
  • 关注

原创 SpringBoot集成RabbitMQ使用建议

SpringBoot的集成RabbitMQ很简单,引入starer,简单配置几个属性就能开始使用,本人在平时工作使用过程中也遇到过一些坑,所以这篇文章主要罗列一些个人的使用建议。如有不对的地方或者好的建议,欢迎指正。

2022-09-10 04:39:06 1151

原创 Mockito简单使用及原理分析

springboot+junit+mockito做单元测试,真香

2022-06-06 02:15:41 11432

原创 布隆过滤器优化内存占用过大问题

背景在平时开发需求中,用set集合在内存中做去重操作的场景经常会遇到,遇上大数据量的话,还用set集合来去重,会有内存不够用的风险。这时候就得换个数据结构来优化了,最先想到的是用字节来表示一个数据,来大大减少内存的使用。如redis的Bitmap、java工具类BitSet等。但去重的目标不一定都是数字,这时候可以使用布隆过滤器。简介布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。

2021-09-03 17:03:26 4468

原创 一次内存快溢出问题复盘

背景服务其中一个实例健康检查一直频繁上下线告警,jvm内存几乎达到

2021-09-03 15:28:24 162

原创 RoaringBitmap应用场景

背景信息几乎所有行业(如互联网、游戏、教育等)都有实时精准营销的需求。通过系统生成用户画像,在营销时通过条件组合筛选用户,快速提取目标群体,例如:电商行业中,商家在运营活动前,需要根据活动的目标群体的特征,圈选出一批目标用户进行广告推送或进行活动条件的判断。游戏行业中,商家需要根据玩家的某些特征进行圈选,针对性地发放大礼包,提高玩家活跃度。教育行业中,需要根据学生不同的特征,推送有针对性的习题,帮助学生查缺补漏。搜索、门户、视频网站等业务中,根据用户的关注热点,推送不同的内容。这些行业都有一

2021-08-25 19:58:36 1062

原创 定期删除es的数据

随着es的数据越来越多,占用磁盘容量越大,需要扩容,要花money就越多,实际上可以定期删除一些时间久远不常用的数据可以在服务器上定期执行以下脚本#!/bin/sh# example: sh ./delete_es_by_day.sh chat create_time 365index_name=$1daycolumn=$2savedays=$3format_day=$4if [ ! -n "$savedays" ]; then echo "the args is not right,

2021-08-23 14:33:51 3604 2

原创 利用Redis实现时间滑动窗口限流

利用Redis实现时间滑动窗口限流背景实现背景redisson开源框架已经提供了限流的功能,但由于项目较旧,没引入redisson,为了降低风险,用spring-redis的RedisTemplate来自行实现一个限流工具类。实现用sortSet来存储时间窗口数据,命令是ZADD,score的值为当前时间戳利用sortSet的ZREMRANGEBYSCORE命令删除时间窗口外的数据用sortSet的ZCARD来判断是否超过限流阈值代码实现@Component@Slf4jpublic

2021-08-15 13:29:49 2443

原创 改造otter

目前公司在一些不是很重要的业务场景,需要数据同步功能,会使用Otter来实现(毕竟是开源软件,重要的业务还是尽量用商用的软件)。但有些功能Otter没有实现,需要改造一下以满足业务需求。现已改造支持发送数据到RabbitMQ,支持下载腾讯云备份binlog文件。

2021-01-12 17:50:27 267

原创 SpringBoot集成flowable6.5的事件注册引擎后rabbitmq消费者不自动开启问题

背景flowable6.5后新增了事件注册引擎,对JMS,Apache Kafka和RabbitMQ具有开箱即用的支持。如果想支持其他的消息中间件也可通过添加自己的适配器来实现。问题SpringBoot项目中集成flowable6.5的事件注册引擎后,项目之前rabbitmq消费者不会自动开启。项目之前配置有RabbitMQ的的消费者(其中autoStartup可以指定是否自动开启)@S...

2020-03-18 16:27:54 1798

原创 SpringBoot+Docker快速集成ELK

一、Docker安装ELK在Docker运行ELK后,最终文件结构如下elasticsearch |- datalogstash |- conf |- logstash.confstack.ymlstart.bat步骤1:创建elasticsearch文件夹,在里面在创建一个data文件夹步骤2:创建logstash文件夹,在里面创建conf文件夹,在con...

2020-03-18 13:42:21 548

原创 本地用docker快速搭建RocketMQ

本文旨在本地电脑使用docker快速搭建RocketMQ环境,用于调试,需要对docker有一定的认识。概要基本流程拉取rocketmq镜像配置文件broker配置文件stack.yml快速启动访问控制台参考文章基本流程拉取rocketmq镜像 -> 启动namesrv -> 启动broker -> 启动web控制台拉取rocketmq镜像docker pull ro...

2020-01-19 10:42:17 668 1

原创 ThreadLocal用法及原理

与Synchonized的对照:ThreadLocal和Synchonized都用于解决多线程并发訪问。可是ThreadLocal与synchronized有本质的差别。synchronized是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。而...

2019-03-22 15:03:15 193

原创 shiro源码分析(二)-- 注解实现原理

shiro的注解实现借助于aspectj框架,先通过一个例子熟悉下aspectj用法一、小demo先在pom.xml文件添加相关依赖 <!--aspectj依赖--> <dependency> <groupId>org.aspectj</groupId> <artifact...

2019-01-03 11:51:18 1423

原创 shiro源码分析(一)--大致流程

去GitHub搜索shiro,克隆源码,然后会看到里面有samples模块,先从quickstart看起一、例子源码首先是配置文件shiro.ini[users]root = secret, adminguest = guest, guestpresidentskroob = 12345, presidentdarkhelmet = ludicrousspeed, darklord,...

2019-01-03 11:35:07 3749

原创 HashMap的红黑树实现源码分析

PS: 最近看了jdk的TreeMap、HashMap的红黑树代码,就动手用java实现了二叉树的数据结构,代码有注释,下载地址:红黑树、二叉平衡树、二叉排序树的java实现效果大致如下:相关文章:HashMap源码分析一、链表转红黑树HashMap有两个成员变量TREEIFY_THRESHOLD、MIN_TREEIFY_CAPACITY。当链表长度达到TREEIFY_THRE...

2018-11-29 11:52:30 1175

原创 ConcurrentHashMap源码分析

public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable {一些成员变量//扩容的最大容量限制private static final int MAX

2018-11-22 19:57:00 217

原创 LinkedHashMap源码分析及实现LRU算法

PS: 要先了解HashMap的实现原理HashMap源码分析一、简单介绍public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>

2018-11-16 21:27:17 206

原创 一个NIO例子

例子完成的功能是,客户端发送命令time到服务端,服务端返回当前时间给客户端。服务端逻辑代码public class MultiplexerTimeServerHandler implements Runnable { private Selector selector = null; private ServerSocketChannel servChannel = n...

2018-10-27 11:38:43 1734

原创 MyBatis整合到Spring的原理

一、整合步骤mybatis整合到spring一般配置如下添加依赖以maven为例,在pom.xml中添加 <dependency> <groupId>org.mybatis</groupId> <artifactId

2018-10-25 15:58:43 2963 4

原创 一个policy权限控制例子

首先在项目根目录创建一个test.txt空文件,执行下面的代码public class JavaPolicyTest { public static void main(String[] args) throws IOException {// 注释1: System.setProperty("java.security.policy", "test.policy");/...

2018-10-24 10:09:40 793

原创 几个JMX的例子

参考文章:开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean定义接口public interface HelloMBean { public String getName(); public void setName(String name); public String printHello(); public String...

2018-10-22 19:39:09 638

原创 SpringBoot自动配置(二)-- 原理分析

SpringBoot自定义starter可参考:SpringBoot自动配置(一)-- 自定义starterSpringBoot启动过程可参考:SpringBoot 启动流程源码笔记SpringBoot启动过程会创建应用上下文ApplicationContext,类型一般是AnnotationConfigServletWebServerApplicationContext(servlet的we...

2018-10-17 16:45:02 534 3

原创 SpringBoot自动配置(一)-- 自定义starter

一、创建自定义starter先创建一个my-starter的module,主要配置依赖如下 <artifactId>my-starter</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot<...

2018-10-17 16:40:48 421

原创 Spring component-scan源码分析(三) -- @Autowired等注解的处理

相关笔记:Spring component-scan源码分析(一) – XML解析Spring component-scan源码分析(二) – @Configuration注解处理本篇文章分析注入注解(@Autowired、@Value等)的处理,其逻辑在AutowiredAnnotationBeanPostProcessor类中。可以看到AutowiredAnnotationBeanP...

2018-10-13 15:45:43 420

原创 Spring component-scan源码分析(二) -- @Configuration注解处理

上篇文章Spring component-scan源码分析(一) – XML解析分析了Spring解析<context:component-scan …/>标签时,把扫描到的合适的类封装成BeanDefinition加入Sping容器中,本篇分析Spring如何解析带相关注解的类。从AnnotationConfigUtils的registerAnnotationConfigProce...

2018-10-13 15:36:32 334

原创 Spring component-scan源码分析(一) -- XML解析

在XML中配置component-scan通常如下<context:component-scan base-package="xxx"> <context:exclude-filter type="annotation" expression=&

2018-10-11 19:46:31 1046

原创 MySQL InnoDB存储引擎 之 锁

MySQL InnoDB存储引擎有七种锁自增锁(Auto-inc Locks)共享/排他锁(Shared and Exclusive Locks)意向锁(Intention Locks)插入意向锁(Insert Intention Locks)记录锁(Record Locks)间隙锁(Gap Locks)临键锁(Next-Key Locks)1. 自增锁(Auto-inc Lo...

2018-10-10 17:19:00 206

原创 Spring的property-placeholder原理分析

一、解析封装property-placeholder相关的BeanDefinition有两种方式:(1)在XML配置格式如下 <context:property-placeholder location="classpath*:xxxx.properties"/>(2)注解配置如下:@Configuration@PropertySource("

2018-10-10 11:29:23 2434

原创 MyBatis源码笔记(八) -- 插件实现原理

MyBatis的插件开发可参考:MyBatis简单分页插件实现插件实现通过实现MyBatis提供的Interceptor接口public interface Interceptor { //拦截执行 Object intercept(Invocation invocation) throws Throwable; //对对象进行增强 Object plugin(Object tar...

2018-10-08 14:50:04 323

原创 MyBatis简单分页插件实现

插件类,继承MyBatis的Interceptor 接口@Intercepts( @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHand...

2018-10-08 10:06:32 331

原创 MyBatis源码笔记(七) -- insert、update、delete语句的执行

首先要了解MyBatis如何动态代理接口的方法的,和JDBC基本编程参考:MyBatis源码笔记(四) – mapper动态代理执行方法主要封装在MapperMethodpublic class MapperMethod { private final SqlCommand command; private final MethodSignature method; publ...

2018-09-30 09:31:53 894

原创 SpringBoot 启动流程源码笔记

springboot启动一个项目代码例子如下 SpringApplication.run(xxxx.class, args);跟踪进去如下public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) { return run(ne

2018-09-29 11:44:19 407

原创 MyBatis源码笔记(六) -- 解析SQL语句节点封装为MappedStatement

MyBatis解析XML的SQL语句节点或注解@Select等,最终会封装成MappedStatement对象,存进configuration里,本篇分析XML解析方式从XMLMapperBuilder类的buildStatementFromContext方法开始private void buildStatementFromContext(List<XNode> list) { ...

2018-09-28 16:43:18 1255

原创 MyBatis源码笔记(五) -- <resultMap>节点解析

MyBatis会把XML文件中的节点解析封装成ResultMap,供结果映射使用从XMLMapperBuilder类的resultMapElements方法看起private void resultMapElements(List&lt;XNode&gt; list) throws Exception { //基本上就是循环把resultMap加入到Configuration里去,...

2018-09-28 16:33:49 351

原创 MyBatis源码笔记(四) -- mapper动态代理

相关参考文章:MyBatis源码笔记(一) – 大致流程MyBatis源码笔记(三) – mapper解析流程DefaultSqlSession中有个getMapper方法,是获取指定类型的代理类public &lt;T&gt; T getMapper(Class&lt;T&gt; type) { return configuration.&lt;T&gt;getMapper(type...

2018-09-26 16:05:54 189

原创 MyBatis源码笔记(三) -- mapper解析流程

mapper配置有以下几种配置方式&amp;lt;!--1.使用类路径--&amp;gt;&amp;lt;mappers&amp;gt; &amp;lt;mapper resource=&quot;org/mybatis/builder/AuthorMapper.xml&quot;/&amp;gt; ...&amp;lt;/mappers&amp;gt;&amp;lt;!--2.使用绝对url

2018-09-26 15:20:50 263

原创 MyBatis源码笔记(二) -- Configuration类

Configuration是一个贯穿mybatis执行流程的一个类,它记录着所有配置信息,代理类、缓存、插件等等下面列出一些属性public class Configuration { //默认不用驼峰转换 protected boolean mapUnderscoreToCamelCase = false; //默认禁用允许延时加载 protected boole...

2018-09-26 15:15:51 179

原创 MyBatis源码笔记(一) -- 大致流程

测试代码如下://获得资源文件流mybatis-config.xmlReader reader = Resources.getResourceAsReader(&quot;mybatis-config.xml&quot;);//创建SqlSessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(r...

2018-09-25 17:26:23 316

原创 MySQL InnoDB存储引擎 之 事务

事务特性:原子性:事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响;一致性:事务执行前和执行后必须处于一致性状态;隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况...

2018-09-25 11:00:20 217

转载 CORS简介(转)

在本文中,我们就将对一种跨域访问技术CORS(Cross-Origin Resource Sharing)进行介绍。为什么要用CORS在需要做出一个技术决定时,我们常常需要给出适当的理由。就CORS而言,使用它的根本原因就是要完成资源的跨域访问,也就是如何绕过Same-origin Policy。那么什么是Same-origin Policy呢?简单地说,在一个浏览器中访问的网站不能访问另一...

2018-09-21 11:27:59 428

红黑树、二叉平衡树、二叉排序树的java实现

红黑树、二叉平衡树、二叉排序树的java实现,做了泛型封装,可以装任何对象,其中还附带工具类,可以友好一点地打印树,还有各种遍历树方法的递归实现和非递归实现。

2018-11-29

Netty权威指南 第2版 带书签目录 完整版

Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的,它已经得到成百上千的商用项目验证,例如Hadoop的RPC框架avro使用Netty作为底层通信框架。很多其它业界主流的RPC框架,也使用Netty来构建高性能的异步通信能力。

2018-11-07

空空如也

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

TA关注的人

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