翻译 三月 25, 2026

优化图片

文章字数 24k 阅读约需 22 分钟

作者:Jordan Morgan,原文链接,原文日期:2018-12-11译者:AlmostKhan; 人们常说你手里的相机就是最好的那个。如果俗语能说明一些问题的话,那么毫无疑问,iPhone 完全就是这个星球上最重要的相机。而且整个行业也证明了这件事。 出去度假了?不给你的 Instagram 上传几张照片顺便在手机里存几张备用的都不太可能。 又出了个大新闻?翻翻微博查看有关这个事件... 查看全文

工作总结 六月 29, 2025

你不知道的 View Controller Containment

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

本文主要记录在工作过程中如何利用 View Controller Containment 来重构 UI 前言不知道你有没有经历过这样的情况,一个页面中有很多的 View,但各个 View 之间有明显的层级关系,这个时候一种可行的做法是把一系列相关联的 View 归到一个父亲 View 中。 但这种做法会有有一些其他的问题, 比如会让 View Controller 或者 View Model 比较大, 甚至有时候不得不把逻辑写在 View 里边。那么有没有一个既可以解决问题, 又不会引入更多棘手的问题的方法吗? 问得好! 如果你心里真的这个问题,那说明你一定是在质疑我写这篇分享的初衷。 不过别担心,看到最后我保证你一定会有所收获的。 背景铺垫了这么多,你可能会想: View Controller Containment 到底是什么个玩意,从来没听说过,确定会有人用这个吗? 但是接下来我会打消你的疑虑,因为苹果自己就在设计 UINavigationController 和 UITabBarController 利用了这种模式。在UINavigationController 和 ... 查看全文

ARTS 十二月 01, 2020

ARTS 打卡 09

文章字数 5.6k 阅读约需 5 分钟

Algorithm排序链表圈(Leetcode 148,中等) 123456789101112131415161718192021222324252627282930313233343536class Solution: def sortList(self, head: ListNode) -> ListNode: if not head or not head.next: return head mid = self.find_mid(head) right = self.sortList(mid.next) mid.next = None left = self.sortList(head) return self.merge(left, right) def merge(self, left, right): dummy = ListNode(0) tail = dummy while left... 查看全文

会议报告 十一月 24, 2020

CreateML - 开启革命的星星之火

文章字数 6.5k 阅读约需 6 分钟

本文主要是苹果线上活动 - 基于 CreateML 的物体识别的观后感和一点想法。 背景Core ML 在 2017 年的横空出世开启了苹果机器学习的元年。但苹果貌似并没有准备在这条路上停下脚步,隔了仅仅一年,苹果就推出了 Create ML,之后苹果还在不断地给 Core ML 和 Create ML 添加新的功能,甚至在 XCode 11 之后将 Create ML 独立成为一个单独的 App。由此可见,苹果并不是拍拍脑袋或者搞搞 KPI(他们应该没有,只是为了押韵),他们是认真在考虑把 Machine Learning 移植到移动端,并且不断地在尝试去降低 Machine Learning 的门槛,让越来越多的开发正更方便的使用 Machine Learning 给自己的应用增砖添瓦。 什么是 Create ML关于 CreateML 网上有太多的介绍和教程,我只做一下简单的介绍,因为我再怎么努力也没办法比前人讲的更好更清楚,既然这样,那就站在巨人的肩膀上,大概讲一下我的认识。 苹果在 2016 年收购了 Turi Create,然后在此基础上发展出了 Create M... 查看全文

ARTS 八月 02, 2020

ARTS 打卡 08

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

Algorithm朋友圈(LeetCode 547,中等) 这道题是并查集考察的最经典的一道题了(当然也可以用 BFS,但总感觉比较山寨),因为并查集有几个比较基本的特性(查找两个节点是不是有同一个父亲,集合里边总共有多少个区块)正好有适用于这道题的特性。需要注意的就是要自己的得把并查集实现出来。 ReviewSplit laps timer with RxSwift and RxCocoa Marin 老哥的博客关注很久了,每次都是碰到问题会去看,这次准备从头开始系统的看一下他的博客,第一篇比较简单,就从第二篇开始写感想。 TipsShare跨端开发的终极解决方案?- Flutter 学习历程之环境配置采坑记录(原文暂缺) 查看全文

ARTS 七月 26, 2020

ARTS 打卡 07

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

本文主要是公司内部 ARTS 活动打卡记录 Algorithm课程表II(LeetCode 210,中等) 这道题算是拓扑排序的经典了(刷了好几遍了,这周好多事偷个懒)。当然底层的算法还是万年不变的 BFS,算是比较好理解,唯一需要的注意的就是入度的定义,这个是这道题除了 BFS 之外的关键。 Review这周看的东西都写在了分享的博客里,主要想说一下这周同事关于 OpenGL 的分享。之前由于苹果对于 OpenGL 有比较好的封装,所以很少接触到它,但是听了分享以后才发现自己对于许多苹果底层的东西知之甚少,比如 OpenGL,比如 Metal。听闻说 Metal 还是 CoreML 的基础(亏我还翻译过关于 CoreML 的文章,惭愧啊),之后在做完单测和 Flutter 分享以后要多花花时间看看这些底层的东西(包括 CoreAnimation 也是云里雾里的)。 Tips每次最头疼的就是 Tips 了,但是今天发现一个挺有用的小技巧。之前在 Swift 中使用 Selector 总感觉很山寨,还要写个 #selector,奇奇怪怪的,但是有一种很优雅的解决方式就是在当前文... 查看全文

