自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ScorpC的博客

人生是坚持理想的朝圣之路

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

原创 java并发编程汇总15:线程池中多余的线程如何回收

以1.8为例。1.runWorker(Worker w)工作线程启动后,就进入runWorker(Worker w)方法。里面是一个while循环,循环判断任务是否为空:若不为空,执行任务; 若取不到任务,或发生异常,退出循环,执行processWorkerExit(w, completedAbruptly); 在这个方法里把工作线程移除掉。取任务的来源有两个,一个是firstTask,这个是工作线程第一次跑的时候执行的任务,最多只能执行一次,后面得从getTask()方法里取任..

2021-03-15 11:55:46 507

原创 java并发编程汇总14:线程池实现原理

原以为自己很了解线程池,结果差点酿成大祸。一句话总结来说就是,没有领悟到线程池的精髓!还好问题本身发现了,也算是一笔极宝贵的经验!戒骄戒躁,发现存在的问题,持续前行!一、线程池简介1.1、线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做..

2021-03-15 11:21:50 242

原创 GC原理、调优,CMS原理、调优,G1原理、调优,GC问题排查和解决思路

主要介绍GC基础原理和理论,GC调优方法思路和方法,基于Hotspot jdk1.8,了解如何对生产系统出现的GC问题进行排查解决目录:GC基础原理:涉及调优目标,GC事件分类、JVM内存分配策略、GC日志分析等 CMS原理及调优 G1原理及调优 GC问题排查和解决思路一、GC基础原理1、GC调优目标大多数情况下对 Java 程序进行GC调优, 主要关注两个目标:响应速度、吞吐量 响应速度(Responsiveness) 响应速度指程序或系统对一个请求的响应有多迅速。比如,

2021-03-10 10:40:03 1058

原创 CMS产生的问题:promotion failed和concurrent mode failure,及解决方案

JVM垃圾收集器方面还是需要进一步的研究,只深入掌握一个最新的是不够的(比如g1);其他的垃圾收集器也不要只掌握皮毛,要深挖原理及产生的问题、调优;以此为戒,不要只满足于已掌握的所有底层原理,还远远不够的,知识是无穷无尽的,戒骄戒躁,调整好心态,持续学习!正文:CMS并行GC是大多数应用的最佳选择,然而, CMS并不是完美的,在使用CMS的过程中会产生2个最让人头痛的问题:promotion failed concurrent mode failure第一个问题promotio.

2021-03-10 09:59:40 2967

原创 Raft算法

Raft 也是一个一致性算法,和 Paxos 目标相同。是更易于理解的一致性算法。也就是说,他的目标就是成为一个易于理解的一致性算法。以替代 Paxos 的晦涩难懂。一、Raft算法介绍首先说什么是 Raft 算法:Raft 是一种为了管理复制日志的一致性算法。什么是一致性呢?Raft 的论文这么说的:一致性算法允许一组机器像一个整体一样工作,即使其中一些机器出现故障也能够继续工作下去。这里的一致性针对分布式系统。什么是管理日志呢?一致性算法是从复制状态机的背景下提出的,

2021-03-05 10:34:05 510 1

原创 kafka的协调服务Zookeeper

RocketMQ 的 NameServer 虽然设计非常简洁,但很好地解决了路由寻址的问题。而 Kafka 却采用了完全不同的设计思路,它选择使用 ZooKeeper 这样一个分布式协调服 务来实现和 RocketMQ 的 NameServer 差不多的功能。先简单了解一下 ZooKeeper,然后再来一起学习一下 Kafka 是如何借助 ZooKeeper 来构建集群,实现路由寻址的。一、Zookeeper的作用Apache ZooKeeper 它是一个非常特殊的中间件,为什么这么说呢?一

2021-03-01 15:16:08 299

原创 RocketMQ:NameServer源码分析

本篇主要讲解:RocketMQ客户端如何在集群中找到正确的节点?也就是深入分析NameServer。RocketMQ 的生产者启动流程中,生产者只要配置一个接入地址,就可以访问整个 集群,并不需要客户端配置每个 Broker 的地址。RocketMQ 会自动根据要访问的主题名 称和队列序号,找到对应的 Broker 地址。如果 Broker 发生宕机,客户端还会自动切换到 新的 Broker 节点上,这些对于用户代码来说都是透明的。这些功能都是由 NameServer 协调 Broker 和客.

2021-03-01 14:46:19 195

原创 Kafka和RocketMQ的消息复制(服务端)实现的差异点

消息队列在收发两端,主要是依靠业务代码,配合请求确认的机制,来保证消息不会丢失的。而在服务端,一般采用持久化和复制的方式来保证不丢消息。把消息复制到多个节点上,不仅可以解决丢消息的问题,还可以保证消息服务的高可用。即使某一个节点宕机了,还可以继续使用其他节点来收发消息。所以大部分生产系统,都会把消息队列配置成集群模式,并开启消息复制,来保证系统的高可用和数据可靠性。接下来主要分析一下:消息复制需要解决的一些问题,以及 RocketMQ 和 Kafka 都是如何 应对这些问题来实现复制的。目录:

