自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 线程池ThreadPoolExecutor

什么是线程池为了避免系统频繁的创建和销毁线程,我们可以让创建的线程复用。在线程池当中总有几个活跃的线程,在需要使用线程的时候拿到一个空闲的线程,当工作完成了的时候,并不急这把这个线程关掉,而是把线程归还到线程池当中,方便给他人使用总而言之,在使用线程池之后,开启线程就变成了在线程池当中找到一个空闲的线程,销毁线程变成了归还线程到线程池的过程特点控制最大线程并行数量线程复用管理线程工作原理举个例子:假如CorePool等于10,maxnumPoolSize=50,阻塞队列用Arra

2021-11-25 20:49:42 494

原创 多线程并发工具原理解析(CountDownLatch,CyclicBarrier,Semaphore)

CountDownLatch源码解析CountDownLatch主要是两个方法:await()、countDown(),还有一个构造方法 CountDownLatch(int count)构造方法:CountDownLatch(int count) public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); //

2021-11-24 21:00:14 218

原创 AQS源码解析

Node节点在AQS中,是使用队列的方式来实现同步管理的,我们先来认识下队列中的Node节点数据结构在Node节点中包含:thread:一个等待获取同步状态的线程prev:指向上一个节点的引用next:指向下一个节点的引用waitStatus:等待的状态:1.CANCELLED:值尾1,表示在同步队列中等待的线程等待超时或被中断,需要从同步队列中取消等待,接入CANCELLED状态后将不会再变化2.SIGNAL:值尾-1,表示后续节点的线程处于等待状态,如果当前节点的线程释

2021-11-24 14:27:41 274

原创 AQS基础入门

什么是AQS?AQS是AbstractQueuedSynchronizer的简称。直译就是“抽象队列同步器”。它定义了一套多线程访问共享资源的同步框架,需要同步类实现都依赖于它,如ReentrantLock、ReentrantReadWriteLock、StampedLock、CountDownLath、CyclicBarrier等它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。state的访问方式有三种:getSt

2021-11-23 20:12:20 199

原创 多线程并发基础学习笔记

synchronized了解synchronizedsynchronized关键字解决的是多个线程之间访问资源的同步性问题, synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。dk1.6之前性能比较低,Java的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高。JDK1.6对锁的实现引入了大量的优化,如自

2021-11-11 16:05:28 90

原创 jmm学习笔记

进程与线程的区别进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序

2021-11-11 10:39:43 148

原创 kafka和RocketMq关键特性解析

RocketMq关键特性顺序消费首先多个queue只能保证单个queue里的顺序,queue是典型的FIFO,天然顺序。多个queue同时消费是无法绝对保证消息的有序性的。可以使用同一topic,同一个QUEUE,发消息的时候一个线程去发送消息,消费的时候一个线程去消费一个queue里的消息。消费端就有消费者通过业务保证消费的一致性例如:一笔订单产生了3条消息,分别是订单创建、订单付款、订单完成。消费时,必须按照顺序消费才有意义,与此同时多笔订单之间又是可以并行消费的。RocketMQ默认提供了两种M

2021-11-02 17:38:39 198

原创 rocketMQ学习笔记

RocketMq背景&选型MQ背景&选型 消息队列作为⾼并发系统的核⼼组件之⼀,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:削峰填谷(主要解决瞬时写入的压力大于服务器解决问题导致消息丢失的问题)系统解耦(降低系统服务之间的耦合程度,防止一个服务宕机导致多个系统服务的宕机)提升性能(当存在⼀对多调⽤时,可以发⼀条消息给消息系统,让消息系统通知相关系统)目前主流的MQ主要是Rocketmq、kafka、Rabbitmq,Rocketmq相⽐于Rabbitmq、k

2021-10-29 20:36:13 117

原创 mysql事务

