一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。
日常
1、6:00起床:开启新的一天!
2、健身2h
今天练了半小时手臂,半个小时胸和背,然后跑了会步,爬了会坡。
3、LeetCode刷了3题
- 子集
- 和全排列类似也是使用的回溯(递归后状态恢复)的方法,递归每次选择一个未遍历的加入output中,且不用非得长度为n时才加入ans,而是对于每个排列均加入ans
- 区别在于子集不用非得长度=n时才加入ans,其每次递归时都要将当前output加入ans
- 但此时会出现重复的问题(同一个排列但元素顺序不同),这时候应该考虑去重
- 对于子集中的排列来说,为避免重复,可以保持相对顺序即可,故可以在递归的时候每次从上一个元素开始遍历找到未遍历的元素加入排列中,故每次将下标作为参数传入递归函数中,确保排列中的元素相对顺序不变而避免重复
- 电话号码的字母组合
- 和全排列类似,先将每个数字对应的字母数组作为常量定义出来
- 然后递归遍历每个数字,以回溯的方式将每个数字对应的字母加入排列的固定位置中
- 每次只加入一个字母,然后递归加入下一个数字对应的每个字母,然后恢复状态后继续加入当前数字对应的下一个字母
- 组合总和
- 使用递归加回溯来实现,递归计算满足当前target的排列,对于每次递归中,以回溯的方式遍历给出的候选数字,递归将当前候选加入排列后的target-num的情况,然后恢复状态,遍历下一个候选数字,继续递归
4、22:00复盘√
学习和感想
1、实习工作:学SpringCloud
- 项目测试:PostMan、Swagger3
- PostMan测试
- Swagger3测试
- 要先引入Swagger3的依赖,再POM中声明引入
- 主要使用三个标签
- 常用的三个注解!
- @tag(name=“”,description=“”):作用与controllor层上,说明controller 以及微服务的作用![[Pasted image 20241010105735.png]]
- @Operation标注在controller中的方法上,描述方法的作用
- @Schema()标注在model层的JavaBean上,描述模型作用即每个属性
- Swagger3Config配置类启动
- 目前的问题
- 时间格式不对
- 返回的数据的类型不统一
- 统一返回枚举ReturnCodeEnum
- 枚举编写小口径:举值、构造、遍历
- 举值 A(arg1, arg2);
- 根据举值先定义对应的属性,然后来创建构造函数,对应参数的构造函数
- 遍历:创建一个静态函数返回对应的枚举值,接收传入的code,使用ReturnCodeEnum.values()得到枚举类型的所有举值,然后遍历得到对应Code的枚举值并返回即可![[Pasted image 20241010123005.png]]
- 项目优化:统一时间格式、统一返回值类型、全局异常处理(@RestControllerActive)
- 统一时间格式:使用@JsonFormat注解在返回对象类的时间属性上进行标注
- 统一返回对象
- 先枚举一个ReturnCodeEnum枚举类:举值、构造、遍历
- 构造一个统一的泛型对象ResultData<>(code、message、date),并构造static静态函数success()和fail() 来返回对应的泛型对象作为返回结果
- 全局异常处理
- @RestControllerAdvice 是 Spring Framework 中的一个注解,用于定义全局异常处理、全局数据绑定或全局数据预处理。它是一个组合注解,包含了@ControllerAdvice 和 Rest表示@ResponseBody
- @ControllerAdvice 是一个用于定义全局异常处理器、数据绑定配置等的注解。它可以被用来声明一个组件,该组件可以处理多个 @Controller 和 @RestController 类中的异常。在该类中使用@ExceptionHardler()注解对方法进行标注表示该方法处理的异常类型
- @ResponseBody 是一个用于表示该控制器的方法返回的对象直接作为 HTTP 响应的JSON格式正文返回,而不是返回一个视图(View)的注解
- 当这两个注解组合在一起时,@RestControllerAdvice 就可以用来定义全局的异常处理器,这些处理器可以捕捉到所有 @RestController 和 @Controller 类中抛出的异常,并返回 JSON 格式的响应。
- 重复代码提取:对微服务的重复代码(ResultData、ReturnCodeEnum、Entity(DTO)进行提取
- 先创建一个存放重复代码的微服务项目:建项目、改POM、写YML、主启动、业务类
- 将该项目导入依赖后在maven中clean、install生成 jar 包
- 在需要重复代码的项目中导入该jar包的POM依赖即可使用该重复代码
- Consul组件:服务注册(consul.discovery)、分布式配置中心(consul.config)
- Consul是什么,能干什么
- Consul是SpringCloud提供的用于服务注册发现、分布式配置中心的组件,
- Consul:服务注册
- 首先在要注册进Consul的微服务中导入Consul的POM依赖
- 修改YML文件,给出该微服务的名字(spring.application.name)以及consul的配置(spring.cloud.consul.port,host,discovery…)
- 在微服务的主启动类上标注@EnableDiscovery…注解来表示该微服务可以被发现进入Consul
- 在官网上下载Consul,在cmd中使用consul -v查看是否成功,然后在cmd输入consul agent -dev (管理员模式)启动Consul服务,并在浏览器输入 https://localhost:8500 进入Consul可视化界面
- Consul作为服务注册与其他(eureka、zoopking)的区别
- euraka是Java编写且满足AP,Consul是Go编写且满足CP
- Consul不仅可以服务注册,也可以作为分布式配置中心
- CAP:consistency(一致性)、avirailable(可用性即性能)、p(分区容忍)
- 最多只可同时满足两个性质;
- 一致性是指对于两个同步的数据库,当某一个数据修改且另一个未同步时,另一个是不可以访问的,来保证一致性
- 可用性是指当某一个数据修改且另一个未同步时,另一个也可以访问来保证性能
- Consul:分布式配置中心,bootswarp.yml,KV Store,及时动态刷新
- 为什么要用:对于微服务来说,application.yml是独占的,是用户级别的,每一个微服务均有一个;此时若修改某些公有的配置则必须要修改每一个微服务的application.yml,会使得工作量巨大且不好管理,故可以引入bootswarp.yml作为系统级别的配置文件,每一个微服务均会先导入bootswarp.yml中的配置再导入application.yml中的配置(bootswarp.yml优先级高于application.yml)
- 先导入Consul分布式配置中心所需要的POM依赖(consul.config)
- 将全局的配置(与spring.cloud相关的如consul等)从application.yml中提取出放入bootswarp.yml中即可
- **使用@Value(“${}”)可以对属性赋予配置文件中的值
- KV Store:在Consul中存储某一微服务集群所要用到的公共的配置,在图形化界面中的KV选项中创建 config/微服务名-dev,prod/data 形式的文件即可,此时在微服务中就可以使用@Value(“${}”)可以对属性赋予配置文件中的值
- 为确保KVStore中属性修改后能及时反应到微服务,可以在微服务的主启动类上加入@Fresh…注解来开启及时动态刷新
- Consul是什么,能干什么