Facebook model 库 Remodel 观感

Linus Torvalds 有句名言:”Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” 虽然不知道自己算不算的上是 “Good programmer”,但我对数据的重要性是深有体会,之前也写过几篇与 model 相关的技...

iOS 客户端 HTTPS 防中间人攻击实践

写篇文章介绍些以前在 iOS 客户端实践 HTTPS 安全的经历。 不同工程师写代码的习惯不一样,有些喜欢边写边查,即使在接触陌生的知识域时,也要先写一些代码,遇到难题再去 google 或者 stackoverflow 找答案,另一些则习惯在动手之前,先储备足够多的理论知识,在建立整体认知之后再定框架填细节。我个人建议初学者采用第一种方式,而对于有一定工作年限且寻求专业度提升的工程师来说...

TCP/IP 系列之包与流

最近工作有点忙,有些天没更新啦,趁着五一放假,接着写之前 TCP/IP 的相关话题。 前些天看到有人吐槽 TCP 粘包和拆包的话题,说所谓的粘包是新手发明出来的术语,有误人子弟之嫌。粘包一说,对我也是陌生的概念,第一反应可能由是英翻中导致的。比如 iOS 术语里将 GCD 翻译为大中枢派发,就显得怪异且难以适应,有些术语还是让它保持原汁原味的好。 在搜索相关话题之前,我一番脑洞,感觉粘包...

TCP/IP 系列之 TCP 流控与拥塞控制(一)

TCP 流控(flow control)与拥塞控制(congestion control),是我个人认为每个 iOS 工程师都应该熟悉的,价值含量极高的知识点。明白了三次握手,但是不了解流控和拥塞控制背后的设计原理,是不能够在简历上写「精通 tcp/ip」的。 Flow control 和 congestion control 的学习价值高,而且学习过程也会很有趣。掌握整个过程的意义,远超...

慢一点,焦虑少一点

上周末做了一件有趣的事,一名在职读者,在技术学习和提升上感到迷茫和焦虑,向我求助,最后二人通了一个小时的电话,他说明了现状和原委,我也以我的经历和角度,提了些或许有用的建议。 他的一些情况和心态,勾起了我曾经在学习上所经历过的一些困境,觉得可以写篇文章和大家分享下,如果你也有类似的经历和困惑,以下的文字或许能有帮助。 慢一点 这名读者在叙述自身情况的时候,我能从语气里感受一股明显的焦虑...

如何设计一个通讯协议

最近给 TKeyboard 增加了不少新功能,其中最有意义的部分是,通过蓝牙和 Wifi,配合 protobuf,在 Mac 和 iOS 之间建立了两条便捷的数据交换通道,算是打好了未来产品开发的地基,网络通道建立好了,后续的想象空间也大。 比如,现在可以将 iPhone 上 safari 正在浏览的网页,一键分享到 Mac 的 safari 上,比 handoff 更方便可靠。还可以在 ...

TCP/IP 系列之重新认识 IP 地址

TCP/IP 系列第三篇,关于 IP 地址。这是我最有意愿分享,也最有趣的一个话题。IP 地址有意思的地方在于,虽然只是一个简单的 IP 地址,短短的 4 个字节,32 bits,里面包含的知识却是森罗万象。智者看山,目之所及,胸中自起万千丘壑。知识底蕴够丰富,才能窥见一个 IP 地址里所隐含的「花中世界」。 预热 在开始之前,需要做一些基础知识的预热。要对...

今年第一个独立 App,TKeyboard,也是第一个开源项目

在咖啡馆耗费了数个周末之后,终于将这个灵光一闪的点子变成了一个实实在在可以运行的 app。同时意味着年初制定的第一个小目标达成,完成了 2017年的第一个独立 app。 在app上架的同时,我决定将代码全部开源,除了兑现去年年底的承诺之外,我相信代码本身的价值,要高于 App 的功能,开源能带来更多知识的碰撞和增长。去年开源给我带来了不少乐趣,希望今年能有更好的成绩。整个项目涉及到一些比较...

TCP/IP 系列之 Header 篇

这是 TCP/IP 系列的第二篇,阅读目标是建立对网络包结构的初步认识。 上一篇里,我们提到一次完整的 TCP 会话其实是一个字节流,只不过我们可以按照一定的规则来切割这个字节流,从而划分出一个个的网络包。我们经常说抓包分析网络故障,这个抓包里所指的包在不同的语境下其实意义并不相同,首先我们得对包的构成形成具象的认知。 再看七层协议 刚毕业那会,大家都喜欢在简历上写「精通 TCP/IP...

TCP/IP 系列之初印象

如果有人问我推荐技术类书籍,我个人首选一定是【TCP/IP 详解】原版。这种大部头的经典之作里所包含的知识,说是浩如烟海也不为过,每次重新翻起总会有一些新的体悟和收益。经典的好处在于,它描述的一般是通用的计算机问题,可以帮助读者形成通用的计算机思维,而不局限于某一领域或某一场景,常看常新。 当然这本书的厚度也到了让人望而生畏的程度,如果着急短时间内啃完,多半会由于无法完成目标的沮丧半途而废...

