面向对象的三大思想

封装:将事物的属性和行为封装为实体,对外隐藏实现,只暴露其接口

继承:对事物本质的抽象,实现了代码的复用

多态:一个接口或方法可以有多个实现,提高灵活性

guava cache

过期分为写入后过期和访问后过期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
LoadingCache<String, String> userCache = CacheBuilder.newBuilder()
// 设置并发级别,允许同时写缓存的线程数
.concurrencyLevel(8)
// 设置缓存初始容量
.initialCapacity(100)
// 最大容量限制
.maximumSize(5000)
// 写入 30 分钟后过期
.expireAfterWrite(30, TimeUnit.MINUTES)
// 开启统计功能(可以监控命中率等)
.recordStats()
// 设置移除监听器(当缓存被清理时触发)
.removalListener(notification -> {
System.out.println(notification.getKey() + " 因 " + notification.getCause() + " 被移除");
})
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return getFromDatabase(key); // 缓存不命中时的加载逻辑
}
});

基于redisson实现的布隆过滤器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void redissonBloom() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);

// 获取布隆过滤器对象
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("userList");

// 初始化:预期插入量 100万,误差率 3%
bloomFilter.tryInit(1000000L, 0.03);

// 插入并校验
bloomFilter.add("user123");
System.out.println(bloomFilter.contains("user123")); // true
}

http和https的区别

端口号,http是明文,https数据对称加密、密钥非对称加密

https的连接过程:client hello - server hello - 验证证书 - 交换密钥 - 生成对话密钥

osi模型

物理-数据链路-网络-传输-会话-表示-应用

比特流传输-封装成帧、差错检测(arp)-寻址(ip、osfp、rip)- 传输(tcp、udp) - 应用程序间通话 - 数据的解压缩、加解密 - 直接提供网络服务

synchronize的机制

分为代码块和方法锁,如果执行代码块会调用enter和exit方法,方法锁会设置方法的状态为有锁,等待隐式调用,monitor维护四个属性:oner、waitset、entryset、count,执行到enter方法后会尝试将oner设置为当前线程,失败则进入entryset,成功则count设置为1,执行exit指令后唤醒entryset,waitset中的线程通过wait方法进入,通过notify方法唤醒