自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(257)
  • 资源 (18)
  • 收藏
  • 关注

原创 将在使用的git分支的历史其中的一个版本切换成新的git分支

2.3.右键Copy Revision Number可以获取到对应的版本号hash值,如0511377986b55ba9915762612287fe74378d1f39。其中new-branch替换成你自己创建新分支的名称。hash替换成上述获取的commit hash值。2.1通过idea来获取,打开git提交历史。命令查看提交历史并找到对应的提交哈希值。2.2右键其中要切换的版本。1.(命令行)可以使用。

2024-04-01 15:56:28 324

原创 es中索引那些事

在ES中将所有的词项通过字典顺序排列好后存储起来,这个数据结构叫词项字典(Term Directory)。实际业务中每一个词项并不只存在一个文档中,而是关联一个文档id的列表,ES中称为Posting List(关联文档ID的列表)。并且ES将词项的前缀(Term Index)拿出,构建了一个FST(相当于Term Directory的index)

2023-06-16 17:40:45 1420

原创 caffeine框架 W-TinyLFU算法详解

最近刚产生的缓存项进入Window区,不会被淘汰;访问频率高的缓存项进入Protected区,也不会淘汰;通过这种机制,平衡了访问频率和访问时间新鲜程度两个维度因素,尽量将新鲜的和访问频率高的缓存项保留在缓存中。

2022-10-19 18:00:23 1809 1

原创 垃圾回收器-G1垃圾回收器详解

1.G1不同于传统的cms等垃圾回收器,没有连续的年轻代和年老代,而是将jvm堆划分为了多个大小相等的区域。默认是2048块(XX:G1HeapRegionSize参数指定每块大小,必须是2次幂),每块大小为jvm堆内存/区域数量。2.G1初始年轻代是占堆内存5%(-XX:G1NewSizePercent设置新生代初始占比),会随着系统运行变化增多(区域会在年轻代和年老老代变化),但不会超过60%(-XX:G1MaxNewSizePercent设置年轻代最大占比)。g1的Eden区同其他gc,默认都是8

2022-08-21 17:39:13 1900

原创 垃圾回收器-CMS及常用回收器分析

