随笔分类 - Java
摘要:Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、熔断降级、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 在 Sentinel 里面,所有的资源都对应一个资源名称(resourceName),每次资源调用都会创建一个 Entry 对象。En
阅读全文
摘要:1、dubbo主要角色 Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 a.订阅注册中心,注册中心广播服务变更,第一次会主动全量pull所有信息,后面增量会被动监听注册中心的消息 b.本地会缓存注册信息,注册中心挂了之后会拉本地缓存,保证服务之间可用。 R
阅读全文
摘要:注册中心 1、Register:服务注册 当Eureka客户端向Eureka Server注册时,它提供自身的元数据,比如IP地址、端口,运行状况指示符URL,主页等 1.1、服务端注册 会拉取配置的注册中心地址,向附近注册服务注册 1.2、客户端注册 客户端第一次续约会失败,因为服务端没有注册,失
阅读全文
摘要:1. DefaultListableBeanFactory的作用: 默认实现了ListableBeanFactory和BeanDefinitionRegistry接口,基于bean definition对象,是一个成熟的bean factroy。 最典型的应用是:在访问bean前,先注册所有的def
阅读全文
摘要:循环依赖过程A->B B->A 1、doGetBean->getSingleton(A)先从一级缓存单例缓存singletonObjects获取,这个时候为空, 再判断singletonObject == null && isSingletonCurrentlyInCreation(beanName
阅读全文
摘要:hystrix熔断机制 1、隔离机制 线程隔离: Hystrix在用户请求和服务之间加入了线程池。 Hystrix为每个依赖调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间。线程数是可以被设定的。 信号隔离: 信号隔离也可以用于限制并发访问,防止阻塞扩散, 与
阅读全文
摘要:客户端注册到服务端是通过http请求的 涉及到多级缓存 register注册表 源码精髓:多级缓存设计思想 在拉取注册表的时候: 首先从ReadOnlyCacheMap里查缓存的注册表。 若没有,就找ReadWriteCacheMap里缓存的注册表。 如果还没有,就从内存中获取实际的注册表数据。 在
阅读全文
摘要:ReentrantLock主要利用CAS+AQS队列来实现。它支持公平锁和非公平锁,两者的实现类似。 CAS:Compare and Swap,比较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。该操作是一个原子操
阅读全文
摘要:AOP: aop切面编程,其实就是spring增强器的一个扩展,就是通过beanPostProcessor的after后置方式实现的,其中在after中把需要的bean通过放射+动态代理完成bean的替换,替换成代理bean。然后通过注册拦截器完成代理方式的执行; 1、代理对象的创建过程(advic
阅读全文
摘要:spring要了解的几个类 AbstractApplicationContext: 启动类,spring开始方法执行refresh()十几步方法 beanPostProcessor: bean的增强器,两个接口before,after,初始化之前执行beforeInitializationa,初始化
阅读全文
摘要:idea导入spring源码运行缺失cglib和objenesis的jar包的办法【亲测有效】 亲测有效,网上说的大多废话 上图,操作如下,运行gradle
阅读全文
摘要:虽然通常每个子线程只需要完成自己的任务,但是有时我们希望多个线程一起工作来完成一个任务,这就涉及到线程间通信。 关于线程间通信本文涉及到的方法和类包括:thread.join()、object.wait()、object.notify()、CountdownLatch、CyclicBarrier、F
阅读全文
摘要:接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: interface Formula { double calculate(int a); default double sqrt(int a) { retur
阅读全文
摘要:需要明确的几个问题: synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果 再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类
阅读全文
摘要:Missian简介 注:(创始者不明,应用于sina下面的公司(爱问)) Missian是一个构建于Mina和Hessian基础上的异步RPC框架,能够兼容HTTP协议和TCP协议,能和Hessian互通兼容,它提供了: 1、一个基于mina的高性能服务器,具备mina所有的一切优秀基因。Missi
阅读全文
摘要:1、 Semaphore 信号量 (阻塞) 优点:可以控制线程的数量,不会超出线程范围 缺点:当线程死锁时,永远没法释放,导致一直阻塞 在java中,提供了信号量Semaphore的支持。 Semaphore类是一个计数信号量,必须由获取它的线程释放, 通常用于限制可以访问某些资源(物理或逻辑的)线
阅读全文
摘要:1、run 与 start的区别 调用线程的start方法是创建了新的线程,在新的线程中执行。 调用线程的run方法是在主线程中执行该方法,和调用普通方法一样。 2、getState() 线程的状态 NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是线程正在正常运行中, 当然可能会有某
阅读全文
摘要:package com.originalityTest; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Set; impo...
阅读全文
摘要:赋值 直接 = ,克隆 clone 假如说你想复制一个简单变量。很简单: 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你复制的是一个对象、list集合的情况下,情况就有些复杂了。 这就怪了
阅读全文