摘要:1. 简述JVM关闭通常而言,对于JVM的关闭我们很少去关注,但是了解JVM的关闭能帮我们在JVM关闭时做一些合理的事情。首先JVM的关闭方式可以分为三种: 正常关闭:当最后一个非守护线程结束或者调用了System.exit或者通过其他特定平台的方法关闭(发送SIGINT,SIGTERM信号等)强制
阅读全文
lotus贵有恒何必三更眠五更起 最无益只怕一日曝十日寒 |
|
04 2021 档案
摘要:1. 简述JVM关闭通常而言,对于JVM的关闭我们很少去关注,但是了解JVM的关闭能帮我们在JVM关闭时做一些合理的事情。首先JVM的关闭方式可以分为三种: 正常关闭:当最后一个非守护线程结束或者调用了System.exit或者通过其他特定平台的方法关闭(发送SIGINT,SIGTERM信号等)强制
阅读全文
摘要:一. shutdownHook的背景 想象一下,如果你现在刚好在 word 上写需求文档,电脑突然重启。等待开机完成,你可能会发现写了一个小时文档没有保存,就这么没了。。。 一个正在运行 Java 应用如果突然将其停止,影响不止数据丢失,还会造成其他影响。比如: 请求丢失:内存队列中等待执行请求丢失
阅读全文
摘要:前言 阿里消息团队一直致力于RocketMQ的性能优化,双十一前进行了低延时(毛刺)优化,保障了双十一万亿消息的流转如丝般顺滑,在2016年双十一中,MetaQ以接近万亿的消息总量支撑着全集团数千个应用,在系统解耦、削峰填谷、数据库同步、位点回滚消费等多种业务场景中,MetaQ都有精彩、稳定的表现。
阅读全文
摘要:一、问题线上RocketMQ 集群,偶尔报错如下: (1)[REJECTREQUEST]system busy, start flow control for a while(2)[TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a w
阅读全文
摘要:一、系统优化 1.最大文件数 2.系统参数调整 二、RocketMQ性能调优 1.开启异步刷盘 2.开启堆外内存设置 3.开启文件预热 4.开启Slave读权限 5.关闭堆内存据传输 一、系统优化 1.最大文件数 limits.conf 设置用户能打开的最大文件数 vim /etc/security
阅读全文
摘要:0、汇总 RocketMQ入门到入土(一)新手也能看懂的原理和实战! RocketMQ入门到入土(二)事务消息&顺序消息 从入门到入土(三)RocketMQ 怎么保证的消息不丢失? RocketMQ入门到入土(四)producer生产消息源码剖析 RocketMQ入门到入土(五)消息持久化存储源码解
阅读全文
摘要:https://www.zhihu.com/question/28557115 可以看全部回答,这里就就前二个回答进行理解 怎样用通俗的语言解释REST,以及RESTful? 看了网上好多对REST的介绍,非常理论,让人很难耐着性子看完。即使看完了,还是会云里雾里,不知所云。 了解了什么是REST,
阅读全文
摘要:RestFul和RPC的区别 1、从本质区别上看,RPC是基于TCP实现的,RESTFUL是基于HTTP来实现的。 2、从传输速度上来看,因为HTTP封装的数据量更多所以数据传输量更大,所以RPC的传输速度是比RESTFUL更快的。 3、因为HTTP协议是各个框架都普遍支持的。在toC情况下,因为不
阅读全文
摘要:叙述 关于java字节码的处理,目前有很多工具,如javassist,bcel,asm,cglib,以及jdk6引入的JavaCompiler等。 其中,CGLib的底层基于ASM实现,是一个高效高性能的生成库; 而ASM是一个轻量级的类库,但需要涉及到JVM的操作和指令。这些实现都需要直接跟虚拟机
阅读全文
摘要:1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环境。 2. 热加载与热部署的区别 首先,不管是热加载还是热部署,都可以在不重启服务的情况下编译/部署
阅读全文
摘要:一、同步调用 默认情况下,我们通过Dubbo调用一个服务,需得等服务端执行完全部逻辑,方法才得以返回。这个就是同步调用。 但大家是否考虑过另外一个问题,Dubbo底层网络通信采用Netty,而Netty是异步的;那么它是怎么将请求转换成同步的呢? 首先我们来看请求方,在DubboInvoker类中,
阅读全文
摘要:前言 当我们的Dubbo应用出现多个服务提供者时,服务消费者如何选择哪一个来调用呢?这就涉及到负载均衡算法。 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每
阅读全文
摘要:前言 在上一章节,我们曾提到这样一个问题:当调用服务失败后,我们怎么处理当前的请求?抛出异常亦或是重试? 为了解决这个问题,Dubbo 定义了集群接口 Cluster 以及 Cluster Invoker。集群 Cluster 用途是将多个服务提供者合并为一个 Cluster Invoker,并将这
阅读全文
摘要:前言 在上一章节的内容中,我们分析了服务引用的具体流程。在大多数情况下,为避免单点故障,我们的应用会部署在多台服务器上。对于我们的Dubbo而言,就会出现多个服务提供者。而且这些服务也并非是一成不变的,那么就有这样一个问题:有新的服务提供者加入或者禁用、修改已有的服务提供者,那么服务消费者怎么及时感
阅读全文
摘要:前言 在前面的章节中,我们已经完成Dubbo服务暴露的流程分析。今天我们一起来看Dubbo怎么引用这些服务的。 关于服务引用,Dubbo有两种方式。一种是基于注册中心进行服务引用,一种是服务直连进行引用。服务直连主要用于测试联调阶段,生产环境不推荐使用。它的配置也比较简单,在消费者端指定服务url即
阅读全文
摘要:一、服务暴露 private <T> ExporterChangeableWrapper<T> doLocalExport(final Invoker<T> originInvoker) { String key = getCacheKey(originInvoker); //首先尝试从缓存中获取
阅读全文
摘要:清幽之地关注 0.8352019.01.03 16:31:26字数 1,995阅读 892 前言 我们在第2章节里面,已经讲到Dubbo的初始化流程。Dubbo的初始化是随着Spring容器Bean的实例化而进行的,今天我们重点看这样一个节点,它在配置文件中是这样的:<dubbo:service i
阅读全文
摘要:清幽之地关注 0.8722019.01.02 23:29:51字数 2,464阅读 1,784 前言 我们在往期文章中,曾经深入分析过Java的SPI机制,它是一种服务发现机制。具体详见:深入理解JDK的SPI机制 在继续深入Dubbo之前,我们必须先要明白Dubbo中的SPI机制。因为有位大神(佚
阅读全文
摘要:清幽之地关注 0.1812019.01.01 17:14:33字数 1,129阅读 462 前言 上一节,我们通过与Spring集成的实例,把Dubbo项目跑了起来。但是Dubbo项目是怎么运行起来的呢?它的入口在哪里? 在官网上有这么一句话:Dubbo 采用全 Spring 配置方式,透明化接入应
阅读全文
摘要:前言 Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 1、特性 面向接口代理的高性能RPC调用 提供高性能的基于代理的远程调用能力,服务以
阅读全文
摘要:2021最新Java面经整理 | 框架篇(四)Dubbo框架 目录 一、Dubbo 的工作流程 二、Dubbo 的十层架构 三、Dubbo 常见配置 四、服务调用 1、提供者暴露一个服务的过程 2、消费者消费一个服务的过程 3、服务调用过程 五、Dubbo 的负载均衡机制 六、Dubbo 的容错机制
阅读全文
摘要:1、为什么要用Dubbo? 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA), 也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。 就这样为分布式
阅读全文
摘要:一、什么是dubbo Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看, Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务
阅读全文
摘要:写在前面 上周,在【Dubbo系列专题】中更新了两篇文章《冰河开始对Dubbo下手了!》和《俯瞰Dubbo全局,阅读源码前必须掌握这些!!》,收到了很多小伙伴的微信私聊消息,大部分都是在询问如何快速的掌握Dubbo的原理和源码。针对这个问题,我也在思考如何以更简单、易懂的方式让小伙伴们更好的掌握Du
阅读全文
摘要:dubbo SPI(Service Provider Interface) 本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。 在Java中SPI是被用来设计给服务提供商做插件使用的。基于策略模式 来实现动态加载的机制 。我们在
阅读全文
摘要:1.简介 SPI 全称为 Service Provider Interface,是一种服务发现机制。 SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展
阅读全文
摘要:引言 SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。
阅读全文
摘要:Dubbo 的扩展点加载从 JDK 标准的 SPI 扩展点发展而来;相比于 JDK 的 SPI,Dubbo 的扩展点改进了以下几个问题(引用自 Dubbo 官网): JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源 如果扩展点加载失败
阅读全文
摘要:开篇 SPI全称为Service Provider Interface,是一种服务提供机制,比如在现实中我们经常会有这种场景,就是对于一个规范定义方而言(可以理解为一个或多个接口),具体的服务实现方是不可知的(可以理解为对这些接口的实现类),那么在定义这些规范的时候,就需要规范定义方能够通过一定的方
阅读全文
摘要:1.什么是SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。 2.SPI和API的使用场景 API (Application Program
阅读全文
摘要:注:该源码分析对应JDK版本为1.8 1 引言 这是【源码笔记】的JDK源码解读的第一篇文章,本篇我们来探究Java的SPI机制的相关源码。 2 什么是SPI机制 那么,什么是SPI机制呢? SPI是Service Provider Interface 的简称,即服务提供者接口的意思。根据字面意思我
阅读全文
摘要:负载均衡介绍 负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。 通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求
阅读全文
摘要:什么是RPC 维基百科是这么定义RPC的: 在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个
阅读全文
摘要:1、Netty是什么 2、Netty线程模型 3、EventLoopGroup / EventLoop 4、ChannelPipeline 5、Buffer 6、总结 1. Netty是什么 Netty是一个高性能、异步事件驱动的NIO框架,基于JAVA NIO提供的API实现。它提供了对TCP、U
阅读全文
摘要:1、线程模型1:传统阻塞 I/O 服务模型 2、线程模型2:Reactor 模式 2.1 基本介绍 2.2 单 Reactor 单线程 2.3单 Reactor 多线程 2.4 主从 Reactor 多线程 2.5 小结 3、线程模型2:Proactor 模型 本文将介绍基于进程/线程模型,服务器如
阅读全文
摘要:一,Netty简介1,什么是Netty?为什么要使用Netty?netty是jboss提供的一个java开源框架,netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可用性的网络服务器和客户端程序。也就是说netty是一个基于nio的编程框架,使用netty可以快速的开发出
阅读全文
摘要:https://cloud.tencent.com/developer/article/1770660 有时间大致过一下吧。
阅读全文
摘要:,一些业界著名的开源组件也基于Netty的NIO框架构建。如:Dubbo、 RocketMQ、Hadoop的Avro、Spark等。 因此有时间要好好研究学习一下NETTY
阅读全文
摘要:聊聊JVM的年轻代 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕
阅读全文
摘要:【todo】堆内存快照phrof文件 使用及分析
阅读全文
摘要:-XX:MaxTenuringThreshold 晋升年龄最大阈值,默认15。在新生代中对象存活次数(经过YGC的次数)后仍然存活,就会晋升到老年代。每经过一次YGC,年龄加1,当survivor区的对象年龄达到TenuringThreshold时,表示该对象是长存活对象,就会直接晋升到老年代。 -
阅读全文
摘要:编译和解释的区别是什么?编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.这是因为计算机不能直接认识并执行我们写的
阅读全文
摘要:领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示。领域模型也称为概念模型、领域对象模型和分析对象模型。——《UML和模式应用》我们在日常开发中,经常针对一些功能点争论“这个功能不应该我改,应该是你那边改”,最终被妥协改了之后都改不明白为什么这个功能要在自己这边改。区
阅读全文
摘要:https://www.cnblogs.com/netfocus/p/5548025.html 从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决。 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品。所
阅读全文
摘要:并写案例去使用设计 模式理解 通过阅读对应JDK的源码来理解 24种设计模式
阅读全文
摘要:流程图: 1. 代码 1 import java.util.ArrayList; 2 3 public class LRUCache { 4 private int cacheMaxSize = 0; 5 private ArrayList<Integer> pages = null; // Int
阅读全文
摘要:AOF 重写 AOF 持久化是通过保存被执行的写命令来记录数据库状态的,所以AOF文件的大小随着时间的流逝一定会越来越大;影响包括但不限于:对于Redis服务器,计算机的存储压力;AOF还原出数据库状态的时间增加;为了解决AOF文件体积膨胀的问题,Redis提供了AOF重写功能:Redis服务器可以
阅读全文
摘要:NoSQL 的四大分类 KV 键值对:Redis 文档型数据库(bson 和 json 一样): MongoDB: MongoDB 是一个基于分布式文件储存的数据库,使用 C++编写,主要用来处理大量的文档。 MongoDB 是一个介于关系型数据库和非关系型数据中间的产品!MongoDB 是非关系型
阅读全文
摘要:【todo】redis 中的hyperloglog原理
阅读全文
摘要:【todo】研究一下sharding-jdbc的原理
阅读全文
摘要:存储过程经过预编译处理 而SQL查询没有SQL语句需要先被数据库引擎处理成低级的指令 然后才执行 如果是只执行一次的话,存储过程不一定比SQL语句效率高.因为存储过程有个预先编译的过程.就是.启动服务器后或者第一次执行后(可以设置).就可以把存储过程加载到高速缓存中,这样以后调用起来就不用再通过编译
阅读全文
摘要:一.什么是存储过程 存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。 简单的
阅读全文
摘要:【todo】MVCC原理及与锁之间的关系
阅读全文
摘要:【todo】innodb行锁的底层实现原理
阅读全文
摘要:【todo】innodb行锁的底层实现原理 https://zhuanlan.zhihu.com/p/139489272 https://www.jianshu.com/p/7171f5aa26d1
阅读全文
|