ARTS是什么? Algorithm:每周至少做一个LeetCode的算法题 Review:阅读并点评至少一篇英文技术文章 Tip:学习至少一个技术技巧,总结和归纳日常工作中遇到的知识点 Share:分享一篇有观点和思考的技术文章

Algorithm

完成简易正则表达式的匹配。

  1. /**
  2. * 正则表达式
  3. * @author ouyb01
  4. * @date 2021/12/3 9:51
  5. */
  6. public class RegularExpression {
  7. private boolean matched = false;
  8. /**
  9. * 正则表达式
  10. */
  11. private char[] pattern;
  12. /**
  13. * 正则表达式长度
  14. */
  15. private int patternLength;
  16. public RegularExpression(char[] pattern, int patternLength) {
  17. this.pattern = pattern;
  18. this.patternLength = patternLength;
  19. }
  20. public boolean match(char[] text, int textLength) {
  21. matched = false;
  22. rematch(0 ,0, text, textLength);
  23. return matched;
  24. }
  25. /**
  26. *
  27. * @param textCurrentIndex 待匹配串当前匹配的位置
  28. * @param patterCurrentIndex 表达式当前匹配的位置
  29. * @param text 待匹配串
  30. * @param textLength 待匹配串长度
  31. */
  32. private void rematch(int textCurrentIndex, int patterCurrentIndex, char[] text, int textLength) {
  33. // 匹配成功, 终止递归
  34. if (matched) {
  35. return;
  36. }
  37. // 正则表达式匹配完了且文本串也匹配完了
  38. if (patterCurrentIndex == patternLength) {
  39. // 这里不能合并到上一个if, 不同情况要分开讨论
  40. if (textCurrentIndex == textLength){
  41. matched = true;
  42. }
  43. return;
  44. }
  45. // *号匹配任意字符
  46. if (pattern[patterCurrentIndex] == '*') {
  47. for (int i = 0; i <= textLength - textCurrentIndex; i++) {
  48. // 从当前位置+1开始匹配, 尝试各种长度的匹配结果
  49. rematch(textCurrentIndex + i, patterCurrentIndex + 1, text, textLength);
  50. }
  51. // ?匹配0个或1个字符
  52. } else if (pattern[patterCurrentIndex] == '?') {
  53. // 匹配串不动, 表达式串前移
  54. rematch(textCurrentIndex, patterCurrentIndex + 1, text, textLength);
  55. // 匹配串和表达式串都前移
  56. rematch(textCurrentIndex + 1, patterCurrentIndex + 1, text, textLength);
  57. // 纯字符串对比必须匹配
  58. } else if (textCurrentIndex < textLength && pattern[patterCurrentIndex] == text[textCurrentIndex]) {
  59. rematch(textCurrentIndex + 1, patterCurrentIndex + 1, text, textLength);
  60. }
  61. }

Review

Ways to create objects in Java with Builder and Factory
每次都通过new object然后set值的方式会显得代码又臭又长,而且这部分代码会影响到代码的可读性,分散读者的注意力。使用builder和工厂的方式使得new object更加简洁。

Tip

架构复杂度的来源:

  1. 高性能
  2. 高可用
  3. 可扩展性
  4. 低成本、安全和规模

以前只知道双高,现在看来其实架构师的职责就是根据目前的状况选择最合适的方案,架构师做的不是设计而是取舍。

Share

我做系统架构的一些原则
最近在看系统架构相关的文章,结合耗子叔的这些原则看,收获很大,中间的内容很多都是共通的,区别就是耗子叔的文章结合实际情况更多,更容易理解。[

](https://www.yuque.com/yigenranshaodexiongmao/fgx0oh/vz15x7)

Finish

预计完成时间:2022.01.10 ~ 2022.01.16
实际完成时间:2022.01.17