自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (11)
  • 问答 (1)
  • 收藏
  • 关注

原创 什么叫可重入锁

可重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的。synchronized 和 ReentrantLock 都是可重入锁。可重入锁的意义之一在于防止死锁。废话不多说 直接上源码调试不知道怎么调试源码的看我之前发的文章先上下代码哈,注:这篇文章重点讲解锁的重入,有时间再讲AQS个ReentrantLock,先用ReentrantLock为例,他内部维护了一个Sync类 这个Sync又有一个state的变量 这就是可重入的关键进

2021-07-08 20:44:47 15657 3

原创 I/O模型与Netty(一)

I/O模型与NettyI/O模型与SocketSocketJAVA I/O模型NIOChannelNIO-Channel与Java Stream对比常用类介绍实现步骤Selector选择器BufferLinux I/O模型阻塞IO非阻塞IOIO复用模型信号驱动IO模型异步IO模型I/O模型与SocketSocket整体流程如图所示Socket一共有两个部分 (1)客户端 功能:创建连接,发送OutputStream输出流,读取服务器返回的响应数据作为InputStream输入流(2)服务端 功能:

2021-04-07 14:39:52 180 4

原创 AbstractQueuedSynchronizer

注:在使用ReentrantLock时,默认情况下是使用非公平锁的。Node中的属性:prev next。一个是公平 一个是非公平。这个方法主要有两种实现。

2024-02-19 13:51:39 124

原创 记一次生产要我狗命的问题

问题起因:引入disruptor框架 简单理解就是生产消费者模式 用来支持高并发。

2023-04-17 14:24:33 864 2

原创 redis双写一致问题场景及方案

缺点:1.不能完全解决 因为线程3更新缓存的时间可能还是会晚于第二次删除缓存的时间 只能说更大程度的避免了这一问题发生的可能性。这种场景下 问题产生的主要原因是写入数据库与更新缓存非原子性 有延迟 所以这样会导致谁更新缓存慢 谁会真正的更新缓存。与上一场景类似 虽然写入数据库后删除了缓存 但由于查数据库和更新缓存之间存在延时 所以还是不能真正的更新缓存。写缓存后立即删除缓存后等待一段时间后再次删除缓存 目的是防止其他线程更新缓存 如上图中的线程3 这种情况。2.等待时间不好掌握。

2023-04-16 20:07:24 638 1

原创 关于redission三个锁实现

首先 tryLock有三个实现 分别是RedissionLock RedissionMultiLock。

2023-04-16 17:30:56 352

原创 jedisCluster源码解析之set命令分槽逻辑

【代码】jedisCluster源码解析之set命令分槽逻辑。

2023-04-15 18:26:58 275 1

原创 mybatis批量插入的几种方式及效率

参考 https://blog.csdn.net/blueheartstone/article/details/126602810。扩展com.baomidou.mybatisplus.extension.service.impl.ServiceImpl。简单的说就是一条一条遍历 放到consumer中 最后由sqlsession统一flush。非常短 这种短是建立在插入的列比较少的情况下。结果:500条数据 7秒。

2023-04-13 17:24:11 267

原创 SpringBoot-DeferredImportSelector使用

springbootDeferredImportSelector使用及原理

2023-02-13 11:26:40 254

原创 关于ES集群信息的一些查看

es节点信息及集群建议

2022-09-20 09:37:59 4076

原创 kubesphere安装 CentOS7.9

文章出处https://kubesphere.com.cn/docs/quick-start/all-in-one-on-linux/参考:https://blog.csdn.net/zzw_17600691357/article/details/122798009

2022-03-23 16:54:25 211

原创 dubbo面试题

Dubbo 支持哪些协议,每种协议的应用场景,优缺点?• dubbo: 单一长连接和 NIO 异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者。传输协议 TCP,异步,Hessian 序列化;• rmi: 采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP。多个短连接,TCP 协议传输,同步传输,适用常

2022-02-07 15:10:24 239

原创 git合并分支

