ARTS打卡第二周

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:

Timestone: Netflix’s High-Throughput, Low-Latency Priority Queueing System with Built-in Support for Non-Parallelizable Workloads

文章有点长,我挑重点说:要使用netflix出品的高吞吐量、低延迟的优先队列,需要满足以下情况:

  1. 任何时候,一个一个消息只能被分配给一个工作者。摄象这样的情境:我们在资源密集型的工作中可以扇出(fan out)成千上万的活动,当同步复制功能有延迟,我们给B工作者展示一个可以出队的消息,但是这个消息在另一个不同的节点上被A工作者出队了,这样的情况导致我们浪费了一次计算循环。我们需要在队列上保证 linearizable consistency。
  2. 允许非并行化的工作。
  3. 允许使用过滤器的出队和入队的深度查询。
  4. 允许在接收时消息自动创建队列。
  5. 在 1 秒内使一个消息为可出队状态。

Tip:

我在工作中主要是写接口API,为了测试API,经常调用API接口,前端团队也会调用我写的接口,但是我们目前开发的项目没有专人负责测试,所以测试数据很不规范,导致数据库有很多脏数据,我认为可以在测试之前规范测试数据的格式和删除数据的顺序,然后统一生成测试数据,用这些数据去测试接口。

Share:

平台很重要,程序员就应该去大厂见识一下大流量、高并发、以及精巧的设计,并且大厂的开发流程规范,每一个人的职责都清晰,而在小公司,可能就是身兼数职,俗称全干工程师,这种状况不利于工程师的学习和成长,在程序员升压的早期,应该深入一个领域,不能蜻蜓点水,今天搞一下前端,明天去写一下后端。比如要成为Java后端开发工程师,就不应该在前端页面上花时间,而是去把Java虚拟机和相关的框架吃透。我有一段时间在一个小公司做Java开发实习生,连前端页面都要写,我深感不妙,全栈虽然听起来高级,但是学的杂,没有明确的方向。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注