2021-03-01 11:14:30 173

原创 kafka:Consumer源码分析

上传一篇,之前看kafka Consumer源码做的笔记。正文如下:kafka版本:2.2首先,kafka消费模型的要点:Kafka 的每个 Consumer(消费者)实例属于一个 ConsumerGroup(消费组); 在消费时,ConsumerGroup 中的每个 Consumer 独占一个或多个 Partition(分 区); 对于每个 ConsumerGroup,在任意时刻,每个 Partition 至多有 1 个 Consumer 在消费; 每个 ConsumerG.

2021-03-01 10:25:19 609

原创 RocketMQ:Producer源码分析

上传一篇之前看Producer源码做的笔记。正文如下:客户端是一个单独的 Module,在 rocketmq/client 目录中。一、建议:从单元测试看Produce API的使用一般单元测试中,每一个用例就是测试代码中的一个局部或者说是一个小流程。那对于一些比较完善的开源软件,它们的单元测试覆盖率都非常高,很容易找到我们关心的那个流程所对应的测试用例。我们的源码分析,就可以从这些测试用例入手,一步一步跟踪其方法调用链路,理清实现过程。首先我们先分析一下 RocketMQ .

2021-03-01 09:46:36 226

原创 Zookeeper:zab算法详解

zab协议是为Zookeeper设计的分布式一致性协议。1. 什么是 ZAB 协议? ZAB 协议介绍 ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。 Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并没有使用 Paxos ,而是采用了 ZAB 协议。 ZAB 协议定义:ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持原子广播 .

2021-02-27 10:27:36 744

原创 java并发编程汇总13:经典面试题-生产者消费者问题(三种实现)

直接看你听大佬的写的博客吧:一篇文章,让你彻底弄懂生产者--消费者问题三种实现方式:wait/notify、Condition、BlockingQueue;其中:wait/notify、Condition用法基本一致,要注意的细节就是:Condition一定要finally解锁;BlockingQueue的话就是,由于BlockingQueue内部实现就附加了两个阻塞操作。即当队列已满时,阻塞向队列中插入数据的线程,直至队列中未满;当队列为空时,阻塞从队列中获取数据的线程,直至队列非空时为止。可

2021-02-22 11:06:49 136

原创 java并发编程汇总12:并发工具类:Semaphore,Exchanger,CountDownLatch,CyclicBarrier

参考以前写的博客:详解 Java并发工具类:Semaphore,Exchanger以及:大白话说java并发工具类-CountDownLatch,CyclicBarrier总体概括:1、Semaphore可以理解为信号量,用于控制资源能够被并发访问的线程数量,以保证多个线程能够合理的使用特定资源。Semaphore就相当于一个许可证,线程需要先通过acquire方法获取该许可证,该线程才能继续往下执行,否则只能在该方法出阻塞等待。当执行完业务功能后,需要通过release()方法..

2021-02-22 10:43:57 163

原创 java并发编程汇总11:Future、FutureTask