技术文章的阅读姿势

阅读技术文章可以说是我们程序员的日常之一,Peak 君每天也会进行定量的阅读。特写一篇小文分享下心得,介绍下过去几年,在纠正阅读习惯上所做的一些努力和取得的成果,或许可以帮助一些朋友,节省少许阅读时间,提升一点学习效率。 差不多两年前,我开始搭建 Android 相关的知识体系。最开始的想法是从基础知识的积累开始,正好这几年社区的技术分享盛行,「掘金」、「开发者头条」、「简书」等渠道上每天...

闲聊 Hash 算法

最近读了一篇好文:【微信高并发资金交易系统设计方案——百亿红包背后的技术支撑】,其中关于高并发性能问题的解决方案中,有应用 hash 算法的思想。想起公众号后台里断断续续有读者提起算法方面的问题,觉得可以写篇文章聊聊算法中的 hash 算法。顺道科普下算法与数据结构的重要性。 开讲前,先跑题闲聊下程序员的技术功底。我常说每个程序员都有自己独特的技术视野和知识盲区,不同程序员之间很难因为某些...

四十以后,何处而安

之前是 34 岁被离职,这次是 45 岁必须退休,华为又一次用年龄挑动了众多程序员的神经。老问题又在耳边回响起来,程序员这门手艺到底能干多久,能做出多少价值来?这问题,值得每个阶段的从业者持续思索和探究。 这自然也包括 20 岁出头的初入行的朋友们,处于这个年龄段看待这个世界,还是一片生机勃勃、新鲜有趣、充满无限可能的,进可以跻身创业大军一搏富贵,退可以去 BAT 颐养天年。20 岁到 4...

iOS 编程中的 Type System

接之前一篇 Pattern Matching 的文章,Type System 是另一项编程语言,或者说编译器所提供的便利。Pattern Matching 可以让我们少写代码,而 Type System 可以让我们少犯错误,减少 Type 相关的各种 bug。 一般来说,我们写代码时为了降低 bug 率,一是依赖于程序员自身的经验积累,二是靠编译器做各种静态检查,type system 则...

Pattern Matching 的意义

一个语言特性往往具备多种 API 表现形式,理解特性比硬记 API 更有助于我们掌握一门新语言。Swift 作为现代编程语言的集大成者,具备很多优秀的特性来帮助开发者快速高效的编写代码,Pattern Matching 就是其中之一。 程序员 vs 编程语言 我们所写的代码,或者说一个 App 所具备的功能,最终都是程序员和编程语言共同作用的成果。我们使用某种编程语言写代码的时候,会受语...

iOS 创建对象的姿势

在写 iOS 代码的时候,怎么样去 new 一个新对象出来,都有一些讲究在里面。使用不同的姿势去创建对象,对后期维护所造成的影响会存在细微的差别。 init 创建 在之前一篇分析 iOS 代码耦合的文章中,提到过当我们给一个对象的 property 赋值的时候,通过 init 方法传入参数来初始化 property 会让我们的代码更可靠。 有些人在定义带 property 的 clas...

iOS代码设计中的开放与封闭

我们至今所写的 iOS 代码都是遵循 OOP 这种编程范式,以对象来临摹和表达我们对于世界的理解。在设计类的时候,恪守 SOLID 五个原则会让我们的代码更易拓展和维护。SOLID 中的 O 代表的是 Open/closed principle,这篇文章所要探讨的不仅仅是类设计中的 Open 和 Closed,而是要站在更广阔的视角来看待代码中的开放与封闭。 前言 我们作为代码工作者,不...

一名iOS程序员眼中的「小程序」

小程序如约和大家见面了,就这两天的势头来看,可以说是「好评如潮」了。Peak君今天也和大家闲聊下,这小程序和我们iOS程序员之间的关联。 初步观感 初体验非常棒,试用几个小程序之后,感觉在流畅度和响应时间上都属上乘,整体水准非常接近Native的体验,客户端团队应该下了不少功夫,Peak君已经听到了身边好几个朋友的溢美之词了。 小程序的入口现在位于第三个Tab页,单从这一入口深浅来说,...

危险的UITableView

如果把我们所做的UI做个简单分类,大致上可以分为列表界面和非列表界面。对于列表类UI,我们可以选择UITableView或者UICollectionView来实现。UICollectionView出现之前,UITableView几乎是唯一的选择,这每日可见人人都用的UITableView里隐藏着容易忽视的危险。 同步VS异步 同步和异步是基础的编程概念,也是贯穿于我们日常的两种代码书写方...

iOS当中的Cache设计

Cache的设计是个基础计算机理论,也是程序员的重要基本功之一。Cache几乎无处不在,CPU的L1 L2 Cache,iOS系统的clean page和dirty page机制,HTTP的tag机制等,这些背后都是Cache设计思想的应用。 为什么需要Cache Cache的目的是为了追求更高的速度体验,Cache的源头是两种数据读取方式在成本和性能上的差异。 在开始着手设计Cach...

Hosted by Coding Pages