工作总结 七月 07, 2020

A song of TDD and BUG - 主歌

文章字数 45k 阅读约需 41 分钟

TDD 与 BUG 的爱恨情仇(卷二),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 FBI Warning我知道你在想啥,但是你想多了,我只是想给你一个强烈但不失友善的警告(Friendly But Intense Warning)而已。在了解 TDD 之前你需要知道,TDD 只是一种开发模式,不是圣经也不是行为准则,我们需要辩证的去看待 TDD,可以参照... 查看全文

工作总结 七月 07, 2020

A song of TDD and BUG - 主歌

文章字数 45k 阅读约需 41 分钟

TDD 与 BUG 的爱恨情仇(卷二),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 FBI Warning我知道你在想啥,但是你想多了,我只是想给你一个强烈但不失友善的警告(Friendly But Intense Warning)而已。在了解 TDD 之前你需要知道,TDD 只是一种开发模式,不是圣经也不是行为准则,我们需要辩证的去看待 TDD,可以参照 TDD 并且结合自己的实际情况选择最适合自己的开发模式,毕竟适合自己的才是最好的。这你可能会问了,刚你还说 TDD 又是最耀眼的新星,又是救世主的,现在咋又说人家坏话。我想说的是,你毕竟还是 Too Young,要我不进行一波商业吹嘘,你可能也不愿意往下看啊,流量称王的时代,我不得忽悠你多看几眼啊。 什么代码需要写单测并不是所有的代码都需要你写单测来保证的,总结起来就是“三个不一个要”: 不给自动生成的代码写 Unit Test(比如生成的 getter setter),我们要相信 Xcode(或者其他编辑器),出了问题是天灾,需要我们单独分情况处理,然后给我们自己处理的代码写单测。 不给... 查看全文

ARTS 七月 05, 2020

ARTS 打卡 04

文章字数 2.4k 阅读约需 2 分钟

本文主要是公司内部 ARTS 活动打卡记录 Algorithm前缀树问题(LeetCode 208 中等) 这个问题也相当于一个比较基础的问题了,它是一些其他题目(比如 Word ladder II 之类的)题目的前置题目,这个题目如果你是想刷算法的话属于必背题目,核心点是在每次插入一个单词的时候更新树的结构,这样的话在下次查找的时候就可以判断是否有这个单词或者是否有以某个单词开头的单词。 一个比较重要的点就是前缀树和哈希表之间的对比,他们俩在很多时候可以互相替代,前缀树花费的空间更少一些但是单次查询花费的时间更多一点。 ReviewTips前一阵做单元测试的时候发现一个问题,就是如果想把 UIImage 作为 ViewModel 的输出的时候会有一个问题就是不知道怎么样单测这个 UIImage 的输出,最后无奈只能让 ViewModel 输出 UIImage 的名字,然后在 ViewController 中来进行 UIImage 的初始化。但是昨天看关于单测的东西的时候发现一个很好用的技巧,下次在做单测的时候可以尝试使用了: 12345678910 func testIma... 查看全文

ARTS 七月 05, 2020

ARTS 打卡 03

文章字数 543 阅读约需 1 分钟

Algorithm三角形最小路径之和(LeetCode 120,中等) 这道题属于动态规划的入门题了,所以感觉给中等完全是给动态规划面子。有两种方法可以做,一种是自底向上,一种是自顶向下。分别对应的是正着想和反向推。 ReviewTipsShareA song of TDD and BUG - 副歌 查看全文

ARTS 七月 05, 2020

ARTS 打卡 02

文章字数 575 阅读约需 1 分钟

本文主要是公司内部 ARTS 活动打卡记录 Algorithm有效的括号(Leetcode 20,简单) 偷个懒做一道简单的题。这道题是写在脸上的用 stack 来做,而且属于实现比较简单的那种(写计算器能把你写吐血)。 ReviewTipsShareA song of TDD and BUG - 主歌 查看全文

工作总结 六月 14, 2020

