AWS 学习

面向系统架构师认证,结合 Java 后端视角整理。核心思路:每个服务解决什么痛点、何时选它、和类似服务怎么区分。 一、存储 Storage 1.1 三种存储类型对比 类型 代表服务 访问单元 典型场景 块存储 EBS, EC2 Instance Store 数据块(Block) 数据库、OS 磁盘 文件存储 EFS, FSx 文件/目录树 多实例共享、NFS/SMB挂载 对象存储 S3 对象(Object + Key) 静态资源、备份、数据湖 块存储 → 像本地硬盘,OS看到的是裸设备,自己格式化挂载 文件存储 → 像 NAS,多台机器可以同时 mount 同一个目录 对象存储 → 像 HTTP PUT/GET 的 Key-Value,无目录概念,靠前缀模拟 1.2 Amazon S3 核心功能速查: 功能 说明 常见考点 Versioning 同一 Key 保留多个历史版本 开启后才能用 CRR / MFA Delete CRR(跨区域复制) 异步复制到另一 Region 灾备 DR、降低延迟 Transfer Acceleration 通过 CloudFront 边缘节点加速上传 上传到遥远 Region 时使用 Lifecycle Policy 对象按年龄自动迁移存储类 节省成本核心手段 S3 File Gateway 本地 SMB/NFS 映射到 S3 混合云文件迁移 Intelligent-Tiering 自动在 Standard ↔ IA 间切换 访问模式不可预测时使用 S3 存储类选择决策树: ...

2024-04-18 12:48:03 PM · 8 分钟
学习笔记

Spring Cloud 学习

1. 服务拆分与远程调用 1.1 为什么要拆分服务? 单体应用随业务增长面临:部署慢、扩展性差、技术栈固化等问题。微服务将其拆分为独立部署、独立扩缩容的小服务,每个服务只负责一个业务域。 拆分原则: 单一职责:每个服务只做一件事 高内聚低耦合:服务内部紧密,服务之间松散 数据独立:每个服务拥有独立数据库 1.2 用户登录流程(微服务视角) Client → Gateway(鉴权) → 业务微服务A → 微服务B(OpenFeign) ↓ Nacos(服务发现) 1.3 RestTemplate — 微服务间原始调用 RestTemplate 是 Spring 提供的 HTTP 客户端,可用于微服务间调用,但代码繁琐、不支持负载均衡,是 OpenFeign 出现前的过渡方案。 // 注册为 Bean,并开启负载均衡 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } // 调用方式(服务名替代 IP:Port) String url = "http://user-service/api/users/" + userId; User user = restTemplate.getForObject(url, User.class); ⚠️ RestTemplate 已逐渐被 OpenFeign 取代,生产中优先选择 OpenFeign。 2. 服务治理 — Nacos 注册中心 2.1 解决的问题 微服务实例 IP / 端口动态变化,调用方无法硬编码地址。注册中心提供: ...

2024-03-18 12:46:51 PM · 12 分钟
学习笔记

SSM框架 学习

一、Spring IoC 容器 1.1 容器体系结构 BeanFactory(顶层接口) └── ApplicationContext(常用接口,扩展了BF) ├── ClassPathXmlApplicationContext(XML配置) ├── FileSystemXmlApplicationContext(文件路径XML) └── AnnotationConfigApplicationContext(注解配置) BeanFactory vs ApplicationContext 核心区别: 特性 BeanFactory ApplicationContext Bean 初始化时机 懒加载(第一次 getBean 时) 饿加载(容器启动时) 功能 基础 IoC IoC + 事件发布 + 国际化 + AOP等 使用场景 资源极度受限的嵌入式 99% 的业务场景 ApplicationContext 为什么没有 close()? ApplicationContext 接口本身不定义 close(),是为了保持接口的通用性(不是所有容器都能/需要被关闭,如 Web 容器)。但其实现类 AbstractApplicationContext 实现了 Closeable,可以强转后调用,或用 ConfigurableApplicationContext 接口接收。 1.2 延迟加载(Lazy Loading) // 注解方式:@Lazy 让 Bean 在第一次被使用时才初始化 @Bean @Lazy public HeavyService heavyService() { return new HeavyService(); } // XML方式: // <bean id="heavyService" class="..." lazy-init="true"/> 适用场景:初始化代价高、启动时不一定用到的 Bean(如某些连接池、第三方SDK客户端)。 ...

2024-02-18 12:40:44 PM · 12 分钟
学习笔记

MyBatis-Plus 学习

1. 简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 核心特点: 无侵入:引入 MP 不会对现有 MyBatis 工程产生影响,犹如丝般顺滑。 损耗小:启动即会自动注入基本 CRUD,性能基本无损耗。 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅通过少量配置即可实现单表大部分 CRUD 操作。 支持 Lambda 形式调用:通过 Lambda 表达式,安全高效的编写查询条件,防止字段名误写。 内置代码生成器:通过少量配置即可生成 Mapper、Service、Controller 等代码。 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置后即可使用。 官网:https://baomidou.com/ 2. 基本用法 2.1 引入依赖 在 Maven 项目 pom.xml 中添加: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> <!-- 请按最新版本 --> </dependency> 如果是传统 Spring 项目,可引入 mybatis-plus 核心依赖并自行配置。通常 Spring Boot 项目直接使用 starter。 2.2 定义实体类 @Data public class User { private Long id; private String name; private Integer age; private String email; } 2.3 编写 Mapper 接口 继承 BaseMapper<T> 即可获得 CRUD 能力: ...

2024-01-16 03:38:37 PM · 6 分钟
学习笔记