自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AQS explanation

概述全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架核心方法tryAcquire()tryRelease()tryAcquireShared()tryReleaseShared()isHeldExclusively()特点用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态comp

2022-05-17 23:10:40 252 2

原创 JUC(3)

为什么无锁效率高无锁情况下,即使重试失败,线程始终在高速运行,没有停歇,而 synchronized 会让线程在没有获得锁的时候,发生上下文切换,进入阻塞。打个比喻线程就好像高速跑道上的赛车,高速运行时,速度超快,一旦发生上下文切换,就好比赛车要减速、熄火,等被唤醒又得重新打火、启动、加速… 恢复到高速运行,代价比较大但无锁情况下,因为线程要保持运行,需要额外 CPU 的支持,CPU 在这里就好比高速跑道,没有额外的跑道,线程想高速运行也无从谈起,虽然不会进入阻塞,但由于没有分到时间片,仍然会进入可运

2022-05-10 22:10:43 189

原创 线程池手写

阻塞队列class BlockingQueue<T> { // 1. 任务队列:队尾添加,队首移出 private Deque<T> queue = new ArrayDeque<>(); // 2. 锁 private ReentrantLock lock = new ReentrantLock(); // 3. 生产者条件变量 private Condition fullWaitSet = lock.newCond

2022-05-10 22:10:01 216

原创 Java 函数式接口

定义有且仅有一个抽象方法的接口,排除(默认,静态,私有)方法@FunctionalInterface标明接口是一个函数式接口,如果不是则在编译阶段报错JDK 提供函数式接口Consumer 消费型接口@FunctionalInterfacepublic interface Consumer<T> { void accept(T t);}Supplier 供给型接口@FunctionalInterfacepublic interface Suppli

2022-05-06 21:33:15 344

原创 springcloud-Ribbon

微服务拆分原则微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务不同微服务都应该有自己独立的数据库,不访问其他微服务的数据库微服务可以将业务暴露为接口,供其它微服务使用Eureka注册中心图解消费者该如何获取服务提供者具体信息?服务提供者启动时向eureka注册自己的信息eureka保存这些信息消费者根据服务名称向eureka拉取提供者信息如果有多个服务提供者,消费者该如何选择?服务消费者利用负载均衡算法,从服务列表中挑选一个消费者如何感知服务提供者健康状态?服

2022-05-06 21:32:40 289

原创 SpringSecurity(3)

认证后用户信息获取//获取当前用户信息 private String getUsername(){ String username = null; //当前认证通过的用户身份 Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); //用户身份 Object principal = authentic

2022-04-26 22:31:19 301

原创 JUC(2)

64 位虚拟机 Mark Word原理之 Monitor(锁)代码 : synchronized(obj)Thread2 线程执行时,操作系统会有一个与之对应的 Monitor 对象,obj 对象头指针指向Monitor 对象的地址,此时 Monitor 的持有者为 Thread2 此时,再有其余线程来执行上锁代码块时,会进入 Monitor 对象的EntryList 进行BLOCKEDThread2 执行完同步块中的内容,唤醒 EntryList 中等待的线程来竞争锁,此时的竞争是

2022-04-26 22:30:58 140

原创 SpringSecurity(2)

核心类WebSecurityConfigurerAdapter 自定义Security策略AuthenticationManagerBuilder 自定义Security策略@EnableWebSecurity 开启WebSecurity模式核心依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-secur

2022-04-23 22:58:28 283

原创 JUC 全套(1)

进程与线程进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)线程一个进程之内可以分为一到多个线程。一个线

2022-04-21 22:37:00 176

原创 Hibernate @ManyToOne @OneToMany @OneToOne

OneToMany,ManyToOne 双注解使用一方@OneToMany(mappedBy = "script", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)private List<Message> list;多方@ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "c

2022-04-21 22:36:29 505

原创 Seata搭建

