摸鱼精选第 8 期

1. 使用 Clang 静态分析器尽早发现 Bug

在 Xcode 13 中,静态分析器也得以升级,现在它可以捕获更多的一些逻辑问题:

  • 死循环
  • 无用的冗余代码(例如多余的分支条件)
  • 断言 Assert 的副作用
  • C++ 中 move 和 forward 的滥用导致的潜在问题

2. 向死而生:面向失败设计之道、术、技

业务开发的新同学有时候可能会有迷之自信,觉得自己写的代码与老鸟们没有什么不同。实际上,编写正常流程的业务代码大家的差异不会太大,但是针对异常、边界、不确定性的处理才真正体现一个程序员的功力。老鸟们往往在长期的训练下已经形成多种肌肉记忆,遇到具体问题就会举一反三脑海里冒出诸多面向失败的设计点,从而写出高可用的业务代码。如何去学习面向失败设计的方法论,并慢慢形成自己独有的肌肉记忆,才是新手向老鸟蜕变的康庄大道。

3. .NET 6 攻略大全

系列文章:

单纯从性能来说,.NET 6 性能已经超过 JDK 17,这是 CLR 相比 JVM 的后生优势,没有什么好反驳的。同样的,Java 的天生优势就是生态,.NET 也无力撼动。

但是 .NET 6 设计理念非常先进前卫,也是跨平台的原生支持。后端开发者应该辩证的去看待微软的技术,不要刻舟求剑,手里武器只有 Spring,就像前端只会 Vue 一样视野狭隘。

现在的微软是很 open 的,比如微软主导开源的 Dapr,这是一个可移植的、事件驱动的、用于构建跨云和边缘的分布式应用的 runtime,上层服务可以使用任何语言和框架实现,比如 Java、Node、Go、.NET 等,包容性非常强。

又如,VS Code 开发团队今年重大计划之一就是提升超过 150 万用户的 Java 开发体验,包括对 Java 18 的支持,优化 Language Server 和 Code Complete 的性能,以及 Sprint Boot 的 End-to-End 改进。

Azure 最近在国内启用了新的第五个数据中心,很多大型国企和事业单位以及跨国企业都采用.NET 的技术了。

4. go-zero

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。

go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可直接运行。

使用 go-zero 的好处:

  • 轻松获得支撑千万日活服务的稳定性
  • 内建级联超时控制、限流、自适应熔断、自适应降载等微服务治理能力,无需配置和额外代码
  • 微服务治理中间件可无缝集成到其它现有框架使用
  • 极简的 API 描述,一键生成各端代码
  • 自动校验客户端请求参数合法性
  • 大量微服务治理和并发工具包

5. 自己动手写编译器

本书将介绍一个非常简单的编译器( TinyC 编译器)的实现,用简单和易于实现的实例来描述基本的编译原理及过程。

6. 《深入理解计算机系统》重点解读

《深入理解计算机系统》在豆瓣评分有 9.8 分,基本上是计算机图书里面的最高分了,也是机械工业出版社的镇店之宝。虽然这本书的内容涉及到很多底层知识,对初学者偏难,但我个人认为每个开发者都应该通读一遍。因为这些基础知识,正是很多初级、中级,甚至高级应用开发人员都比较欠缺的。在平时的开发中,可能用不到这些东西,因为大部分都是 API 调用师。但是一旦你需要自己去设计框架或跟硬件打交道时,这些东西就会帮你很多忙了。

所以没有完整看过这本神书的人,可以参考一下作者对这本书的知识点总结,在 B 站有视频可以看。

7. 《计算机体系结构基础》

本书作者胡伟武,现任龙芯中科技术股份有限公司董事长,中国科学院计算技术研究所研究员,博士生导师。

这是作者在中国科学院大学面向本科生的教材,主要内容包括:作为软硬件界面的指令系统结构,包含 CPU、GPU、南北桥协同的计算机硬件结构,CPU 的微结构,并行处理结构,计算机性能分析等。上述面面俱到的课程安排主要是考虑到体系结构学科的完整性,但重点是软硬件界面及计算机硬件结构,微结构则是硕士课程的主要内容。

要研究怎么造计算机,硬件方面要理解计算机组成原理和计算机体系结构,软件方面要理解操作系统和编译原理。计算机体系结构就是研究怎么做 CPU 的核心课程。信息产业的主要技术平台都是以中央处理器(Central Processing Unit,简称 CPU)和操作系统(Operating System,简称 OS)为核心构建起来的,如英特尔公司的 X86 架构 CPU 和微软公司的 Windows 操作系统构成的 Wintel 平台,ARM 公司的 ARM 架构 CPU 和谷歌公司的 Android 操作系统构成的“AA”平台。龙芯正在致力于构建独立于 Wintel 和 AA 体系的第三套生态体系。

8. Sundell 关于 Swift Concurrency 的文章合集

作者 Sundell 是一个非常勤快的 Swift 开发人员,经常在个人网站上分享关于 Swift 开发的方方面面,如果了解 Swift 的更多隐藏东西,可以关注他的网站。

9. Set up a personal blog with Ghost and Docker

使用Ghost 和 Docker 来部署个人博客,本博客就是这样的方案。

Ghost 官方并没有 docker 版本,但社区有维护一个镜像

10. Rust 移动开发与跨平台模式探究

本文介绍了一些公司使用 Rust 在移动平台上的应用,大部分公司用 Rust 来取代 C++做一些跨平台的通用代码。国内的有飞书在做相关的尝试,开源的产品有笔记类应用 AppFlowy,AppFlowy 使用 Rust 开发前后端。

11. iOS 高刷屏监控 + 优化:从理论到实践全面解析

业界中一般采用 CADisplayLink 对应用的流畅度进行监控。由于 CADisplayLink 的行为在 iOS 15 上的变化,原先的监控方案无法评估 ProMotion 屏幕在超过 60Hz 时的表现。

通过在 CADisplayLink 回调中确认 duration 参数,计算得到当前屏幕的实时刷新率,并修改 preferredFrameRateRange 来进行跟踪:

NSInteger currentFPS = (NSInteger)ceil(1.0 / displayLink.duration);
displayLink.preferredFrameRateRange = CAFrameRateRangeMake(10.0, currentFPS, 0.0);

CAFrameRateRange.minimum 传最小值 10.0,preferred 传 0.0,可以让该 CADisplayLink 只用于监控当前的系统帧率,而不影响帧率的动态选择。

12. Linux 性能优化

性能优化主要关注两个指标:吞吐和延时。

CPU 的性能指标:平均负载,整体 CPU 使用率,进程 CPU 使用率,系统、进程上下文切换、软硬中断等。对应的工具有 uptime, top/htop/atop,vmstat,mpstat 等

内存的性能指标:已用/剩余/共享内存,缓存,虚拟内存,swap 内存、缺页异常等。对应的工具有 free, vmstat, sar, ps/top,pmap,memleak 等。

13. Rust 数据结构

一本 Rust 书籍,有简体和繁体版,内容包括算法分析,基本数据结构和算法,外加一些实战,共有九章。包含了大家常用的常见的数据结构的实现和讲解,配有详实的代码和清晰简明的图解。