自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(410)
  • 收藏
  • 关注

原创 RocketMq源码解析之四(生产者消息发送)

文章目录消息发送消息启动流程消息发送流程消息校验查找主题路由信息选择消息队列消息发送RocketMQ 支持3 种消息发送方式:同步(sync) 、异步(async)、单向(o neway) 。同步: 发送者向MQ 执行发送消息API 时,同步等待, 直到消息服务器返回发送结果。异步: 发送者向MQ 执行发送消息API 时,指定消息发送成功后的回掉函数,然后调用消息发送API 后,立即返回,消息发送者线程不阻塞,直到运行结束,消息发送成功或失败的回调任务在一个新的线程中执行。单向:消息发送者向M

2020-08-26 12:05:03 686

原创 RocketMq4.7源码解析之三(NameServer 路由注册,删除,发现)

文章目录NameServer 路由注册、故障剔除路由注册brokernamesrvRouteInfoManager成员变量创建或更新TopicConfig路由删除定时检测失效删除broker主动关闭删除brokername路由发现NameServer 路由注册、故障剔除名字服务(Name Server) 名称服务充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表。多个Namesrv实例组成集群,但相互独立,没有信息交换。代理服务器(Broker Server)

2020-08-26 12:04:49 504

原创 RocketMq4.7源码解析之二(name,broker启动流程)

这里写自定义目录标题NameServer 路由注册、故障剔除路由注册路由删除路由发现消息发送消息启动流程消息发送流程消息校验查找主题路由信息选择消息队列NameServer 路由注册、故障剔除路由注册路由删除路由发现消息发送RocketMQ 支持3 种消息发送方式:同步(sync) 、异步(async)、单向(o neway) 。同步: 发送者向MQ 执行发送消息API 时,同步等待, 直到消息服务器返回发送结果。异步: 发送者向MQ 执行发送消息API 时,指定消息发送成功后的回掉函数

2020-08-24 21:05:19 283

原创 RocketMq4.7源码解析之一(环境配置)

这里写自定义目录标题启动NamesrvStartup启动BrokerStartup启动Producer和ConsumerProducer正常执行Consumer正常执行启动NamesrvStartup配置环境变量ROCKETMQ_HOME=E:\workspace\my\spring\rocketmq\distribution启动成功启动BrokerStartup注意:新版本不需要启动的时候设置autoCreateTopicEnable = true;分析源码可得启动报错配置

2020-08-22 19:48:09 443

原创 线程交替打印

