0%

一、Server启动原理

  1. springboot会去加载META-INF下面的spring.factories自动装配org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration这个类

阅读全文 »

各种队列介绍

1
2
3
4
5
6
7
ArrayBlockingQueue 由数组结构组成的有界阻塞队列
LinkedBlockingQueue 由链表结构组成的有界(但大小默认值为Integer.MAX_VALUE 21亿)阻塞队列
PriorityBlockingQueue 支持优先级排序的无界阻塞队列
DelayQueue 使用时间优先级队列实现的延迟无界阻塞队列
SynchronousQueue 不存储、匀速的阻塞队列,容量为零的队列(用于一个线程给另一个线程下达任务)
LinkedTransferQueue 由链表结构组成的无界阻塞队列 transfer将元素放入队列之后会阻塞,等待元素被拿走
LinkedBlockingDeque 由链表结构组成的双向阻塞队列
阅读全文 »

一、强引用

1
2
3
4
最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。
在java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。
当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,及时该对象以后永远都不会被用到jvm也不会回收。
因此强引用时造成java内存泄露的主要原因之一。
阅读全文 »

一、常见线程池

1.Executors.newFixedThreadPool()

1
2
3
4
创建一个定长的线程池,可控制线程最大并发数,超出的线程会在队列中等待
创建线程池corePoolSize和maximumPoolSize的值是相等的,它使用的队列是LinkedBlockingQueue
构造方法
return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
阅读全文 »

三级缓存

指的是DefaultSingletonBeanRegistry类中的三个Map

1
2
3
4
5
6
7
8
9
10
11
//一级缓存,存放初始化完成的Bean
/** Cache of singleton objects: bean name to bean instance. */
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

// 二级缓存,存放已经被实例化,但是未初始化完成的Bean
/** Cache of early singleton objects: bean name to bean instance. */
private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap<>(16);

//三级缓存,存储创建Bean的匿名内部类工厂对象ObjectFactory<?>,通过存储lambda表达式(() -> getEarlyBeanReference(beanName, mbd, bean)),解决创建动态代理逻辑性能,解耦 bean动态代理问题
/** Cache of singleton factories: bean name to ObjectFactory. */
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

spring通过三级缓存来解决循环依赖问题

阅读全文 »

流程

第一步:最初的入口

ClassPathXmlApplicationContext:

1
2
3
4
5
6
7
8
9
10
11
public ClassPathXmlApplicationContext(
String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)
throws BeansException {

super(parent);
setConfigLocations(configLocations);
if (refresh) {
//第一步,最初的入口
144 refresh();
}
}
阅读全文 »

一、简介

sleuth收集跟踪信息通过http请求发送给zipkin server,zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示。默认内存存储,可以用mysql,ES等存储。

阅读全文 »