对于复杂的系统,我们可能要开好几个分支来开发,那么怎样使用git合并分支呢?合并步骤:1、进入要合并的分支(如开发分支合并到master,则进入master目录)git checkout mastergit pull2、查看所有分支是否都pull下来了git branch -a3、使用merge合并开发分支git merge 分支名4、查看合并之后的状态git status5、有冲突的话,通过IDE解决冲突;6、解决冲突之后,将冲突文件提交暂存区git add 冲突文件7、提交m

2021-10-30 16:07:59 2295 1

原创 干货-两个项目里的实际问题

第一:策略模式加枚举这种方式首先是用到了设计模式 好处就是虽然可能不如if() if()这样看着清晰 但是在后期迭代的过程中 才能提现出来优势,比如说不规范的开发 有个字段 最开始就是0,1 两个值 有时候写代码的时候就没有定义枚举 并且直接就是setXxx(“1”)这样去设置,但是这样在后期就会出现一个问题,如果将来这个字段增加了一个2 就要去全局搜setXxx 这样,因为不排除有些同学写代码直接写成了if(xxx.equals(“1”)) xxx else{} 这样的话 迭代的时候如果没有查到 就

2021-10-25 19:24:44 83

原创 关于mysql索引的问题

首先提出一个问题有表A 字段create_time(此字段有索引)这几个语句 哪个会走索引select * from A where create_time between '' and ''select * from A where create_time >'' and create_time <'' SELECT * FROM A WHERE TO_DAYS(create_time) = TO_DAYS(NOW());SELECT * FROM A WHERE cr

2021-10-22 10:50:44 217 1

原创 redis 布隆过滤器实战

本章比较简单,目的是使用布隆过滤器坐标的引入可以用guvua包自带的布隆过滤器,引入依赖:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>22.0</version></dependency>示例伪代码: import com.googl

2021-10-22 10:33:22 300 1

原创 StringUtils.isBlank和StringUtils.isEmpty区别

1.public static boolean isBlank(String str)在校验一个String类型的变量是否为空时,通常存在5种情况1.是否为 null2.是否为 “”3.是否为空字符串(引号中间有空格) 如: " "。4.制表符、换行符、换页符和回车5.空白例子:StringUtils的isBlank()方法可以一次性校验这五种情况,返回值都是true,否则为false示例:StringUtils.isBlank(null) = trueStringUtils

2021-10-12 11:56:36 271 1

原创 lombok常用注解

lombok常用注解@Accessors(chain = true)@Accessors(fluent = true)@AllArgsConstructor@EqualsAndHashCode注解名称功能@Setter自动添加类中所有属性相关的 set 方法@Getter自动添加类中所有属性相关的 get 方法@Builder使得该类可以通过 builder (建造者模式)构建对象@RequiredArgsConstructor生成一个该类的构造方法,禁止无参

2021-09-01 14:48:14 129 1

转载 CSDN-MD

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-08-26 18:48:14 81

转载 ES MQ canal同步mysql

转载来源:https://juejin.cn/post/6844904073213247496大约两年以前,笔者在一个项目中遇到了数据同步的难题。当时,系统部署了几十个实例,分为1个中心平台和N个分中心平台,而每一个系统都对应一个单独的数据库实例。在数据库层面,有这样一个需求:中心平台数据库要包含所有系统平台的数据。分中心数据库只包含本系统平台的数据。在中心平台可以新增或修改 分 中心平台的数据,但要讲数据实时同步到对应的分中心平台数据库。这几十个数据库实例之间,没有明确的主从关系,是否同步还

2021-08-26 16:47:08 562 2

原创 大厂常见面试题(一面)