public interface RunnableFuture<V> extends Runnable, Future<V> { void run();}public class FutureTask<V> implements RunnableFuture<V> { public FutureTask(Callable<V> callable) { if (callable == null) ...

2021-02-22 09:53:18 148

原创 java并发编程汇总10:线程池框架

主要参考以前写的博客:1:深入理解线程池、及线程池的使用2:java.util.concurrent.Executor、ExecutorService、ThreadPoolExecutor、Executors,ThreadFactory框架性总结:1、按顺序:java.util.concurrent.Executor、ExecutorService、ThreadPoolExecutor、Executors,ThreadFactory按以上总结:Executor:执行器接口..

2021-02-21 10:55:11 160

原创 java并发编程汇总9:详解 Condition

详见:详解 Condition的await和signal 等待/通知机制从整体上来看Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制;而Condition与Lock配合完成等待通知机制;前者是java底层级别的,后者是语言级别的,具有更高的可控制性和扩展性。两者除了在使用方式上不同外,在功能特性上还是有很多的不同:Condition能够支持不响应中断,而通过使用Object方式不支持; Condition能够支持多个等待队列(new 多个C

2021-02-19 11:37:50 146

原创 java并发编程汇总8:ReentrantReadWriteLock

总体见:详解 读写锁ReentrantReadWriteLock读写所允许同一时刻被多个读线程访问,但是在写线程访问时,所有的读线程和其他的写线程都会被阻塞。归纳总结:公平性选择:支持非公平性(默认)和公平的锁获取方式,吞吐量还是非公平优于公平; 重入性:支持重入,同一线程读锁获取后能再次获取,同一线程写锁获取之后能够再次获取写锁,同时也能够获取读锁; 锁降级:遵循先获取写锁,然后获取读锁再释放写锁的次序,写锁能够降级成为读锁要想能够彻底的理解读写锁必须能够理解这样几个问题:读写锁是怎

2021-02-19 11:06:17 117

原创 java并发编程汇总7:ReentrantLock

以前的博客:详解 ReentrantLockReentrantLock的源码非常简单,它通过内部类实现了AQS框架,Lock接口的实现仅仅是对AQS的api的简单封装。主要也就是ReentrantLock同步语义的学习:1. 重入性的实现原理;2. 公平锁和非公平锁。(默认实现:非公平锁)一、重入性的实现原理要想支持重入性,就要解决两个问题:1. 在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功;2. 由于锁会被获取n次,那么只有锁在被释放同样的.

2021-02-19 10:23:12 105

原创 java并发编程汇总6:locks框架、AQS详解

由于是准备校招面试,这些知识不再是初学了,再按照初学那么整理进度太慢;决定直接看之前写的博客,这里仅做框架式的知识梳理,便于形成架构;若有疏漏的知识点再做详细补充;Java 并发编程(五):详解 Lock、AbstractQueuedSynchronizer一、关于lock:0、concurrent包架构:1、locks包架构、简介:2、lock与synchronized的简单对比3、Lock结构的常用方法:lock()、unlock()、lockInterru.

2021-02-19 09:59:38 146

原创 java并发编程汇总5:ThreadLocal、ThreadLocal内存泄漏问题及解决方法

1. ThreadLocal的简介在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于:多个线程会对同一个临界区共享资源进行操作,那么,如果每个线程都使用自己的“共享资源”,各自使用各自的,又互相不影响到彼此即让多个线程间达到隔离的状态,这样就不会出现线程安全的问题。事实上,这就是一种“空间换时间”的方案,

2021-02-18 15:24:43 374

原创 java并发编程汇总4:final关键字

之前明明及得做过final关键字的学习笔记啊。。。嗯。。。在本地文档库里找了半天没找到,补上吧,复习一遍~这一块主要是参考:「你听__」你以为你真的了解final吗?学习的,整理的非常好,推荐~仅整理关键部分,部分详细见原博文(尤其第四部分、第六部分)一、final简介final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,我想对final在多线程中存在的重排序问题也很容..

2021-02-17 16:31:09 114

原创 java并发编程汇总3:synchronized、volatile、java对象结构、CAS

参考之前写的博客:Java 并发编程(三):synchronized、volatile 详解java对象结构梳理一下整体结构:1、synchronized关键字(锁:阻塞式、重量级)、对象锁机制monitor;2、CAS(锁:乐观、非阻塞、无锁)、以及存在的三个问题;3、Java对象头结构:包含:MarkWord、Klass Word、数组长度、对象体、对齐字; Klass Word:JVM通过这个指针确定对象是哪个类的实例。 MarkWord中锁的四种状态:无锁01、偏向.

2021-02-17 15:04:51 84

原创 java并发编程汇总2:JMM java内存模型、as-if-serial原则、happens-before原则、volatile关键字

总体介绍,看之前写的博客:Java 并发编程(二):Java内存模型以及 happens-before 规则整体架构也是:JMM介绍、抽象结构,重排序,as-if-serial,happens-before; 同时讲解:volatile关键字;另参考其他博主的优质博客:吃透Java并发四:Java内存模型然后再做一些补充:1、共享变量:再次强调实例字段、静态字段和数组对象;但是不包括局部变量和方法参数,因为后者是线程私有的,不会被共享,自然不存在竞争的问题。2...

2021-02-16 10:15:03 217

原创 java并发编程汇总1:并发、java线程(包括:状态、阻塞唤醒等)

在此将已掌握的并发编程知识进行汇总,形成一个框架、体系,便于以后的查阅。一、并发的概念1.1、什么是并发;通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升; 面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分。1.2、进程与线程;进程:分配和管理资源的基本单位 线程:CPU调度的最小单位,必须依赖进程而存在。 对Java语言来说,Java程序是运行在JVM上面的,每一个JVM其实就是一个进程。所有的资源分配都是基于JVM进程来的.

2021-02-14 15:36:49 241 1

原创 TreeMap详解

本质上:红黑树实现的,所以以此重点掌握红黑树即可;TreeMap与HashMap的比较(各自的优缺点、适用范围):HashMap存储方面的优势:我们知道HashMap,它保证了以O(1)的时间复杂度进行增、删、改、查,从存储角度考虑,这两种数据结构是非常优秀的;HashMap统计方面不是很好:但是HashMap还是有自己的局限性----它不具备统计性能,或者说它的统计性能时间复杂度并不是很好才更准确,所有的统计必须遍历所有Entry,因此时间复杂度为O(N);比如Map的Key.

2021-02-13 15:42:14 7704

原创 TreeSet详解

TreeSet继承结构:public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.SerializableTreeSet继承于AbstractSet 该类提供了Set 接口的骨架实现,以最大限度地减少实现此接口所需的工作量;TreeSet实现了NavigableSet接口,意味着它支持一系列的导航方法。比如查找与指定目.

2021-02-13 15:09:31 1304

原创 HashSet详解

HashSet继承结构:public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.SerializableHashSet 继承于AbstractSet 该类提供了Set 接口的骨架实现,以最大限度地减少实现此接口所需的工作量。实现Set接口,标志着内部元素是无序的,元素是不可以重复的。实现Cloneable接口,标识着可以它.

2021-02-13 13:59:16 1241 1

原创 LinkedList详解

前言:咦~之前做的笔记实在是找不到了,那就重新梳理一下吧~关于LinkedList的基本内容(get、add、remove)以及与ArrayList的对比,在:ArrayList、LinkedList比较,ArrayList详解 - 总结这里对LinkedList做进一步的补充;LinkedList 继承结构:LinkedList 继承自 AbstractSequentialList 接口,同时了还实现了 Deque, Queue 接口。LinkedList 双向链..

2021-02-13 11:19:52 1148

原创 Java8新特性 - 个人总结

将之前做的java8新特性的笔记搬运到博客上来。目录:一、JDK8数据结构上的变化:【关于HashMap、LinkedHashMap、TreeMap见自己写的博客:】https://blog.csdn.net/ScorpC/article/details/902884671、HashMap: ----------------------------------------------------------------- 1.8之前: 数组+链表,默...

2021-02-12 17:23:01 319 1

原创 设计模式个-人总结

设计模式个人总结。其实在平常学习、做项目中,设计模式有意无意都能碰见;在去年选了《UML》课程后,相当于采用了明确的方式对这些设计模式进行了重新认识;本科其实也有这门课程,但是由于放在了靠后的学期,以及忙于实习、项目等其他事务,还有限于当时的水平,并没有充分认识到这门课的重要性;后来逐渐意识到平常学习、做项目中,处处都能遇到,所以建议可以不用专门去学习,因为核心在于学的是设计模式的思想,在有了系统性的理论知识后,在平常积累即可;这里列举积累的,大概介绍和应用场景:常用的设计模式:

2021-02-12 09:58:51 184

原创 MySQL实战进阶 24 - 主备延迟给读写分离带来的问题

MySQL实战进阶 24 - 主备延迟给读写分离带来的问题。总结:问题:

2021-02-05 15:24:00 63

原创 MySQL实战进阶 23 - 主备切换、GTID

MySQL实战进阶 23 - 主备切换、GTID。总结:问题:

2021-02-04 09:59:46 138

原创 MySQL实战进阶 22 - MySQL备库并行复制能力

MySQL实战进阶 21 - MySQL备库并行复制能力。总结:问题:

2021-02-02 16:55:49 91

原创 MySQL实战进阶 21 - MySQL如何保证高可用(主备延迟、原因、解决方法)

MySQL实战进阶 21 - MySQL如何保证高可用(主备延迟、原因、解决方法)。总结:问题:

2021-02-02 11:19:15 94

原创 MySQL实战进阶 20 - MySQL主备一致实现原理(binlog实现原理)

MySQL实战进阶 20 - MySQL主备一致实现原理。总结:问题:

2021-02-02 09:43:16 78

原创 MySQL实战进阶 19 - MySQL写入binlog、redolog的流程

MySQL实战进阶 19 - MySQL写入binlog、redolog的流程。redo log的写入机制问题1:问题2:

2021-02-01 15:27:47 215

原创 MySQL实战进阶 18 - 业务高峰期问题的临时解决方案

MySQL实战进阶 18 - 业务高峰期问题的临时解决方案。总结:

2021-01-27 15:52:51 164

原创 MySQL实战进阶 17 - MySQL加锁规则

MySQL实战进阶 17 - MySQL加锁规则。总结 + 问题:

2021-01-26 10:59:34 67

原创 MySQL实战进阶 16 - 幻读、幻读产生的问题、如何解决幻读(使用间隙锁、以及其他方法)

MySQL实战进阶 16 - 幻读、幻读产生的问题。总结:

2021-01-26 09:46:30 101

原创 MySQL实战进阶 15 - 查一行执行慢、被锁住的案例

MySQL实战进阶 15 - 查一行执行慢、被锁住的案例。总结:问题:这个问题的具体分析下面一篇单独做解释(由于幻读产生的问题,以及如何解决)。...

2021-01-26 09:04:36 70

空空如也

空空如也

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

TA关注的人

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