Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[代码优化] assert 断言可能的问题, 以及 argList 调用方法优化, RedisConfig 的注释与代码不一致问题 #705

Merged
merged 6 commits into from
Dec 4, 2021

Conversation

chong-chonga
Copy link
Contributor

@chong-chonga chong-chonga commented Dec 2, 2021

LogServiceImpl.java

  1. 断言不适合用于参数验证,因为断言可以在JVM中的运行时被禁用,这意味着错误的操作设置将完全消除预期的检查。此外,失败的断言会抛出断言错误,而不是抛出某种类型的异常。因此 Assert 如果抛出异常, 则难以排查。使用 if 代替 断言, 并抛出 IllegalArgumentException 更可控
  2. collection 接口实现类调用 isEmpty() 方法比 size() == 0 更可读

RedisConfig.java

  1. 注释写的是 默认两小时, 但是代码写的是 6 小时, 所以应以哪一个为标准 ?
  2. 当没有出现碰撞时, 固定的 3个 kv 对, size 达到 3 个, 如果方法参数不为空, 则会触发 HashMap 扩容, 影响性能3 + params.length > (2^2 * 0.75 = 3)
    3 仍然引用的是 apache 的方法, 为了去除歧义, 应使用全类名指定
    如果方法返回值包含 null, 则加上 @nullable 注解, 代码更易读

LimitAspect.java
传给 replaceAll 的参数不是正则表达式, replaceAll 和 replace 效果是一样的, 且 replaceAll 由于会调用 ava.util.regex.Pattern.compile()方法, 导致性能消耗更大, 故修改为 replace() 更好

断言不适合用于参数验证,因为断言可以在JVM中的运行时被禁用,这意味着错误的操作设置将完全消除预期的检查。此外,失败的断言会抛出断言错误,而不是抛出某种类型的异常。抛出错误完全超出了正常程序中预期的捕获/抛出行为的正常范围。使用 if 代替 断言, 并抛出 IllegalArgumentException 更可控
使用size()测试空性是可行的,但使用isEmpty()可以使代码更可读,性能也更高。任何isEmpty()方法实现的时间复杂度都应该是O(1),而size()的一些实现可以是O(n)。
1. 注释写的是 默认两小时, 但是代码写的是 6 小时, 所以应指定哪一个 ? 
2. 当没有出现碰撞时, 固定的 3个 kv 对, size 达到 3 个, 如果方法参数不为空, 则会触发 HashMap 扩容, 影响性能
3 + params.length > (2^2 * 0.75 = 3)
2. 仍然引用的是 apache 的方法, 为了去除歧义, 应使用全类名指定
如果方法返回值包含 null, 则加上 @nullable 注解, 代码更易读
改用 org.apache.commons.lang3.StringUtils 全类名调用 isBlank() 方法后, 原 import me.zhengjie.utils.StringUtils; 可以删除
@chong-chonga chong-chonga changed the title [代码优化] assert 断言可能的问题, 以及 argList 调用方法优化 [代码优化] assert 断言可能的问题, 以及 argList 调用方法优化, RedisConfig 的注释与代码不一致问题 Dec 3, 2021
传给 replaceAll 的参数不是正则表达式, replaceAll 和 replace 效果是一样的, 且 replaceAll 由于会调用 ava.util.regex.Pattern.compile()方法, 导致性能消耗更大
@elunez elunez merged commit e6077c6 into elunez:master Dec 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants