Created with Sketch.
Created with Sketch.
首页
发现
小书
登录
注册
×
注册小专栏
通过微信登录
通过微博登录
通过Github登录
通过邮箱
注册
、
登录
友情提示
Login FAQ
.
×
邮箱登录
通过微信、微博、Github 登录
登录
×
邮箱注册
通过微信、微博、Github 登录
注册
icon_photo_1
Created with Sketch.
张星宇
今日头条 iOS 高级工程师,目前负责客户端的基础技术,也正向全栈的方向努力。热爱分享,喜欢研究问题的本质,讨厌一切不说人话的描述。
100 / 140
今日头条 iOS 高级工程师,目前负责客户端的基础技术,也正向全栈的方向努力。热爱分享,喜欢研究问题的本质,讨厌一切不说人话的描述。
关注 9
被关注 1130
获得赞 308
Created with Sketch.
Created with Sketch.
Created with Sketch.
Created with Sketch.
Created with Sketch.
Created with Sketch.
Created with Sketch.
Created with Sketch.
+ 关注
取消
确定
个人书籍
Mac 高效开发指南
对于程序员来说,每天陪女朋友和枕头的时间可能加起来还不如使用 Mac 久,但大多数人对朝夕相处的生产力工具并不了解,本书从系统配置、Mac 工作流、编辑器之神:Vim、Git 从入门到进阶、终极武器 Zsh等方面去打造一个高效的工作流,致力于提高 Mac 工作效率的实用手册。 通过对本书知识的学习,相信你每年可以轻松省出一个年假,在别人熬夜加班的时候回家打游戏、追剧、尽情浪吧!
个人专栏
从 iOS 到全栈
这个专栏不同于我的博客,主要的更新模式是频率快,内容简洁扼要,会分享一些我平时工作、学习时收获的知识。我希望靠自己...
已发表 49
订阅数 572
iOS 面试指南2019版
每个公司都会因为产品形态不一样,对工程师的技术要求的侧重点会不一样,iOS 面试指南是来自一线互联网公司工程师对自...
已发表 21
订阅数 1831
文章
订阅
回复
喜欢
张星宇
in
从 iOS 到全栈
通过异步生成 dSYM 实现极速打包
背景 对于头条这种百万行级别的大型应用来说,即使使用 Mac Pro 进行编译打包,耗时也接近一小时。公司搭建了组件化平台后,组件得以提前编译为二进制,大大降低的应用的 CI 编译时间,目前耗时大约...
张星宇
in
从 iOS 到全栈
Tmux 菜鸟扫盲
什么是 tmux tmux 是一个终端会话复用管理工具 说人话 会话表示在 iTerm2 或者系统的终端中打开的一个个窗口,复用管理 表示通过会话共享,会话持久化保存等方式,避免重复创建会话,因此 Tmux 最大的价...
张星宇
in
从 iOS 到全栈
头条 Flutter iOS 混合工程实践
体验 Flutter 从 App Store 下载或更新头条(6.9.2 或以上版本),找到 懂车帝 -> 热门车型,点击打开后即可体验 Flutter 的页面效果。 由于前期业务改造顺利,线上 Crash 少,性能良好,目前我们正在进行小...
张星宇
in
从 iOS 到全栈
Git push 的细节与分支追踪
有一定 git 使用经验的读者应该知道,在我们 clone 项目以后,本地的 master 分支和远程的 master 分支默认是关联的,可以通过 git branch -vv 验证: 将本地分支与远程关联(也叫追踪)的好处主要有以下几点...
张星宇
in
从 iOS 到全栈
再谈 Flutter
一个月前,因为头条准备接入 Flutter,我简单的调研了一下。当时写了一篇总结:谈谈我对 Flutter 和 RN 的看法。总结来说就是比较看好 Flutter,也参与了早期 Flutter 项目的搭建过程。 随着项目一期的灰度...
张星宇
in
从 iOS 到全栈
包管理工具与 Git
包管理工具的背景和术语 基本上每个语言都有自己的包管理工具,绝大多数项目也不可避免的使用自研或三方组件。不管是 npm 还是 Cocoapods,作为包管理工具,它们基本上都由三部分组成: 配置文件:...
张星宇
in
从 iOS 到全栈
如何阅读知名三方库的源码
请允许我先说结论:没啥特殊必要,就别专门读源码了,提升记录的方法千万种,别吊死在一棵树上 为什么我不推荐迷信源码 不知道从什么时候开始,圈子里面流传着一种比较诡异的论调:“想要成为高...
张星宇
in
从 iOS 到全栈
App Store 包大小那些事
背景 可以从 App Store 上看到,头条的包大小已经达到了 137M,由于近期即将接入 Flutter,还会增加 16M,这样一来就会突破 150M 的限制,导致用户无法通过 4G 下载,从而一定程度上影响新用户的积累。 方案 ...
张星宇
in
从 iOS 到全栈
为什么 Cocoapods 不能像 npm 一样简单,只提供一个文件夹来存放三方库的源码?
有朋友问我,为什么 npm 和 pip 这类包管理工具,实现起来很简单,都是把依赖的代码直接下载下来就行,而 Cocoapods 就这么反人类,要单独建一个 Pods 工程,每个依赖的组件做成 Target,最后还包一层 workspa...
张星宇
in
从 iOS 到全栈
谈谈我对 Flutter 和 RN 的看法
聊聊我个人对 Flutter 的看法,仅供参考: Flutter 有取代 Native 的可能 RN 不适合投入 具体理由如下: 从 Flutter 的原理来看,它本质上是一套跨平台的渲染引擎,因此它的性能上限和 Native 是一致的。由...
张星宇
in
从 iOS 到全栈
工作感悟 —— 第一篇
有时候接了一个需求(尤其是比较复杂的需求),团队内部会热火朝天的讨论起来。但这时候大概率是从各自角度出发的讨论,因为“复用已有功能”是写进每个程序员基因里的本能。往往讨论的结果是,...
张星宇
in
从 iOS 到全栈
完善 VSCode 的 Node 自动补全
这是一篇水文,讲讲踩坑的经历。 背景 起因是在写 Node 时,受够了 require ('../../../../helper.js') 这种相对路径。不够直观不谈,如果将来在别的地方用,都不能直接 copy 过来,还得重新计算相对路径,因此...
张星宇
in
从 iOS 到全栈
机器学习入门科普
[TOC] 本文由 我的分享 PPT 整理而来,由于图片的表达能力更强,因此强烈建议结合 PPT 进行阅读。 这是我根据自己短短两周的学习总结出来的文章,优点非常明显:我也是初学者,因此更能理解初学者...
张星宇
in
从 iOS 到全栈
可能是 Mac 键位映射的最佳实践
为什么需要键位映射 首先说两个我的主观看法,当然读者可以选择不接受,那样就不用浪费时间读下去了。如果你表示认可,并且希望解决这个问题,相信本文会帮到你。 用 Caps Lock(也就是大小写切换...
张星宇
in
从 iOS 到全栈
简述 shell 中的错误处理
本文前面部分内容摘录自阮一峰老师的:Bash 脚本 set 命令教程,主要是文章写得太好了。 开启错误处理 使用 shell 中的错误处理有助于我们发现错误,更好的调试代码。 检测未定义变量 首先,set -u 可以...
张星宇
in
从 iOS 到全栈
简述从开发机到云服务的进化
由于最近在负责公司内部的一个平台服务(前端 + 后端),所以不可避免的接触到了服务上线的过程。 因为自己之前也搭建过博客后台,在我这个后端小白的眼里,搭建后端服务的流程应该是这样的: ...
张星宇
in
从 iOS 到全栈
libextobjc 拾遗之再谈 weakify
关于 weakify 的文章已经很多了,就不介绍具体用法了,直接来看实现原理: #define weakify(...) \ ext_keywordify \ metamacro_foreach_cxt(ext_weakify_,, __weak, __VA_ARGS__) 之前已经介绍过 ext_keywordify 宏了,这里先不管...
张星宇
in
从 iOS 到全栈
libextobjc 拾遗之 onExit 的实现
libextobjc 是一个非常牛逼的、充满了黑魔法的 OC 库,拓展了 OC 的能力,里面有非常多值得学习的东西。 本文主要聊聊 ExtScope 这个类中 onExit 宏的使用以及原理。 这个宏可以在代码块结束时做一些清理工...
张星宇
in
从 iOS 到全栈
Vim 中使用宏实现批量修改
一直觉得 Vim 中的宏过于高深,也没什么机会用,偶然发现一个小痛点可以借助宏来快速解决。 所谓的宏,其实就是记录一系列命令,然后选择重放次数。举个例子,假设我用 Vim 在写 Markdown: 1. 第一句 2...
张星宇
in
从 iOS 到全栈
Shell 中的 HereDoc
Shell 中的 HereDoc背景 在我最早的一篇文章:Python 简单入门指北 中就介绍了 HereDoc,它能够以 “所见即所得” 的形式输出内容,避免开发者对格式投入太多精力,比如下面这段 Python 代码: s = '''<HTML>&l...
张星宇
in
从 iOS 到全栈
为什么底层基础库也要解耦
这里的底层库指的是网络库、图片库、日志库、APM 库等等。 底层库之间往往也是互相依赖的,比如图片库很有可能要依赖网络库。很多同学(包括我之前)可能都有一种误解,觉得底层库之间的依赖无所...
张星宇
in
从 iOS 到全栈
分享我的简历
前段时间找工作,更新了一下简历。这里分享给大家,仅供参考。我的态度是简历一定要简洁,最多两页,比如我的只有一页。可以用三段论:个人信息、技能点和工作经历。注意工作经历应该尽可能偏技...
张星宇
in
从 iOS 到全栈
免费申请无限容量的 Google Drive
思路很简单,就是利用国外大学的校友身份,只要你能证明自己曾经在这个大学读过,就可以注册校友身份,享受学校的福利。一般来说校友身份容易验证,因为很多资料网上都是公开的,但是学校不太好...
张星宇
in
从 iOS 到全栈
从撤销 rebase 谈谈 git 原理
假设我们有两个分支,a 和 b,它们的提交都有一个相同的父提交(master 指向的那次提交)。如图所示: 现在我们在分支 a 上,然后 rabase 到分支 b 上。如图所示: 平时开发中经常遇到这种情况,假设分...
张星宇
in
从 iOS 到全栈
git 提交区间
git 的提交区间指的是用两个点 A..B 或者三个点 A...B 的语法将 AB 两个提交连接起来,从而表示一系列提交。 这是非常容易让人产生疑惑的一个话题,主要是因为它没有固定的含义,需要根据不同的命令来...
张星宇
in
从 iOS 到全栈
Git 解决冲突
构造冲突 本文主要通过一个简单的 Demo 来演示如何在 Git 中解决冲突,以及相关名词的基本概念。 首先我们编辑一个名为 begin 的文件: This is first line 然后在分支 a 上增加两行,用加号标记出来: This is f...
张星宇
in
从 iOS 到全栈
zsh 中 alias 的进阶用法
我们都知道 alias 可以为命令创建别名,这样复杂的的命令就可以被简化。其实我们还可以创建 后缀 alias 和 全局 alias。 创建后缀 alias 的写法是: alias -s txt='less -r' 它表示对于任意命令 xxx.txt,都会被重...
张星宇
in
从 iOS 到全栈
shell 中的重定向
背景 相当一段时间以来,我对 Shell 中的重定向只有两个简单的认知: 可以把命令的结果写到文件里 写脚本的时候,如果不想让内容输出到终端,要重定向到特定的位置 由于认知不深刻,导致很多功能...
张星宇
in
从 iOS 到全栈
git reset 基本用法整理
我们都知道 reset 有三种模式,很多文章上来就开始介绍这三种模式的异同,在我看来这不是一种很好用的模式。对于不是特别了解 Git 模型的读者来说,有必要介绍一些基础知识。 首先,在 Git 的思维中...
张星宇
in
从 iOS 到全栈
Git 交互式暂存文件
输入命令 git add -p 就可以交互式的暂存文件,我给这个命令起了别名:gap。这个命令后面如果不加参数,会试着暂存所有文件,也可以加上文件名,只 add 某个文件。 注意左下角的蓝色文字,这里提供了...
张星宇
in
从 iOS 到全栈
git log 的使用指南
更完整的用法请直接参考我的 Github,后续想到更多的用法会持续更新。 git log 这个命令非常常用,也非常复杂,常见的有以下几种: 输入 gg,它会单行展示提交历史,也支持展示分支的关系,如图所示...
张星宇
in
从 iOS 到全栈
homebrew 的进阶使用
Homebrew 是什么以及如何安装不是本文要讨论的问题,不知道的读者也不用阅读本文了。 本文主要介绍几个 Homebrew 的进阶用法,可能有些同学还不清楚: brew list 可以展示所有用 Homebrew 安装过的软件,配...
张星宇
in
从 iOS 到全栈
git status 的简化
其实简单,我们平常用 git status 来看状态,但是这个输出是比较啰嗦的,直到今天才知道可以用 git status -s 参数来简化,如图所示: 重点说一下简化版的输出规则: 绿色的 A 表示刚刚被 track 的文件 左边绿色的 M 表示已经 add 的改动,右边红色的 M 表示还没有 add 的改动 红色的问号表示还没有 track 的文件 鉴于输出的简单性,我决定用 gss 来替代 git status -s 并且成为日常工作的首选,git status 还是简化成 gs 并且留着,以备不时之需
张星宇
in
从 iOS 到全栈
xcpretty 的使用与坑
xcpretty 是一个用 ruby 实现的工具,可以用 gem install xcpretty 来安装,主要作用是为了美化 xcodebuild 那冗长而且恶心的输出,效果如图所示 一般我会选择在打包的时候使用,因为大型工程的输出内容很多,...
张星宇
in
从 iOS 到全栈
命令行中如何管理密码
有些命令需要管理员权限才能执行,也就是 sudo <command>,这需要我们输入密码。偶尔输入一次没有问题,但频繁输入的话就会促使我们思考:“有没有办法自动输入密码?” 方案大概有三种,以 networ...
张星宇
in
从 iOS 到全栈
git commit 小技巧
一个很常见的场景是我们修改了一些文件,需要 把所有改动的文件提交到远程仓库,我们都知道需要两步,add 和 commit。 最 low 的做法是在 GUI 里面一个文件一个文件的勾选,稍微了解些命令行的小伙伴会...
张星宇
in
从 iOS 到全栈
shell 中的单引号和双引号
说来惭愧,shell 脚本写了估计有上千行了,关于引号、变量和转义一直没有好好研究过,转一个从 StackOverflow 上看到的表格,解释得相对比较详细全面了。 其实只要记住以下三点基本上就没有大问题了: ...
张星宇
in
从 iOS 到全栈
命令行操作 iOS 模拟器
xcrun simctl 命令提供了大量和模拟器相关的操作,比如新建、删除、启动模拟器,安装、卸载、查看 app,录屏、录像、查看日志等等,通过 xcrun simctl help 命令查看完整的功能。 下面列出几个我觉得挺有用...
张星宇
in
从 iOS 到全栈
巧用 do...while(0) 改善代码结构
本文所讨论的技巧都是为了避免过深的嵌套 有时候,if 和 else 的两个分支,体量是完全不对等的,尤其是在函数的开头,我们经常会对一些重要的前提条件做校验,如果校验不通过就不会做任何后续的操...
张星宇
in
从 iOS 到全栈
终结“并发与并行”这个话题
昨天问了大家并发和并行什么区别,大部分同学说得基本上都对,我说说自己的解释: 公园门口有个售票处,好多人要检票入园,这个叫并发,并发是一种客观事实,描述一种现象。 公园只有一个检票...
张星宇
in
从 iOS 到全栈
UIButton 左图右文实现
今天接了个需求,一个 UIButton 里面左边是按钮,右边是文字,如图所示: 这是一个常见的组合,换在以前我可能就用 UIImageView + UILabel + 手势给凑出来了,不过读完 这篇文章 以后总算是用原生的 UIButton ...
张星宇
in
从 iOS 到全栈
有用的 Xcode 注释格式
今天才知道,原来 Xcode 里面的注释格式,不仅仅是为了好看,其实是有实际作用的。以一个最简单的注释来说: /** 加载全景图片 @param imageName 全景图图片名称 */ - (void)setImageWithName:(NSString *)imageName; 调...
张星宇
in
从 iOS 到全栈
免密登录远程服务器
如果经常要登录远程服务器(比如自己的 VPS 或者公司服务器),每次 ssh 时输入密码还是很麻烦的,有两种方法可以实现免密登录: 第一种方法是在远程服务器的 ~/.ssh/authorized_keys 文件中写入自己的公钥...
张星宇
in
从 iOS 到全栈
Shell 实战之找到项目中所有(未)被用到的图片
圈子里一位朋友,有一个需求是找到项目中所有创建 UIImage 的地方,把图片名找出来。比如代码如下图所示: 希望得到的输出是: permiss_group_select4 permiss_group_select5 permiss_group_select6 permiss_group_select1 permis...
张星宇
in
从 iOS 到全栈
2018 年将至,iOS 工程师如何自我提高
如果从 13 年移动客户端大火开始算起,至今已经有五个年头了。现在移动端的形势也不需要太多的废话来描述,一句话总结就是:“浪潮退去,谁在裸泳一看就清楚。”我希望借助这篇文章来聊聊在我心...
张星宇
in
iOS 面试指南2019版
2018 年将至,iOS 工程师如何自我提高
如果从 13 年移动客户端大火开始算起,至今已经有五个年头了。现在移动端的形势也不需要太多的废话来描述,一句话总结就是:“浪潮退去,谁在裸泳一看就清楚。”我希望借助这篇文章来聊聊在我心...
张星宇
in
从 iOS 到全栈
了解 Shell 命令的返回值
shell 里面每个命令(比如 ls)都是有返回值的,就像是调函数一样。有两个办法看,最简单是通过终端的状态来简单判断,这需要你的终端和配色支持,比如 iTerm 默认的应该就可以。如截图所示,如果命...
张星宇
in
从 iOS 到全栈
git diff 的用法整理
总记一下最近使用的 git diff 操作: 直接输入 git diff 可以查看工作区,也就是还没有 add 的文件的变动 如果已经 add,文件会加入暂存区,通过 git diff --staged 或 git diff --cached 来查看 这个需求可能比较常见...
张星宇
in
从 iOS 到全栈
Python 简单入门指北
[TOC] Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫。但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技。本文主要针对的读者是: ...
张星宇
in
从 iOS 到全栈
Python 多线程的坑—— GIL
GIL 全称 Global Interpreter Lock,也就是解释器全局锁。由于这个家伙的存在,对于 CPU 密集型的多线程来说,它会退化成单线程执行。甚至由于上下文切换和争夺锁的损耗,性能连单线程都不如。 只有 IO 密集...
张星宇
in
iOS 面试指南2019版
让 BAT 的 Offer 不再难拿
随着各大公司春招的开始,很多小伙伴都行动起来了,我有幸能够加入百度并和大家分享自己的经验心得。由于我面试的都是比较大的公司,所以自然也是做了这方面的准备,因此这篇总结并不一定适合想...
Created with Sketch.
top
Created with Sketch.