自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 收藏
  • 关注

原创 maven的settings.xml和pom.xml配置文件详解

maven的配置文件主要有 settings.xml 和pom.xml 两个文件。其中在maven安装目录下的settings.xml,如:D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件用户目录的.m2子目录下的settings.xml,如:C:\Users\chenxc.m2\settings.xml 配置只是针对当前用户的配置文件项目根路径下的pom.xml主要是对当前项目的配置。

2023-11-03 09:13:46 4762 1

原创 Feign远程调用丢失请求头

feign远程调用,自己创建一个新的request对象,按照指定的路径和参数发起新的请求,并得到响应结果。但是这个新的request对象请求头为空,所以丢失了原先请求中的数据。feign在创建新的request对象时,会调用一系列容器中的RequestInterceptor对象,执行其apply方法,对这个创建好的request进行增强,再去真正执行请求。但是默认情况下容器中不存在这类拦截器对象。

2023-09-18 16:30:18 1175

原创 Gateway的RemoteAddr与RemoteAddressResolver源码分析

yml配置:如果我们在yml的断言配置如下图,那么他将匹配不成功。

2023-03-17 17:18:55 963 1

原创 Springboot整合RabbitMQ并使用

创建交换机(Exchange)、队列(Queue)和建立绑定关系(Binding)`direct`:会将消息发送给路由键必须完全匹配的队列中。`@RabbitListener`:可以标注在类和方法上 (监听哪些队列)`@RabbitHandler`:只能标注在方法上 (重载区别不同的消息)`fanout`:会将消息发送给所有绑定的队列中,不管路由键是否匹配。`topic`:主体模式其实就是在路由模式的基础上,支持了对key的通配符匹配

2023-03-06 10:29:09 3581

原创 docker安装rabbitmq并挂载

management:表示可以通过web页面管理。alpine:表示是linux最小版本,不推荐新手安装。

2023-03-02 10:38:49 3330

转载 JAVA Stream的collect用法与原理

toListtoSettoCollectiontoMapcountingsummingIntaveragingIntjoiningmaxByminBygroupingBypartitioningBycollectingAndThenmapping

2022-11-12 23:09:56 1544

转载 JAVA的Stream流操作

Stream相较于传统的foreach的方式处理stream,到底有啥优势?代码更简洁、偏声明式的编码风格,更容易体现出代码的逻辑意图逻辑间解耦,一个stream中间处理逻辑,无需关注上游与下游的内容,只需要按约定实现自身逻辑即可并行流场景效率会比迭代器逐个循环更高函数式接口,延迟执行的特性,中间管道操作不管有多少步骤都不会立即执行,只有遇到终止操作的时候才会开始执行,可以避免一些中间不必要的操作消耗

2022-11-11 16:12:31 736

原创 常见的23种设计模式总结

创建型模式:单例模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式、过滤器模式。行为型模式:模版模式(模版方法模式)、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式、访问者模式。

2022-10-20 10:27:35 2308

原创 设计模式之备忘录模式

备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。原发器角色:原发器根据需要决定将自己的哪些内部状态保存到备忘录中,并可以使用备忘录来恢复内部状态。备忘录角色:负责存储原发器对象的内部状,但是具体需要存储哪些状态是由原发器对象来决定的。为了控制对备忘录对象的访问,备忘录模式中出现了窄接口和宽接口的概念。管理者角色:备忘录管理者,或者称为备忘录负责人。主要负责保存好备忘录对象,但是不能对备忘录对象的内容进行操作或检查。

2022-10-18 16:32:13 554

原创 设计模式之迭代器模式

访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不同的聚合结构提供一个统一的接口。应用场景访问一个聚合对象的内容而无须暴露它的内部表示。需要为聚合对象提供多种遍历方式。为遍历不同的聚合结构提供一个统一的接口。

2022-10-18 10:33:57 422

原创 设计模式之责任链模式

基于数据实现 基于链表实现优点允许动态的增加和删除职责,且由用户决定是否执行某种操作。实现了被操作对象和操作的解耦。一个命令可以被多个处理器执行,例如各种框架中的拦截器缺点系统复杂度提高,容易出错。即组链时候不合理,可能导致请求得不到执行,还有可能将链变成一个环,请求在里面循环,永远都完不了。影响性能,出现递归调用,容易造成栈溢出适用场景由用户确定实现怎样的处理的流程。不确定是否需要添加这种处理的情况。把任务分解,大的任务分解成小步进行处理。

2022-10-14 14:41:11 721

转载 设计模式之代理模式

一、代理模式二、静态代理三、动态代理四、动态代理原理分析五、InvocationHandler接口和Proxy类详解六、JDK动态代理和CGLIB动态代理代码示例比较与总结