下载地址地址链接file.conf 配置文件修改service 修改事务组名称,符合 *.tx_group 格式service { #transaction service group mapping vgroup_mapping.my_test_tx_group = "rentao_tx_group" #only support when registry.type=file, please don't set multiple addresses default.groupl

2022-04-15 22:17:28 1082

原创 springboot

SpringBoot优点创建独立Spring应用内嵌web服务器自动starter依赖,简化构建配置(各种依赖包)自动配置Spring以及第三方功能(各种初始化类)提供生产级别的监控、健康检查及外部化配置无代码生成、无需编写XMLSpringBoot特点依赖管理:父项目做依赖管理按需加载自动配置项:存在对应的 start 则自动加载配置项容器功能@Configuration#############################Configuration使用示例######

2022-04-13 22:07:52 273

原创 RocketMq 监控

下载项目 rocketmq-console1:git 地址:https://github.com/apache/rocketmq-externals2:网盘地址: 链接:https://pan.baidu.com/s/1RJsRpM0BYwt5HzFJMRuS7g 提取码:tnaz3:docker 镜像下载项目编译打包执行目录:rocketmq-console执行命令: mvn clean package -Dmaven.test.skip=true项目打包,跳过测试执行.

2022-04-13 22:06:50 1003

原创 ES 实践

table info 酒店表基本信息ES 操作对象的创建与删除class HotelIndexTest { private RestHighLevelClient client; //创建对象 @BeforeEach void setUp() { client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://127.

2022-04-10 22:49:39 511 1

原创 docker-compose 如何部署自己的微服务项目

部署步骤将项目所连接服务名称均替换为部署环境docker中的环境名称将自己的微服务项目打成 jar 包将jar包放置到对应的文件夹目录微服务目录下结构目录下执行服务构建脚本文件 docker-composedocker-composeversion: "3.2"services: userservice: build: ./user-service orderservice: build: ./order-service gateway:

2022-04-09 18:19:04 884

原创 nacos集群搭建

集群配置文件目录nacos\conf 修改配置文件cluster.conf.example,重命名为cluster.conf内容追加为:127.0.0.1:8845127.0.0.1.8846127.0.0.1.8847集群节点ip:portapplication.properties 文件修改spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?charact

2022-04-09 17:59:20 104

原创 Nacos

Nacos服务分级存储模型一级是服务,例如userservice二级是集群,例如杭州或上海三级是实例,例如杭州机房的某台部署了userservice的服务器集群调用调用方设置spring: application: name: orderservice cloud: nacos: server-addr: 127.0.0.1:8848 # nacos服务地址 discovery: cluster-name: beijing

2022-04-05 22:29:50 248

原创 spring data jpa

概念spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的规则进行【方法命名】去写dao层接口,就可以 在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。核心接口Repository<主类,主类ID>public interface Repository<T, ID> {}CrudRepositorypublic interface CrudRepo

2022-04-04 22:29:51 364

原创 RocketMq

核心概念Topic:消息主题,一级消息类型,生产者向其发送消息。Message:生产者向Topic发送并最终传送给消费者的数据消息的载体。消息属性:生产者可以为消息定义的属性,包含Message Key和Tag。Message Key:消息的业务标识,由消息生产者(Producer)设置,唯一标识某个业务逻辑。Message ID:消息的全局唯一标识,由消息队列RocketMQ系统自动生成,唯一标识某条消息。Tag:消息标签,二级消息类型,用来进一步区分某个Topic下的消息分类Produc

2022-04-04 21:01:59 625

原创 DockerFile

内容解析# 基于这个镜像,build 时会自动去找这个镜像FROM 镜像名:版本# 标签信息LABEL maintainer="自己的邮箱"# docker 容器启动后的环境变量,启动容器后进入就可以看到这个变量ENV VERSION 版本号# dockerfile 制作时候的环境变量ARG currentPath=/home# 默认就是 root 用户USER root# 制作镜像核心(用 && 连接多个命令或者写多个 RUN,一个 RUN 一个镜像层)R

2022-04-04 09:11:48 154

原创 docker componse 构建开发环境

目录结构docker-compose.ymlversion: "3.9"services: nacos: container_name: nacos image: nacos/nacos-server:latest deploy: resources: limits: cpus: '0.50' memory: 2048M reservations: cpus: '0.2

2022-04-04 08:53:21 259

原创 设计模式示例

黑备忘录备忘抽象public interface Memento {}需备忘类public class GameRole { private int vit; //生命力 private int atk; //攻击力 private int def; //防御力 //初始化状态 public void initState() { this.vit = 100; this.atk = 100; this.def = 100; } //战斗 public

2022-03-18 16:14:55 95

原创 ArrayList源码分析

构造方法ConstructorConstructor描述ArrayList()构造一个初始容量为十的空列表。ArrayList(int initialCapacity)构造具有指定初始容量的空列表。ArrayList(Collection<? extendsE> c)构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。ArrayList()public class Test01 { public static void main

2022-03-14 09:07:15 180

原创 二叉树手写

特点每个节点最多有两颗子树。左子树和右子树是有顺序的,次序不能颠倒。即使某节点只有一个子树,也要区分左右子树。树图伪代码实现/** * 节点类 */@Datapublic class Node { // 节点内容 int value; // 左节点 Node leftChild; // 右节点 Node rightChild; public Node(int value) { this.value = value; } @Override public

2022-03-10 09:02:08 191

原创 LinkedList手写

一、ArrayList引发的思考优点:查询快缺点​ 1、增删慢,消耗cpu的性能​ 情况一、指定索引上的添加​ 情况二、如果原数组中的元素已经不够了​ 2、比较浪费内存空间有没有一种数据结构可以用多少个空间就申请多少个空间,并且又能够提高他的增删速度呢?二、链表链表的分类:单链表,双链表,循环链表链表:由链将一个个元素连接,每一个元素我们通常将其称之为Node 节点Node 节点

2022-03-10 09:01:27 125

原创 Apollo

传统配置(配置文件)存在的问题

2022-03-07 17:48:20 154

原创 ZuulFilter过滤器

ZuulFilter 方法说明public abstract ZuulFilter implements IZuulFilter{ abstract public String filterType(); abstract public int filterOrder(); boolean shouldFilter();// 来自IZuulFilter Object run() throws ZuulException;// IZuulFilter}

2022-03-07 13:04:07 253

原创 xxx job

下载地址GitHubhttps://github.com/xuxueli/xxl-jobGiteehttps://gitee.com/xuxueli0323/xxl-job配置数据库表admin 启动–》图形化界面urlhttp://localhost:8080/xxl-job-admin/joblog界面任务配置任务执行

2022-03-04 17:21:06 418

原创 spring-cloud-sleuth

sleuth分布式跟踪解决方案日志打印图示参数分析日志的格式为:[applicationName, tracedspanld, export], Sleuth可以在发起每个请求时生成traceld、spanld,同一个请求链路的traceid是一样的,每次调用生成的spanid的值是不一样的。applicationName应用的名称,也就是application.properties中的spring.application.name属性的值.traceId一个请求分配的I

2022-02-25 19:40:18 1222

原创 Cron表达式

Cron表达式介绍Cron表达式是一个具有时间含义的字符串,字符串以5个空格隔开,分为6个域,格式为X X X X X X。其中X是一个域的占位符。单个域有多个取值时,使用半角逗号,隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。域取值特殊字符取值示例示例 说明0 15 10 ? * * 每天上午10:15执行任务0 15 10 * * ? 每天上午10:15执行任务0 0 12 * * ? 每天中午12:00执行任务0 0 10,14,16 * * ? 每天上午10

2022-02-24 19:24:35 180

原创 主从配置流程

master 服务器配置修改vi /etc/my.cnf1.【必须】主服务器唯一IDserver-id =12.【必须】启用二进制日志log-bin=自己本地的路径/mysqlbin3.【可选】启动错误日志log-err=自己本地的路径/mysqlerr4.【可选】根目录basedir="自己本地路径"5.【可选】临时目录tmpdir="自己的本地路劲"6.【可选】数据目录datadir="自己本地路径/Data/"7.read-only=0主机,读写都可以8.【可选

2022-02-23 19:39:46 415

原创 spring-security

JMT 组成头部Header(头) 作用:记录令牌类型、签名算法等 例如:{“alg":"HS256","type","JWT}经过Base64Url编码Payload 装载的数据Payload(有效载荷)作用:携带一些用户信息 例如{"userId":"1","username":"mayikt"}经过Base64Url编码Payload 推荐使用声明iss: jwt签发者sub: jwt所面向的用户aud: 接收jwt的一方exp: jwt的过期时间,这个过期时间必须要

2022-02-23 07:05:11 284

原创 线程池拒绝策略原理

AbortPolicy该策略是线程池的默认策略。使用该策略时,如果线程池队列满了丢掉这个任务并且抛出RejectedExecutionException异常。源码 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { //不做任何处理,直接抛出异常 throw new RejectedExecutionException("Task " + r.toString() +

2022-02-22 14:56:20 218

原创 Spring中涉及的设计模式

策略模式Spring框架的资源访问Resource接口 。该接口提供了更强的资源访问能力,Spring 框架本身大量使用了 Resource 接口来访问底层资源。Resource 接口介绍–》source 接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口。Resource 接口主要提供了如下几个方法getInputStream():定位并打开资源,返回资源对应的输入流。每次调用都返回新的输入流。调用者必须负责关闭输入流。exists():返回 Resource 所指向的资源是否存

2022-02-16 18:20:08 290

原创 算法收录集

指定排序的数组中消重获取数组的剩余长度public class SortArrayDistinct { public static void main(String[] args) { Integer[] nums = new Integer[] { 0, 1, 3, 3, 5, 8, 8, 8, 9 }; //输出消重后的个数 System.out.println(distinct(nums)); } private static int distinct(Integer[] n

2022-02-16 18:19:44 66

原创 select 执行流程

Mysql 逻辑架构流程客户端与服务建立连接。进行账户,密码,权限验证。查询缓存中查询是否执行过当前select语句。如果之前执行过相应的select语句,则执行过的select语句和查询结果会以key-value的形式存放在查询缓存中,其中,key是查询语句,value是查询的结果数据,查询缓存中没有找到相应的数据,则会继续执行后续的查询阶段。分析器主要是对select语句进行 词法分析和语法分析 操作。select语句中如果使用了多个索引,则优化器会决定使用哪个索引来查询数据;再比如,在

2022-02-15 17:28:00 417

原创 Java8 stream

创建/** * 1:一个 Stream 只可以使用一次 */ @Test public void testCreate() { System.out.println("1::create"); //数组创建 Stream<Integer> stream = Stream.of(1, 2, 34, 5, 65); stream.forEach(System.out::println); //集合创建 List<Integer> list =.

2022-02-14 14:54:43 75

原创 Mysql 数据库字段详解

数字型字符类型枚举集合时间类型有无符号设置–(存在符号)create table user{user_id int unsigned……}int(4)和int(11)的区别–int(m)m表示显示宽度(例如,INT(4))。不足位从左按0补齐补齐关键字zerofillalter table test modify id2 int(12) zerofill;(如果int中不加具体的数值,则默认是10)...

2022-02-11 09:19:16 280

原创 Java之——redis并发读写锁,使用Redisson实现分布式锁

转载可重入锁(Reentrant Lock)Redisson的分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口,同时还支持自动过期解锁。public void testReentrantLock(RedissonClient redisson){ RLock lock = redisson.getLock("anyLock"); try{ // 1. 最常见的使用方法 //lock.lock(); // 2. 支持过期解

2022-02-10 17:47:27 708

原创 Gateway

应用服务搭建断言工厂

2022-01-25 13:17:51 62

空空如也

空空如也

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

TA关注的人

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