Bootstrap

ARTS打卡Week 04

每周完成一个 ARTS:

Algorithm: 每周至少做一个 LeetCode 的算法题

Review: 阅读并点评至少一篇英文技术文章

Tips: 学习至少一个技术技巧

Share: 分享一篇有观点和思考的技术文章

Algorithm

class Solution {
    char[][] board;
    int m;
    int n;
    String word;

    public boolean exist(char[][] board, String word) {
        if (board == null) {
            return false;
        }

        this.board = board;
        this.m = board.length;
        this.n = board[0].length;
        this.word = word;

        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (search(i, j,0)) {
                    return true;
                }
            }
        }

        return false;
    }

    private boolean search(int i, int j, int cur) {
        // 是否超出边界
        // 当前位置字符是否与目标字符匹配
        if (i < 0 || i >= m || j < 0 || j >= n || word.charAt(cur) != board[i][j]) {
            return false;
        }

        // 已经匹配
        if (cur == word.length() - 1) {
            return true;
        }

        // 标记当前位置不可走
        char c = board[i][j];
        board[i][j] = 0;
        // 向当前位置相邻四个方向搜索,找到一个即可满足要求
        boolean found = search(i - 1, j, cur + 1)
                || search(i + 1, j, cur + 1)
                || search(i, j - 1, cur + 1)
                || search(i, j + 1, cur + 1);
        // 恢复当前位置可走
        board[i][j] = c;
        return found;
    }
}

实现注意点:

Review

Apple MVC它的问题是会导致controller太大;由于view状态难以mock,导致controller的tests很难写

iOS中view和view model的binding实现方式:

文章内容回顾:

  • Made a binding theme using the closure. --使用closure实现了一套binding

  • Removed all controller logic from the View. --从view剥离逻辑

  • Created a testable ViewModel. --实现可测的ViewModel

对于中等规模项目,MVVM算是个不错的选择。

最后作者比较担心view model干得事情太多。

ps:实际项目中我也在使用MVVM,但感觉不少地方有些蹩脚。在Android中,MVVM + LiveData + Coroutine的组合用起来还是很happy的。

Tips

个人笔记:

Share

熟悉与效率

一个月前,我加入一个iOS开发项目。这一个月可以描述为“一周多速成iOS开发,写了两周多业务逻辑”。

同样的功能放在在Android项目中,我可能只需要三分之一的时间来完成。

以前我总认为自己学习能力还可以,可以很快适应新平台、新项目,杂七杂八学了不少,俗话说“技多不压身”嘛。但经过近两年频繁换项目之后,我认识到对一个平台、一个项目的“熟悉”度,是很重要的(对公司),也是很困难的(耗费个人大量精力)。做技术,终归要深入下去,对所从事领域足够熟悉(参考浩哥分享的google技能评级卡片),才能做到高效做事,突破天花板。

目标与结果

最近小孩小学入学择校,因为房本年限和工居年限不足,没有被家门口的一所名校分校择校录取到。小区预估择校录取了16个,除了京籍,房本、工居都在10年往上。为此,我和爱人还是不免有些失落;爱人去学校门口看完录取单,发微信告知于我时感慨:“有一种名落孙山的感觉”。

这个事情给我们的教训是,越是竞争激励的事情,越要尽早准备。

回想北漂这十年,可能从有了孩子开始,才考虑生活方面的规划和安排。生活方面的很多事情,常常处于被动、被迫,缺乏明确的家庭目标和计划。互联网人,还是要花一些心思来积极面对生活,花时间去理解社会行为背后的原理,制定明确的家庭目标,推进达到目标结果。