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年往上。为此,我和爱人还是不免有些失落;爱人去学校门口看完录取单,发微信告知于我时感慨:“有一种名落孙山的感觉”。
这个事情给我们的教训是,越是竞争激励的事情,越要尽早准备。
回想北漂这十年,可能从有了孩子开始,才考虑生活方面的规划和安排。生活方面的很多事情,常常处于被动、被迫,缺乏明确的家庭目标和计划。互联网人,还是要花一些心思来积极面对生活,花时间去理解社会行为背后的原理,制定明确的家庭目标,推进达到目标结果。