自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (4)
  • 收藏
  • 关注

原创 Rocket MQ常见问题总结

每一个mq都有的问题。顺序消费问题RocketMQ 在主题上是无序的、它只有在队列层面才是保证有序 的。普通顺序(推荐):消费者通过 同一个消费队列收到的消息是有顺序的 ,不同消息队列收到的消息则可能是无顺序的。普通顺序消息在 Broker 重启情况下不会保证消息顺序性 (短暂时间) 。严格顺序(实现代价太大): 消费者收到的 所有消息 均是有顺序的。严格顺序消息 即使在异常情况下也会保证消息的顺序性 。我们使用普通顺序模式,比如订单的创建,支付,发货三个消息不被分配在topic的同一个队列,就无

2021-03-25 22:23:28 331

原创 sql语句rank函数和dense_rank区别

rank定义:RANK()函数,顾名思义排名函数,可以对某一个字段进行排名,这里为什么和ROW_NUMBER()不一样那,ROW_NUMBER()是排序,当存在相同成绩的学生时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样出现相同的,他们的排名是一样的。看例子:dense_rank定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名,那它和RANK()到底有什么不同那?看例子:...

2021-03-24 20:46:17 1228

原创 MVCC——增强行级锁

MVCC是什么?MVCC(Multi-Version Concurrency Control)即多版本并发控制。可重复读,读已提交会触发。MVCC的实现原理MVCC使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。InnoDB的MVCC,是通过在每行纪录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建版本号,一个保存了行的删除版本号。每开始一个新的

2021-03-24 20:22:05 275

原创 redis—布隆过滤器

什么是缓存穿透?缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。举个例子:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库。有哪些解决办法?最基本的就是首先做好参数校验,一些不合法的参数请求直接抛出异常信息返回给客户端。比如查询的数据库 id 不能小于 0、传入的邮箱格式不对的时候直接返回错误消息给客户端等等。1)缓存无效 key如果缓存和数据库都查不到某个 key 的数据就写一个到 Redis 中去并设

2021-03-21 21:46:26 75

原创 redis的io多路复用技术

redis单线程为什么会那么快?主要有两点:1.内存操作2.io多路复用技术什么是io多路复用?一、简单理解就是:一个服务端进程可以同时处理多个套接字描述符。多路:多个客户端连接(连接就是套接字描述符)复用:使用单进程就能够实现同时处理多个客户端的连接以上是通过增加进程和线程的数量来并发处理多个套接字,免不了上下文切换的开销,而IO多路复用只需要一个进程就能够处理多个套接字,从而解决了上下文切换的问题。其发展可以分select->poll→epoll三个阶段来描述。二、如何简单理解

2021-03-21 21:05:59 1404

原创 ConcurrentHashMap,hashMap,TreeMap全总结(不看后悔哦)

JDK8中的HashMap与JDK7的HashMap有什么不一样?JDK8中新增了红黑树,JDK8是通过数组+链表+红黑树来实现的JDK7中链表的插入是用的头插法,而JDK8中则改为了尾插法JDK8中的因为使用了红黑树保证了插入和查询了效率,所以实际上JDK8中的Hash算法实现的复杂度降低了JDK8中数组扩容的条件也发了变化,只会判断是否当前元素个数是否超过了阈值,而不再判断当前put进来的元素对应的数组下标位置是否有值。JDK7中是先扩容再添加新元素,JDK8中是先添加新元素然后再扩容Ha

2021-03-15 20:26:47 541

原创 队列同步器(AQS)个人理解,通俗易懂

AQS到底是个什么东西???在家自学java并发编程的艺术,晦涩难懂,看到aqs的时候每个字都读懂了,看完之后完全不知道在说啥,大脑一片空白。今天拿起书本索性又看了几遍,有了点感悟,分享给大家!!!**要我个人理解就是一个用来构建自己的锁的jdk提供的框架。**如果你想构建自己的锁,你就定义一个类来继承AbstractQueuedSynchronizer实现它提供的方法就行了。下面是aqs提供的方法大致三类:独占式获取与释放同步状态、共享式获取与释放,同步状态和查询同步队列中的等待线程情况aqs的

2021-03-12 21:01:49 642

原创 Condition和object监视器的区别

1.先了解什么是监视器任意一个对象都拥有自己的监视器(monitor.enter–>monitor.exitd对应着获取锁和释放锁),当这个对象由同步块或者这个对象的同步方法调用时,执行方法的线程必须先获取到该对象的监视器才能进入同步块或者同步方法(即获取锁),而没有获取到监视器(执行该方法)的线程将会被阻塞在同步块和同步方法的入口处,进入BLOCKED状态。2.object监视器的整个流程1)使用wait()、notify()和notifyAll()时需要先对调用对象加锁。2)调用wait

