ARTS打卡第二周
Algorithm:
剑指 Offer 34. 二叉树中和为某一值的路径 这道题的解法和我之前遇到的回溯法题目有些区别,不能盲目套用模板。这里的数据结构是树,不用for循环遍历当前层次的其他元素,只需要递归下一层的节点。不变的是每一次回溯之后都要把当前节点的值从sum和ans中删掉。并且结束递归的条件不能放在下一层,在当前层判断当前的节点是否为叶子节点,如果为叶子节点就结束递归。 以下是我的解答。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { private static List<List<Integer>> list; public List<List<Integer>> pathSum(TreeNode root, int target) { List<Integer> ans=new ArrayList<>(); list=new ArrayList<>(); if(root==null){ return list; } int sum=0; backtrack(root, ans, sum, target); return list; } private static void backtrack(TreeNode root, List<Integer> ans, int sum, int target){ if(root==null){ return; } sum+=root.val; ans.add(root.val); if(root.left==null && root.right==null){ if(sum==target){ list.add(new ArrayList<>(ans)); } } else { backtrack(root.left, ans, sum, target); backtrack(root.right, ans, sum, target); } //System.out.println(sum); sum-=root.val; ans.remove(ans.size()-1); } }
Review:
文章有点长,我挑重点说:要使用netflix出品的高吞吐量、低延迟的优先队列,需要满足以下情况:
- 任何时候,一个一个消息只能被分配给一个工作者。摄象这样的情境:我们在资源密集型的工作中可以扇出(fan out)成千上万的活动,当同步复制功能有延迟,我们给B工作者展示一个可以出队的消息,但是这个消息在另一个不同的节点上被A工作者出队了,这样的情况导致我们浪费了一次计算循环。我们需要在队列上保证 linearizable consistency。
- 允许非并行化的工作。
- 允许使用过滤器的出队和入队的深度查询。
- 允许在接收时消息自动创建队列。
- 在 1 秒内使一个消息为可出队状态。
Tip:
我在工作中主要是写接口API,为了测试API,经常调用API接口,前端团队也会调用我写的接口,但是我们目前开发的项目没有专人负责测试,所以测试数据很不规范,导致数据库有很多脏数据,我认为可以在测试之前规范测试数据的格式和删除数据的顺序,然后统一生成测试数据,用这些数据去测试接口。
Share:
平台很重要,程序员就应该去大厂见识一下大流量、高并发、以及精巧的设计,并且大厂的开发流程规范,每一个人的职责都清晰,而在小公司,可能就是身兼数职,俗称全干工程师,这种状况不利于工程师的学习和成长,在程序员升压的早期,应该深入一个领域,不能蜻蜓点水,今天搞一下前端,明天去写一下后端。比如要成为Java后端开发工程师,就不应该在前端页面上花时间,而是去把Java虚拟机和相关的框架吃透。我有一段时间在一个小公司做Java开发实习生,连前端页面都要写,我深感不妙,全栈虽然听起来高级,但是学的杂,没有明确的方向。