自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Crown的博客

一名Gopher

  • 博客(65)
  • 收藏
  • 关注

原创 SpringBoot 整合降级利器Hystrix

服务降级、熔断、

2023-02-03 15:15:07 543

原创 SpringAop-ProxyFactory

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#createProxy protected Object createProxy(Class<?> beanClass, @Nullable String beanName, @Nullable Object[] specificInterceptors, TargetSource targetSource) { if (this.beanFac

2021-12-26 17:27:39 328

原创 SpringAop之ProxyBeanFactory

SpringAop根据上面的类图结构 Spring创建代理的方式一种是使用ProxyFacotoryBean 另一种是 ProxyFactoryProxyConfig是一个数据类为子类提供配置属性AdvisedSupport 封装了Aop 对通知和通知器的的相关操作ProxyCreatorSupport 子类创建Aop 代理的一个辅助类 根据需求分别由其子类完成介绍第一种方式 ProxyFactoryBean先说结论 : ProxyFactoryBean 的类图结构 它实现了Factory

2021-12-26 16:36:46 385

原创 Java面试准备

复习Spring Ioc 、AopJava 并发相关mysqlJava集合redis分布式事务Seata分布式锁消息队列分布式任务调度xxl-jobRpc调用JVM八股文linux算法

2021-12-25 14:06:53 461

原创 Mac OS 11.0.1 big sur升级导致navicat 不可用