2021-03-12 20:35:48 632 1

原创 手写简易线程池-----java(可直接运行,解释清晰)

## 可直接运行已测试1.先定义一个工作类(需要被运行的工作)public class Job implements Runnable { private String name; public String getName() { return name; } public Job(String name) { this.name = name; } public void setName(String name) {

2021-03-12 20:03:30 129 1

原创 synchronized,volite,lock接口分析以及锁的分类

ynochronizd和volatile关键字区别:volatile关键字解决的是变量在多个线程之间的可见性;而sychronized关键字解决的是多个线程之间访问共享资源的同步性。volatile只能用于修饰变量,而synchronized可以修饰方法,以及代码块。(volatile是线程同步的轻量级实现,所以volatile性能比synchronized要好,并且随着JDK新版本的发布,sychronized关键字在执行上得到很大的提升,在开发中使用synchronized关键字的比率还是比较大)

2021-03-11 15:36:33 437

原创 并发之锁升级(偏向锁,轻量级锁,重量级锁)大白话

锁的分类为了减少获得锁和释放锁带来的性能消耗,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级.偏向锁——>轻量级锁偏向锁是在对象头的markWord和栈帧中的所记录存放一个偏向线程id,如果线程a获得了锁,则这个对象的对象头就存放偏向线程id(a),如果一个线程来获取锁,会先检查当前偏向线程id是否指向这个线程,如果是则可以获取,如果不是则去验证当前对象头是否标记为偏向锁如果不是就cas竞争,如果是就

2021-03-11 10:30:35 259

原创 leecode刷题总结--sql(二)

6.7窗口函数dense_rank() over(order by xxx desc ) as ‘rank’;89where (DepartmentId,Salary) in分组查max的话只能查出一个最高的。这样先查出每个部门最高的钱,再联表查,最高的钱和部门都满足的人。10连表查询用三个or可以得到所有情况,再进行去重。...

2021-03-10 22:55:59 132

原创 leecode刷题总结--sql(一)

1not exists查询。2Datediff日期操作。3distinct数据去重复。4order by *** desc;5sql语句的case语句。

2021-03-10 22:50:53 176

原创 leecode刷题总结--动态规划

