1. maven clean
maven clean 是 Maven 的一个生命周期阶段命令,用于清理项目中的生成文件。具体来说,它会删除项目目录中的 target 文件夹,该文件夹通常存放 Maven 构建过程中生成的文件,比如编译的 .class 文件、JAR 包、WAR 包等。
2. @ConfigurationProperties
这是Spring Boot提供的一个注解,用于将外部配置属性绑定到Java对象上。通过使用这个注解,开发者可以将配置文件(如application.properties或application.yml)中的属性值自动映射到Java类的字段上。
以前用的都是绑定单个配置项,太low,这样直接处理成一个bean,使用就很方便,注入它!
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import lombok.Data;
@Component // 将该类注册为Spring Bean,使其可以被Spring容器管理
@ConfigurationProperties(prefix = "app") // 指定配置属性的前缀为app
@Data
public class AppProperties {
private String name;
private String version;
private boolean enabled;
}
3. 聚合根
聚合根是领域驱动设计(DDD)中的一个概念,指的是一个聚合的主要实体,它负责维护聚合内部其他实体和对象的一致性。聚合根是访问聚合的唯一入口,确保在处理聚合内的业务逻辑时,所有相关实体的状态保持一致。
4. java16 record
record适合用来表示数据对象,例如 DTO、配置对象或任何不需要修改的状态。减少了样板代码(boilerplate)。record 提供了一种简洁的方式来创建不可变的数据类,自动生成构造函数、访问器、equals()、hashCode() 和 toString() 方法。
-
简化语法:使用 record 可以减少 boilerplate 代码。例如,你不需要手动编写构造函数、访问器和其他常用方法。
-
不可变性:record 默认是不可变的(immutable),一旦创建后,字段的值不能被修改。这使得 record 适合用于表示数据传输对象(DTO)或模型。
-
内置功能:
public record Person(String name, int age) { }
// 使用示例 public class Main { public static void main(String[] args) { Person person = new Person("Alice", 30); System.out.println(person.name()); // 输出: Alice System.out.println(person.age()); // 输出: 30 System.out.println(person); // 输出: Person[name=Alice, age=30] } }
5. MyBatis-Plus @EnumValue
public enum UserStatus {
ACTIVE(1, "Active"),
INACTIVE(0, "Inactive");
@EnumValue
private final int code;
privatefinal String description;
......
}
private UserStatus status; // 枚举类型字段
如此,在实体类中便可以用使用枚举,在查询和插入的时候会自动映射。
6. isxxx方法,序列化时自动执行,且多返回一个字段xxx
public class A { public boolean isxxx(){ return false; } }
许多序列化库(如Jackson)遵循Java Bean规范,自动将以is或get开头的方法视为属性的访问器。根据这个规范,isPass被视为pass属性,因而在序列化时会包含这个返回值。
如果你想避免这种行为,可以:
- 使用@JsonIgnore注解:这样可以明确指示序列化库忽略该方法。
- 更改方法名:将其重命名为getPass,以避免自动识别。
7. @JsonProperty
@JsonProperty 注解是 Jackson 库中的一个重要注解,用于在序列化和反序列化 Java 对象时指定 JSON 属性的名称和其他特性。
@JsonProperty("user_name")
private String username;
8. mybatisplus乐观锁
其实就是执行update的时候加了一个 and version = xxx,适合读多写少的场景。
9. idea Invalidate Caches
Invalidate Caches/Restart是IDEA工具中的一个清理缓存和重启工具的选项。当您遇到IDEA工具中的编译错误、运行错误或调试问题时,您可以尝试使用此功能来清除缓存并重新启动IDEA,以解决潜在的问题。
10. 前后端传参,涉及到数字要用String
因为前端在数字过长的情况下会丢失精度。
11. springboot国际化
private final MessageSource messageSource;
private final LocaleResolver localeResolver;
12. String.repeat(count);
是 Java 11 引入的方法,它用于将一个字符串重复指定次数,并返回新的字符串。
public static void main(String[] args) {
String str = "Hello";
// 将字符串重复3次
String result = str.repeat(3);
System.out.println(result); // 输出:HelloHelloHello
}
13. liteflow规则引擎
LiteFlow适用于拥有复杂逻辑的业务,比如说价格引擎,下单流程等,这些业务往往都拥有很多步骤,这些步骤完全可以按照业务粒度拆分成一个个独立的组件,进行装配复用变更。使用LiteFlow,你会得到一个灵活度高,扩展性很强的系统。因为组件之间相互独立,也可以避免改一处而动全身的这样的风险。
LiteFlow只做基于逻辑的流转,而不做基于角色任务的流转。如果你想做基于角色任务的流转,推荐使用activiti。
我觉得吧,用处真不大,用责任链模式就很好,没必要引入这玩意。
14. 做功能要考虑多端
用户注册后的默认头像,本来想的是直接设置一个url在用户数据中。
但是这样没有考虑到多端,比如安卓、ios、小程序,可能会对头像有不同的处理,所以前端处理默认头像。
最后还是妥协了,由于前端用到的地方有点多,还是选择后端放一个默认的头像进去。
15. Md5Crypt md5加密盐
这个工具类,使用的时候要千万注意,如果你不指定salt,他那个会自动生成salt。导致每次加密出来的数据都不一样,哎,这么设计有个卵用。
16. salt的规则
标识符用来指示哈希值是使用 MD5 加盐算法计算的。这是为了与其他哈希算法(如 SHA-256, bcrypt 等)区分开来。
17. List.of()
List.of() 是 Java 9 引入的一个静态工厂方法,用于创建不可变的列表。这个方法可以接受一组元素作为参数,并返回包含这些元素的不可变列表。特点:
-
不可变性:由 List.of() 创建的列表是不可变的,不能修改(即不能添加、删除或修改元素)。试图修改会抛出 UnsupportedOperationException 异常。
-
不允许空值:列表中不允许有 null 元素。如果你尝试将 null 作为元素传入,会抛出 NullPointerException。
-
轻量级:返回的列表实现较为轻量级,适合用于创建小型的、固定的列表。
List list = List.of("apple", "banana", "cherry");
18. PlantUML
一款idea插件,根据文字生成uml图,好处是可以将图也放到git上管理,缺点是需要学习规则。
19. mysql8条件索引
todo 真假难料,网上看到的,有时间了试试。
CREATE UNIQUE INDEX idx_unique_a
ON your_table_name (A)
WHERE is_deleted = 0;
20. 手机没电
uber打车,手机没电价格更高,真tm奸商。
但是说实话,挺佩服的,惊为天人,算法和人性是什么关系。
21. @NotBlank分组验证
一个po,新增和修改公用,通过分组来验证数据,甚6
but!没有指定分组的校验规则将不生效,也就是说用了这个破玩意,你的所有校验都要指定groups
// 入参
@Validated(AAAAAConstants.GroupPost.class) @RequestBody XXXXXXPO po
// 加到对应的转换方法上
@NotBlank(groups = {ApiConstants.GroupPut.class}, message = "id不能为空")
@NotBlank(message = "xx名称不能为空", groups = {ApiConstants.GroupPost.class, ApiConstants.GroupPut.class})
22. git空目录为什么不提交
Git 只跟踪文件,不跟踪目录。在 Git 的设计中,目录是隐式的,只有当目录中有文件时,Git 才会包含该目录。如果目录是空的,Git 会忽略它。
if you want to提交,you can 在空目录中添加一个隐藏文件,通常命名为 .gitkeep,它的作用只是占位,让 Git 可以提交这个目录。
23. sql 中unsigned的用法
在 MySQL 中,UNSIGNED 用于定义数值类型字段,使其只能存储非负值,适合需要处理非负数的场景。常见用法包括:
- 整数类型:如 INT UNSIGNED,它的取值范围是 0 到 4,294,967,295,而普通的 INT 范围是 -2,147,483,648 到 2,147,483,647。
- 浮点数类型:如 FLOAT UNSIGNED,只能存储正数。
24. git小团队使用
人少,大家都在一个分支开发就行,多拉代码就冲突少,dev,qa合并到master后都要干掉,再做新功能就要从master拉。
人多再一人一个分支。适合的才是最好的。
25. 删除数据
根据id删除数据,删除之前要做校验,判断这个id是不是他的,更严谨。
26. @see
@see 是一种 Javadoc 标签,用于在 API 文档中提供对相关类、方法或字段的引用。它可以帮助用户更好地理解类的功能和如何与其他类交互。
apifox生成文档的时候支持了这个注解,例如枚举,会把里面的内容给解析出来,写到文档上,很方便。
@see XXXEnum#name()
27. jakarta.validation @Valid
@Valid 是 Jakarta Bean Validation API(之前是 Java Bean Validation,JSR 380)中的一个注解,主要用于在 Java 应用程序中执行对象的验证。它通常与其他验证注解(如 @NotNull、@Size、@Email 等)一起使用,帮助确保数据的完整性和有效性。
主要作用
-
验证对象:
-
嵌套验证:
-
与 Spring 集成:
@Validated呢?
-
@Validated 主要用于 Spring 的方法级验证,可以应用于类、方法或参数。它会触发 Spring 的验证机制,确保输入数据满足指定的约束条件。
-
分组验证:与 @Valid 不同,@Validated 支持分组验证(通过 groups 属性)。这意味着你可以定义不同的验证组,用于在不同的上下文中验证同一个对象。例如,你可以在创建和更新操作时对同一对象使用不同的验证规则。
-
使用场景:常用于 Spring MVC 控制器、服务层的方法参数等地方。
28. redis incr
INCR 是 Redis 提供的一个非常常用的命令,用于对指定的键进行整数的自增操作。这个命令能够将存储在 Redis 中的键对应的整数值增加一个指定的数值(默认为 1)。如果键不存在,INCR 会自动将其初始化为 0,并进行自增操作。
29. spring ApplicationEventPublisher
ApplicationEventPublisher 是 Spring 框架中的一个接口,提供了事件发布的机制。它允许你在 Spring 应用程序中发布自定义事件,从而实现松耦合的组件之间的通信。
30. redis 不存在就设置一个值,存在就然后+1,带过期时间
String script = "local count = redis.call('incr', KEYS[1]) " +
"if count == 1 then " +
"redis.call('expire', KEYS[1], ARGV[1]) " +
"end " +
"return count;";
怎么搞比较好?使用原子的lua脚本or两个命令
stringRedisTemplate.opsForValue().setIfAbsent(key, "0", seconds, TimeUnit.SECONDS);
stringRedisTemplate.opsForValue().increment(key, 1);
31. @EventListener和@TransactionalEventListener
特性
@EventListener
@TransactionalEventListener
事务控制
没有事务控制,事件立即处理
可以控制事件的处理时机,通常与事务状态绑定
事件处理时机
在事件发布时立即处理
根据 phase设置,可以选择在事务提交后或回滚后处理
phase 设置
无
可以通过 phase属性设置为
AFTER_COMMIT或 AFTER_ROLLBACK
事务一致性
不能保证与事务提交的一致性
确保事务提交成功后才处理事件,保证事件与事务的一致性
常见用途
用于处理与事务无关的事件,通常是独立的业务操作
用于处理需要事务保证一致性的事件,例如发送邮件、消息队列、外部系统调用等
32. optimize imports on the fly
idea开启这个选项后,代码import会自动导包,也会自动把用不到的包删除。