解密 Runloop

按理说,这都 8102 年了,iOS 面试已经发展到手写 weak 关键字实现的今天,我原本不该再写 Runloop 这种土味题材的,还取了这么个「走近科学」栏目风格的标题。只是赶巧最近工作中又有涉及到,感觉自己有些新体会,趁着还热乎就写下来,希望能帮助一些读者在对 Runloop 的认识上,再深入浅出一些。 在开始之前,必须强调下,Runloop 是开源的,且关键代码其实非常少,建议大家...

iOS App 后台任务的坑

大多数 iOS App 在进入后台之后都会将一些关键任务封装到 Background Task 里,否则程序在若干秒之后就会被系统 Suspend。启动 Background Task 之后,可以获得 3 分钟继续执行代码的时间。 最近在调查 Messenger 的 Background Crash 问题,最后都追踪到和 Background Task 相关,和大家分享下一些要点。 Cr...

给程序员的一条职场建议

我 08 年初入职场,大小公司辗转几家,自己经历加上周遭的见闻,我感觉这十年来有一条职场经验于我最为宝贵,或许这条经验不仅适用于程序员,于所有职场都是通用的,甚至是跨域国界和文化的。 这条经验其实说起来颇为简单,字面意义几句话就能交代清楚,执行起来却是千难万难,即使能放下脸面付诸行动,要长久的坚持更为不易。这世上很多道理都是这样,说透了人人都懂,要真应用到自己的人生才是难事。 作为程序员...

Facebook 工作体验小记之绩效考核

我的读者里可能有相当一部分并非 iOS 程序员,持续关注的兴趣点在于好奇美国程序员的工作体验和文化差异,这一点契合了我踏入异国他乡种种新奇经历下的分享欲,正因如此,我时不时会写些和技术无关的闲文。 这些闲文一般有 3k~5k 不等的阅读量,公众号总订阅数也在不久前突破了一万大关,缓慢增长的数字到今天突然有了点里程碑式的意义,想到自己每一篇随心所至的文章,在周一的早上固定会有一千多人打开并耐...

一些职场随想(一)

和大家分享下过去十年职场的一些见闻和感想,随意聊一些话题,观点不一定对,但我个人觉得还是适用于大部分人,少数天资聪颖的除外。 毕业时的选择 毕业时如果能拿到几个 offer,在几家公司之间犹豫不决,因为薪资和前景不知道选哪个,我这有个简单答案。选给钱多的。薪资和前景大多数时候都是不冲突的,有前景才缺人,缺人进而通过市场规律决定薪资水平。 不要因为前景而忽略起薪,职场路长,每一次薪水变化...

iOS App 后台 Crash 调查

Apple 一直在逐步放大 App 后台运行的权限,到今天为止,已知的 iOS App 后台运行场景有: Background Task 通常情况下,App 一旦进入后台,只有数秒的时间继续执行代码,之后就会被系统 Suspend。除非 App 显示的调用 beginBackgroundTaskWithExpirationHandler API,能延迟 App 在后台运行代码的时间,iO...

员工之间可不可以讨论工资收入?

记得早些年我刚加入阿里的时候,HR 在入职头一周三令五申公司的几条高压线,其中之一就是禁止员工之间相互交流薪水收入,其性质等同于公司内部不正当男女关系。不光是阿里,我相信绝大部分公司都秉持着相同的企业文化,而且这么做也非常有其合理性的考量。 对于公司来说,在招聘的旺季或者大年,为了抢夺优秀毕业生,工资互竞会导致应届生的年薪和公司老员工倒挂。公司并非要刻意歧视老员工,存粹是人才储备需求和市场...

程序员应不应该背锅?

上半年绩效考核终于接近尾声,我也有机会静下心来回顾过去半年的经历。 来 FB 工作虽然已半年多,但我骨子里依然是从毕业起就耳濡目染的那一套价值体系,任何在 FB 所经历的公司文化或者工程文化上的差异,都会带给我强烈的体验冲击和后续的思考,比如说最近在脑子里挥之不去的程序员背锅话题。 FB 曾经有一句名噪一时的口号:“Move fast and break things”。鼓励员工快速大胆...

从中兴事件看全球人才流动

湾区呆的久了,接触到来自世界各地的信息,加上自己半年多的经历,对人才流动这一社会现象有了新的认识,不一定对,说出来也不伤大雅。 我所说人才流动泛指一般意义上的人才,将门槛降低,姑且将我们这种受过高等教育,在新兴行业具备高效生产力的青年人算入在内。 科技公司尤其重视人才的吸纳和储备,这点国内外都一样,大公司在招聘的大年为了抢人,应届生开出的薪资可以互相竞争与老员工持平或倒挂。 湾区的科技...

如何检测 iOS app 卡顿导致的系统强杀

在之前的文章中提到过,现有市面上的 iPhone 老设备(特指 iPhone 6s 之前的设备)占有率高达 40%,iOS app 卡顿的发生率发生概率也很高。卡顿里有一类卡顿又尤其严重:主线程长期不响应而导致的系统 Watchdog 强杀。 现在很多 iOS 线上 App 都集成了卡顿检测工具,原理多是基于 runloop 的各个事件回调,这类工具可以检测主线程是否在某个 thresho...

iOS App 使用 GCD 导致的卡顿问题