ARTS 七月 20, 2020

ARTS 打卡 06

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

本文主要是公司内部 ARTS 活动打卡记录 AlgorithmK 个一组翻转链表(LeetCode 25,困难) 这个题真的是就算知道怎么做也是要写错好几回,我这次的 AC 率是 6,感觉链表的题还是要多练才行。还有 Dummy Node 的技巧也很重要。 Review这周看了这篇教程:Testing Your RxSwift Code RxTest VS. RxBlocking两个在 Rx 的测试中都非常有用,RxBlocking 更加直观,RxTest 更加全面。 RxTest 可以覆盖大部分测试,而且 TestScheduler 模拟的虚拟时间可以大大缩短测试时间,但是写起来比较长也比较麻烦 相比 RxBlocking 写起来非常简单也直观,但使用场景比较局限,其中对我们来说比较致命的一点是 RxBlocking 对于无法停止的序列的测试能力很有限,并不能提供我们需要的能力。而我们直播中大部分序列都是无限序列,所以暂时不考虑 RxBlocking。 还有一点就是,RxBlocking 无法测试时间相关的用例,比如我在 1s的时候收到一个信号,想测试输出是否在 1s的时候... 查看全文

工作总结 七月 07, 2020

A song of TDD and BUG - 尾声

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

TDD 与 BUG 的爱恨情仇(卷五),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 结语与鸣谢感谢同事们(海春,超超等)在我迷茫的时候的帮助,感谢强哥对整个系列的 review 和宝贵意见。最后打个广告:落叶的一生就是为了归根吗?曾经的我也相信宿命论 - 程序员就是要 996 的,疫情是要被裁员的,出游是要自掏腰包的,五一是只有三天假的 … 仿佛死神与巴格达商人在萨拉马的相会,一切都是那么无力。直到我加入了猿辅导,我的世界观崩塌了:原来程序员也不一定非要 996,疫情期间会有更多的项目和机会,出游是公司掏钱,五一有九天假!从来没见过如此“不讲武德”的公司,说好的武林要以和为贵呢?你这样其他公司怎么活!那你还在等什么,加入我们,我的邮箱是 goupy@fenbi.com,内推我是认真的,你值得拥有更好的。 查看全文

工作总结 七月 07, 2020

A song of TDD and BUG - 变奏曲

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

TDD 与 BUG 的爱恨情仇(卷四),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 All About Change劝分不劝和Dependency Map历史代码 TDD 改造需要注意的问题Start SmallChoose Your BattleField记得写单测并不是你的目的,减少 Bug 才是,所以我们需要把有限的精力放在收益最大的单侧上。我推荐两种选择写单测优先级的方案: 利用时间局部性:就像 LRU 的思想一下,在最近一段时间修改过的逻辑很有可能在未来一段时间内也需要修改,所以选择用单侧保证这部分逻辑有助于之后的迭代和重构。 “从”新开始:主意是从新,不是重新,也就是暂时考虑放弃之前的逻辑,对新业务使用 TDD 的开发模式来开发。这种比较适合没有时间对老代码进行重构和改造的情况,先对新的业务进行单测,等到业务稳定以后再考虑之前的历史包袱。 查看全文

工作总结 七月 07, 2020

A song of TDD and BUG - 副歌

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

TDD 与 BUG 的爱恨情仇(卷三),本系列链表头部请戳 A song of TDD and BUG - 前奏曲 副歌不副,FTDD 不 F可能你在想,不是 A song of TDD and BUG 吗?怎么都到了副歌部分了,还没怎么说 TDD。这个可能就要怪我们民国的大师们把 Chorus 翻译成副歌了,明明是最高潮的部分,翻译成副歌总给人一种莫名其妙的感觉,不过也可能是我乐理不精对大师的翻译没有深刻理解导致的。那吐槽吐完,开始讲正事,之前有给过大家一个强烈但不失友善的警告大家应该还记得吧,不记得的可以去复习一下 A song of TDD and BUG - 主歌。那会我说过适合自己的才是最好的,俗话说的好,规则就是用来打破的,只要我们了解了 TDD 的真谛,就可以把它改造成最适合自己的开发模式,我把这些 TDD 的变种们称为 FTDD。那何谓 FTDD,这个多出来的 F 代表什么?其实就是 Fu..,不好意思,是 Fake,也就是“伪 TDD”。那为什么说 FTDD 不 F 呢?因为这个“伪”并不是真正意义上的伪,而是结合了自己对 TDD 的理解和实践的产物,也可以... 查看全文
加载更多
0%