1关键是知道第i个与第i-1之间的关系。用i=0的两种可能,得到i=1的两种可能,依次递推,一直到n的两种可能,在取两个可能的最大值。2要上一个,还是自立门户 贪心。3直接递归方法会超时,开一个数组存放。4缓存,使用Pair.creat(i,j)存储进hashmap;5到达i则只能从i-1,或者i-2过来。分别加上i-1,i-2的值取最小。6暂存更新一个最小值。就两种可能持股不持股,i和i-1的关系是,如果i要继续持股,则为max(i-1持股,i-1不持股-i的

2021-03-10 22:47:17 127

原创 leecode刷题总结--图

1只要返回入度为0的节点。2list<list<>>根据下标放该下标可以通向的地方,再根据深度遍历找到target,使用hashset来保证不会出现死循环。3dfs[i]遍历之后,回到当前i,需要删除list当前保存的值。list.remove保证不会出现 0-1-3,0-1-3-2-3的重复情况。4将每个下标可以通向的点放入list>里面。找到通向最多(记作max)的那个下标。(可能有多个)然后遍历找secondMax,如果点可以通向刚刚的下标则-1

2021-03-09 20:56:18 157

原创 一致性协议的四大算法-ZAB(四)

1. Zookeeper 架构作为一个优秀高效且可靠的分布式协调框架,ZooKeeper 在解决分布式数据一致性问题时并没有直接使用 Paxos ,而是专门定制了一致性协议叫做 ZAB(ZooKeeper Automic Broadcast) 原子广播协议,该协议能够很好地支持 崩溃恢复 。2. ZAB 中的三个角色和介绍 Paxos 一样,在介绍 ZAB 协议之前,我们首先来了解一下在 ZAB 中三个主要的角色,Leader 领导者、Follower跟随者、Observer观察者 。Leader

2021-03-09 20:50:42 317

原创 一致性协议的四大算法-Paxos 算法(三)

在 Paxos 中主要有三个角色,分别为 Proposer提案者、Acceptor表决者、Learner学习者。Paxos 算法和 2PC 一样,也有两个阶段,分别为 Prepare 和 accept 阶段。1. prepare 阶段Proposer提案者:负责提出 proposal,每个提案者在提出提案时都会首先获取到一个 具有全局唯一性的、递增的提案编号N,即在整个集群中是唯一的编号 N,然后将该编号赋予其要提出的提案,在第一阶段是只将提案编号发送给所有的表决者。Acceptor表决者:每个表决者

2021-03-09 20:47:23 205 3

原创 一致性协议的四大算法-3PC(二)

3PC(三阶段提交)CanCommit阶段:协调者向所有参与者发送 CanCommit 请求,参与者收到请求后会根据自身情况查看是否能执行事务,如果可以则返回 YES 响应并进入预备状态,否则返回 NO 。**PreCommit阶段:**协调者根据参与者返回的响应来决定是否可以进行下面的 PreCommit 操作。如果上面参与者返回的都是 YES,那么协调者将向所有参与者发送 PreCommit 预提交请求,参与者收到预提交请求后,会进行事务的执行操作,并将 Undo 和 Redo 信息写入事务日志中

2021-03-09 20:44:58 76

原创 一致性协议的四大算法-2PC(一)

2PC(两阶段提交)两阶段提交是一种保证分布式系统数据一致性的协议,现在很多数据库都是采用的两阶段提交协议来完成 分布式事务 的处理。我们所需要解决的是在分布式系统中,整个调用链中,我们所有服务的数据处理要么都成功要么都失败,即所有服务的 原子性问题 。在两阶段提交中,主要涉及到两个角色,分别是协调者和参与者。**第一阶段:**当要执行一个分布式事务的时候,事务发起者首先向协调者发起事务请求,然后协调者会给所有参与者发送 prepare 请求(其中包括事务内容)告诉参与者你们需要执行事务了,如果.

2021-03-08 20:10:20 138

原创 Dubbo 的负载均衡策略

在集群负载均衡时,Dubbo 提供了多种均衡策略,默认为 random 随机调用。可以自行扩展负载均衡策略1 Random LoadBalance(默认,基于权重的随机负载均衡机制)随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。基于权重的随机负载均衡机制2 RoundRobin LoadBalance(不推荐,基于权重的轮询负载均衡机制)轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求的问题,比

2021-03-08 20:05:53 885

原创 jvm对象的完整创建过程

第一次使用 1.进行判断 java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。分为加载并初始化类和创建对象2.加载并初始化类java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程: 双亲委托模型的工作过程是:如果一个类加载器(ClassLoader)收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一个层次的类加载器

2021-03-08 20:01:14 364

原创 jvm四种引用的特点和示例

1.强引用以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。 如String str = "abc"; List<String> list = new Arraylist<String>(); list.add(str);123 在list

2021-03-08 20:00:05 111

原创 各种垃圾收集器的优缺点及原理

Serial收集器针对新生代;采用复制算法;单线程收集;​ 进行垃圾收集时,必须暂停所有工作线程,直到完成;​ 即会"Stop The World";ParNew收集器ParNew垃圾收集器是Serial收集器的多线程版本。Parallel Scavenge收集器Parallel Scavenge垃圾收集器因为与吞吐量关系密切,也称为吞吐量收集器(A)、有一些特点与ParNew收集器相似新生代收集器;采用复制算法;多线程收集;(B)、主要特点是:它的关注点与其他收集器不同CMS

2021-03-08 19:56:40 713

原创 JVM内存模型总结

由上图可以清楚的看到JVM的内存空间分为3大部分:堆内存方法区栈内存其中栈内存可以再细分为java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代,新生代中还可以再次划分为Eden区、From Survivor区和To Survivor区。其中一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。堆内存(Heap)对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块。Ja.

2021-03-08 19:52:02 278

原创 虚拟机栈的特点和溢出情况

拟机栈(JVM Stack)描述的是java方法执行的内存模型:每个方法被执行的时候都会创建一个**“栈帧”,用于存储局部变量表(包括参数)、操作栈、方法出口等信息**。每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏

2021-03-08 19:49:46 107

原创 单例模式实现方式汇总

2021-03-08 19:47:26 64

原创 leecode刷题总结--链表

快慢双指针,此处只判断node和node.next是因为node.next==null,则node.next.next空指针异常。2.循环之前保留前一个结点。3.删除a,a找不到前面的节点,于是把a.next的值传给a,删除a.next。4.遍历俩链表,把相加的余10值放入l1,将进位传递到下一位,注意两种l1,或l2为空的情况,最后遍历,是否有为10的,将其进位,若为最后一个则建立新结点。...

2021-03-08 19:44:17 134

原创 leecode刷题总结—栈

leecode-栈1.用栈的时候注意栈空,hashMap与栈结合进行匹配。2.定义了两个栈,使用栈与最小栈,最小栈只存放每次push进去的当前最小值。这样可以达到getMin为o(1)复杂度。3单调栈,如果入栈的比之前大则弹出直至比之前的小 遍历下一个 始终保持栈是单调递减的。4辅助栈,(入栈,)出栈,如果栈内剩余至少一个,就将这个字符放入辅助栈。栈相对容易,弄清楚最小栈,单调栈这几个概念,基本上可以秒easy和部分中等算法题。...

2021-03-07 21:21:58 100

原创 mysql全方位思维导图

2021-03-07 21:09:38 164

转载 java代理的三种实现

https://www.cnblogs.com/puyangsky/p/6218925.html

2021-03-06 11:47:45 49

原创 maven依赖提速好方法。

maven项目在pom.xml文件中添加依赖之后有时候等待半天都加载不好,这是因为需要从远在国外的中央仓库下载,但在我们中国可以使用阿里的镜像,速度大幅增加。在setting.xml文件中找到mirrors标签,在其中添加:<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/

2021-03-05 21:48:56 191

原创 Controller乱码解决方案

今天做项目遇到了一个奇怪的现象,contoller里面的中文字符变成了乱码。经过查阅资料发现如果没有设置method ={RequestMethod.GET}和method ={RequestMethod.POST}将出现乱码。这是可以写入produces = "application/json;charset=utf-8"语句,设置编码格式。即...

2021-03-05 21:46:24 768

原创 Https的加密过程(通俗易懂)

1.http与https的区别**HTTP:**HyperText Transfer Protocol 超文本传输协议**HTTPS:**Hypertext Transfer Protocol Secure 超文本传输安全协议,HTTPS 经由 HTTP 进行通信,但利用 TLS 来保证安全,即 HTTPS = HTTP + TLS。TLS:位于 HTTP 和 TCP 之间的协议,其内部有 TLS握手协议、TLS记录协议。TLS是什么以及工作流程。总而言之就是一个用来加密的东西。Https的一

2021-03-05 21:43:06 506 1

原创 Redis安装报错-Creating Server TCP listening socket

windows下安装Redis第一次启动报错:解决方法:在命令行中运行redis-cli.exe127.0.0.1:6379>shutdownnot connected>exit然后重新运行redis-server.exe redis.windows.conf,启动成功

2021-03-05 21:35:24 333

原创 Mybatis的传参方式

一、Mybatis的三种传入参数的方式根据下标索引传值通过传递参数的顺序进行索引,获得参数的值Public User selectUser(String name,String area);<select id="selectUser" resultMap="BaseResultMap">select * from user_user_t where user_name = #{0} and user_area=#{1}</select>其中#{0} 代表传入

2021-03-05 21:32:18 280

原创 Redis的使用以及主从哨兵体系流程图

2021-03-05 21:11:42 106

原创 maven报错-registration status: 204

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

2021-03-04 22:13:00 332 1

原创 jvm垃圾清除 什么时候是对象真正死亡。

jvm判定了对象可回收之后。他也并非是“非死不可”的,这时他暂时处于“缓刑”阶段,真正的宣告标记对象死亡至少要经历两次标记过程:如果对象没有任何与“GC Roots”相连的链,它将会被第一次标记,并且进行一次筛选,筛选的条件是对象是否有必要执行finalize()方法,当对象没有覆盖finalize()方法或者finalize()方法已经被虚拟机调用过,这两种情况将被视为“没有必要执行”。如果这个对象被判定为有必要执行finalize()方法,那么这个对象会被放在一个叫做F-Queue的队列中,并稍后由一

2021-03-04 21:54:38 165 1

原创 springMVC工作流程

SpringMVC的工作原理图:SpringMVC流程1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4、 DispatcherServlet调用HandlerAdapter处理器适配器。5、 HandlerAda

2021-03-04 21:31:19 6135 1

原创 java并发编程思维导图

希望能对学习并发的小伙伴带来帮助。

2021-03-04 21:24:15 105 1

4_JVM_8~11章.pdf

4_JVM_8~11章.pdf

2021-03-05

3_JVM_6~7章.pdf

3_JVM_6~7章.pdf

2021-03-05

2_JVM_3章下~5.pdf

2_JVM_3章下~5.pdf

2021-03-05

1_JVM_1~3章上.pdf

jvm详细知识梳理

2021-03-05

空空如也

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

TA关注的人

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