获得徽章 0
communicate in english is so difficult. we should unify the world to use chinese
but it's impossible, we should learn english harder.
but it's impossible, we should learn english harder. 评论
点赞
Seperate of Concern:
时机:在堆代码的时候,先堆上去,让它工作起来。然后想一想有哪些副作用和风险,能不能更合理地拆分来实现关注点分离!
优势:带来更清晰的代码,更好复用的代码
时机:在堆代码的时候,先堆上去,让它工作起来。然后想一想有哪些副作用和风险,能不能更合理地拆分来实现关注点分离!
优势:带来更清晰的代码,更好复用的代码
评论
点赞
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
展开
1
点赞
安装JDK15后,idea报错
java: 源发行版 17 与 --enable-preview 一起使用时无效 (仅发行版 25 支持预览语言功能)
root cause:
Target bytecode version 17 和代码中使用到Virtual Thread\ScopedValue\StructuredTaskScope\ScopedValueVirtualThreadTaskExecutor 等JDK25相关预览特性不匹配导致的。
java: 源发行版 17 与 --enable-preview 一起使用时无效 (仅发行版 25 支持预览语言功能)
root cause:
Target bytecode version 17 和代码中使用到Virtual Thread\ScopedValue\StructuredTaskScope\ScopedValueVirtualThreadTaskExecutor 等JDK25相关预览特性不匹配导致的。
展开
评论
点赞
在代码审查时发现,小伙伴习惯遇到需求就复制代码,或加一个if-else。
此时,我们应该考虑用设计模式。比如这里,可以用类似于用模板方法模式的思想,有些动作,比如这里的版本号决策延迟到子类中实现。
此时,我们应该考虑用设计模式。比如这里,可以用类似于用模板方法模式的思想,有些动作,比如这里的版本号决策延迟到子类中实现。
评论
点赞
阿里Java规范不建议用枚举,可能大多数人理解不了。包括我。我建议是充分利用枚举类。不要听他们的,自己来实践。
1,枚举字段用枚举类;
2,枚举类比较用==;
3,数据拷贝用MapStruct,不用BeanUtils。
1,枚举字段用枚举类;
2,枚举类比较用==;
3,数据拷贝用MapStruct,不用BeanUtils。
评论
1
# 在windows 开发环境安装nginx
# 安装windows service管理器
choco install nssm
# 安装nginx
choco install nginx
# 安装windows service管理器
choco install nssm
# 安装nginx
choco install nginx
展开
评论
点赞
输入:<#key#>, <#^key#>, <#~key#>
期望输出:key
private String getKey(String str) {
String regex = "<#(?:\^|~|)?(.*?)#>";
return str.replaceAll(regex, "$1");
}
原正则表达式说明:
<#:匹配起始标签
(?:\\^|~|)?:非捕获分组,匹配^或~或空(注意管道符|后有个空选项)
(.*?):捕获组,非贪婪匹配任意字符
#>:匹配结束标签
优化后
// 新增预编译Pattern (类成员变量)
private static final Pattern KEY_EXTRACT_PATTERN = Pattern.compile("<#(?:\\^|~|)?(.*?)#>");
private String getKey(String str) {
Matcher matcher = KEY_EXTRACT_PATTERN.matcher(str);
return matcher.replaceAll("$1");
}
期望输出:key
private String getKey(String str) {
String regex = "<#(?:\^|~|)?(.*?)#>";
return str.replaceAll(regex, "$1");
}
原正则表达式说明:
<#:匹配起始标签
(?:\\^|~|)?:非捕获分组,匹配^或~或空(注意管道符|后有个空选项)
(.*?):捕获组,非贪婪匹配任意字符
#>:匹配结束标签
优化后
// 新增预编译Pattern (类成员变量)
private static final Pattern KEY_EXTRACT_PATTERN = Pattern.compile("<#(?:\\^|~|)?(.*?)#>");
private String getKey(String str) {
Matcher matcher = KEY_EXTRACT_PATTERN.matcher(str);
return matcher.replaceAll("$1");
}
展开
评论
点赞
将Node.js中的表达式${data?.pageConfig?.pageConfigData?.tips ? "xxx": "yyy"}转换为freemaker写法::<#-- 模拟数据 -->
<#assign data = {
"pageConfig": {
"pageConfigData": {
"tips": "这是提示信息"
}
}
}>
<#-- 逐级检查 -->
<#if data?? && data.pageConfig?? && data.pageConfig.pageConfigData?? && data.pageConfig.pageConfigData.tips??>
逐级检查:tips 存在,其值为 ${data.pageConfig.pageConfigData.tips}
<#else>
逐级检查:tips 不存在
</#if>
<#-- 使用 default 函数 -->
<#assign tips = data.pageConfig.pageConfigData.tips!>
<#if tips?has_content>
default 函数检查:tips 存在,其值为 ${tips}
<#else>
default 函数检查:tips 不存在
</#if>
<#-- 使用 attempt 指令 -->
<#attempt>
<#if data.pageConfig.pageConfigData.tips?has_content>
attempt 指令检查:tips 存在,其值为 ${data.pageConfig.pageConfigData.tips}
<#else>
attempt 指令检查:tips 为空
</#if>
<#recover>
attempt 指令检查:tips 不存在
</#attempt>
<#assign data = {
"pageConfig": {
"pageConfigData": {
"tips": "这是提示信息"
}
}
}>
<#-- 逐级检查 -->
<#if data?? && data.pageConfig?? && data.pageConfig.pageConfigData?? && data.pageConfig.pageConfigData.tips??>
逐级检查:tips 存在,其值为 ${data.pageConfig.pageConfigData.tips}
<#else>
逐级检查:tips 不存在
</#if>
<#-- 使用 default 函数 -->
<#assign tips = data.pageConfig.pageConfigData.tips!>
<#if tips?has_content>
default 函数检查:tips 存在,其值为 ${tips}
<#else>
default 函数检查:tips 不存在
</#if>
<#-- 使用 attempt 指令 -->
<#attempt>
<#if data.pageConfig.pageConfigData.tips?has_content>
attempt 指令检查:tips 存在,其值为 ${data.pageConfig.pageConfigData.tips}
<#else>
attempt 指令检查:tips 为空
</#if>
<#recover>
attempt 指令检查:tips 不存在
</#attempt>
展开
评论
点赞
1,在数据库设计时,如果在业务上具体唯一性时,一定要设计唯一索引,做个兜底。
2,throw new RuntimeException(ex)时,会在异常消息前多一串“java.lang.RuntimeException: ”
java.lang.RuntimeException: org.apache.ibatis.exceptions.PersistenceException:
### Error committing transaction. Cause: org.apache.ibatis.executor.BatchExecutorException:
2,throw new RuntimeException(ex)时,会在异常消息前多一串“java.lang.RuntimeException: ”
java.lang.RuntimeException: org.apache.ibatis.exceptions.PersistenceException:
### Error committing transaction. Cause: org.apache.ibatis.executor.BatchExecutorException:
展开
1
点赞
# git 分支管理
1、 release 分支是受保护的只能merge代码不能提交。
2、每个sprint 开始 会基于release分支 创建一个release/sprint(number)
3、每个sprint feature 分支 都从release/sprint(number) 创建。
4、每个sprint 结束前要完成当前 release/sprint(number) 开发,测试,集成。最后将release/sprint(number) merge 到release 分支上
思考:如何更好地划分一个sprint下面的多个feature?
这里的需求拆分要像代码一样,做到“高内聚,低耦合”。
1、 release 分支是受保护的只能merge代码不能提交。
2、每个sprint 开始 会基于release分支 创建一个release/sprint(number)
3、每个sprint feature 分支 都从release/sprint(number) 创建。
4、每个sprint 结束前要完成当前 release/sprint(number) 开发,测试,集成。最后将release/sprint(number) merge 到release 分支上
思考:如何更好地划分一个sprint下面的多个feature?
这里的需求拆分要像代码一样,做到“高内聚,低耦合”。
展开
评论
点赞
在idea community中,maven插件编译输出中文时乱码。各种办法试了一遍。竟然发现是windows 11 中文版默认的Active code page是936,即GBK。这时javac在使用-Dfile.encoding时,输出英文字符不会乱码。但是在输出中文字符时,会乱码。必须把windows 11系统的Active code page设置为65001。
评论
点赞