
笔记
knowledge are power
这个作者很懒,什么都没留下…
展开
-
AQS explanation
概述全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架核心方法tryAcquire()tryRelease()tryAcquireShared()tryReleaseShared()isHeldExclusively()特点用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态comp原创 2022-05-17 23:10:40 · 410 阅读 · 2 评论 -
JUC(3)
为什么无锁效率高无锁情况下,即使重试失败,线程始终在高速运行,没有停歇,而 synchronized 会让线程在没有获得锁的时候,发生上下文切换,进入阻塞。打个比喻线程就好像高速跑道上的赛车,高速运行时,速度超快,一旦发生上下文切换,就好比赛车要减速、熄火,等被唤醒又得重新打火、启动、加速… 恢复到高速运行,代价比较大但无锁情况下,因为线程要保持运行,需要额外 CPU 的支持,CPU 在这里就好比高速跑道,没有额外的跑道,线程想高速运行也无从谈起,虽然不会进入阻塞,但由于没有分到时间片,仍然会进入可运原创 2022-05-10 22:10:43 · 271 阅读 · 0 评论 -
Java 函数式接口
定义有且仅有一个抽象方法的接口,排除(默认,静态,私有)方法@FunctionalInterface标明接口是一个函数式接口,如果不是则在编译阶段报错JDK 提供函数式接口Consumer 消费型接口@FunctionalInterfacepublic interface Consumer<T> { void accept(T t);}Supplier 供给型接口@FunctionalInterfacepublic interface Suppli原创 2022-05-06 21:33:15 · 396 阅读 · 0 评论 -
springcloud-Ribbon
微服务拆分原则微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务不同微服务都应该有自己独立的数据库,不访问其他微服务的数据库微服务可以将业务暴露为接口,供其它微服务使用Eureka注册中心图解消费者该如何获取服务提供者具体信息?服务提供者启动时向eureka注册自己的信息eureka保存这些信息消费者根据服务名称向eureka拉取提供者信息如果有多个服务提供者,消费者该如何选择?服务消费者利用负载均衡算法,从服务列表中挑选一个消费者如何感知服务提供者健康状态?服原创 2022-05-06 21:32:40 · 349 阅读 · 0 评论 -
SpringSecurity(3)
认证后用户信息获取//获取当前用户信息 private String getUsername(){ String username = null; //当前认证通过的用户身份 Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); //用户身份 Object principal = authentic原创 2022-04-26 22:31:19 · 353 阅读 · 0 评论 -
JUC(2)
64 位虚拟机 Mark Word原理之 Monitor(锁)代码 : synchronized(obj)Thread2 线程执行时,操作系统会有一个与之对应的 Monitor 对象,obj 对象头指针指向Monitor 对象的地址,此时 Monitor 的持有者为 Thread2 此时,再有其余线程来执行上锁代码块时,会进入 Monitor 对象的EntryList 进行BLOCKEDThread2 执行完同步块中的内容,唤醒 EntryList 中等待的线程来竞争锁,此时的竞争是原创 2022-04-26 22:30:58 · 180 阅读 · 0 评论 -
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 · 343 阅读 · 0 评论 -
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 · 593 阅读 · 0 评论 -
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 · 1150 阅读 · 0 评论 -
springboot
SpringBoot优点创建独立Spring应用内嵌web服务器自动starter依赖,简化构建配置(各种依赖包)自动配置Spring以及第三方功能(各种初始化类)提供生产级别的监控、健康检查及外部化配置无代码生成、无需编写XMLSpringBoot特点依赖管理:父项目做依赖管理按需加载自动配置项:存在对应的 start 则自动加载配置项容器功能@Configuration#############################Configuration使用示例######原创 2022-04-13 22:07:52 · 315 阅读 · 0 评论 -
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 · 1084 阅读 · 0 评论 -
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 · 586 阅读 · 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 · 970 阅读 · 0 评论 -
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 · 295 阅读 · 0 评论 -
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 · 427 阅读 · 0 评论 -
DockerFile
内容解析# 基于这个镜像,build 时会自动去找这个镜像FROM 镜像名:版本# 标签信息LABEL maintainer="自己的邮箱"# docker 容器启动后的环境变量,启动容器后进入就可以看到这个变量ENV VERSION 版本号# dockerfile 制作时候的环境变量ARG currentPath=/home# 默认就是 root 用户USER root# 制作镜像核心(用 && 连接多个命令或者写多个 RUN,一个 RUN 一个镜像层)R原创 2022-04-04 09:11:48 · 333 阅读 · 0 评论 -
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 · 319 阅读 · 0 评论 -
Apollo
传统配置(配置文件)存在的问题原创 2022-03-07 17:48:20 · 254 阅读 · 0 评论 -
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 · 325 阅读 · 0 评论 -
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 · 501 阅读 · 0 评论 -
主从配置流程
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 · 471 阅读 · 0 评论 -
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 · 361 阅读 · 0 评论 -
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 · 131 阅读 · 0 评论 -
Gateway
应用服务搭建断言工厂原创 2022-01-25 13:17:51 · 106 阅读 · 0 评论 -
protobuf
定义protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,可用于数据通信协议和数据存储等,它是 Google 提供的一个具有高效协议数据交换格式工具库,是一种灵活、高效和自动化机制的结构数据序列化方法。相比XML,有编码后体积更小,编解码速度更快的优势;相比于 Json,Protobuf 有更高的转化效率,时间效率和空间效率都是 JSON 的 3-5 倍。优点性能好/效率高支持向后兼容和向前兼容序列化反序列化速度很快...原创 2022-01-25 13:13:31 · 112 阅读 · 0 评论 -
消息中间件对比
ActiveMQJMS规范支持事务支持XA协议没有大规模支撑场景社区维护越来越少RabbitMQerlang语言开发,性能好,高并发支持多种语言,社区,文档方面有优势不利于Java程序员二次开发吞吐量单机在万级RabbitMqJava 实现高可用,高可靠支持语言较少吞吐量单机十万RabbitMqBroker:服务节点Queue:用来存储消息,多个消费者可以同时订阅同一个队列Exchange:生产者将消息发送到交换机,由交换机决定将此消息路由到一个或多个ke原创 2022-01-05 22:38:36 · 1183 阅读 · 0 评论 -
Spring中的发布订阅
模型构成事件类ApplicationEvent 继承 java.util.EventObject, 我们需要继承ApplicationEvent,必要时候为事件添加一些属性事件发布类ApplicationContext 继承了org.springframework.context.ApplicationEventPublisher,我们需要通过ApplicationContext.publisEvent(event)发布事件事件处理类ApplicationListener 继原创 2022-01-04 22:05:46 · 974 阅读 · 0 评论 -
ThreadLocal 弱引用分析
对象引用类型强引用只要有指向就不会发生回收软引用空间不够则进行回收场景:适合缓存弱引用WeakReference对象发生GC的时候,只要见到一个对象只有弱指向,就回收ThreadLocal 防止内存泄漏虚引用JVM 管理直接内存(操作系统内存)ThreadLocal 使用流程1:获取对应线程的成员变量2:ThreadLocal对象为key,set()的值为valueEntry为什么要使用弱引用防止ThreadLocalMap key值的内存泄漏为什么Th原创 2021-12-21 23:13:58 · 127 阅读 · 0 评论 -
算法整理分析
Hash碰撞的发生不同的元素经过Hash算法,在Hash表中定位到相同的位置,可能为等值碰撞,等址碰撞解决方案链地址法(HashMap)处理简单,空间浪费,考虑链表过长的问题开放地址法线性探测:在发生碰撞的地址依次向下寻找,知道找到空余的地址,可以动态变更寻找的步长再次进行Hash公共溢出区...原创 2021-12-03 07:37:44 · 122 阅读 · 0 评论 -
线程调优案例
话不多说,直接粘代码import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class FutureTaskTest { public static void main(String[] args) throws ExecutionException, InterruptedExce.原创 2021-11-30 07:03:09 · 110 阅读 · 0 评论 -
Java并发篇
进程 & 线程进程操作系统进行资源分配的最小单元线程操作系统任务分配的最小单元线程安全如何保证加锁Volatile & SynchroniaedVolatile:保证变量的线程可见性,通常适用于一个线程写,多个线程读的情况Synchroniaed 用来加锁Volatile:不具备原子性,禁止指令重排Java的线程锁机制Java 的锁就是在对象的MarkWord 中记录一个锁状态,无锁,偏向锁,轻量级锁,重量级锁对应不同的锁状态Java的锁机制,就原创 2021-11-28 23:06:11 · 124 阅读 · 0 评论 -
IO演化历程
阻塞(Block)非阻塞(Non-Block)IO类型BIO 同步阻塞IO//同步阻塞IO模型public class BIOServer { //服务端网络IO模型的封装对象 ServerSocket server; //服务器 public BIOServer(int port){ try { //Tomcat 默认端口8080 //只要是Java写的都这么玩,3306 //Redis 6379 //Zookeeper 2181 //HBas原创 2021-11-09 23:28:45 · 78 阅读 · 0 评论 -
单点登录与三方登陆
单点登录(SSO——Single Sign On)对于一个大型系统来说,其下会包含很多子系统,这个时候我们可以使用单点登录来解决客户的重复登录问题,客户只需要登录其中任何一个子系统,则其余的子系统也可以直接登录。流程客户登录第一个子系统,子系统服务将登录用户的信息保存起来,生成对应的标识,可以为UUID,然后将UUID通过cookie响应到浏览器浏览器发送请求登录其他系统时,将UUID放入cookie向服务器进行请求服务器识别对应的唯一标识,判断用户是否可以登录三方登陆利用用户在第三方平原创 2021-11-07 23:35:44 · 872 阅读 · 1 评论 -
分布式ID生成方案
系统要求1:高可用2:高并发实现方案- 数据库自增IDcreate table sequence_id{ id bigint(20) unsigned not null anto_increament, stub char(10) not null default '', primary key(id), unique key stub(stub)} engine = myisam;可以用下面的语句生成并获取到一个自增IDbegin;replace into sequence_i原创 2021-11-07 17:53:52 · 280 阅读 · 0 评论 -
哈希算法与HashMap
哈希算法Hash,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值哈希算法特点正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值原创 2021-10-24 18:23:08 · 1339 阅读 · 0 评论 -
Mybatis源码分析
何为ORM?ORM:Object Relational MappingO:对象 —— M:映射 —— R:关系型数据库核心对象原创 2021-10-10 23:43:31 · 90 阅读 · 0 评论 -
Nacos做全局配置
Nacos 启动bin 目录下启动sh startup.sh -m standaloneNacos 增加配置info:rentao项目集成引入依赖<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId>原创 2021-10-05 19:36:44 · 861 阅读 · 0 评论 -
Netty实现Rpc调用
定义接口public interface IRpcHelloService { String hello(String name); } public interface IRpcService { /** 加 */ public int add(int a,int b); /** 减 */ public int sub(int a,int b); /** 乘 */ public int mult(int a,int b); /** 除 */ public int原创 2021-10-04 16:49:14 · 228 阅读 · 0 评论 -
quartz 简单使用
1:引入pom依赖 <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <vers原创 2021-07-13 19:38:57 · 78 阅读 · 0 评论 -
自定义springboot 起步依赖
定义start子项目项目结构配置自动注册扫描org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.start_template.autoconfig.HelloAutoConfiguration配置类转换:@ConfigurationProperties(prefix = CustomProperties.CUSTOM_PROFILE_PREFIX)public class CustomPr原创 2021-07-11 23:36:39 · 213 阅读 · 0 评论