2022-10-13 17:21:16 199

原创 ElasticSearch - 集群部署及脑裂问题

集群部署脑裂问题集群、分片原理

2022-09-23 14:27:27 1386

转载 高并发下秒杀商品,你必须知道的9个细节

1 瞬时高并发2. 页面静态化3 秒杀按钮4 读多写少5 缓存问题5.1 缓存击穿5.2 缓存穿透6 库存问题6.1 数据库扣减库存6.2 redis扣减库存6.3 lua脚本扣减库存7 分布式锁7.1 setNx加锁7.2 set加锁7.3 释放锁7.4 自旋锁7.5 redisson8 mq异步处理8.1 消息丢失问题8.2 重复消费问题8.3 垃圾消息问题8.4 延迟消费问题9 如何限流?9.1 对同一用户限流9.2 对同一ip限流9.3 对接口限流9.4 加验证码9.5 提高业务门槛

2022-09-20 14:36:14 258

原创 ElasticSearch - 分词器

标准分词器(standard analyzer)简单分词器(simple analyzer)空白分词器(whitespace analyzer)停止分词器(stop analyzer)正则表达式分词器(pattern analyzer)语言分词器(language analyzer)Keyword AnalyzerCustomer Analyzer

2022-09-08 18:12:18 775

原创 ElasticSearch - 检索

Query DSL基本语法格式_source【返回部分字段】match【匹配查询】match_phrase【短语匹配】multi_match【多字段匹配】bool【复合查询】filter【结果过滤】aggregations【执行聚合】

2022-09-07 15:23:40 193

原创 ElasticSearch - 映射(mapping)

数据类型动态映射(Dynamic Mapping)手动创建映射

2022-09-07 15:19:22 434

原创 ElasticSearch -入门

Near Realtime(NRT 近实时)Cluster(集群)Node(节点)Index(索引)Type(类型)Document(文档)Shards & Replicas(分片 & 副本)_cat_bulkelasticsearch集群原理Elasticsearch检索原理

2022-09-07 15:06:18 343

原创 CompletableFuture使用详解

runAsync()、exceptionally()、whenComplete()、handle()、thenRun()、thenAccept()、thenApply()、thenCompose()、thenComposeAsync()、runAfterBoth()、runAfterBothAsync()、thenAcceptBoth()、thenCombine()、runAfterEither()、acceptEither()、applyToEither()、anyOf()、allOf()

2022-08-22 16:50:44 1507

原创 win11 自带远程桌面使用(包含非局域网使用以及win11升级为专业版)

win11 自带远程桌面使用(包含非局域网使用以及win11升级为专业版)

2022-07-28 17:03:22 18680 4

转载 Spring DI(依赖注入)的三种注入方式分析

DI的三种常见注入方式为:**setter注入**、**构造器注入**和**基于注解的注入**(也叫field注入),下面来分别讲讲他们的特点。

2022-06-01 15:43:38 2246

转载 @Autowired 和 @Resource 详解

spring中,@Resource和@Autowired都是做bean的注入时使用。使用过程中,有时候@Resource 和 @Autowired可以替换使用;有时,则不可以。@Resource是JavaEE自带的注解,根据ID进行注入的.@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。

2022-06-01 15:19:13 8564 1

转载 Spring IOC 与 DI

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

2022-06-01 14:48:48 239

原创 mysql 索引需要遵循的原则

1.选择唯一性索引唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。2.为经常需要排序、分组和联合操作的字段建立索引经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。3.为常作为查询条件的字段建立索引如果某个字段经常用来做查询条件,那么该字段的

2022-04-19 15:06:27 442

原创 SecureCRT 用sftp上传下载文件

SecureCRT 用sftp上传下载文件securecrt 按下ALT+P就开启新的会话 进行ftp操作。输入:help命令,显示该FTP提供所有的命令 pwd: 查询linux主机所在目录(也就是远程主机目录) lpwd: 查询本地目录(一般指windows上传文件的目录:我们可以通过查看"选项"下拉框中的"会话选项",我们知道本地上传目录为:D:/我的文档) ls: 查询连接到当前linux主机所在目录有哪些文件 lls: 查询当前本地上传目录有哪些文件 lcd: 改变本地上传

2022-04-02 14:07:22 2509

原创 idea常用插件

idea常用插件

2022-03-31 11:44:17 293

原创 Condition(条件队列)的理解与使用

condition可以通俗的理解为条件队列。当一个线程在调用了await方法以后,直到线程等待的某个条件为真的时候才会被唤醒。这种方式为线程提供了更加简单的等待/通知模式。Condition必须要配合锁一起使用,因为对共享状态变量的访问发生在多线程环境下。一个Condition的实例必须与一个Lock绑定,因此Condition一般都是作为Lock的内部实现。

