go-environment Go语言环境搭建一、下载Go参考:https://www.runoob.com/go/go-environment.html 官网:https://go.dev/dl/ 直接选择对应版本安装包,安装目录在/usr/local/go/,安装完成可以用go version查看当前版本 可以跑一下hello world 其中test.go文件内容如下 1234567package mainimpo 2024-05-10 #golang
aqs 一、AQS是什么java.util.concurrent.locks.AbstractQueuedSynchronizer,抽象队列同步器,是一个用来构建锁和同步器的框架。 常见的锁(如ReentrantLock)、同步器(如CountDownLatch、Semaphore、CyclicBarrier)都是基于AQS来构建的。 二、了解AQS核心数据结构1234567891011121314151 2024-05-05 #java
Java动态代理和SpringAOP 一、背景我们使用代理对象替代对真实对象的访问,这样就可以在不修改原目标对象的前提下,扩展目标对象的功能。比如在方法执行前后增加一些自定义操作。 不修改原目标对象有两个好处 降低代码耦合 有些对象就是无法修改,如外部类。 在Java中实现代理有两种方式,静态代理 和 动态代理 静态代理,指的是我们手动完成,为每个类手动创建一个代理类,完成增强逻辑。很不方便,一般不用。 动态代理,借助一些工具来实 2024-04-21
服务限流常见解决方案 一、背景为了保证系统稳定性和可用性,我们有时候需要拒绝一些超出承受范围的请求; 服务限流就是其中的一种方案:限定请求的速率。 二、常见的限流算法固定窗口计数器原理原理是将时间划分为固定大小的窗口,在每个窗口内限制请求的数量或速率,即固定窗口计数器算法规定了系统单位时间处理的请求数量。 假如我们规定系统中某个接口 1 分钟只能被访问 33 次的话,使用固定窗口计数器算法的实现思路如下: 将时间划分 2024-04-20 #服务治理
分布式理论 一、CAP简介CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。 在理论计算机科学中,CAP 定理(CAP theorem)指出对于一个分布式系统来说,当涉及读写操作时,只能能同时满足以下三点中的两个: 一致性(Consistence) : 所有节点访问同一份最新的数据副本 可用性(A 2024-04-06 #分布式
分布式锁 一、背景在多线程环境中,我们经常会使用到锁,目的是为了保证共享资源被安全地访问。 单机环境下,我们可以通过本地锁来保证资源安全; 在分布式环境下,不同服务运行在不同的JVM进程上,本地锁就没法实现资源的互斥访问了,因此我们需要一个 分布式的锁。 而一个分布式锁需要满足哪些条件呢? 互斥:锁的基本要求 高可用:锁本身的高可用;释放锁的节点出现问题,锁也可以被释放,不影响其他节点对共享资源的访问。 2024-04-05 #分布式
分布式ID 一、背景在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。 数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求; 此时一个能够生成全局唯一ID的系统是非常必要的。 那业务系统对ID的要求有哪些呢? 全局唯一:最基本要求。 趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引 2024-04-05 #分布式
spring-logging 启动错误日志打印可以看到用了一个很大的try-catch,所有的启动错误都通过统一的handleRunFailure来处理 在handleRunFailure方法里,做了几个事情: 发消息;打印错误日志(report;处理钩子方法。。只关心打印错误日志这里 reportFailure方法里会遍历异常reporter,每个reporter都有适用的异常,匹配上了就打印,否则走下面兜底逻辑。 (实 2024-03-06 #spring, source code
spring-event Spring生命周期传播看Spring源码的时候,发现Spring使用了发布消息的方式,来通知各个组件Spring状态的变化 1234567startingenvironmentPreparedcontextPreparedcontextLoadedstartedreadyfailed 先debug一下Spring是如何通知到各个组件的? 先看一下这个starting消息 可以看到 实际的 2024-03-04 #spring