什么是ACID?原子性要保证事务的原子性,事务要么全部成功,要么全部失败。一致性根据定义,一致性是指事务执行前后,数据处于一种合法的状态,这种状态是语义上的而不是语法上的。那什么是合法的数据状态呢?比如性别约束男or女;人民币面值不能为负数;出生地址不能为null;等等隔离性在修改数据库时产生的所并发事务都是隔离,事务与事务之间都是独立的,相互不会造成影响。持久性事务完成以后,数据将永远的保存在磁盘上。事务日志可以保证事务的永久性事务并发执行时数据一致性问题有哪些?脏写就是有两个

2021-10-20 14:25:40 131

原创 mysql Buffer Pool——缓冲池

什么是buffer pool是一块连续的内存空间,当数据库操作数据的时候,把硬盘上的数据加载到buffer pool,不直接和硬盘打交道,操作的是buffer pool里面的数据控制块占缓冲页百分之5左右的内存大小,控制和缓冲页是一一对应的关系默认大小 128M数据库只要一启动,就会按照你设置的Buffer Pool大小,稍微再加大一点,去找操作系统申请一块内存区域,作为Buffer Pool的内存区域控制块存的是 数据页所属的表 空间号,数据页编号,数据页地址等信息是放在缓存页的前面

2021-10-19 13:51:06 1115

原创 mysql Innodb页和记录

Page-页描述为了避免一条一条读取磁盘数据,InnoDB采取页的方式,作为磁盘和内存之间交互的基本单位,从而提高mysql的性能。一个页的大小一般是16KB。InnoDB为了不同的目的而设计了多种不同类型的页,比如:存放表空间头部信息的页、存放undo日志信息的页等等。我们把存放表中数据记录的页,称为索引页or数据页。InnoDB数据页结构往数据页中存储数据(也叫“记录”)记录结构delete-flag:0是未删除,1是已删除min-rec-flag:在B+树当中只有非叶子节点

2021-10-15 14:18:21 116

原创 了解jvm的世界

基本概念JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接的交互。JVM 类加载机制加载通过类的全路径名,获取类的二进制数据流。获得了类的信息,解析类的数据流,转化为⽅法区内部的数据结构。创建java.lang.Class类的实例验证这一阶段的主要目的是为了确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。验证的步骤:格

2021-09-26 20:32:48 101

原创 Arraylist、LinkedList,hashmap扩容源码解读

ArrayListarrayList的add源码流程解析第一步进入add方法public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("1");//这里入口 }第二步查看一下构造函数// 初始化ArrayList实例,则elementData={} public ArrayList() { // Object[] DEFAUL

2021-08-26 17:19:32 153

原创 六大设计原则和常见的设计模式

六大设计原则单一职责原则定义:一个类或者模块只负责完成一个职责。理解:不同的类具备不同的职责,各司其职。做系统设计是,如果发现有一个类拥有了两种职责,那么就要问一个问题:可以将这个类分成两个类吗?如果真的有必要,那就分开,千万不要让一个类干的事情太多。单一职责的优点:降低类的复杂度,一个类只负责一项职责。提高类的可读性,可维护性降低变更引起的风险。里氏替换原则定义:多用组合,少用继承含义:里氏替换原则是针对继承而言的,如果继承是为了实现代码重用,也就是为了共享方法,那么共享的父

2021-08-15 14:51:47 237 1

原创 kubernetes 1.20集群搭建 安装教程(手把手教)

1.环境系统:centos7kubernetes :1.20三台虚拟机:虚拟机ip节点192.168.52.230master192.168.52.231node192.168.52.233node2.安装docker容器(三台节点均要安装)2.1 这个过程需要几分钟的时间curl -fsSL get.docker.com -o get-docker.sh vi get-docker.sh //查看是否下载成功sh get-docker.sh --

2021-01-22 16:54:20 2398 5

原创 Spring Boot FreeMarker 使用教程(if, else, elseif,list,map)

