架构师修炼之道

知识日新月异,唯有保持同步迭代,才能适应变化的未来!

0%

今天发现在 IDEA 中下载源码失败,通过查看 IDEA 日志看到了出错的原因:

1
tail -f ~/Library/Logs/JetBrains/IntelliJIdea2021.3/idea.log

再次单击下载源码按钮后实时输出:

1
2
3
4
5
6
7
8
2022-01-25 17:23:15,247 [ 135367]   INFO -      #org.jetbrains.idea.maven - org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.springframework:spring-webmvc:jar:sources:5.3.15 from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public, default, releases)]
in DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:424)
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.springframework:spring-webmvc:jar:sources:5.3.15 from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public, default, releases)]
in DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:520)
... 24 more
Caused by: org.eclipse.aether.transfer.NoRepositoryConnectorException: Blocked mirror for repositories: [nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public, default, releases)]
in DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:506)
... 25 more
阅读全文 »

领域驱动设计统一过程交付物

全局分析规格说明书

1 价值需求

描述目标系统的价值需求,可以附上商业模式画布。

1.1 利益相关者

描述目标系统的利益相关者,包括终端用户、企业组织、投资人等。

1.2 系统愿景

描述利益相关者共同达成一致的愿景,该愿景的描述需要对准企业的战略目标。

1.3 系统范围

确定了目标系统问题空间的范围和边界,可以通过未来状态减去当前状态确定范围。

1. 当前状态

识别当前已有的资源(人、资金),已有的系统,当前的业务执行流程。

2. 未来状态

根据业务愿景和利益相关者确定构建目标系统后希望达到的未来状态。

3. 业务目标

明确各个利益相关者提出的业务目标。

2 业务需求

2.1 概述

对目标系统整体业务需求的描述,展开对整个问题空间的探索,划分核心子领域、通用子领域和支撑子领域,可附上子领域映射图。

阅读全文 »

  1. 重建索引
  • 索引可能因为删除,或者页分裂等原因,导致数据页有空洞,重建索引的过程会创建一个新的索引,把数据按顺序插入,这样页面的利用率最高,也就是索引更紧凑、更省空间。
  • 使用语句alter table T engine=InnoDB替换alter table T drop index k; alter table T add index(k);
  1. 怎么删除表的前 10000 行
  • [X]直接执行 delete from T limit 10000:单个语句占用时间长,锁的时间也比较长;而且大事务还会导致主从延迟。
  • [V]在一个连接中循环执行 20 次 delete from T limit 500。
  • [X]在 20 个连接中同时执行 delete from T limit 500:人为造成锁冲突。
  1. 重新统计索引信息
  • 如果你发现 explain 的结果预估的 rows 值跟实际情况差距比较大,可以采用这个方法来处理。
  • analyze table t:解决统计错误扫描行数问题
  1. 紧急创建索引
  • 假设你现在的服务是一主一备,主库 A、备库 B,这个方案的大致流程是这样的:
    1. 在备库 B 上执行 set sql_log_bin=off,也就是不写 binlog,然后执行 alter table 语句加上索引;
    2. 执行主备切换;
    3. 这时候主库是 B,备库是 A。在 A 上执行 set sql_log_bin=off,然后执行 alter table 语句加上索引。
  • 平时在做变更的时候,你应该考虑类似 gh-ost 这样的方案,更加稳妥。但是在需要紧急处理时,上面这个方案的效率是最高的。
阅读全文 »

下载源码

查看项目创建的所有标签,下面克隆5.3.5版本的源码。

1
2
3
4
5
# 基于标签克隆源码到本地
git clone --depth 1 --branch v5.3.5 git@github.com:spring-projects/spring-framework.git

# 克隆下来的版本处于游离状态,所以还要创建本地分支(非强制要求)
git switch -c v5.3.5
  • 如果像上面按照SSH协议克隆,需要提前配置SSH key
  • 如果因为网络问题导致克隆比较慢,甚至克隆失败,那么你也可以直接下载压缩包。采用这种方式时需要把解压出来的目录变成本地git仓库,然后把文件全部提交,否则构建脚本会报错。
阅读全文 »

源码C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\rt.jar!\java\util\HashMap.java

简介

本类实现了java.util.Map接口并允许空值和空键,HashMap的实例具有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中存储桶的数量,初始容量只是创建哈希表时的容量。当哈希表中的条目数超过负载因子和当前容量的乘积时,哈希表将被自动扩容(内部数据结构将被重建)。

通常,默认负载因子(.75)在时间和空间成本之间提供了一个很好的权衡。较高的值会减少空间开销,但会增加查找成本(反映在HashMap类的大多数操作中,包括get和put)。如果将大量的键值对存储在HashMap实例中,则应该创建相匹配的容量,以避免多次触发自动扩容影响程序性能。

本类是线程不安全的。如果多个线程同时访问,并且至少有一个线程在结构上修改,则必须在外部进行同步。如果需要在多线程环境使用本类,可以用Map m = Collections.synchronizedMap(new HashMap(...));进行包装。

阅读全文 »