A song of TDD and BUG - 前奏曲

文章字数 4.6k 阅读约需 4 分钟

TDD 与 BUG 的爱恨情仇(卷一) 前言这是最好的时代,TDD 的出现终结了 BUG 横行的蛮荒,从此 Coding 世界进入了秩序与光明;这也是最坏的时代,历史的包袱,无尽的重构,博弈与妥协充斥在每个角落。从电脑和编程出现之初 Bug 就如影随形,那只飞到 Mark II 上的 Bug 穿越了大半个世纪,仍是程序员们在梦中惊醒,在镜前流泪的主要原因。那 Bug 为什么会出现?有没可能消除 Bug? 这是个哲学问题。 Bug的相对性原理有人说 Bug 是一个 Human Error,是可以通过一定的约定,准则和谨慎去避免的。的确, Bug 的多少很大程度上是程序员的谨慎程度来决定的。但是,我先把我的结论放在这, Bug 是无法避免的,也就是说他是一个在排除了人为错误之外的系统性的存在。 这听起来很像给自己开脱(其实就是给自己开脱),但是我是有理(狡)论(辨)支持的。比如之前有人提出来过抽象漏洞定律来解释这个问题,但是这个太笼统,听起来也太抽象,我想用自己的理解来解释一下。首先我们需要定义 Bug 是什么,维基百科中 Bug 的定义是程序错误。我们在这给它一个更明确,更有意... 查看全文

ARTS 六月 14, 2020

ARTS 打卡 01

文章字数 2.8k 阅读约需 3 分钟

本文主要是公司内部 ARTS 活动打卡记录 AlgorithmN 皇后问题(LeetCode 51 困难) 这个题目也算是 DFS 算法中经典的经典,所以这道题目的结构也是遵循递归的几大步骤(recursion terminator,current level logic,drill down,reverse state if needed),只不过这道题目需要多考虑的是怎么剪枝,也就是如果提前发现本次递归是一个无效的递归就提前终止。我的做法是用了三个 set 来记录当前的位置是否有效,我看讨论区还有一种用位运算来处理的,看起来很 fancy,但是没有仔细去研究,有时间需要好好看一下。 DFS 一直感觉有一点烧脑,尤其是如果做人肉递归的情况下,以后要养成避免人肉递归的习惯。 Review最近一直在看 Raywenderlich 的 RxSwift 的书,已经看到了第 24 章(总共 25 章 fighting!),感觉收获很大,好好反思了之前对于 RxSwift 的用法,觉得有很多不合理的地方,而且也有了一些在工作上该如何使用的思考,顺便思考了之前项目中的架构的不足,由于最近... 查看全文

学习笔记 四月 26, 2020

都是 Apple 惹的祸 - Coordinator Pattern 的前世今生

文章字数 1.3k 阅读约需 1 分钟

本文主要记录在学习 Coordinator Pattern 是的心得。 前言最近工作中需要对一个升级 B 端的项目,本来只是更新 UI,对 H5 进行支持的简单工作,但是我灵机一动(用大脑一抽可能更好一点),决定对项目进行一次重构,目标 MVVM-C。对于 MVVM 可能大家了解的比较多,但是后边那个小 C 是什么可能有些小朋友并不是特别清楚。这种时候,从小就开始训练的阅读理解能力就派上用场了,看一眼文章题目你就知道这个 C 代表什么了。什么? CyberHex?虽然我很开心,但是我替你们的语文老师伤心三秒,1,2,3,好了。其他人应该都猜对了,对!就是 Coordinator。那到底什么 Coordinator 的设计模式?它是怎么产生的?它解决了什么痛点?接下来我就带大家走进 Coordinator 的内心,从而对它有一个更深的了解。 背景从文章题目“都是 Apple 惹的祸”你可能已经看到了一些问题的端倪,没错,Coordinator Pattern 的出现就是为了弥补苹果在设计 UIKit 的时候的一些疏忽(不知道是有意还是无意的)。多年前一个风雨交加,电闪雷鸣的夜晚,... 查看全文