2022-03-24 15:23:02 663

原创 MyBatis-Plus自定义DefaultSqlInjector,扩展BaseMapper

MyBats-Plus在一开始就给大家提供了很多通用的方法,在DefaultSqlInjector这个类中,在MethodList这个集合当中包含的都是通用方法类,如果想要使用自定义通用方法,也需要添加到这个集合当中。自定义自己的通用方法可以实现接口 ISqlInjector 也可以继承抽象类 AbstractSqlInjector 注入通用方法 SQL 语句 然后继承 BaseMapper 添加自定义方法,全局配置 sqlInjector 注入 MP 会自动将类所有方法注入到 mybatis 容器中。

2022-03-08 15:06:44 2667 1

原创 linux安装jdk8

1.下载jdk8方法一:官网手动下载下载Linux环境下的jdk1.8Java Downloads | Oracle目前在官网下载低于jdk1.8的java jdk的时候需要登陆,这边分享一个账号,方便下载账号:[email protected]密码:Oracle123.账号提供者:https://blog.csdn.net/WNsshssm/article/details/843155192.源码包解压使用SecureCRT将jdk源码包,上传到/usr/local(软件一般安装到这个目

2022-02-16 17:21:20 172

原创 mysql 用户创建、授权、更改密码

一. 创建用户命令:CREATE USER ‘username’@‘host’ IDENTIFIED BY ‘password’;说明:username:你将创建的用户名host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器例子:CREATE USER 'dog'@'localhost' IDENTIFIED BY '123

2022-02-16 17:08:35 1352

原创 linux磁盘分区、格式化并挂载

查看磁盘信息fdisk -l磁盘分区fdisk -u /dev/vdb磁盘格式化mkfs.ext4 /dev/vdb1磁盘挂载mkdir /datals -l /dev/disk/by-uuidvim /etc/fstabreboot

2022-02-16 16:46:40 1921

原创 docker安装seata并挂载,同时注册到nacos

docker安装seata1、下载镜像docker pull seata:1.3.02、配置文件registry.confregistry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa # 默认为file 这里我是使用nacos为注册中心 type = "nacos" nacos { application = "seata-server" # nacos的地址 serverAddr = "127

2022-02-16 10:10:06 1020

原创 Rabbitmq 延迟队列实现定时任务

Rabbitmq 延迟队列实现定时任务

2022-01-18 16:54:24 680

原创 LocalDate、LocalTime、LocalDateTime常用方法

LocalDate常用方法、LocalTime常用方法、LocalDateTime常用方法

2022-01-18 16:03:46 1478

原创 分布式锁的三种实现方式

目前分布式锁的实现方案主要包括三种:* 基于数据库(唯一索引)* 基于缓存(Redis,memcached,tair)* 基于Zookeeper

2022-01-11 19:16:19 33245 5

原创 分布式锁(Redisson)原理分析

分布式锁场景、Redisson分布式锁、SpringBoot集成Redisson步骤

2022-01-11 11:47:34 1864

原创 ReentrantReadWriteLock原理与使用

一、读写锁有这样一种场景:1、如果对一个共享资源的写操作没有读操作那么频繁,这个时候可以允许多个线程同时读取共享资源;2、但是如果有一个线程想去写这些共享资源,那么其他线程此刻就不应该对这些资源进行读和写操作了。Java中的ReentrantReadWriteLock正是为这种场景提供的锁。该类里面包括了读锁和写锁。1.1、可获取读锁的情况没有其他线程正在持有写锁;尝试获取读锁的线程同时持有写锁。1.2、可获取写锁的情况没有其他线程正在持有读锁;没有其他线程正在持有写锁。1

2022-01-08 15:53:57 1042

原创 ThreadLocal原理与使用

ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发性。

2022-01-06 14:11:30 178 1

原创 CyclicBarrier(栅栏)的理解与使用

它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。

2021-12-31 16:17:26 530

原创 Semaphore(信号量)的理解与使用

1、介绍Semaphore(信号量)是用来控制同时访问特定资源的线程数量,通过协调各个线程以保证合理地使用公共资源。Semaphore通过使用计数器来控制对共享资源的访问。 如果计数器大于0,则允许访问。 如果为0,则拒绝访问。 计数器所计数的是允许访问共享资源的许可。 因此,要访问资源,必须从信号量中授予线程许可。Semaphore 当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semapho

2021-12-31 15:54:09 1027

Redis:6.2.7版本的配置文件redis.conf

Redis:6.2.7版本的配置文件redis.conf

2022-11-02

空空如也

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

TA关注的人

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