- 博客(67)
- 资源 (2)
- 收藏
- 关注
原创 SpringBoot集成RabbitMQ使用建议
SpringBoot的集成RabbitMQ很简单,引入starer,简单配置几个属性就能开始使用,本人在平时工作使用过程中也遇到过一些坑,所以这篇文章主要罗列一些个人的使用建议。如有不对的地方或者好的建议,欢迎指正。
2022-09-10 04:39:06
1295
原创 布隆过滤器优化内存占用过大问题
背景在平时开发需求中,用set集合在内存中做去重操作的场景经常会遇到,遇上大数据量的话,还用set集合来去重,会有内存不够用的风险。这时候就得换个数据结构来优化了,最先想到的是用字节来表示一个数据,来大大减少内存的使用。如redis的Bitmap、java工具类BitSet等。但去重的目标不一定都是数字,这时候可以使用布隆过滤器。简介布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。
2021-09-03 17:03:26
5463
2
原创 RoaringBitmap应用场景
背景信息几乎所有行业(如互联网、游戏、教育等)都有实时精准营销的需求。通过系统生成用户画像,在营销时通过条件组合筛选用户,快速提取目标群体,例如:电商行业中,商家在运营活动前,需要根据活动的目标群体的特征,圈选出一批目标用户进行广告推送或进行活动条件的判断。游戏行业中,商家需要根据玩家的某些特征进行圈选,针对性地发放大礼包,提高玩家活跃度。教育行业中,需要根据学生不同的特征,推送有针对性的习题,帮助学生查缺补漏。搜索、门户、视频网站等业务中,根据用户的关注热点,推送不同的内容。这些行业都有一
2021-08-25 19:58:36
1296
原创 定期删除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
3941
2
原创 利用Redis实现时间滑动窗口限流
利用Redis实现时间滑动窗口限流背景实现背景redisson开源框架已经提供了限流的功能,但由于项目较旧,没引入redisson,为了降低风险,用spring-redis的RedisTemplate来自行实现一个限流工具类。实现用sortSet来存储时间窗口数据,命令是ZADD,score的值为当前时间戳利用sortSet的ZREMRANGEBYSCORE命令删除时间窗口外的数据用sortSet的ZCARD来判断是否超过限流阈值代码实现@Component@Slf4jpublic
2021-08-15 13:29:49
2622
原创 改造otter
目前公司在一些不是很重要的业务场景,需要数据同步功能,会使用Otter来实现(毕竟是开源软件,重要的业务还是尽量用商用的软件)。但有些功能Otter没有实现,需要改造一下以满足业务需求。现已改造支持发送数据到RabbitMQ,支持下载腾讯云备份binlog文件。
2021-01-12 17:50:27
327
原创 SpringBoot集成flowable6.5的事件注册引擎后rabbitmq消费者不自动开启问题
背景flowable6.5后新增了事件注册引擎,对JMS,Apache Kafka和RabbitMQ具有开箱即用的支持。如果想支持其他的消息中间件也可通过添加自己的适配器来实现。问题SpringBoot项目中集成flowable6.5的事件注册引擎后,项目之前rabbitmq消费者不会自动开启。项目之前配置有RabbitMQ的的消费者(其中autoStartup可以指定是否自动开启)@S...
2020-03-18 16:27:54
1958
原创 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
592
原创 本地用docker快速搭建RocketMQ
本文旨在本地电脑使用docker快速搭建RocketMQ环境,用于调试,需要对docker有一定的认识。概要基本流程拉取rocketmq镜像配置文件broker配置文件stack.yml快速启动访问控制台参考文章基本流程拉取rocketmq镜像 -> 启动namesrv -> 启动broker -> 启动web控制台拉取rocketmq镜像docker pull ro...
2020-01-19 10:42:17
749
1
原创 ThreadLocal用法及原理
与Synchonized的对照:ThreadLocal和Synchonized都用于解决多线程并发訪问。可是ThreadLocal与synchronized有本质的差别。synchronized是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。而...
2019-03-22 15:03:15
241
原创 shiro源码分析(二)-- 注解实现原理
shiro的注解实现借助于aspectj框架,先通过一个例子熟悉下aspectj用法一、小demo先在pom.xml文件添加相关依赖 <!--aspectj依赖--> <dependency> <groupId>org.aspectj</groupId> <artifact...
2019-01-03 11:51:18
1502
原创 shiro源码分析(一)--大致流程
去GitHub搜索shiro,克隆源码,然后会看到里面有samples模块,先从quickstart看起一、例子源码首先是配置文件shiro.ini[users]root = secret, adminguest = guest, guestpresidentskroob = 12345, presidentdarkhelmet = ludicrousspeed, darklord,...
2019-01-03 11:35:07
3824
原创 HashMap的红黑树实现源码分析
PS: 最近看了jdk的TreeMap、HashMap的红黑树代码,就动手用java实现了二叉树的数据结构,代码有注释,下载地址:红黑树、二叉平衡树、二叉排序树的java实现效果大致如下:相关文章:HashMap源码分析一、链表转红黑树HashMap有两个成员变量TREEIFY_THRESHOLD、MIN_TREEIFY_CAPACITY。当链表长度达到TREEIFY_THRE...
2018-11-29 11:52:30
1261
原创 ConcurrentHashMap源码分析
public class ConcurrentHashMap&amp;lt;K,V&amp;gt; extends AbstractMap&amp;lt;K,V&amp;gt; implements ConcurrentMap&amp;lt;K,V&amp;gt;, Serializable {一些成员变量//扩容的最大容量限制private static final int MAX
2018-11-22 19:57:00
257
原创 LinkedHashMap源码分析及实现LRU算法
PS: 要先了解HashMap的实现原理HashMap源码分析一、简单介绍public class LinkedHashMap&amp;amp;amp;lt;K,V&amp;amp;amp;gt; extends HashMap&amp;amp;amp;lt;K,V&amp;amp;amp;gt; implements Map&amp;amp;amp;lt;K,V&amp;amp;amp;gt;
2018-11-16 21:27:17
247
原创 一个NIO例子
例子完成的功能是,客户端发送命令time到服务端,服务端返回当前时间给客户端。服务端逻辑代码public class MultiplexerTimeServerHandler implements Runnable { private Selector selector = null; private ServerSocketChannel servChannel = n...
2018-10-27 11:38:43
1793
原创 MyBatis整合到Spring的原理
一、整合步骤mybatis整合到spring一般配置如下添加依赖以maven为例,在pom.xml中添加 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.mybatis&amp;lt;/groupId&amp;gt; &amp;lt;artifactId
2018-10-25 15:58:43
3020
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
844
原创 几个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
734
原创 SpringBoot自动配置(二)-- 原理分析
SpringBoot自定义starter可参考:SpringBoot自动配置(一)-- 自定义starterSpringBoot启动过程可参考:SpringBoot 启动流程源码笔记SpringBoot启动过程会创建应用上下文ApplicationContext,类型一般是AnnotationConfigServletWebServerApplicationContext(servlet的we...
2018-10-17 16:45:02
576
3
原创 SpringBoot自动配置(一)-- 自定义starter
一、创建自定义starter先创建一个my-starter的module,主要配置依赖如下 <artifactId>my-starter</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot<...
2018-10-17 16:40:48
464
原创 Spring component-scan源码分析(三) -- @Autowired等注解的处理
相关笔记:Spring component-scan源码分析(一) – XML解析Spring component-scan源码分析(二) – @Configuration注解处理本篇文章分析注入注解(@Autowired、@Value等)的处理,其逻辑在AutowiredAnnotationBeanPostProcessor类中。可以看到AutowiredAnnotationBeanP...
2018-10-13 15:45:43
471
原创 Spring component-scan源码分析(二) -- @Configuration注解处理
上篇文章Spring component-scan源码分析(一) – XML解析分析了Spring解析<context:component-scan …/>标签时,把扫描到的合适的类封装成BeanDefinition加入Sping容器中,本篇分析Spring如何解析带相关注解的类。从AnnotationConfigUtils的registerAnnotationConfigProce...
2018-10-13 15:36:32
400
原创 Spring component-scan源码分析(一) -- XML解析
在XML中配置component-scan通常如下&amp;amp;lt;context:component-scan base-package=&amp;quot;xxx&amp;quot;&amp;amp;gt; &amp;amp;lt;context:exclude-filter type=&amp;quot;annotation&amp;quot; expression=&
2018-10-11 19:46:31
1109
原创 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
256
原创 Spring的property-placeholder原理分析
一、解析封装property-placeholder相关的BeanDefinition有两种方式:(1)在XML配置格式如下 &amp;lt;context:property-placeholder location=&quot;classpath*:xxxx.properties&quot;/&amp;gt;(2)注解配置如下:@Configuration@PropertySource(&quot;
2018-10-10 11:29:23
2560
原创 MyBatis源码笔记(八) -- 插件实现原理
MyBatis的插件开发可参考:MyBatis简单分页插件实现插件实现通过实现MyBatis提供的Interceptor接口public interface Interceptor { //拦截执行 Object intercept(Invocation invocation) throws Throwable; //对对象进行增强 Object plugin(Object tar...
2018-10-08 14:50:04
373
原创 MyBatis简单分页插件实现
插件类,继承MyBatis的Interceptor 接口@Intercepts( @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHand...
2018-10-08 10:06:32
369
原创 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
1019
原创 SpringBoot 启动流程源码笔记
springboot启动一个项目代码例子如下 SpringApplication.run(xxxx.class, args);跟踪进去如下public static ConfigurableApplicationContext run(Class&amp;amp;amp;amp;amp;amp;lt;?&amp;amp;amp;amp;amp;amp;gt; primarySource, String... args) { return run(ne
2018-09-29 11:44:19
441
原创 MyBatis源码笔记(六) -- 解析SQL语句节点封装为MappedStatement
MyBatis解析XML的SQL语句节点或注解@Select等,最终会封装成MappedStatement对象,存进configuration里,本篇分析XML解析方式从XMLMapperBuilder类的buildStatementFromContext方法开始private void buildStatementFromContext(List&amp;amp;amp;lt;XNode&amp;amp;amp;gt; list) { ...
2018-09-28 16:43:18
1364
原创 MyBatis源码笔记(五) -- <resultMap>节点解析
MyBatis会把XML文件中的节点解析封装成ResultMap,供结果映射使用从XMLMapperBuilder类的resultMapElements方法看起private void resultMapElements(List<XNode> list) throws Exception { //基本上就是循环把resultMap加入到Configuration里去,...
2018-09-28 16:33:49
425
原创 MyBatis源码笔记(四) -- mapper动态代理
相关参考文章:MyBatis源码笔记(一) – 大致流程MyBatis源码笔记(三) – mapper解析流程DefaultSqlSession中有个getMapper方法,是获取指定类型的代理类public <T> T getMapper(Class<T> type) { return configuration.<T>getMapper(type...
2018-09-26 16:05:54
241
原创 MyBatis源码笔记(三) -- mapper解析流程
mapper配置有以下几种配置方式&lt;!--1.使用类路径--&gt;&lt;mappers&gt; &lt;mapper resource="org/mybatis/builder/AuthorMapper.xml"/&gt; ...&lt;/mappers&gt;&lt;!--2.使用绝对url
2018-09-26 15:20:50
315
原创 MyBatis源码笔记(二) -- Configuration类
Configuration是一个贯穿mybatis执行流程的一个类,它记录着所有配置信息,代理类、缓存、插件等等下面列出一些属性public class Configuration { //默认不用驼峰转换 protected boolean mapUnderscoreToCamelCase = false; //默认禁用允许延时加载 protected boole...
2018-09-26 15:15:51
241
原创 MyBatis源码笔记(一) -- 大致流程
测试代码如下://获得资源文件流mybatis-config.xmlReader reader = Resources.getResourceAsReader("mybatis-config.xml");//创建SqlSessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(r...
2018-09-25 17:26:23
370
原创 MySQL InnoDB存储引擎 之 事务
事务特性:原子性:事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响;一致性:事务执行前和执行后必须处于一致性状态;隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况...
2018-09-25 11:00:20
313
转载 CORS简介(转)
在本文中,我们就将对一种跨域访问技术CORS(Cross-Origin Resource Sharing)进行介绍。为什么要用CORS在需要做出一个技术决定时,我们常常需要给出适当的理由。就CORS而言,使用它的根本原因就是要完成资源的跨域访问,也就是如何绕过Same-origin Policy。那么什么是Same-origin Policy呢?简单地说,在一个浏览器中访问的网站不能访问另一...
2018-09-21 11:27:59
494
红黑树、二叉平衡树、二叉排序树的java实现
2018-11-29
Netty权威指南 第2版 带书签目录 完整版
2018-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人