1.cms、g1和zgc其实原理差不多2.cms标记整理时,会扫描直接引用对象 如 new A();但不去扫描a里面的其他引用对象3.为什么csm初始标记时要stw,不停一直有新增标记不完4..jvm在3g以上才适合cms5.在cms并发标记的时候会出现初始标记的对象发生了改变,这时就需要进行重新标记(采用三色标记增量算法)。重新标记后,进入到并发清理阶段(在该阶段如果来了一个不需要清理但无标记的对象,会不会被误删?...

2022-08-07 15:38:58 1343

原创 BPAAS化建设实践-基本流程篇

这是一个基本流程图,之间的交互细节会在之后详解。这里需要知道的几点:1.层级的划分2.都经过了哪些流程3.对象何时进行了转换4.建立一些模糊的概念

2022-08-06 15:58:59 1272

原创 java easyExcel导入简单使用

将excel的对象读入到了dataHolder中,需要自行修改的是路径path和Excel实体TestExcelEntity。如果本地想简单做一个数据导入,比如刷数之类的调用,就完全可以使用一个比较轻量化的工具类来实现。

2022-07-16 16:55:51 527

原创 mac Catalina 没有根目录写权限问题解决

如图:mca环境,在idea运行时遇到这样的错误,文件只有可读权限,自己通过root修改文件权限后还是不能编辑。 解决方案: 一:修改SIP权限1.打开终端,输入csrutil status,显示enabled表示启用了SIP,接下来需要禁用SIP;2.重启mac,按住command+R,进入恢复模式;3.点击屏幕左上角实用工具第三栏:终端,打开终端,输入csrutil disable,重启;4.重启后会发现仍然不能新建文件,会提示Read-only file system,此时需要重新挂载一下根目录:su

2022-07-11 17:05:33 2019

原创 es7不使用父子和嵌套关系来实现一对多功能

背景:现有一个es查询,不得已情况下在es中做了父子关联,但es是一个搜索框架,不适合逻辑运算,所以父子查询以及nested嵌套查询都特别慢。在实际场景下,有一个3亿数据量的es索引里面还包含了一部分子查询,每次调用子查询的时候都会超时,所以将这块从父子关系改为动态标模式的查询关联,来提高查询速度。比如我现在的关系是这样的:门店商品和上架渠道是1对多的关系。在一个门店商品索引里商品信息存在门店索引维度,渠道信息存在渠道维度(如:当前渠道上架时间)如上述情况采用动态mapping的结构来实现这样的关系:1.建

2022-06-07 18:02:05 534 1

原创 批量查询接口如何巧妙利用单查询接口中的@Cacheable

如标题所述,本文是为了探讨在已有jvm缓存的单查询接口的基础上增加批量查询接口功能,要如何实现,如何优化,如何抉择。spring-cache用法请自行查询。demo:单查询接口如下:@Servicepublic class BizCacheServiceImpl implements BizCacheService { /** * 单查询接口 * * @param id * @return */ @Cacheable(k

2022-04-29 19:11:08 1450

原创 java poi导出简易工具类

该工具类支持简单的导出逻辑,内容极少,可方便接入测试。maven依赖: <!--excel导出类--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version>

2022-04-26 09:52:17 407 1

原创 合理的在线程池中使用CountDownLatch锁

问题:使用线程池来进行多线程操作的话,怎么实现让主线程等待其他线程的任务执行完后再进行接下来的操作。解决方案:线程池+CountDownLatchdemo:public void testLock(){ //模拟并发 List<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(2); ids.add(3); ids.a

2022-04-12 21:35:01 1103

原创 es QueryBuilder实际场景应用

java中es的QueryBuilder的构建方式这里只列举经常使用的,都是基于boolQuery查询。1.查询list条件 termsQuery,常用于状态值,id等2.查询单个条件termQuery,常用于字符串查询,如名称等3.查询范围rangeQuery,常用于一个范围查询,如价格区间等4.搜索词拆分模糊查询 matchQuery,常用于内容检索,如文章内容等5.子查询hasChildQuery,子查询最好用should连接public QueryBuilder ...

2022-03-26 13:52:27 5614 1

原创 利用反射覆盖类对象的默认值

一个demo:通过反射,将子类和父类中的属性值替换掉。1.一个子类和一个父类:public class BaseVo { private Boolean canCheck = true; public Boolean getCanCheck() { return canCheck; } public void setCanCheck(Boolean canCheck) { this.canCheck = canCheck;

2022-03-26 13:39:44 280

原创 使用CompletableFuture提高并发处理能力

背景:在拼接参数对象时,需要从多个系统里获取参数,比如商品参数要从商品系统获取,价格参数要从价格系统获取,库存参数要从库存系统获取,大部分都是一个rpc调用。方案:为了提高接口性能,采用多线程,使用CompletableFuture来完成。使用到CompletableFuture中的api:1.异步获取方法的返回值public static <U> CompletableFuture<U> supplyAsync(Supplier<U> suppl

2022-02-16 10:59:59 929

转载 零售商品ES同步方案实践比较

1、需求背景在零售场景中,有大量的搜索和排序的场景,比如典型的商品名称,商品条码,外部商品编码等搜索,还有按照价格,销量排序等操作,在微服务的架构下,这些数据大多数都是异构的,代码实现在不同的服务中,用mysql来实现这样复杂的操作,就显得捉襟见肘,就需要额外的工具或中间件来完成这样的功能。总体来说,有以下两种思路: 设计一个大宽表,每次业务的增删改操作都再写一份到这张表中。 引入专门的中间件来解决该问题,比如es。 前者的双写需要花大量的开发成本,而且在复杂业务场景下,容易出错

2022-02-15 16:24:32 1140

原创 aop和自定义注解实际使用场景

aop配合自定义注解实现了什么?1.将验证逻辑放在aop中,减少对业务代码的侵入。2.自定义注解可以实现自定义化是否使用aop。3.当然也可以将结果放在threadLocal里面存储。1.定义一个自定义注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface userCheck { int value() default 0;}2.定义一个接口@User

2022-01-10 18:15:16 562

原创 es语法入门

Elasticsearch简介Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。能够达到实时搜索,稳定,可靠,快速,安装使用方便。客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。ElasticSearch与Lucene的关系Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库(框架)但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用中,并且Lucene的配置及使用非常复杂

2022-01-09 19:34:13 979

原创 windows环境 es及基本插件安装

一.elasticSearches下载 Download Elasticsearch | Elastic下载最新版本7.15版本运行报错,选用7.6.1版本windows下解压 运行bin文件夹下的elasticsearch.bat,如果没有额外配置 访问 http://127.0.0.1:9200/ 出现内容即成功!二.可视化工具Kibana2.客户端Kibana下载 Download Kibana Free | Get Started Now | Elastic与es版本保持一致

2022-01-04 14:53:32 1235

原创 Collectors.toMap方法报Duplicate key xxx错误信息

问题产生的原因:使用该方法时,转换后map的key重复,导致出现该错误。解决方法:使用toMap的重载方法Collectors.toMap(keyMapper, valueMapper, mergeFunction);代码示例: Map<String, Double> stockMap = new HashMap<>(); //改动前 stockMap = skuDataPoList.stream().collect(Collectors.toM

2021-11-01 16:48:07 946

原创 Netty进阶(二) Springboot集成Netty实现WebSocket服务

前置技术:springboot、netty、websocket的基本概念WebSocket介绍在WebSocket概念出来之前,如果页面要不停地显示最新的价格,那么必须不停地刷新页面,或者用一段js代码每隔几秒钟发消息询问服务器数据。而使用WebSocket技术之后,当服务器有了新的数据,会主动通知浏览器。每创建一个浏览器会话就创建一个WebServer对象。里面有四个方法:OnOpen表示有浏览器链接过来的时候被调用OnClose表示浏览器发出关闭请求的时候被调用OnMe...

2021-06-04 09:19:48 3316 1

原创 Netty入门(一) 简单介绍和实现多人聊天室功能

前置技术:需要了解NIO多路复用技术。Netty相对于NIO做了什么NIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握Selector、 ServerSocketChannel、 SocketChannel、 ByteBuffer等。开发工作量和难度都非常大: 例如客户端面临断线重连、 网络闪断、心跳处理、半包读写、 网络拥塞和异常流的处理等等。Netty 对 JDK 自带的 NIO 的 API 进行了良好的封装,解决了上述问题。且Netty拥有高性能、 吞吐量更高,延迟更低,减少资

2021-05-24 16:14:02 458

原创 BlockingQueue之ArrayBlockingQueue阻塞操作源码分析

概要BlockingQueue,是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题 的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者put操作,并且 BlockingQueue提供了超时return null的机制,在许多生产场景里都可以看到这个工具的 身影队列类型1. 无限队列 (unbounded queue ) - 几乎可以无限增长2. 有限队列 ( bounded queue ) - 定义了最大容量队列数据结构队列实质就是

2021-05-07 18:23:48 199

原创 redis分布式锁实战由浅入深解决并发超卖问题

redis分布式锁是为了解决什么问题?为了解决synchronized在分布式情况下无法实现同步的问题,因为synchronized同步的是一个jvm的方法,多个jvm的话是做不到的。1. 实现redis 基本业务减库存场景Integer stock = (Integer)redisTemplate.opsForValue().get("stock");log.info("还剩"+stock);if (stock<=0){ log.info("抢购失败");}redisT

2021-05-06 12:02:01 871

原创 spring security 过滤器链嵌入原理

spring security 是如何将自己的过滤器加到了tomcat的过滤器链中的?原理也就是这样:1.当过滤器链执行到DelegatingFilterProxy的doFilter方法时,DelegatingFilterProxy委托给了FilterChainProxy去处理。(这里是用来委托模式)2.FilterChainProxy将自己的过滤器链拿过来然后执行doFilter方法。FilterChainProxy的doFilterInternal方法源码:private vo

2021-04-01 09:19:59 724

原创 mysql查询条件有两个独立的索引同时,mysql使用谁

先说一下结论:哪个索引区分度大,筛选更快就使用哪个验证一下来一张测试表建表语句CREATE TABLE `a` ( `id` int(255) DEFAULT NULL, `index1` varchar(255) DEFAULT NULL, `index2` varchar(255) DEFAULT NULL, KEY `index1` (`index1`), KEY `index2` (`index2`)) ENGINE=InnoDB DEFAULT .

2021-03-19 09:15:31 5141

原创 ThreadLocalRandom 在多线程环境下随机数一致问题

首先ThreadLocalRandom的出现是为了解决什么问题?就是为了解决在多线程下使用单个Random实例生成随机数时,当多个线程同时计算随机数来计算新的种子时,多个线程会竞争同一个原子变量的更新操作,由于原子变量的更新是CAS操作,同时只有一个线程会成功,所以会造成大量线程进行自旋重试,这会降低并发性能。而ThreadLocalRandom会使用初始化它的线程来填充seed,如果你把它在线程之间共享,就会导致多个线程使用相同的 seed,进而产生的随机数一样。说明白点就是用法错了,设计者的

2021-03-08 22:32:51 1553

原创 以ReentrantLock为例读AQS独占方法加锁解锁源码

首先,抛出一个问题什么是AQS?AQS (AbstractQueuedSynchronizer,抽象队列同步器)为线程的同步和等待等操作提供一个基础模板类。尽可能多的实现可重入锁,读写锁同步器所有需要的功能。队列同步器内部实现了线程的同步队列,独占或是共享的获取方式等,使其只需要少量的代码便可以实现目标功能。一般来说,AQS的子类应以其他类的内部类的形式存在,然后使用代理模式调用子类和AQS本身的方法实现线程的同步。以ReentrantLock举例,外界调用ReentrantLock,R

2021-01-20 21:20:41 164

原创 java堆栈方法区里都存了什么

首先JDK1.7和1.8是不同的。先说JDK1.7:栈:基本类型的对象和类的引用变量,局部变量。堆:对象,成员变量方法区:静态变量,字符串常量池,类信息,运行时常量池再说JDK1.8:栈:基本类型的对象和类的引用变量,局部变量。堆:对象,成员变量,静态变量,字符串常量池方法区:类信息,运行时常量池...

2021-01-11 20:34:59 1523 1

原创 深度解析String s=“1“生成几个对象系列问题

JVM中的常量池说字符串之前要说一下jvm中的常量池,JVM中常量池有三个:1.运行时常量池 (常说的常量池,HSDB可以看到,InstanceKlass的一个属性 ConstantPool* _constants; 存在方法区(jdk1.8元空间))2.字符串常量池 (String pool 存在堆中)3.class文件中的常量池 (Constant pool , javap -v 可以看到, 存在硬盘上)该篇重点看字符串常量池,先看一下字符串常量池的结构:即String Pool

2021-01-06 17:11:51 850

原创 双亲委派机制及打破双亲委派示例

双亲委派机制在加载类的时候,会一级一级向上委托,判断是否已经加载,从自定义类加载器-》应用类加载器-》扩展类加载器-》启动类加载器,如果到最后都没有加载这个类,则回去加载自己的类。双亲委托有个弊端:不能向下委派,不能不委派怎么打破双亲委派机制:(也就是能向下委派和不委派)自定义类加载器(不委派)spi机制(向下委派)打破双亲委派打破双亲委派的两种方式:1.通过spi机制,使用ServiceLoader.load去加载2.通过自定义类加载器,继承classloade

2021-01-01 20:22:03 4731 1

原创 JVM类结构及加载过程

Java的每个类,在JVM中,都有一个对应的Klass类实例与之对应,存储类的元信息如:常量池、属性信息、方法信息。jvm中类结构klass InstanceKlass java类(非数组)普通的Java类在JVM中对应的是instanceKlass类的实例 InstanceMirrorKlass 用于表示java.lang.Class,Java代码中获取到的Class对象,实际上就是这个C++类的实例,存储在堆区,学名镜像类...

2020-12-30 14:43:26 259 3

原创 如何使用HSDB及sawindbg.dll问题解决

如何使用HSDB?进入到jdk的lib文件夹下 ,打开cmd,执行命令 java -cp sa-jdi.jar sun.jvm.hotspot.HSDB,会打开一个HSDB的图形化界面。跑一个不会停的项目,在idea终端使用jps命令找出端口号,1272就是我现在跑的项目打开HSDB ,file-》attach ,输入1272端口号确认。报错:Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: Can't load

2020-12-30 10:23:38 921

原创 springboot源码分析(二)事件驱动机制与配置文件加载

第一篇分析了springboot的启动流程和tomcat内嵌过程。文章地址:https://blog.csdn.net/qq_39404258/article/details/111191959。该篇将重点分析一下事件驱动机制与配置文件加载。事件驱动机制事件驱动机制是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。事件驱动的一个常见形式便是发布-订阅模式。事件机制主要由三个部分组成:事件源(so

2020-12-16 17:25:11 881

原创 springboot源码分析 (一)启动流程及内嵌tomcat源码

本来想一篇分析完springboot核心源码的,发现内容有点多,就拆分为多个章节。按照个人理解,springboot核心有这么几个(相对于spring来说):1.tomcat是如何内嵌的2.自动装配原理 自动装配稍微分析了一下,可能不是很详细自定义starter及自动配置源码分析3.事件驱动机制 4.配置文件怎么被加载的5.热部署原理这一章作为起点,先分析一下springboot启动流程和tomcat是如何被内嵌的,不对其他问题做过多分析。springboot启动流程...

2020-12-15 10:49:24 466

原创 spring源码解析 (七) 事务底层源码实现

1.spring事务的本质数据库中的事务默认存在,只不过每次都自动提交了,数据库中这个参数--autoCommitd=true其本质是 begin sql commit而spring事务其本质是数据库一致,也是begin sql commit ,只不过将autoCommitd设置为了false。而每个事务其实都是一个数据库连接,根据不同的事务传播机制进行挂起,保存点等操作。spring事务执行还是通过代理织入的一个小demo:如果对象直接调用自己的方法,那么这个@Transactio

2020-12-03 14:47:51 411

原创 spring源码解析 (六)aop代理选择、使用和执行逻辑源码分析

spring设置代理的方法首先spring设置代理的方法有两种:手动代理和自动代理。而自动代理的方式又有两种:通过实现PointcutAdvisor接口和@Aspect注解。那么接下来就详细说一下这个过程。手动代理直接操作代理底层类ProxyFactoryProxyFactory proxyFactory = new ProxyFactory();proxyFactory.setTarget(new UserService()); //1.设置目标对象proxyFactory.add

2020-12-01 11:32:07 1179

原创 spring源码解析(五) 循环依赖

1.什么是循环依赖?Bean A → Bean B → Bean A2.循环依赖造成的结果当SpringBoot正在加载所有Bean时,SpringBoot尝试以能正常创建Bean的顺序去创建Bean。这样会抛出异常。┌─────┐| testA defined in class path resource [com/chuan/config/TestConfig.class]↑ ↓| testB defined in class path resource [com/c

2020-11-23 16:01:39 394

原创 spring源码解析(四) 推断构造方法

该篇以createBeanInstance方法为起点分析推断构造方法怎么一步步到createBeanInstance方法refresh()-》finishBeanFactoryInitialization-》preInstantiateSingletons-》getBean-》 doGetBean-》createBean-》doCreateBean-》createBeanInstance推断构造方法源码推断构造方法是在创建实例化时进行推断的,也就是这个createBeanInstance方法

2020-11-18 11:46:26 674 1

原创 spring源码解析(三) applicationContext启动过程

applicationContext启动过程 首先去准备容器,也就是 new一个applicationcontext,Config.class为@ComponentScan注解标记的类。AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(Config.class);调用它自己的构造方法。public AnnotationConfigApplication.

2020-11-16 16:38:17 603 1

sawindbg.dll

解决windows10使用HSDB,sawindbg.dll报错,将该文件放入报错的地方,重复就替换。该文件为64位操作系统的dll。

2020-12-29

activemq-5.15+mysqljdbc配置.zip

activeMQ-5.15版本,里面更改了activeMQ配置,新增了mysql的连接内容。lib里添加了durid和mysql连接的jar文件

2020-06-29

shiro jwt登录认证

该项目使用了springboot、mybaits-plus、jwt、shiro、redis。mybaits-plus基本没用,只做了一次数据库查询,redis暂时不使用,登录验证成功后再追加redis操作。

2020-05-20

青豆博客项目.zip

该项目为实习阶段开发的项目,只使用了三层架构设计理念,并未使用任何框架,包含sql文件,项目的源代码。仅供参考!

2020-02-17

简历模板商城项目.zip

实习时做的项目,采用SSM框架,并使用分布式dubbo,Freemaker等技术,包含sql文件。仅供参考!仅供参考!仅供参考!

2020-02-17

贪吃蛇最基本功能.zip

自学过程中写的小游戏,仅供参考!

2020-02-17

打字游戏源码.zip

https://blog.csdn.net/qq_39404258/article/details/79628776,该博文的源码以及图片资源

2020-02-17

springShiro.zip

简单连接数据库,springboot,mybatis,shiro框架整合,实现了粗粒度权限的demo。侧重于shiro的入门使用

2020-02-17

springrest.zip

spring data rest 练习代码,基于JPA实现简单的增删改查,压缩包包含了一个sql文件和java代码

2020-02-04

maven-jar-plugin-2.6.jar

maven-jar-plugin-2.6.jar。解决maven官网上下载不下来或者下载速度慢的问题。

2020-02-01

springcloud.zip

springcloud入门,第一个生产者消费者项目,加上了Eureka注册中心,适合于新手入门。 博客地址:https://blog.csdn.net/qq_39404258/article/details/89552548

2019-12-10

连接linux.zip

远程连接linux工具,两个可执行文件exe,一个为图形化界面,一个为命令行界面

2019-11-04

微信小程序电商平台(前端模板)

微信小程序电商的前端模板,没有后台逻辑。页面包括 首页 购物车 地址管理页 个人中心 发票管理 发票列表 我的订单 我的消息 地址编辑 我的收藏 商品详情 商品规格弹窗 评论列表 我的评论 商品分类 订单确认 订单详情 这些页面

2019-04-24

ssm框架所需全部jar包

ssm框架所需全部jar包 mybatis,spring,springmvc,mysql数据库

2018-10-13

lucene增删改查+IKAnalyzer

里面含有lucene全文检索所需要的一些jar包以及中文检索器IKAnalyzer

2018-09-15

unit4工具类

这里有junit4所需要的jar工具包:hamcrest-core-1.3.jar、junit-4.12.jar

2018-08-20

spring框架的jar

commons-logging-1.0.4.jar 、spring-beans-3.2.4.RELEASE.jar、spring-context-3.2.4.RELEASE.jar、spring-core-3.2.4.RELEASE.jar、spring-expression-3.2.4.RELEASE.jar

2018-08-20

oracle驱动包bjdbc6

bjdbc6用于mybatis框架,如果需要其他资源,例:jstl包、jdbc驱动。

2018-07-25

空空如也

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

TA关注的人

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