最近在调研 iOS app 中存在的各种卡顿现象以及解决方法。 iOS App 出现卡顿(stall)的概率可能超出大部分人的想象,尤其是对于大公司旗舰型 App。一方面是由于业务功能不停累积,各个产品团队之间缺乏协调,大家都忙着增加功能,系统资源出现瓶颈。另一方面的原因是老设备更新换代太慢,iOS 设备的耐用度极好,现在还有不少 iPhone 4S 在服役,iPhone 6 作为问题设备...

Facebook 工作体验小记(一)

早该写篇文章介绍下在 FB 的工作体验,但呆的时间不够长,难免导致观点有失偏颇。到现在半年有余,差不多可以提笔了。 一般我写体验类文章,会习惯性的先列出大纲再润色细节,比如加分项一二三,减分项 ABC。遗憾且反常的是,至今为止我在 FB 的工作体验里,想不出一条不满意之处,如果一定要列出一条,那么我希望是 FB 可以新开个主打中国菜的食堂。不过也有可能我需要呆的更久,在更深度的体验里还隐藏...

iOS App 连续闪退时如何上报 crash 日志

为保障线上 App 的用户体验,我们一般都会对线上 App 的 crash 率做实时监控,一旦检测到 spike,可以即刻调查原因,但这一切的前提是 crash 日志能够准确上报。 crash 日志上报有两个难点: crash handler 安装之前的代码要绝对稳定 如果日志采集器还没成功启动就 crash 了,自然什么日志也无法采集到。这一点并没有太多技巧可...

iOS 程序员效率提升利器之 AppleScript

这篇文章和大家分享我平时工作时,用来提升效率的神器之一:AppleScript。 AppleScript 虽然是一种脚本语言,但在我看来是最接近自然语言和最不具备计算机特质的编程语言了。即使没有计算机基础,在阅读基础文档和几个样例脚本之后,马上就能动手写出实用的脚本工具。 我感觉很多使用 Mac 系统的同学可能都没意识到,与自己每天作伴的 Mac 系统上还有这么一个强大高效的脚本语言,可...

硅谷生活半年记

春节期间回了趟杭州,休了两个月的产假,后又赶回湾区开始上班。国内国外几次的切换,以及从生娃养娃工作的深度体验里,让我对两边的文化生活方面的差异有了更多感受。 从杭州小区楼下的蛋饼油条小店,到 Facebook 咖啡零食一应俱全的 Micro Kitchen,从建于九十年代绿树成荫斑驳老旧的楼房,到宽敞明亮错落有致的 Town House,从处处贴着二维码的移动支付,到刷信用卡返现的 Sho...

iOS 下如何一键调试 Push

来湾区工作的一项有趣之处,是可以和来自完全不同工程文化背景的程序员们碰撞交流,语言习惯,教育环境,思维模式,工程经验都存在不小的差异。来湾区半年有余,这段时间下来有一点我感受颇深,这边的程序员非常强调做一件事的效率。在遇到一个有挑战性的项目时,前期的设计讨论调整非常频繁以求最优路径抵达目标,平常做项目时,各个程序员都有自己的工具箱和小脚本来应付各类场景。目的是都花最少量的时间干最多的活,又或...

IM App 如何确保消息可靠抵达

IM App 是我做过 App 类型里复杂度最高的一类,里面可供深究探讨的技术难点非常之多。这篇文章和大家聊下消息可靠抵达机制。 如何确保 IM 不丢消息是个相对复杂的话题,从客户端发送数据到服务器,再从服务器抵达目标客户端,最终在 UI 成功展示,其间涉及的环节很多,这里只取其中一环「接收端如何确保消息不丢失」来探讨,粗略聊下我接触过的两种设计思路。 说到可靠抵达,第一反应会联想到 T...

iOS 代码使用 C++ 的 zero-cost abstraction 特性

不少 iOS 项目里都有 C++ 代码的痕迹,Objective-C 和 C++ 虽然都是 C 的 superset,但二者在语言特性上存在很大差异,Objective-C 的 runtime 使其语言的特性更丰富更易使用,但代价是会增加性能损耗以及编译后的 binary size。 很多成熟项目开发到一定阶段,会关注一些关键指标,比如 App size,现在超过 100 M 的 App ...

一些轻松好玩的英语学习辅助

来美之后,需要融入纯英文的生活和工作环境,融入的前提当然是扎实的英语基础。我自高中之后就没怎么正儿八经的学习过英语,都是零零散散的看些英文电影,不间断阅读些英文资料,勉强还维持着英语可用的水准。 不用说,刚来这边极度不适应,经常性听不懂别人说啥,也很难完整表达一个技术想法。这边老美陌生人之间还经常爱搭话,逛超市店员会问你是否需要帮助,吃饭服务员中途问你是否吃的满意,进电梯遇到陌生人也要偶尔...

2017 回顾

又到了年终盘点季,我的 17 年相较往年有很大不同。16 年忙着创业,埋头写代码,日子过的单调充实,当然也夹杂着对未来的种种担忧。到去年年底,心态发生转变,通过创业改变人生的激情逐步消退,家庭的责任感日益加重,方向开始朝着生活稳定性和未来的保障倾斜。用时下流行的话来说:再生猛的人生也有拿起保温杯的一天。 我在年末开始留意大公司的机会,决定将创业所投入的能量转移到更稳定可靠的职场里,看看自己...

Hosted by Coding Pages