按照这个重新下载安装 新的版本](https://macwk.com/soft/navicat-premium)

2020-11-13 14:31:34 2099 1

原创 一次线上Mysql Deadlock

后台日志报错如下### SQL: UPDATE t_shop_mp_liveroom SET liveStatus = ? , coverImg = ?,shareImg = ? where shopId =? and appId = ? and roomId =?### Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock

2020-10-23 14:47:00 111 1

原创 定时任务的幂等性

分布式集群下如何保证定时任务的幂等性(只有一个执行)1. 采用分布式锁2. 将业务代码与定时任务分开在不同的jar3.通过启动参数 设置定时任务开关 :-DRunOrderExpire=true 控制当前Jar任务是否执行 如果配置了 你就执行定时任务4. 通过对Id取模让不同的集群节点处理不同的数据行:例如:集群中3个节点 Node1 modIndex = 1 Node2 modIndex = 2 Node3 modIndex = 3(id % 3 ) + 1 = modIndex..

2020-07-01 22:56:18 1129

原创 一文详解ThreadLocal 使用场景,源码分析,内存泄漏分析

ThreadLocal使用场景:场景1. ThreadLocal用作保存每个线程独享的对象,为每个线程都创建一个副本,修改时只是对自己副本的操作,确保线程安全。典型的需要使用的类就是 SimpleDateFormat。场景2.ThreadLocal每个线程需要独立保存信息,以便提供其他方法更方便的获取。避免了参数的传递,类似与全局变量的概念。Thread、ThreadLocal、Threa...

2020-04-13 15:06:20 198

原创 Java SPI

Java SPI的全称是Java Service Provider Interface ,翻译成中文的意思就服务提供接口。它是为了解决接口实现方与调用方分离的。在面向对象的设计里我们一般推荐面向接口编程。在多个模块之间不对实现进行硬编码,如果替换一种实现实现方式就会重新修改代码。可能有人会说Spring 支持一个接口多个实现类。在注入Bean的时候只要使用@Qualifier注解指明我们所要...

2020-01-17 15:00:52 132

原创 GC

触发GC的条件触发MinorGC 的条件:Eden区满了触发Full GC的条件:Full GC触发条件:(1)调用System.gc时,系统建议执行Full GC,但是不必然执行(2)老年代空间不足(3)方法去空间不足(4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存(5)由Eden区、From Space区向To Space区复制时,对象大小大于T...

2020-01-15 15:36:44 252 1

原创 源码分析----线程池的定制跟线程复用原理(长文慎入)

使用线程池的原因:避免频繁的创建线程、销毁线程导致系统资源的浪费使得工作单元\任务单元 与执行机制分离开解耦过多的线程会占用过多的内存等资源,还会带来过多的上下文切换public class ThreadPool { /** * * corePoolSize 核心线程数 * * maxnumPoolSize 最大线程数 *...

2020-01-11 12:32:06 202

原创 StringRedisTemplate的常见操作,整合Spring

添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </depende...

2020-01-08 18:05:01 248

原创 Optional 使用详解

Optional 是一个容器创建Optional //of 方法的值不能为空否则会抛出异常 Optional<String> optional1 = Optional.of("hello"); //返回一个Null的optional Optional<String> empty = Optional.em...

2020-01-07 15:26:28 1557 1

原创 LockSupport 详解

LockSupportLockSupport 与每个使用它的线程都存在一个许可证,Map(Thread,permit) 因为是Unsafe 的 我猜数据结构大概如此。park()调用了park 方法的线程会检查当前线程是否有一个许可,有就直接返回,没有就将阻塞当前线程,直到获取到许可。unpark()会给当前线程一个LockSupport的许可,每个线程LockSupport只维护一个许...

2020-01-06 16:29:12 343

原创 Java8 核心的函数式接口

Supplier不接受参数 返回一个值@FunctionalInterfacepublic interface Supplier<T> { /** * Gets a result. * * @return a result */ T get();}2.Consumer 接受一个参数 不返回值@Functiona...

2020-01-02 16:26:27 83

原创 源码分析----Semaphore

Semaphore 信号量计数信号量, 从概念上说,信号量维持了一些许可。每次achqire方法执行的时候,将会阻塞,一直到许可可用,然后获取许可才能去执行后面的方法。当release 方法执行的时候都会往初始化的容器中返还许可。潜在地,一个acquire 方法的阻塞将会解除阻塞然而并不是真正的Permit对象被使用掉了,它只是维护了一个可用的计数器。信号量经常被用来限制几个线程可以访...

2019-12-31 10:41:16 129

原创 缓存设计

1. 缓存穿透查询一个根本不存在的数据,缓存层和存储层都不会命中,但出于容错的考虑,如果从存储层查不到数据则不写入缓存层。 缓存穿透导致查询不存在的数据每次请求都要到存储层去查询,失去了缓存保后端存储的意义。缓存穿透问题可能会使得后端存储负载加大,由于很多后端系统不具备高并发性,甚至是可能导致后端存储宕掉,通常可以在程序中分别统计总调用数,如果都需要去查询数据库(包括sql 跟 nosql...

2019-12-30 16:30:07 121

原创 Redis持久化

Redis的持久化RDB (全量的内存快照)################################ SNAPSHOTTING ################################# redis的快照 RDB 持久化# Save the DB on disk:# # save <seconds> <changes># # ...

2019-12-29 18:34:16 97

原创 Redis 主从复制集群搭建

伪分布式主节点 127.0.0.1:6377从节点 127.0.0.1:6378主从复制原理 RDB 副本启动的时候会使用RDB文件进行复制,全量更新,运行期间AOF 增量更新。所有要先开启Redis的持久化!准备工作cd /usr/local/redisCluster把单机版的redis编译后的复制两份cp -r reids01 redis6377cp -r reids01 r...

2019-12-29 18:31:11 122

原创 Redis 订单超时

redis.conf中对于Key的事件监听的说明。############################# EVENT NOTIFICATION ############################### Redis can notify Pub/Sub clients about events happening in the key space.# This feature is...

2019-12-29 11:51:14 738

原创 Redis的内存管理 -- 内存淘汰

Redis 缓存的淘汰策略给Redis设置一些字节大小去限制内存使用,当Redis达到所设置的内存大小,redis将会删除一些Key,根据所制定的内存淘汰策略。如果Redis不能删除key根据所给的策略,或者如果当前的淘汰策略是novication,有新的Key进来的时候,Redis将回出错,比如set操作 LPUSH 等等。 只能执行get操作。简而言之:就是当redis把内存用完时,只能读...

2019-12-28 22:07:30 119

原创 NIO_网络编程

NIO_网络编程的全部的全部package com.clown.netty.nio.NioNetSocket;import io.netty.channel.unix.IovArray;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import j...

2019-12-27 16:05:40 84

原创 源码分析----Lock锁

总结先写前面: 后面留给你去验证在AQS当中:主要有五个值得关注的点:private volatile int state; 锁状态的标志位0 为没有上锁。大于0 表示 加锁 值标识锁重入的次数。cas原子操作 保证了交换锁标志位的值,以及入队列等操作在高并发条件下不会出错。LockSupport 提供了将线程阻塞跟唤醒的操作,避免了无谓的自旋操作。队列 存储所有阻塞的等待唤醒的线程...

2019-12-26 20:05:06 222

原创 Zookeeper-Leader选举

Zookeeper 是Cp 还是 AP答:cp zookeeper为了保证一致性会在leader挂掉的时候进行投票停顿,此时无法提供服务,服务器处于LOOKING 状态。是不可用的,所以他为了保证一致性,放弃了可用性。集群的角色在上篇集群搭建中我们最后搭建了Leader、2个Follower 的集群。但是Zookeeper 集群中是有三种角色类型的服务器:leader事务请求的唯一调度...

2019-12-26 11:27:57 140

原创 zookeeper-伪分布式集群搭建

搭建一主两从集群:一个Leader 两个Follower创建数据目录跟myid文件因为是搭建伪集群,所以要给Zookeeper创建三个数据目录:1. 在 $ZK_HOME 下面创建数据目录 data2. 在data目录下创建zookeeper1、zookeeper2、zookeeper3 三个目录并且在每个目录下创建myid文件,内容为zookeeper的服务节点ID 自定义。在con...

2019-12-26 09:57:51 167

原创 ZkClient

package com.crown.simple;import org.I0Itec.zkclient.ZkClient;import org.junit.Test;import java.util.List;import java.util.UUID;public class ZkClientTest { private ZkClient zkClient = ne...

2019-12-25 16:24:28 105

原创 Spring的循环引用

Spring的循环引用实力有限,如有勘误,请指出1.Spring中的三级缓存在创建Bean的过程中,Spring 会先去单例缓存中查找Bean是否已经被创建。 @Nullable protected Object getSingleton(String beanName, boolean allowEarlyReference) { //从单例缓存(一级缓存)如果有就返回 Obj...

2019-12-20 12:05:03 119

原创 Netty-ByteBuf 详解

getXXX setXXXJava 中基本类型所占的字节数byte 1字节 short 2字节 int 4字节 long 8字节 char 2字节 可以存储一个汉字float 4字节 double ...

2019-12-13 09:59:18 293

原创 Nio之ByteBuffer

Buffer 类中几个重要的变量capacity就是Buffer它所能存放元素的个数。在Buffer创建的时候就已经确定了。limit JDK中的介绍是不能读或者写的第一个元素的下标索引。它不会为负数,或者超过capacity。读 -> 写模式下: postion设置成limit,他会把limit设置成capacity 然后让postion++;写 -> 读模式下:...

2019-12-12 10:32:24 92

原创 Netty--- 连接多个客户端

核心思路要给给客户端的发送消息就要给客户端所对应的chanel的writeAndFlush() 方法, 所以多个客户端就要管理多个channel对象, Netty提供使用ChannelGroup 来管理channel。当handlerAdded回调执行的时候 我们往channelgroup 对象添加channel,在handlerRemoved 从channelGroup 中移除channel...

2019-12-10 17:46:06 1796 1

原创 不得不提HttpMessageConverter

HttpMessageConverterHttpMessageConverter 是一个Spring的重要的接口,它负责将请求信息转化为一个类型T,或者将对象T输出为响应信息。RequestMappingHandlerAdapter 作为HandlerAdapter的组件实现类。HttpMessageConverter既由RequestMappingHandlerAdapter使用,将请求的信...

2019-12-06 19:53:03 127

原创 ServletContainerInitializer-- Servlet3.1 无XML启动SpringMVC

实现自己的ServletContainerInitializer在Web容器启动的时候为提供给第三方组件做一些初始化的工作。例如注册servlet或者filters等servlet规范中通过ServletContainerInitializer实现次功能,每个框架再使用ServeletContainerInitlizer就必须在jar 包的META-INF/services 目录穿件一个名为...

2019-12-06 19:51:15 272

原创 JVM--逃逸分析

逃逸分析在Java虚拟机的即时编译(JIT)器,逃逸分析判断对象是否逃逸。一般依据如下的来判断:对象是否被存入堆中对象是否传入未知代码当中对象一旦被存入堆中,其他线程便可以获取到该线程的引用,即时编译器就无法追踪到该对象的所有代码位置。关于后者,由于java虚拟器的即时编译是以方法为单位的,位于方法中未被内联的方法调用,即时编译器会将它当成未知的代码。无法确认会不会将调用者或者所传入...

2019-12-06 19:47:11 122

原创 Java 中的反射

反射简单来说反射就是运行时获取,检测和调用对象的属性和方法tips:Java的反射的方法很多,有个小技巧就是带有Declared的方法都是可以访问到非public的。反射的基本使用如何获取一个类的Class对象Class.forName(); public class RefTest { public static void main(Stri...

2019-12-06 19:45:36 108

原创 RabbitMq_Producer 详解

package com.clown.message;import com.rabbitmq.client.*;import org.junit.Test;public class MqTest { public final static String IP_ADDRESS = "127.0.0.1"; public final static int PORT = 5...

2019-12-06 19:38:11 551

原创 SpringBoot文件上传报错

//拷贝 //multipartFile.transferTo(); FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),destFile);

2019-09-18 19:50:16 256

原创 synchronized实现原理分析 - 字节码层面分析jvm底层如何实现Synchronized

开头我们先来复习一下synchronized的使用方法。第一种在实例方法上使用表示是对当前实例的加锁:public synchronized void myMethod2(){ System.out.println("hello world"); }第二种是用在类方法上表示对当前类的Class对象加锁: public static synchron...

2019-08-22 13:55:59 537

原创 CyclicBarrier,CountDownLatch 的使用以及实现原理

CyclicBarrier 可以使多个线程达到同一状态package com.sqh.TestLimiter;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.concurrent.CyclicBarrier;public class TestLimiter...

2019-08-21 19:09:15 312

原创 Java并发编程之FutureTask

先来看一下简单的程序public class ConcurrencyTaskFuture { public static void main(String[] args) throws Exception { FutureTask<String> futureTask = new FutureTask<>(()->{ ...

2019-08-17 10:33:41 123

原创 生产者消费者

package concurrent;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Ree...

2019-08-14 14:35:20 143

空空如也

空空如也

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

TA关注的人

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