学习笔记 十一月 27, 2018

iOS 中的并发性问题

文章字数 11k 阅读约需 10 分钟

本文主要记录在学习 iOS 的过程中关于并发性的问题。 前言之前在开发过程中曾经遇到过挺多次并发的问题,比如在自己写 networking 代码的时候会遇到一些(对!我是自己手写 networking code, 老板禁止使用 Alamofire, 所以我就自己写了一个很小的库,以后有机会跟大家分享),但都是比较皮毛的东西,感觉自己并没有深入理解并发行的问题,现在下定决心好好研究一下并发性,毕竟面试会考挺多而且以后也会碰到很多。 背景现在很多事情都是多线的,电脑是多核的,手机是双卡双待的,你看我,我可以一边写博客,一边玩LOL(呃,不知道为什么就抄袭了爱情公寓的台词,不过好像有点讽刺)。其实我是想说,由于现在手机是多核的,意味着同一时间手机可以同时处理多个问题,于是很多现代操作系统比如 iOS 和 OS10 就利用利用了这个特点而使用多线程。在这里我就想提出一个千古难题,进程和线程的区别是啥,说实话,到今天之前我对这两个概念还是比较模糊。进程的定义是正在执行程序的一个实体,线程定义是程序的执行路径。简而言之,在 iOS 系统中,进程可以理解为就是一个 App, 而线程是程序执... 查看全文

学习笔记 十一月 25, 2018

Objective-C 中 Nullability 的使用

文章字数 7.7k 阅读约需 7 分钟

本文主要记录在学习 Objective-C 的过程中关于 Nullability 的问题。 背景我们都知道 Swift 和 Objective-C 可以同时存在于同一个 project 中,但想让他们俩兄弟同时幸福快乐和谐的生活在同一个项目中并不是一件容易的事。 Swift 小老弟最大的优势就是 Type Safety, 而 Objective-C 老大哥最大的“问题”就是可以有满屏的 nil。 在 Swift 中如果你想在不初始化一个变量的情况使用这个变量,你必须要提前告知 Xcode 这个变量是 optional 的, 但是 Objective-C 就没有这样的要求。 那么怎么解决这个问题呢,苹果最后引入了 Nullability 来给 Objective-C 加入一些安全保障。 举例在 Objective-C 中有以下代码: 123456789// Objective-C@interface User: NSObject@property (copy, nonatomic) NSString *username;@property (copy, nonatomic) N... 查看全文

感悟 十一月 22, 2018

写在前面的话

文章字数 1k 阅读约需 1 分钟

梦里不知身是客,直把他乡作故乡。 这可能是来美国这四年来我第一次静下心来想好好写点东西。现在的我,蜗居在一间租来的短租房里,在美国这个大农村里卖掉了可能是生活中最重要的必备品 - 车,考虑着自己怎么会沦落到这个地步。生活与生存、梦想与现实,对于我来说不是选择题,而更像是灰掉了一个选项的无奈。可能是时候回国寻找下一个人生目标了,就算有再多的不甘心。 时空锥曾几何时,我的脑子里想着的都是相对论,康德哲学,甚至怎么样改变世界。不知从何时开始,我关心的事情完全变成了怎么样活下去。不管怎么说,在于生活的这场战争中,我是败得一派涂地。 我对相对论中的时空锥和因果律深信不疑,不知到在之前的哪个时空节点发生的事件或者是别人的时空锥的介入,让我的人生有了如此大的变化。但是这也许是命,也许是运,谁知道呢? 展望毕竟有很长时间已经没有写东西了,本来有好多想说的话,但手放在键盘的那一刻就全忘了,能写这么些东西可能已经是绞尽脑汁了。现在说说自己接下来几个月的计划吧。 作为一个iOS Developer,我现在只会swift语言,而对于ojective-c只是知道一些皮毛,所以接下来的一段时间我要好好... 查看全文
0%