数组、链表、栈和队列、散列表是基础数据结构,几乎所有的高级开发语言都会涉及到这些数据结构,一些更复杂的数据结构也是基于基础数据结构的扩展。
基础数据结构是数据存储的基础理论,有必要彻底理解它。
数组、链表、栈和队列、散列表是基础数据结构,几乎所有的高级开发语言都会涉及到这些数据结构,一些更复杂的数据结构也是基于基础数据结构的扩展。
基础数据结构是数据存储的基础理论,有必要彻底理解它。
JDK 1.5 新增了 ReentrantLock 类,可以实现线程之间的同步互斥,相比 synchronized ,在扩展功能上更加强大,在使用上更加灵活。
ReentrantLock 还具有嗅探锁定、多路分支通知等功能。
线程间通信-wait/notify/join/ThreadLocal/线程状态
在将某一任务拆份成多个子任务,使用多线程执行这些子任,就涉及到线程通信,才能使用多子任变成一个整体。
线程间通信后,系统之间的交互性会更强大,在提高 CPU 利用率时还有助于对各线程任务的把控和监督。
缓存已是系统架构中非常重要的组件,特别是在高并发的系统中几乎是不可或缺的。
由于缓存的特性和功能,在某些场景上会存在一些问题,主要是 缓存穿透、缓存雪崩 和 缓存击穿。
缓存是高并发系统的三把利器之一(另两把是 限流、降级),可以说是必不可少的。缓存的主要目的是为了解决磁盘与内存速度差异问题,解决高并发下频繁访问数据库导致磁盘 I/O 压力和 CPU 负载过高问题。
这里所说的缓存是指业务系统的缓存,是将数据缓存在内存中,当下次有相同请求时就直接从内存中取数据返回。
缓存可以在服务端本地,也可以是远程独立的缓存系统,如 Redis,通常本地缓存和远程缓存配合使用。
本篇文章在 Spring 缓存体系上进行扩展和补充,更多可参考 Spring Boot 2实践系列(十):Spring 缓存体系、Spring Boot 2实践系列(十一):Ehcache集成详解和使用、Spring Boot 2实践系列(十二):Spring Data Redis 集成详解和使用 ,官方:Spring Data Redis 。
在 Spring Cloud 微服务架构中,使用 Spring Boot Admin 对微服务进行监控和管理。
关于 Spring Boot Admin 的基本应用,可参考 Spring Boot 2实践系列(十六):Spring Boot Admin - Actuator 监控管理 Web 框架 ,Spring Boot Actuator 可参考 Spring Boot 2实践系列(六):应用监控模块 Actuator 详解和集成 ,Spring Boot Admin 2.14 官方文档。
非线程安全 是在多个线程对同一个对象中的实例变量进行并发访问,读取的数据不一致,即数据被意外修改过,出现了脏读。
synchronized 是 Java 中的关键字,是一种同步锁,可以修改方法、代码块、静态方法、类,使多线程以排队方式进行同步处理。
JWT 实现库 java-jwt 生成并验证 Token 工具类-JavaJwtUtil.class
JWT 实现库 java-jwt,使用 HMAC256 、 RSA512 算法生成的 Token 并进行验证的工具类。
非对称加密RSA工具类-RSAUtil.class
微服务之间的相互调用,需要一套认证机制来确认调用是安全的。这不同于在 API 网关的统一认证,主要是防止在微服务暴露在外网的情况下,内部接口被外部恶意调用。
如果微服务是在内网,对外暴露的只有 API 网关,则可以不用做认证。本篇以 JWT 技术来实现安全认证。更多关于 JWT ,可参考分布式应用系列(一):详细理解 JWT(Json Web Token)。