A(算法) :

题目: 98 Valid BST
解法思路: 中序遍历, 保存前继节点数据用作比较

  1. # Definition for a binary tree node.
  2. class TreeNode(object):
  3. def __init__(self, x):
  4. self.val = x
  5. self.left = None
  6. self.right = None
  7. class Solution(object):
  8. def isValidBST(self, root):
  9. """
  10. :type root: TreeNode
  11. :rtype: bool
  12. """
  13. self.pre_val = None
  14. return self.helper(root)
  15. def helper(self, root):
  16. if not root:
  17. return True
  18. if not self.helper(root.left):
  19. return False
  20. if self.pre_val is not None\
  21. and self.pre_val >= root.val:
  22. return False
  23. self.pre_val = root.val
  24. return self.helper(root.right)

R(Review):

文章: CQRS 链接
总结: CQRS 的概念我很早就听过, 前几年的工作经验中, 我主要用于Mysql的读写分离场景, 就是一主多从的部署结构.这样做可以非常有效的扩展数据库的读取性能.
看完这篇文章后,我对读写分离的理解有加深了, 主要有几点:
. 读写分离就是将写操作交给Command 去处理, 读操作有Query 去处理
. 分离后可以根据不同的读取需求, 去扩展不同的Material View. 这些Material View 都是物理隔离的, 而且通常是反范式的结构, 也就是可以通过数据冗余来提高读取性能.
. 要保持Material View 之间的数据同步, 可以在每次写操作里增加event, 这样 Materail view 就可以通过eventSourcing 的方式保持数据同步, 但一定要注意数据一致性带来的问题, 尤其是金融系统, 自己去实现二段提交是一件非常坑爹的事情. 我建议只有流水式的insert 系统才比较适合用event sourcing.

T(Tips):

很多Java 开发者开发者都非常喜欢用intellij, 其中一个原因是里面有很多丰富的插件, 分享一个我最喜欢的插件: stringmanipulate , 这个工具几乎能涵盖我所有对字符串的便利操作, 提升效率
image.png

S(分享):

自己写的动态规划分享: 链接