整理的比较糙 别介意 当看看目录了面试问题吐血整理网络redisJDK微服务mysqlJVM并发编程spring springboot网络http状态码 知道几个三次握手四次挥手七层协议http和https区别http 1.0 1.1 2.0 区别(这个问题其实tomcat调优也可以注意下 配置文件里也能改协议 有兴趣的小伙伴自己查资料了解下)redisredis对查询进行了怎样的优化redis为什么快redis几种常见数据结构及你在项目里的运用(尽量不要只说出来五种结构 要说这五种结

2021-08-12 13:34:43 303 1

原创 dubbo的简单使用

目录环境搭建安装ZKPOM引入代码API部分provider配置文件启动类service消费者配置文件启动类消费的service运行环境搭建安装ZK以zk为注册中心,windows的安装看下面这个链接就可以https://blog.csdn.net/qq_33316784/article/details/88563482POM引入pom引入就不一一介绍了 我会把源码放到git上,这里就看下下面这俩吧 代表着dubbo使用的是dubbo,序列化使用的是hessian <dependenc

2021-07-28 14:32:54 180 1

原创 分布式事务seata的安装与使用

目录环境准备sql准备配置文件修改代码准备pom引入环境准备我是在windows上安装的下载如下网址中对应版本的binary即可https://seata.io/zh-cn/blog/download.html此处需要注意:需要手动的将mysql的连接包传入lib文件夹中我这里用的是mysql8 所以传入了mysql-connector-java-8.0.22.jarsql准备1.新建seata库 加入如下表-- -------------------------------- The s

2021-07-25 11:52:05 257 1

原创 Spring三级缓存解决循环依赖问题

三级缓存介绍:三级:singltonFactory 单例对象工厂的cache二级:earlyFactory 提前曝光的单例对象的cache一级:singletonObject 单例对象的cache 对象都组装好后 放入这里简单解释下 为什么二级三级都叫 factory我感觉是因为类似于车间得流水线一样 三级和二级 都属于一个过程 也就是还没组装好 所以叫factory一级就是完全创建好了 如果对象都在一级里 也就不会又循环引用问题恰恰就是因为在二级和三级得创建过程中得循环依赖问题如

2021-07-22 11:27:56 141 1

原创 JVM与GC(一)

JVM与GCJVM内存模型JVM规范之JVM内存版本内存结构差异1.7内存结构介绍1.8内存结构介绍1.8内存详解参数配置年轻代 老年代内存分配过程1.8GC类别这个系列会很长,先讲理论,后实战,设计到的内容也是JVM那本书里比较基础的,大神请忽略这篇文章,图也大多是盗的JVM内存模型JVM规范之JVM内存下图是这几个区域会涉及到的配置参数和异常,需要注意的是 虚拟机栈 其实就是人们平常所说的栈区,方法区是JDK1.8之前的叫法,JDK1.8之后称为元空间针对的设置参数也不同 1.7是:X:Per

2021-07-15 12:08:10 181 3

原创 BIO NIO 及多路复用

BIO NIO 多路复用声明BIO与NIO的对比BIONIONIO与多路复用对比Select选择器与poll选择器的对比poll与epoll声明首先BIO是同步阻塞NIO是同步非阻塞多路复用也是同步非阻塞下面这段话 是别的地方抄的,说实话 我个人觉得很晦涩,今天还是将点实际的把阻塞与非阻塞阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态同步与异步同步和异步关注的是消息通信机制只有同步的时候 才有阻塞非阻塞一说 非阻塞就是线程可以去干点别的BIO与NIO的对比BIO就是

2021-07-14 12:36:36 552 2

原创 ArrayBlockingQueue与LinkedBlockingQueue

BlockingQueue阻塞队列 先把这个接口的几个方法介绍下public interface BlockingQueue<E> extends Queue<E> { //将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量) //在成功时返回 true,如果此队列已满,则抛IllegalStateException。 boolean add(E e); //将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量) // 将指定的

2021-07-08 19:45:55 245

原创 性能调优之Tomcat调优

tomcat作为容器 也就是第一道屏障大门,必须做的敞亮一些,否则大门就小了后面程序再给力也没用1.尝试调试线程池<Executor name="tomcatThreadPool" namePrefix="catalina‐exec‐" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/>maxThreads:最大并发数,默认设置 200,一般建议在 500 ~

2021-07-08 19:04:33 176

原创 Java运算符

负数在计算机中的存储00000101 510000101 -5计算机存储的正数的补码就是正数负数的补码是原值除符号位取反+1也就是11111010 +111111011 -5在计算机中的存储练习20和-2000010100 2010010100 -20取反11101011 +111101100 -20的补码有符号右移>>有符号右移就是右移之后,左边的补上符号位,正数补0,负数补1无符号右移>>>无符号右移就是右移

2021-07-07 15:17:52 74

原创 JDK之HashMap二

上一期讲到用户自定义的不够散列的哈希code可能会导致哈希碰撞,进而引起由链表转化成红黑树的过程今天带大家实地的去看一下这个事情首先得需要调试JDK首先IDEA 默认调试的是下图这两个zip包我们需要改一下这里,把这两个文件复制,解压然后打开IDEA project Structure->Sdks->Sourcepath选项卡删除掉原有的 也就是jdk下的两个zip包 换成解压的文件夹此外 还要把file->setting->build,execution,depl

2021-07-02 11:58:01 80 2

原创 JUC之ReentrantLock

ReentrantLock与synchronized对比公平锁和非公平锁介绍Sync阻塞队列AQS:图解ReentrantLock公平与非公平的lock()实现差异与synchronized对比简介:ReentrantLock常常对比着synchronized来分析,我们先对比着来看然后再一点一点分析。(1)synchronized是独占锁,加锁和解锁的过程自动进行,易于操作,但不够灵活。ReentrantLock也是独占锁,加锁和解锁的过程需要手动进行,不易操作,但非常灵活。(2)synchro

2021-07-01 12:57:19 118 4

原创 JDK之HashMap

从面试题理解HashMapHashMap面试题1.jdk1.8 HashMap采用了怎样的储存方式:数组加链表加红黑树2.什么时候使用链表 什么时候使用红黑树:链表长度大于8转红黑树 小于6 变回链表3.长度大于8一定会转成红黑树么:答案是不一定 需要看源码 要满足两个条件 一个是大于8 还要一个是数组的长度大于64 如果数组的长度小于64 则执行resize()进行扩容4.如果两个键的hashcode相同,如何存储键值对答案如下图比如说我们的hashmap只存16个数组 他的hash运算是对

2021-06-30 12:51:27 142 1

原创 并发编程之CountDownLatch

场景:假设一个主线程要等待5个 Worker 线程执行完才能退出,可以使用CountDownLatch来实现 public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(5); for (int i = 0; i < 4; i++) { new MyThread("线程" + (i +

2021-06-29 22:39:34 249 2

原创 jvm-双亲委派模型及原理

1.首先说下什么是双亲委派模型如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成如下图当出现加载类的请求时,会先去找应用类加载器,应用类加载器不会加载 而是继续往上到达扩展类加载器,再继续向上到达最顶层的启动类加载器,此时开始尝试加载,如果启动类加载器中不存在该类,则向下找扩展类加载器2.为什么需要双亲委派模型如果不这样定义,那么我们自己也可以写一个java.lang.String的类 在使用的时候,如果没有这种机制我们将很难区分开来,而且

2021-06-29 22:12:50 304 3

原创 JVM-类加载器

类加载器类加载子系统介绍类加载器的执行过程1.加载Loading2.链接Linking验证准备解析3.初始化注:本文使用JDK1.8 虚拟机HotSpot类加载子系统介绍类加载子系统负责将.class文件加载到内存中主要分为三个阶段:(1)加载阶段(2)链接阶段(3)初始化后面详细介绍下面先看一个class文件加载到内存中的样子具体如下图解释:.class文件通过类加载器加载到JVM中被称为DNA元数据模板,通过调用getClass()方法实例化相应的类到堆空间中类加载器的执行过程

2021-06-29 20:23:14 153 6

原创 简单聊聊dp

还没掌握dp的小伙伴 推荐两道题 算是很简单的dp一个是LeetCode70 爬楼梯一个是LeetCode198 打家劫舍一般需要用dp解的题 都是求最值问题,dp会出现一个空间 来换取时间拿打家劫舍举例子原始数组是 2 7 9 3 1相邻的不能偷 那么如何求最多能偷多少呢这时候需要注意两点1.拆分子问题2.从后往前看问题首先 最后一个数组是1那么小偷有两种可能1.偷: 那么之前的3 就不会被偷 我们要算之前的最大值 那就是dp[i-2] 之前的最大值算出来了 再加上刚偷的这个1

2021-06-24 12:12:32 85 2

原创 BFS DFS应用场景

DFS(深度优先搜索)和 BFS(广度优先搜索)就像孪生兄弟,提到一个总是想起另一个。然而在实际使用中,我们用 DFS 的时候远远多于 BFS。那么,是不是 BFS 就没有什么用呢?如果我们使用 DFS/BFS 只是为了遍历一棵树、一张图上的所有结点的话,那么 DFS 和 BFS 的能力没什么差别,我们当然更倾向于更方便写、空间复杂度更低的 DFS 遍历。不过,某些使用场景是 DFS 做不到的,只能使用 BFS 遍历。这就是本文要介绍的两个场景:「层序遍历」、「最短路径」。本文包括以下内容:DFS 与

2021-06-22 12:17:56 1595 1

原创 Redis主从和集群的搭建

主从的搭建主从的优缺点优点:配置简单,一定程度提高了可用性缺点:主挂掉之后,虽然客户端还能访问 但是只能读,不能写redis 5.0 安装wget http://download.redis.io/releases/redis-5.0.7.tar.gztar -zvxf redis-5.0.7.tar.gzmakemake install(会在/usr/local/bin/)生成如下复制redis.conf配置主从主节点不用动从节点修改端口和加上slaveof 127.0.0.1

2021-06-16 19:37:57 205 2

原创 LeetCode_64题解

这是一道需要用动态规划(dp)解的题,在所有dp中,算比较简单的,所以今天来说说思路和图解,首先他求的是最小路径的和,如果是求最短的路径 那么就需要我们利用回溯和BFS去解,求和的话 因为每个小格子移动只会是要么往下 要么往右,现在开始解题,设原始数组为1 3 1 31 5 1 34 2 1 31 1 1 1那么我们根据他的行走路径就可以得出,只要找到图中箭头位置的最小路径和 再加上右下角的1 就是最短路径和,以此类推,设行为i,列为j当i=0时 也就是最上面那行 他只能往右走也就是dp[

2021-06-15 12:43:13 180 2

原创 DFS 回溯 递归算法区别

本文章摘子LeetCode46题 对数组全排列,的评论 觉得写的挺好 所以摘抄过来以作为一种记录,或者参考回溯算法与深度优先遍历以下是维基百科中「回溯算法」和「深度优先遍历」的定义。回溯法 采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:找到一个可能存在的正确的

2021-06-10 22:07:05 409 1

大厂面试系列八.pdf

大厂面试系列八.pdf

2021-04-21

大厂面试系列五.pdf

大厂面试系列五.pdf

2021-04-21

大厂面试系列四.pdf

大厂面试系列四.pdf

2021-04-21

大厂面试系列三.pdf

大厂面试系列三.pdf

2021-04-21

大厂面试系列二.pdf

大厂面试系列二.pdf

2021-04-21

大厂面试真题篇.pdf

大厂面试真题篇.pdf

2021-04-21

Dubbo面试专题.pdf

Dubbo面试专题.pdf

2021-04-21

Dubbo服务框架面试题及答案.pdf

Dubbo服务框架面试题及答案.pdf

2021-04-21

Spring Bean生命周期.pdf

Springbean生命周期

2021-04-01

feiwangSpringgithub2.zip

springboot小程序 讲文本内容通过接口的方式返回二维码图片流,附带一些aop思想等,本代码github也有上传

2020-06-24

窗口透明呼吸

利用窗体透明度和timer制作无限呼吸窗口由0到1再由1到0无限循环

2014-03-12

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

TA关注的人

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