摸鱼精选第 18 期
1. Vue 状态管理未来样子
Vue 3 推荐状态管理使用Pinia,它是多 store 管理的,而 Vuex 是单 store 模式。
Pinia 提供了一个模块化的架构,通过设计实现类型安全,并消除了模板代码。
如果你要用 Vue 3 开始一个新的项目,Pinia 是值得推荐的选择。
2. 某设备 CoAP 协议漏洞挖掘实战
攻击路径:
- 判断是否可以进行 resource discovry 操作获取 CoAP server 的资源;
- 判断安全机制是哪种;
- 判断是否实现了认证机制;
- 对请求解析函数进行逆向分析。
3. Go 组件 Context 源码学习笔记
4. 不改一行业务代码,飞书 iOS 低端机启动优化实践
5. wokwi.com
Wokwi 是一个在线的电子电路仿真器。你可以使用它来仿真 Arduino、ESP32 和许多其他流行的电路板、元器件以及传感器。
6. Microchip University
Microchip University 做的一批免费视频教程,主要是嵌入式开发方向,缺点是注册账号才能观看。
7. 以小窥大:IO 卡顿探寻苹果文件系统
从一个用户反馈的不寻常的 I/O 卡顿入手,发现苹果 APFS 的一个严重 bug。结合问题场景分析问题,结合数据分析结果,发现苹果的文件操作存在的坑,并给出了相应建议。在日常缓存设计中,也需要留意相应的这些点。
分析问题
- 寻找关键堆栈
- 构造必现代码
- dtrace 分析
- Hopper 分析
- 对比 HFS+
结合已有数据分析,发现苹果的文件操作里存在的坑:
- tmp 在极端情况下可能会存在 >90G 的占用;
- WebKit 随机 + 群众的方式删除网络缓存极端情况下的问题;
- NSURLCache 在 diskCapacity 设置过大时存在的问题;
- 密集删除文件导致 I/O 性能下降过快的问题;
为了避免上述这些极端情况下会导致的 I/O 性能骤降,移动端 APP 也需要合理的设计存储结构。如需要分层管理文件,尽量不将单个文件夹或单个文件搞得过大,同时也需要定时清理临时缓存目录,来进一步优化存储空间占用和优化 I/O 效率。
8. 响应式编程的复杂度和简化
本文作者从响应式编程的概念入手,分析了响应式编程的复杂度来自数据流 的几个方面。探讨了使用 Rx 或 Combine 等异步框架来简化基于回调的模式,但异步模式还是免不了在订阅事件的时候带来复杂度。AsyncSequence 天生能将异步转化为同步的方式,正是适合解决 Rx 遇到的问题,将响应式编程通过 AsyncStream 和 AsyncThrowingStream 来实现。
本文作者说 AsyncSequence 不支持 merge 操作,其实是可以的,苹果在Swift Async Algorithms开源项目里面带来了各种操作符,包括merge,zip 等。
9. 基于汇编实现 objc_msgSend hook 方法耗时的方案
测算函数 / 方法执行耗时,对于每一位开发同学来说,似乎都是一道绕不过的坎。
本文通过引入货拉拉移动端研发过程中的痛点,产生方法耗时分析的需求,在调研业内各种分析工具和方案后,结合需求整合出他们的方案,感兴趣的同学可以点击前往阅读。
10. 深入解析 Flutter 下一代渲染引擎 Impeller
11. RunLoop 的实际使用
12. Avoiding race conditions in Swift
一篇关于如何避免竞争的文章,文章内容比较简单,但是观点很深入,探讨了在软件的设计中去避免资源的竞争,靠的不是一味的使用各种锁、栅栏,而是精良的设计。文中举的例子生动易懂且随文的图片制作精良。
13. How do 3D transforms of iOS views work under the hood?
本文主要介绍了 3D transforms 的各种变化是怎么得来的,配有手绘介绍图,但需要一点点数学知识才可 以读懂。