1 FreeMarker 简介(中文官网地址http://freemarker.foofun.cn/index.html)FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意

2021-01-22 14:40:06 2610 2

原创 spring cloud gateway基于jwt实现用户鉴权+GatewayFilter自定义拦截器(完整demo)

SpringCloud Gateway 简介SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以

2020-12-01 18:26:18 7949 21

原创 spring cloud Feign+Hystrix实现Fallback多级降级,Timeout降级,Request Cache减压

Hystrix介绍Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不长时间的等待或者抛出调用方法无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要

2020-11-19 09:58:55 2735 13

原创 spring cloud 使用feign实现服务之间的调用

我们在使用Spring Cloud Ribbon时,通常都会利用它对RestTemplate的请求拦截来实现对依赖服务的接口调用,而RestTemplate已经实现了对HTTP请求的封装处理,形成了一套模版化的调用方法。在之前的例子中,我们只是简单介绍了RestTemplate调用对实现,但是在实际开发中,由于对服务依赖对调用可能不止于一处,往往一个接口会被多处调用,所以我们通常都会针对各个微服务自行封装一些客户端累来包装这些依赖服务的调用。这个时候我们会发现,由于RestTemplate的封装,几乎每一个

2020-11-18 17:17:59 1652

原创 spring cloud使用ribbon实现负载负载均衡消费和ribbon七种负载均衡策略

ribbon是什么?Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Rib

2020-11-16 17:33:20 620

原创 spring cloud eureka服务搭建(生产者消费者)

1. Eureka是什么Eureka 是 Netflix 开源的服务注册发现组件,服务发现可以说是微服务架构的核心功能了,微服务部署之后,一定要有服务注册和发现的能力,Eureka 就是担任这个角色的。如果你用过 dubbo 的话,那一定知道 dubbo 中服务注册和发现的功能是用 zookeeper 来实现的。2. Eureka高级架构如上图所示,其中Application Server 表示服务提供方Application Client 表示服务消费方Make Remote Call 表

2020-11-12 16:42:18 575 2

原创 基于Nginx的分布式限流

# 根据IP地址限制速度# 1) 第一个参数 $binary_remote_addr# binary_目的是缩写内存占用,remote_addr表示通过IP地址来限流# 2) 第二个参数 zone=iplimit:20m# iplimit是一块内存区域(记录访问频率信息),20m是指这块内存区域的大小# 3) 第三个参数 rate=1r/s# 比如100r/m,标识访问的限流频率limit_req_zone $binary_remote_addr zone=iplimit:2

2020-10-29 15:40:27 339

原创 spring boot (demo) Guava RateLimiter客户端限流

Guava官方文档-RateLimiter类RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证。如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证。一旦获取到许可证,不需要再释放许可证。令牌桶算法RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率往桶里扔令牌,线程拿到令牌才能执行,比如你希望自己的应用程序QPS不要超过1000,那么RateLimiter设置1000的速率后,就会每秒往桶里扔1000个令牌

2020-10-29 13:43:13 681

原创 mysql批量修改字段名(列名)

1.需求项目需要兼容mysql,oracle,postgresql三种数据库,但是在最开始使用的Mysql主键字段是使用的uid,uid在oracle数据库当中是不识别的在数据库迁移的过程中会报错。2.检索所有需要修改的字段。SELECT table_nameFROM information_schema.`COLUMNS` WHERE lower( TABLE_SCHEMA )= 'jtsdb' AND lower( COLUMN_NAME )= 'uid';3.写SQL脚本替换

2020-10-12 11:59:31 5038 3

原创 spring boot使用poi-tl根据word模板动态生成word

1、需求(实现功能)需求:根据word模板,动态填充模板内容,生成新的word。实现:获取数据库数据,根据word模板填充内容,生成新的word文档。应用场景:笔者的应用场景是生成客户合同,根据用户提交的具体合同内容,填充进合同模板内,生成新的word即填充了内容的完整合同。2、Why poi-tlApache POI不仅在上层封装了易用的文档API(文本、图片、表格、页眉、页脚、图表等),也可以在底层直接操作文档XML结构,poi-tl正是一个基于Apache POI的Word模板引擎,并且拥

2020-10-09 13:55:41 2673 1

原创 java.util.concurrent中的几种同步工具类(CyclicBarrier,CountDownLatch,Semaphore)

1.CyclicBarrier(栅栏)1.1.简介栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生。栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待其他线程。CyclicBarrier可以使一定数量的线程反复地在栅栏位置处汇集。当线程到达栅栏位置时将调用await方法,这个方法将阻塞直到所有线程都到达栅栏位置。如果所有线程都到达栅栏位置,那么栅栏将打开,此时所有的线程都将被释放,而栅栏将被重置以便下次使用。1.2.用生活中的例子通过代码来演示

2020-09-29 17:40:58 323

原创 JAVA(1)——反射

1.反射机制概念在Java中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。2.反射的应用场合2.1.编译时类型和运行时类型在Java程序中许多对象在运行是都会出现两种类型:编译时类型和运行时类型。编译时的类型由声明对象时实用的类型来决定,运行时的类型由实际赋值给对象的类型决定。如:Person p=new Student();其中编译时类型为Per

2020-09-28 10:27:29 243

原创 Elasticsearch(十)——springboot使用ElasticsearchTemplate实现高亮查询等一系列操作

@RunWith(SpringRunner.class)@SpringBootTest(classes = Application.class)public class ESTest { @Autowired private ElasticsearchTemplate esTemplate; /** * 不建议使用 ElasticsearchTemplate 对索引进行管理(创建索引,更新映射,删除索引) * 索引就像是数据库或者数据库中的表,我们平时是.

2020-09-11 11:12:56 720

原创 Elasticsearch(九)——搭建Elasticsearch集群

环境系统均为centos 7节点名称IP地址es-node1192.168.5.207es-node2192.168.5.208es-node3192.168.5.2091、Elasticsearch集群搭建1.安装JDKElasticsearch是基于Java开发是一个Java程序,运行在Jvm中,所以第一步要安装JDKyum install -y java-1.8.0-openjdk-devel # 安装1.8或1.8以上版本2.下载elast

2020-09-11 10:34:07 271

原创 Elasticsearch(八)——深度分页问题解决方案

问题在分页处理时,我们要确定两个参数,start & size,如果一个分页查询start值很大,那么这就是一个深度分页查询。深度分页是很有问题的,用sql举例:select * from user order by id limit 10000,10 ,表面上看起来只取10条数据,而实际上它是个大查询,因为查询过程中,数据库要确定前10010条数据,然后才能拿出最后10条。显而易见,一方面人为深度分页是个伪需求,没有谁会一直狂翻,或者直接跳第100页看数据。另一方面,深度分页对系统的稳定性有

2020-09-11 10:03:26 959 1

原创 Elasticsearch(七)——DSL语法

DSL特点Domain Specific Language特定领域语言基于JSON格式的数据查询查询更灵活,有利于复杂查询# 查询POST /索引/_doc/_search{ "query": { "match": { "desc": "Elasticsearch"//查询条件 Desc字段中带有Elasticsearch的会查询出来 } }}# 判断某个字段是否存在{ "query": {

2020-09-09 10:34:47 1152

原创 Elasticsearch(六)——内置分词器

es内置分词器1.standard:默认分词,单词会被拆分,大小会转换为小写。2.simple:按照非字母分词。大写转为小写。3.whitespace:按照空格分词。忽略大小写。4.stop:去除无意义单词,比如the / a / an / is …5.keyword:不做分词。把整个文本作为一个单独的关键词。iK中文分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik注意 IK分词器的版本要你安装ES的版本一致,我这边是7.1

2020-09-08 21:01:45 557

原创 Elasticsearch(五)——乐观锁并发控制 if_seq_no 和 if_primary_term 详解

if_seq_no 和 if_primary_term 详解1 创建一简单文档2. 修改文档,_seq_no会+13. 修改文档,带上if_seq_no和if_primary_term4. 修改文档,模拟并发5. 删除文档,_seq_no还是会+16. seq_no递增属于整个index,而不是单个文档if_seq_no 和 if_primary_term 是用来并发控制,他们和version不同,version属于当个文档,而seq_no属于整个index。1 创建一简单文档PUT /p

2020-09-08 20:53:37 2469 3

原创 Elasticsearch(四)——文档的基本操作(删除,修改,查看)

1.删除文档DELETE /my_doc/_doc/1 /索引/_doc/文档id注∶文档删除不是立即删除,文档还是保存在磁盘上,索引增长越来越多,才会把那些曾经标识过删除的,进行清理,从磁盘上移出去。2.修改文档单个属性修改POST /my_doc/_doc/1/_update{ "doc": { "name": "jack" }}全量修改PUT /my_doc/_doc/1{ "id": 1001, "name": "test-

2020-09-08 20:39:20 535

原创 Elasticsearch(三)——文档的基本操作(添加)

1.添加文本数据POST /my_doc/_doc/1 -> {索引名}/_doc/{索引ID}(是指索引在es中的id,而不是这条记录的id,比如记录的id从数据库来是1001,并不是这个。如果不写,则自动生成一个字符串。建议和数据id保持一致> ){ "id": 1001, "name": "test-1", "desc": "test is very good, Elasticsearch 非常牛!", "create_date": "2019-12

2020-09-07 22:34:28 535

原创 ElasticSearch(二)——创建mapping映射

1.创建索引的同时创建mappingsPUT /index_test{ "mappings": { "properties": { "realname": { "type": "text", "index": true }, "username": { "type": "keyword", "ind

2020-09-07 22:22:24 1028

原创 Elasticsearch(一)———基本索引操作

集群健康GET /_cluster/health创建索引PUT /index_test{ "settings": { "index": { "number_of_shards": "2", "number_of_replicas": "0" } }}查看索引GET _cat/indices删除索引DELETE /index_test...

2020-09-07 21:41:24 293

原创 spring boot使用poi导出Excel

1.POI简介Jakarta POI 是一套用于访问微软格式文档的Java API.  组件HWPF用于操作Word的;  组件HSSF用于操作Excel格式文件.2.常用组件HSSFWorkbook – excel的文档对象  HSSFSheet – excel的表单  HSSFRow – excel的行  HSSFCell – excel的格子单元  HSSFHeader – sheet头  HSSFFooter – sheet尾(只有打印的时候才能看到效果)  HSSFDataF

2020-09-03 19:11:55 438

原创 Redis哨兵(Sentinel)模式

这篇文章接我之前文章主从模式基础上修改的https://blog.csdn.net/qq_40297844/article/details/108290873环境三台虚拟机:ip:192.168.5.151:6379(主节点)ip:192.168.5.191:6379(从节点)ip:192.168.5.192:6379(从节点)引入主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时

2020-08-31 17:20:51 305

原创 Redis缓存过期策略与内存淘汰机制

Redis对已过期的key如何处理?设置了expire的key缓存过期了,但是服务器的内存还是会被占用,这是因为redis所基于的两种删除策略。redis有两种策略:(主动)定时删除定时随机的检查过期的key,如果过期则清理删除。(每秒检查次数在redis.conf中的hz配置)(被动)惰性删除当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil。这种策略对cpu比较友好,不会有太多的损耗,但是内存占用会比较高。所以,虽然ke

2020-08-31 16:04:13 295

ssh整合ssh整合的所以jar包三大框架

jar包 ssh整合的所以jar包 三大框架 资源完整 丰富多彩

2018-06-14

空空如也

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

TA关注的人

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