synchronized实现public class App { public static Object object = new Object(); public static boolean flag = false; public static void main(String[] args) { new Thread(() -> { String str[] = {"a", "b", "c", "d"};

2020-08-21 01:19:21 278

原创 秒杀,搜索引擎具体流程以及架构图

大致整理一下整个流程

2020-08-18 11:46:11 292

原创 mysql-索引

这里写自定义目录标题索引B-Tree索引hash索引前缀索引和索引选择性聚簇索引压缩前缀索引索引B-Tree索引假设建立组合索引a,b,c三个列存储时,当a和a相等时,才会根据b排序,紧接着根据c所以不是根据最左列,无法索引,同理,无法根据%结尾查询不能跳过索引列,如跳过b,则只能根据a索引有某个列范围查询,则右边列无法使用索引(因为需要遍历,所以用不上)hash索引memory,NDB引擎支持,产生hash冲突,链表存储hash索引数据结构hash索引只包含hash值和行指针,而

2020-08-14 14:51:45 104

原创 jdk源码解析八之NIO(socketChannel)

ServerSocketChannel ServerSocketChannelImpl(SelectorProvider sp) throws IOException { super(sp); //创建FileDescriptor this.fd = Net.serverSocket(true); //获取到文件描述符的值。 this.fdVal = IOUtil.fdVal(fd); //标记状态为使用

2020-08-14 14:51:26 359

原创 jdk源码解析八之NIO(selector)

这里写自定义目录标题示例代码register示例代码ServerSocketChannel serverChannel = ServerSocketChannel.open(); ServerSocket serverSocket = serverChannel.socket(); Selector selector = Selector.open(); serverSocket.bind (new InetSocketAddress (port)); serverChannel.con

2020-08-14 14:50:55 174

原创 计算机组成原理体系结构

存储器的层次结构特点:每位价格递减容量递增存取时间递增处理器访问存储器频率递减概念局部性原理:在程序执行期间,处理器的指令访存和数据访存呈"簇"(一组数据集合状).高速缓存出现原因处理器与内存速度不匹配,于是基于局部性原理,在处理器和内存间提供一个容量小且速度快的存储器.使得访问速度接近现有的最快存储器,同时支持价格低的大存储容量.原理直接内存存取执行IO操作技术可编程IO中断驱动IO直接内存存取(DMA)当处理器遇到IO相关指令,它会通过给IO模块发命令来执行

2020-08-04 17:22:06 851

原创 汇编16位

==

2020-08-04 16:02:50 1070

原创 netty源码解析一

文章目录前言:18年肝过一次netty,只是了解了他的架构设计和使用,现在直接肝源码.甭废话开肝.需要掌握技术,NIO,socket编程,多线程以及TCP/IP协议.使用阻塞IO,面临的问题1:accept一直阻塞2:当多用户访问,需要为每个用户新建线程3:可能存在大量线程休眠状态4:需要为每个线程开辟内存空间5:线程过多,上下文切换会频繁.解决方案:NIO通过一个线程不断的判断文件句柄数组是否有准备就绪的文件设备,这样就不需要每个线程同步等待,减少了大量线程,降低了线程上下文切换带来

2020-07-21 23:35:51 527

原创 运输层

网络层与运输层之间的关系:网络层提供主机之间通讯,而运输层提供主机进程之间的通讯.多路复用:将运输层报文字段中的数据交付给正确的套接字的工作多路分解:在数据块上封装首部信息从而生成报文段,然后将报文段发送网络.UDP特点仅提供多路复用和分解功能无需建立连接无连接状态分组开销小与TCP比较,因为没有拥塞控制机制,所以能及时传送数据,且分组开销比TCP小而且无需记录连接状态,所以能承受更大的并发,缺点是不保证能到达.可在应用层添加超时重试解决报文结构长度=数据长度+首部数据长度校验和.

2020-07-13 15:29:40 907

原创 应用层

文章目录看了一天的<tcp/ip详解第一卷>迷迷糊糊的,就只对ipv4和v6有了一个模糊的概念.= =看来我现在还不适合接触所谓的tcp/ip入门书籍.于是先从基础打起,现在开始去看基础书籍.

2020-07-10 19:07:07 183

原创 jdk源码解析八之RPC实现(包含序列化源码解析)

package org.example.io;import java.io.Serializable;//类通过实现 java.io.Serializable 接口以启用其序列化功能。public class Person implements Serializable { //通过id来判断类是否改变 private static final long serialVersionUID = 3; private transient String name; //

2020-07-03 16:51:19 360

原创 spring-cloud

网关限流算法计数器单位时间内,每次请求,计数器+1.当超过阀值,则之后请求拒绝.待单位时间过后,继续接受请求漏桶算法可理解为一个队列,在范围时间内的请求,都会通过漏洞向下执行.超过的请求,则抛弃感觉就跟ExcutorServer差不多,多余的任务则抛弃.案例:百度网盘令牌桶算法上述算法优化,缓存的不在是请求,而是一个个token,一定速度往令牌桶丢入token,获取token的请求执行.没有的拒绝.服务保护雪崩效应:因每个服务之间有相关依赖,当某个服务出现问题,会造成依赖他的服务都出现

2020-07-02 12:24:05 138

原创 jdk源码解析八之Piped管道流

文章目录demoPipedInputStreamPipedOutputStreamdemopackage io;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;/** * Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力。所以管道也可以作为数据源以及目标媒介 * * DataInputStream 读取的数据由大于一个字节的Jav

2020-07-02 11:33:40 287

原创 jdk源码解析二之HashMap

这里写自定义目录标题HashMapputremovereplaceget扩容resize迭代器总结什么时候采用红黑树?为什么每次扩容后,是2的幂次方?为什么扩容后,相同的在原位置保存,而不同的则当前索引+之前原位置索引保存?为啥用尾插法?为什么线程不安全?HashMapHashMap的loadFactor为什么是0.75?主要涉及到泊松分布的概念,猝!!!一个bucket空和非空的概率为0.5,通过牛顿二项式等数学计算,得到这个loadfactor的值为log(2),约等于0.693. 同回答者所说

2020-07-01 20:13:17 177

原创 jdk源码解析八之NIO

这里写自定义目录标题吃饭去咯

2020-07-01 20:08:42 368

原创 jdk源码解析八之BIO

文章目录字节流InputStreamFileInputStreamBufferInputStreamOutputStreamFileOutputStreamBufferOutputStream字符流ReaderFileReaderBufferReaderWriterFileWriterBufferWriter转换流InputStreamReaderOutputStreamWriter字节流InputStreamFileInputStreamBufferInputStreamOutputStrea

2020-07-01 11:06:14 199

原创 jdk源码解析七之Condition

文章目录ConditionnewConditionawaitsignalsignalAll总结Condition主要看java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObjectnewCondition public Condition newCondition() { return sync.newCondition(); } final ConditionObject n

2020-06-30 11:20:59 432

原创 jdk源码解析七之ReadWriteLock

文章目录ReadWriteLockReentrantReadWriteLock构造获取读写锁读锁lockunlock写锁lockunlock锁降级总结ReadWriteLock分别维护2个锁,写锁是独占锁,读锁是共享锁,因为读的时间通常比写的时间长,所以写锁优先级比读锁高ReentrantReadWriteLock构造 public ReentrantReadWriteLock() { //默认独占 this(false); } publ

2020-06-30 11:19:02 380

原创 jdk源码解析七之ReentrantLock

文章目录ReentrantLock构造lockunlocktryLocknewCondition非公平策略获取锁总结非公平和公平获取锁的区别?ReentrantLock一个可重入的互斥锁 Lock构造 public ReentrantLock() { //默认初始化非公平的AQS sync = new NonfairSync(); } public ReentrantLock(boolean fair) { //根据传入的值

2020-06-30 11:16:29 253 1

原创 spring5.1.x源码解析之十三(常见问题)

spring如何实现标签功能扩展的?spring在解析doc的时候,会创建一个ReaderContext对象ReaderContext对象创建的时候,会创建NamespaceHandlerResolver对象在进行对象解析的时候,会分别解析默认命名空间和自定义的解析,也就是beans标签和非beans标签的解析 /* 获取所有已经配置的handler映射,读取配置文件 根据命名空间找到对应的信息 当是类的时候说明,已经做过解析直接缓存读取,直接返回 没有做过解析,返回类路径 判

2020-06-29 23:39:06 351

原创 jdk源码解析五之Thread

这里写自定义目录标题Thread构造startinterruptjoinStaterun总结ThreadFactoryDefaultThreadFactoryThread构造 private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc, boolean inherit

2020-06-27 14:09:16 306

原创 jdk源码解析四之CyclicBarrier

文章目录CyclicBarrierawaitresetCyclicBarrier阻塞一组线程直到某件事发生,可重复使用,另一种栅栏式。5个人约好集合后去其他地方。 public CyclicBarrier(int parties, Runnable barrierAction) { if (parties <= 0) throw new IllegalArgumentException(); //屏障拦截的线程数量 this.parties

2020-06-26 17:12:12 175

原创 jdk源码解析四之Semaphore

文章目录Semaphoreacquirerelease总结Semaphore计数信号量:控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量,实现某种资源池,对容器施加边界acquire步骤同CountDownLatch.wait public void acquire() throws InterruptedException { sync.acquireSharedInterruptibly(1); } protected int

2020-06-26 17:11:35 136

原创 jdk源码解析四之FutureTask

文章目录FutureTask构造带返回构造rungetcancelfinishCompletion总结FutureTask提前加载稍后需要的数据Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。Callable返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。 /** * The run state of this

2020-06-26 17:11:03 334

原创 jdk源码解析四之CountDownLatch

文章目录CountDownLatchawaitcountDowncancelAcquire总结CountDownLatch可用于实现闭锁操作,延迟线程的进度直到其到达终止状态。确保某些活动直到其它活动都完成后才继续运行,只开启一次。发令枪响后,所有运动员跑步 //这个节点由于超时或中断被取消了。节点不会离开(改变)这个状态。尤其,一个被取消的线程不再会被阻塞了 static final int CANCELLED = 1; /** waitStatus

2020-06-26 17:10:30 226

原创 jdk源码解析三之ThreadLocal

文章目录ThreadLocalset初始化ThreadLocalMapset赋值重新使用失效节点清空无效节点扩容getremove总结ThreadLocalset public void set(T value) { //当前线程的.ThreadLocalMap绑定了当前ThreadLocal对象和value //获取当前线程 Thread t = Thread.currentThread(); //获取与当前线程绑定的map,这里

2020-06-26 17:07:15 335

原创 jdk源码解析三之ArrayBlockingQueue

文章目录ArrayBlockingQueueputoffertakeremove总结ArrayBlockingQueue public ArrayBlockingQueue(int capacity, boolean fair) { if (capacity <= 0) throw new IllegalArgumentException(); this.items = new Object[capacity]; //一

2020-06-26 17:01:46 267

原创 jdk源码解析三之LinkedBlockingQueue

文章目录LinkedBlockingQueueputoffer阻塞时间的offertakepollpeekremove迭代器总结LinkedBlockingQueue一个基于链表的阻塞队列。此队列按 FIFO(先进先出)排序元素 public LinkedBlockingQueue() { //默认最大容量 this(Integer.MAX_VALUE); } public LinkedBlockingQueue(int capacity) {

2020-06-26 17:01:08 122

原创 jdk源码解析三之CopyOnWriteArrayList

文章目录CopyOnWriteArrayListaddremovegetset总结CopyOnWriteArrayList写入时复制,只要正确发布一个事实不可变对象,在访问该对象时就不再需要进一步同步,在每次修改时,都会创建并重新发布一个新的容器副本,从而实现可变性.使用场景:迭代>修改,事件通知系统(注册和注销事件监听器操作少于接收事件通知的操作) //构造时,初始化容量为0的Object数组 public CopyOnWriteArrayList() { set

2020-06-26 17:00:26 118

原创 jdk源码解析三之ConcurrentHashMap

文章目录ConcurrentHashMapput初始化扩容getreplace#remove总结:ConcurrentHashMap //使用了unSafe方法,通过直接操作内存的方式来保证并发处理的安全性,使用的是硬件的安全机制。 /* * 用来返回节点数组的指定位置的节点的原子操作 */ static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) { r

2020-06-26 16:59:27 406

原创 tomcat源码解析二之整个执行流程

没有标题启动BootstrapCatalinaServerServiceConnectorProtocolHandlerEndpointstartCatalinaServerServiceEngineHostHostConfig整个容器架构设计,采用组合+责任链的形式,所以耦合非常低,可以非常方便的替换组件,以及通过增加新的阀,扩展某一块组件的功能.其中每个父容器组件负责子容器组件的生命周期,所以只需要管理上层的组件就能够做到控制整个容器每个容器的初始化增加了对配置文件的支持,在启动容器时,会通知消息

2020-06-24 22:18:46 543

原创 tomcat源码解析一之设计模式

没有标题组合责任链观察者总结跟spring对比组合service将连接器和容器组合在一块对外提供服务,在外层,catalina将Digester和server组合在一块,解析xml属性然后直接赋值给server.这样整个容器初始化就完成了,包括连接器.责任链利用Pipeline+Valve组成当调用容器invoke方法时,父类默认方法ContainerBase protected Pipeline pipeline = new StandardPipeline(this);

2020-06-24 22:16:32 337

原创 tomcat源码解析之二(启动流程)

没有标题吃饭后在来写

2020-06-18 22:11:52 125

原创 redisson源码解析

这里写自定义目录标题1

2020-06-12 10:30:13 883

原创 jvm八之内存模型与线程

这里写自定义目录标题主内存与工作内存内存间交互操作volatile指令重排可见性原子性场景Java与线程内核线程实现用户线程实现用户线程加轻量级进程混合实现Java线程调度主内存与工作内存 1. 所有的变量都存储在主内存 2. 线程的工作内存中保存了被该线程使用的变量的主内存副本 3. 不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成 4. 线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据与处理器,高速缓

2020-06-11 00:19:21 246

原创 jvm七之虚拟机字节码执行引擎

运行时栈帧结构 栈帧用于支持虚拟机进行方法调用和方法执行的数据结构,他是虚拟机运行时数据区中的虚拟机栈的栈元素 在活动线程中,只有位于栈顶的方法才是在运行的,只有位于栈顶的栈帧才是生效的,其被称为“当前栈帧” (Current Stack Frame),与这个栈帧所关联的方法被称为“当前方法”(Current Method)。 每一个方法从调用到执行完成的过程,对应一个栈帧在虚拟机里面从入栈到出栈的过程局部变量表一组变量值存储空间,用于存放方法参数和方法内部定义的局部

2020-06-09 11:35:42 147

空空如也

空空如也

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

TA关注的人

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