- 博客(304)
- 收藏
- 关注
原创 spring通过类名获取对应的实现类
然后在对应实现类注入的时候,名字要和映射的保持一致就可以了。二:AbstractLoanTask类。一:SpringUtils工具类。如:LoanApplyTask。常量类:Constants。
2023-04-24 21:35:15
1174
1
原创 Quartz 源码解析(三) —— QuartzSchedulerThread
一:大概内容QuartzSchedulerThread线程的创建和启动 线程run()方法逻辑 线程的协作二:线程的创建和启动这里主要回顾一下QuartzSchedulerThread是在什么时候创建的,又是在什么时候start的。大概流程如下图StdSchedulerFactory.instantiate():生产StdScheduler过程中会new一个QuartzScheduler实例qs = new QuartzScheduler(rsrcs, idleWaitTi
2022-05-01 00:18:17
1513
原创 Quartz 源码解析(二) —— Scheduler的初始化
一:初始化流程// 创建一个ScheduleFactorySchedulerFactory sfact = new StdSchedulerFactory();Scheduler scheduler = sfact.getScheduler();scheduler.start();创建StdSchedulerFactory和StdScheduler。SchedulerFacotory,顾名思义,就是生产Scheduler实例的工厂类。下面的代码逻辑这么多,就是为了创建一个Scheduler
2022-04-28 15:06:09
1615
原创 Dubbo之服务超时机制源码分析
一:超时设置DUBBO有很多地方可以配置超时时间,可以配置在消费者,可以配置在生产者,可以配置为方法级别,可以配置为接口级别,还可以配置为全局级别,DUBBO官方文档介绍这些配置优先级如下:第一优先级:方法级 > 接口级 > 全局级第二优先级:消费者 > 生产者从源码层面对超时机制进行分析,我们首先分析优先级如何生效,然后再分析超时机制在消费者和生产者分别如何实现。二:配置优先级1:消费者 > 生产者配置生产者接口级别超时时间1000毫秒<bea
2022-04-27 22:29:43
1008
原创 Dubbo之服务本地缓存源码分析
一:设计思路根据官方图,dubbo调用者需要通过注册中心(例如:ZK)注册信息,获取提供者,但是如果频繁往ZK获取信息,肯定会存在单点故障问题,所以dubbo提供了将提供者信息缓存在本地的方法。 Dubbo在订阅注册中心的回调处理逻辑当中会保存服务提供者信息到本地缓存文件当中(同步/异步两种方式),以url纬度进行全量保存。 Dubbo在服务引用过程中会创建registry对象并加载本地缓存文件,会优先订阅注册中心,订阅注册中心失败后会访问本地缓存文件内容获取服务提供信息。 二:核心实现类.
2022-04-27 21:50:38
354
原创 Dubbo之扩展机制SPI源码分析
JDK的SPI思想SPI的全名为Service Provider Interface,面向对象的设计里面,模块之间推荐基于接口编程,而不是对实现类进行硬编码,这样做也是为了模块设计的可拔插原则。为了在模块装配的时候不在程序里指明是哪个实现,就需要一种服务发现的机制,jdk的spi就是为某个接口寻找服务实现。jdk提供了服务实现查找的工具类:java.util.ServiceLoader,它会去加载META-INF/service/目录下的配置文件。具体的内部实现逻辑为这里先不展开,主要还是讲解dubbo
2022-04-27 21:26:22
746
原创 IDEA中构建dubbo源码环境
一:源码的下载下载链接二:代码编译Dubbo 使用 maven 作为构建工具。要求Java 1.5 以上的版本 Maven 2.2.1 或者以上的版本使用以下命令做一次构建(-Dmaven.test.skip跳过单元测试)mvn install -Dmaven.test.skip由于代码中的依赖比较多,所以编译时间稍长一点。编译完成就可以开始看源码了,效果如下:对应的版本是2.6x...
2022-04-27 21:12:46
350
原创 Quartz 源码解析(一) —— 基本介绍
一:Quartz是什么Quartz提供了一些Scheduler(调度策略),以便我们管理和执行Job(任务)。官网介绍:Quartz是一个功能丰富、开源的任务调度库,它可以被集成到所有的Java程序,无论是很小的单节点还是规模庞大的商业系统。Quartz可以被用来创建简单或者复杂的调度策略,以执行成千上万的任务。任务一般是指一个标准的Java组件,实际上可以是你写代码指定的任何逻辑。Quartz Scheduler还包括很多企业级的特性,例如JTA事务控制和集群。二:怎么使用Quartz
2022-04-26 22:21:43
2133
原创 xxl-job源码实现
一:xxl-job的源码研究1:要想对xxl-job的实现弄得比较清楚,需要了解xxl-rpc源码,quartz源码,spring源码程序启动的加载顺序,要求比较高。
2022-04-25 23:57:15
480
原创 xxl-rpc源码分析(一)基本介绍
一、简介1.1 概述XXL-RPC 是一个分布式服务框架,提供稳定高性能的RPC远程服务调用功能。拥有"高性能、分布式、注册中心、负载均衡、服务治理"等特性。现已开放源代码,开箱即用。1.2 特性1、快速接入:接入步骤非常简洁,两分钟即可上手; 2、服务透明:系统完整的封装了底层通信细节,开发时调用远程服务就像调用本地服务,在提供远程调用能力时不损失本地调用的语义简洁性; 3、多调用方案:支持 SYNC、ONEWAY、FUTURE、CALLBACK 等方案; 4、多通讯方案:支持 TC
2022-04-25 16:57:46
725
原创 IDEA中zookeeper源码环境
一:源码的下载下载地址二:源码环境的搭建1:复制zoo_sample.cfg文件并改名为zoo.cfg2:修改dataDir地址3:复制log4j.properties到zookeeper-server下的resource下面4:添加resources为源文件5:clea和install zookeeper项目,install的时候忽略测试类6:运行jute模块性插件的source7:添加服务端和客户端启动类服务端启动类Zo...
2022-03-06 21:53:41
2340
转载 为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?
阿里巴巴Java规范:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。1.异常的分类先来看看异常的分类error是一定会回滚的。Exception是异常,他又分为运行时异常RuntimeException和非运行时异常 可查的异常(checked exceptions): Exception下除了RuntimeException外的异常 不可查的异常(unchecked exceptions): Runt.
2021-07-06 23:23:43
733
转载 熔断、限流、降级的区别
熔断限流降级熔断、限流、降级都是保持系统稳定运行的策略,但针对的场景有所不同熔断服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用[1]上面的解释中有两个很关键的词,一个是暂时,一个是停止。停止是说,当前服务一旦对下游服务进行熔断,当请求到达时,当前服务不再对下游服务进行调用,而是使用设定好的策略(如构建默认值)直接返回暂时是说,熔断后,并不会一直不再调用下游服务,而是以一定的策略(如每分钟调用 10 次,若均
2021-07-06 12:41:09
5218
原创 Dubbo架构图和Dubbo执行流程
一:Dubbo架构图和Dubbo执行流程Dubbo架构图从架构图可以看出,Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当然是同步的意思了。但是在实际调用过程中,Provider的位置对于Consumer来说是透明的,上一次调用服务的位置(IP地址)和下一次调用服务的位置,是不确定的。这个地方就需要使用注册中心来实现软负载。Register服务提供者先启动start,然后注册regist
2021-07-03 23:29:07
1575
2
原创 Java foreach 中List移除元素抛出ConcurrentModificationException原因全解析
一:Java foreach 中List移除元素抛出ConcurrentModificationException原因全解析先看《阿里巴巴 Java开发手册》中的相关规定:反例源代码public static void main(String[] args) { List<Integer> list = new ArrayList(); for (int i = 0; i < 10; i++) { list.ad
2021-07-02 20:44:00
551
1
转载 所谓的SaaS服务到底是什么?
先从SaaS说起,SaaS是英文Soft as a Service(软件即服务)的简写。SaaS并不是指代一个行业或者一种技术,它是一种2B的专业型软件租赁使用模式。什么是专业型软件?就是为了解决特定行业或者企业特定问题而针对性开发的软件系统,比如快递行业的物流管理系统、餐饮行业的点餐系统、超市的收银系统、生产型企业的ERP系统、财务管理系统等。SaaS是近年来开始流行起来的,因为有了SaaS的出现,过去的软件服务方式成了我们口中“传统模式”,要理解SaaS先来了解传统的软件服务模式。首先是
2021-07-01 21:23:56
943
原创 int和Integer的区别
一:int和Integer的区别1、Integer是int的包装类,int则是java的一种基本数据类型2、Integer变量必须实例化后才能使用,而int变量不需要3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值4、Integer的默认值是null,int的默认值是0关于Integer和int的比较1、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永...
2021-07-01 17:10:43
370
转载 mysql日志:redo log、binlog、undo log 区别与作用
一、redo log 重做日志 作用:确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。 内容:物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中去的。二、bin log 归档日志(二进制日志) 作用:用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。用于数据库的基于时间点的还原.
2021-06-30 23:22:14
2643
原创 微信红包架构设计,高并发系统应用实战
一:微信红包架构设计,高并发系统应用实战1. 微信红包架构1.1 业务场景微信红包(尤其是发在微信群里的红包,即群红包)业务形态上很类似网上的普通商品“秒杀”活动。用户在微信群里发一个红包,等同于是普通商品“秒杀”活动的商品上架;微信群里的所有用户抢红包的动作,等同于“秒杀”活动中的查询库存;用户抢到红包后拆红包的动作,则对应“秒杀”活动中用户的“秒杀”动作。不过除了上面的相同点之外,微信红包在业务形态上与普通商品“秒杀”活动相比,还具备自身的特点:首先,微信红包业务比普通商品“秒杀
2021-06-29 23:47:44
1095
原创 大数据查找中位数
所有数据不能一下子读入内存 中位数 --> 需要遍历所有数据2. 基本知识b --> bit 比特,位(二进制中的位) B --> Byte 字节,1个字节=8位,1B=8bit K --> KB 千字节,1KB = 1024B M --> MB 兆字节,1M = 1024KB = 1024*1024B G --> GB 1GB = 1024MB、问题分析:100亿个32位整数,那么占用内存为:100亿*32 b = 100亿*32/8 B.
2021-06-24 10:57:11
419
原创 谈谈线上CPU100%排查套路
一:谈谈线上CPU100%排查套路下面给出两种系统环节下的排查步骤,都是一模一样的,只是命令稍有区别!查消耗cpu最高的进程Pid 根据Pid查出消耗cpu最高的线程号 根据线程号查出对应的java线程,进行处理。准备一行死循环代码public class TestFor { public static void main(String[] args) { int random = 0; while (random < 100) {
2021-06-23 23:33:59
196
原创 ThreadLocal原理分析
一:什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。 既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题。ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该
2021-06-23 22:56:35
500
原创 kafka中zookeeper的作用,主要是做什么的?
zookeeper 是 kafka 不可分割的一部分,可见其重要程度,所以我们有必要了解一下 zookeeper 在 kafka 中的具体工作内容。而且,这也是面试时经常问的。zookeeper 存储了一些关于 consumer 和 broker 的信息,那么就从这两方面说明 zookeeper 的作用。1. broker状态zookeeper 记录了所有 broker 的存活状态,broker 会向 zookeeper 发送心跳请求来上报自己的状态。zookeeper 维护了一个正在
2021-06-22 23:48:01
2287
原创 ThreadPoolExecutor线程池参数设置技巧
一、ThreadPoolExecutor的重要参数corePoolSize:核心线程数核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭queueCapacity:任务队列容量(阻塞队列)当核心线程数达到最大时,新任务会放在队列中排队等待执行maxPoolSize:最大线程数当线程数>=corePoolSize,且任务
2021-06-22 23:25:32
2623
原创 算法之三数之和
一:三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]解决思路:排序 + 双指针本题的难点在于如何去除重复解。算法流程:
2021-06-21 23:26:09
146
原创 SpringCloud微服务常见组件理解
概述毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。一、业务
2021-06-19 22:09:00
428
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人