ARTS是什么?

Algorithm:每周至少做一个LeetCode的算法题 Review:阅读并点评至少一篇英文文章 Tip:学习至少一个技术技巧 Share:分享一篇有观点和思考的技术文章

Algorithm

  1. package leetcode;
  2. import java.util.ArrayList;
  3. import java.util.Comparator;
  4. import java.util.Optional;
  5. /**
  6. * @className: LeetCode08
  7. * @description:
  8. * 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,
  9. * 垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器
  10. * 可以容纳最多的水。
  11. *
  12. * 示例 1:
  13. * 输入:height = [1,1]
  14. * 输出:1
  15. *
  16. * 示例 2:
  17. * 输入:height = [4,3,2,1,4]
  18. * 输出:16
  19. *
  20. * 示例 3:
  21. * 输入:height = [1,2,1]
  22. * 输出:2
  23. * @author: Miluo
  24. * @date: 2021/4/16
  25. **/
  26. public class LeetCode08 {
  27. public int maxArea(int[] height) {
  28. ArrayList<Integer> list = new ArrayList<>();
  29. int x = 0,y = height.length - 1;
  30. int max = 0 ;
  31. while (x < y){
  32. if (height[x] < height[y]) {
  33. max = Math.max(max,height[x] * (y - x));
  34. x++;
  35. } else {
  36. max = Math.max(max,height[y] * (y - x));
  37. y--;
  38. }
  39. }
  40. return max;
  41. }
  42. }

Review

How to Make Your Reviewer Cry Using Java Optional
1.Old Fashioned Exception Handling
下面两个代码作用相同,但第二个更优雅简洁

  1. Optional<User> userOptional = userDao.findByCellNumber(cellNumber);
  2. if (!userOptional.isPresent()) {
  3. throw new UserNotFoundException("...");
  4. } else {
  5. User user = userOptional.get();
  6. //...
  7. }
  1. User user = userDao.findByCellNumber(cellNumber).orElseThrow(UserNotFoundException::new);

2.orElse and orElseGet Misuse
就是上篇Tip中所写的,无论Optional中是否为null,都会执行orElse中的方法,会影响性能
3.Using orElse(null)
这样使用没有意义,Optional是为了避免空指针异常,该方法看起来安全,但迟早会有空指针异常错误。

Tip

Spring Assert Statements:Spring Assert 可以帮助我们验证参数,当不符合时抛出运行时异常

虽然和Junit的Assert有着相同的名字,但是作用完全不一样,Junit等Assert是为了test,而Spring Assert是为了debug

  1. notNull(Object object)/notNull(Object object, String message) ;
  2. //当 object 不为 null 时抛出异常,notNull(Object object, String message)方法允许
  3. //您通过 message 定制异常信息
  4. isTrue(boolean expression) / isTrue(boolean expression, String message);
  5. notEmpty(Collection collection) / notEmpty(Collection collection, String message);
  6. notEmpty(Map map) / notEmpty(Map map, String message) ;
  7. notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message);
  8. hasLength(String text) / hasLength(String text, String message) ;
  9. hasText(String text) / hasText(String text, String message) text;
  10. isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message);
  11. isAssignable(Class superType, Class subType) / isAssignable(Class superType, Class subType, String message)
  12. //subType 必须可以按类型匹配于 superType,否则将抛出异常

Share

面向对象编程的弊端是什么