写点什么

ARTS 打卡第二周

作者:犇犇
  • 2023-08-27
    北京
  • 本文字数:2297 字

    阅读完需:约 8 分钟

1、Algorithm

剑指offer:按之字形顺序打印二叉树

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

  • 设两个栈,s2 存放奇数层,s1 存放偶数层

  • 遍历 s2 节点的同时按照左子树、右子树的顺序加入 s1,

  • 遍历 s1 节点的同时按照右子树、左子树的顺序加入 s2

import java.util.ArrayList;

import java.util.Stack;

/*

public class TreeNode {

    int val = 0;

    TreeNode left = null;

    TreeNode right = null;

    public TreeNode(int val) {

        this.val = val;

    }

}

*/

public class Solution {

    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {

        ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();

        Stack<TreeNode> s1 = new Stack<TreeNode>();

        Stack<TreeNode> s2 = new Stack<TreeNode>();

        int flag = 1;

        if(pRoot == null)

            return res;

        s2.push(pRoot);

        ArrayList<Integer> temp = new ArrayList<Integer>();

        while(!s1.isEmpty() || !s2.isEmpty()){

            if(flag % 2 != 0){

                while(!s2.isEmpty()){

                    TreeNode node = s2.pop();

                    temp.add(node.val);

                    if(node.left != null){

                        s1.push(node.left);

                    }

                    if(node.right != null){

                        s1.push(node.right);

                    }

                }

            }

            if(flag % 2 == 0){

                while(!s1.isEmpty()){

                    TreeNode node = s1.pop();

                    temp.add(node.val);

                    if(node.right != null){

                        s2.push(node.right);

                    }

                    if(node.left != null){

                        s2.push(node.left);

                    }

                }

            }

            res.add(new ArrayList<Integer>(temp));

            temp.clear();

            flag ++;

        }

        return res;

    }


}


2、Review

How Gerrit Works

http://gerrit.qisi.ltd/Documentation/intro-how-gerrit-works.html

参考:https://blog.csdn.net/qq_36413391/article/details/110139450


代码审查可以在代码上库前避免很多问题,或是一些低级问题或是设计上的问题,我们熟知的开源项目 git,linux 都在坚持代码审查,源代码不能私自修改提交项目代码,而是需要将 patch 邮件发送给对应的负责人,负责人审查通过后才会合并,而 Gerrit 是一款基于 web 界面用于代码审查的工具。一款好的工具首先是能够提供完整功能,更重要是围绕这个功能提供一套方便快捷,效率高的使用方式。Gerrit 就是这样一款好的工具,它提供了代码审查的功能,同时又方便于开发人员,审查人员和项目管理者的合作。

Gerrit 部署在代码服务器上,开发者在 push 修改时,得是先将代码 push 到 gerrit,由审批者审批过后才能真正入库,若是审批不通过则在该修改上评论,便于开发者纠正,修订后重新 push 直至审批通过。

一个不包 Gerrit 的代码服务器,开发者和持续集成都是直接从代码服务器拉取或推送代码,意味着开发者可以直接修改服务器上的代码,不利于实现代码审查。

一个包含 Gerrit 的代码服务器,开发者和持续集成还都是直接从代码服务器拉取代码,开发者做的修改都会先提交到待定区(pending changes),供审批人审批评论,当审批者审批通过后,方可提交至中央代码服务器。


3、Tips

Github 有时会进入 vim 编辑状态,比如 git commit -amend 命令。不知道还有几个开发不熟悉 vim 操作:

Mac 中 vim 的 进入编辑状态、退出编辑状态、强制保存并退出

(注意在英文输入法下进行)

举例说明:终端输入: vim ~/.bash_profile

  1. 键盘输入【i】进入编辑状态,开始并完成内容修改

  2. 点击【esc】退出编辑状态,此时无法对内容进行修改

  3. 键盘输入【:wq!】强制保存并退出 vim,回到终端的界面

终端输入:source ~/.bash_profile 让这个配置文件在修改后立即生效。


4、Share

程序员如何在工作之余进行学习?六大可落地执行方法

https://baijiahao.baidu.com/s?id=1724451231361568390&wfr=spider&for=pc

提到了:

对于程序员来说,在日常工作上学习是最好的学习方式。

代码评审可以看到高手写的更好的代码,可以帮新手提高的同时也增加自己阅历。有两个关键,第一就是代码编写标准,第二就是代码质量。还能培养我们的判断力,判断力对于技术岗位管理层是必要的能力。

设计文档,有了文档就可以很方便的写出接口文档和测试用例,可以快速梳理出来关键流程。

有效学习的 6 个步骤

1、自己设定目标,一定要具体可执行的。

2、根据目标分解任务,最好拉出时间进度。

3、学会利用工具,一定要成体系,随用随取;

4、记录每一项的学习进度,了解自己的时间分配。

5、找到可利用的资源,善用资源。

6、定期总结。

关于学什么,对于前端技能模型:由上到下:领域知识,前端知识,编程能力|架构能力|工程能力。

最底层的往往是基础知识,所以根据上述目标参考 6 种学习方法制定自己的学习计划。


发布于: 刚刚阅读数: 3
用户头像

犇犇

关注

还未添加个人签名 2017-11-23 加入

还未添加个人简介

评论

发布
暂无评论
ARTS打卡第二周_ARTS 打卡计划_犇犇_InfoQ写作社区