G1&&CMS
单例模式手写
饿汉模式
public class Singleton {
// 首先,将 new Singleton() 堵死
private Singleton() {};
// 创建私有静态实例,意味着这个类第一次使用的时候就会进行创建
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
饱汉模式最容易出错
public class Singleton {
// 首先,也是先堵死 new Singleton() 这条路
private Singleton() {};
// 和饿汉模式相比,这边不需要先实例化出来,注意这里的 volatile,它是必须的
private static volatile Singleton instance = null;
public static Singleton getInstance() {
if (instance == null) {
// 加锁
synchronized (Singleton.class) {
// 这一次判断也是必须的,不然会有并发问题
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
嵌套类最经典,以后大家就用它吧:
public class Singleton3 {
private Singleton3() {}
// 主要是使用了 嵌套类可以访问外部类的静态属性和静态方法 的特性
private static class Holder {
private static Singleton3 instance = new Singleton3();
}
public static Singleton3 getInstance() {
return Holder.instance;
}
}
单例模式优缺点
破坏单例模式和防止手段(反射==》枚举 序列化==》implements Serializable+readResolve() )
https://javadoop.com/post/singleton-not-single
HashTable Linkedhashmap concurrenthashmap源码(包括AQS等等)
hashmap怎么保证线程安全
如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。
fail-fast机制
就是集合类在Iterator遍历的时候不要用集合类的remove方法因为Iterator接口实现的itr类中会检查是否对其size进行了修改,如果非要remove 可以使用Iterator的remove方法,这样会把modCount和expectedModCount,若两个不相等就会fail-fast并且报ConcurrentModificationException这个异常
方法2
使用java并发包(java.util.concurrent)中的类来代替 ArrayList 和hashMap。
hash没看懂
https://blog.csdn.net/huzhigenlaohu/article/details/51802457
AQS
https://blog.csdn.net/disiwei1012/article/details/78596731
redis为什么不可以作为专业的消息队列 redis多路复用
不支持重复消费
消费者拉取到消息后,如果发生异常宕机,那这条消息就丢失了
BRPOP / BLPOP 阻塞式拉取
Pub/Sub 这种方案解决了重复消费但是有其他问题
Pub/Sub 的相关操作,不会写入到 RDB 和 AOF 中
消费者下线
Redis 宕机
消息堆积
Redis中的Stream可以满足大部分需求但是
一个专业的消息队列,必须要做到两大块:
消息不丢
消息可堆积
把 Redis 当作队列来使用时,始终面临的 2 个问题:
Redis 本身可能会丢数据
面对消息积压,Redis 内存资源紧张
redis作者看不下去自己写了一个disque
如何进入内核态
Jenkins Docker
http https
多了一个ssl协议
https://www.cnblogs.com/hjbf/p/10248388.html