摸鱼精选第 9 期

1. Go 泛型介绍[译]

Tony Bai 是 Go 方面的专家,翻译了 Go 核心团队发布的一篇名为《An Introduction To Generics》的文章。这是 Go 团队发布 Go 1.18 版本后官博发表的首篇有关 Go 泛型的文章

2. 一起看看 Go 1.18 新特性之多模块工作区模式

Multi-Module 工作空间模型。它本质上仍然是解决本地发展需求的一种解决方案。

由于 go.mod 文件与项目密切相关,因此它们基本上是上传到 Git 存储库的,因此很难对其进行任何操作。所以我们只是将 go.work 构建为纯本地化且易于使用。

使用新的 go.work,您可以处理完全的本地文件,而不会影响开发团队的其他成员。

3. NanoID 用来取代 UUID

一个小巧、安全、URL 友好、唯一的 JavaScript 字符串 ID 生成器。

“一个惊人的无意义的完美主义水平, 这简直让人无法不敬佩。”

  • 小巧. 130 bytes (已压缩和 gzipped)。 没有依赖。 Size Limit 控制大小。
  • 快速. 它比 UUID 快 60%。
  • 安全. 它使用加密的强随机 API。可在集群中使用。
  • 紧凑. 它使用比 UUID(A-Za-z0-9_-)更大的字母表。 因此,ID 大小从 36 个符号减少到 21 个符号。
  • 易用. Nano ID 已被移植到 20 种编程语言
import { nanoid } from 'nanoid'
model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT"

支持现代浏览器、IE 使用 Babel、Node.js 和 React Native。

4. SwiftUI Pull to Refresh (for iOS 13 and iOS 14)

iOS 15 (SwiftUI 3.0) 的时候,苹果才加了下拉刷新组件refreshable,本文作者借助 UIKit 的UIRefreshControl,将这个功能带到 iOS 13 和 iOS 14,源码在此

iOS 15 的refreshable

struct ContentView: View {

    var body: some View {
        List {
            ...
        }
        .refreshable {
            await Network.load()
        }
    }
}

作者的实现版本:

struct ConventView: View {

    var body: some View {
        List {
            ...
        }
        .onRefresh { refreshControl in
            Network.load {
                refreshControl.endRefreshing()
            }
        }
    }
}

5. RxSwift 6 更新内容

作者是一个台湾的开发者,所以是繁体文章,阅读无障碍,也可以直接看官方英文文档

  • 新的 logo
  • 將 從 RxCocoa 移植到 RxSwiftBinder
  • RxSwift 新增 withUnretained
  • 透過 來自動建立 s@dynamicMemberLookup``Binder
  • Infallible
  • Observable<Data> 新增 decode(type:decoder:)
  • Variadic drive() 和 emit()
  • 將 的結果調整成 Single``Result
  • distinctUntilChange(at:) 支援 Key Paths
  • 新增 ReplayRelay
  • 新增 的 functional builderDisposeBag
  • 重新命名運算子

6. eBPF 完全入门指南

eBPF 源于 BPF,本质上是处于内核中的一个高效与灵活的虚类虚拟机组件,以一种安全的方式在许多内核 hook 点执行字节码。BPF 最初的目的是用于高效网络报文过滤,经过重新设计,eBPF 不再局限于网络协议栈,已经成为内核顶级的子系统,演进为一个通用执行引擎。开发者可基于 eBPF 开发性能分析工具、软件定义网络、安全等诸多场景。本文将介绍 eBPF 的前世今生,并构建一个 eBPF 环境进行开发实。

7. TypeScript 研发规约落地实践

TypeScript 的开发规范。

8. kswapd 介绍

内存回收作为 Linux kernel 内存管理中比较复杂的部分,需要考虑各种场景,根据 page 的冷热状态,释放部分内存,满足其他进程的运行,kswapd 担当了重要的工作,开源社区还在不断完善和优化中。

9. 揭开 C++ lambda 的神秘面纱

lambda 已经成为 C++中一个强大的工具,了解 lambda 的使用以及底层实现原理,能够帮助我们更加高效更加便捷的进行编码。希望本文能够帮助到您。

10. 深入了解 Go 语言与并发编程

在 Go 的并发编程模型中,不受操作系统内核管理的独立控制流不叫用户线程或线程,而称为 Goroutine。Goroutine 通常被认为是协程的 Go 实现,实际上 Goroutine 并不是传统意义上的协程,传统的协程库属于用户级线程模型,而 Goroutine 结合 Go 调度器的底层实现上属于两级线程模型。

Go 搭建了一个特有的两级线程模型。由 Go 调度器实现 Goroutine 到 KSE 的调度,由内核调度器实现 KSE 到 CPU 上的调度。Go 的调度器使用 G、M、P 三个结构体来实现 Goroutine 的调度,也称之为 GMP 模型。

11. MongoDB 全方位知识图谱

MongoDB 是一个强大的分布式存储引擎,天然支持高可用、分布式和灵活设计。MongoDB 的一个很重要的设计理念是:服务端只关注底层核心能力的输出,至于怎么用,就尽可能的将工作交个客户端去决策。这也就是 MongoDB 灵活性的保证,但是灵活性带来的代价就是使用成本的提升。与 MySql 相比,想要用好 MongoDB,减少在项目中出问题,用户需要掌握的东西更多。本文致力于全方位的介绍 MongoDB 的理论和应用知识,目标是让大家可以通过阅读这篇文章之后能够掌握 MongoDB 的常用知识,具备在实际项目中高效应用 MongoDB 的能力。

12. 如何做到修改了 node_module 中的包,却不受重新安装的影响

利用了yarn patch-package 命令。

13. C++高性能大规模服务器开发实践

14. 深度解析 Jetpack Compose 布局

本文会为您讲解由可组合项和修饰符提供支持的组合布局模型,并深入探究其背后的工作原理以及它们的功能,让您更好地了解所用布局和修饰符的工作方式,和应如何以及在何时构建自定义布局,从而实现满足确切应用需求的设计。

15. Tao of Node - Design, Architecture & Best Practices

Node 之道--设计、架构和最佳实践。

作者还有另一篇 React 之道

16. React Libraries for 2022

本文作者罗列出了开发 React 项目所需的各种类型的库以及推荐他们的原因。

17.一文读懂现代 Android 开发最佳实践

MAD 的全称是 Modern Android Development,它是一系列技术栈和工具链的集合,涵盖了从编程语言到开发框架等各个环节。

18. 【Modern C++】深入理解移动语义

C++11 新标准重新定义了 lvalue 和 rvalue,并允许函数依照这两种不同的类型进行重载。通过对于右值(rvalue)的重新定义,语言实现了移动语义(move semantics)和完美转发(perfect forwarding),通过这种方法,C++实现了在保留原有的语法并不改动已存在的代码的基础上提升代码性能的目的。

19. Linux 性能优化全景指南

20. QUIC 和 HTTP/3 队头阻塞的细节

与 HTTP/2 相比,HTTP/3 有很大的性能改进,这主要是因为它将底层传输协议从 TCP 改为基于 UDP 的 QUIC。在这篇文章中,我们将深入了解其中的一项改进,即消除“队头阻塞”(Head-of-Line blocking, 简写:HOL blocking)问题。

我将首先介绍队头阻塞问题,然后在整个 HTTP 历史中跟踪它的不同形式。我们还将研究它如何与其他系统交互,如优先级和拥塞控制。我们的目标是帮助人们对 HTTP/3 的性能改进做出正确的判断,而这(剧透)可能不像营销材料中所说的那样令人惊讶。

21. Fair 在 58 同城拍客 App 中的实践

Flutter 相比 React Native 最大的缺点就是无法做到热更新组件。目前业界公开出来解决方案的只有 58 同城的 Fair。

本文旨在为大家提供 Fair 在实际项目中落地的完整案例,包含了使用 Fair 进行动态页面改造、复杂场景使用、接入过程中遇到的问题、Fair 接入前后的性能对比、热更新方案设计等等内容。

关于 Fair 的其他文章: 《Fair 逻辑动态化架构设计与实现》

《Fair 逻辑动态化通信实现》

《Fair 下发产物-布局 DSL 生成原理》

《Fair 逻辑语法糖设计与实现》

《Fair 热更新设计与实现》

22. 学习 Rust 你需要一个认知框架

如果你学习 Rust 的过程感觉到艰难、痛苦或迷茫,不妨看一下这篇文章。 但如果你学 Rust 感觉很轻松,那这篇文章就对你无用,可以忽略。

23. 工商银行近 20 年实时大数据平台建设历程

工商银行从 2002 年开始建设数据集市,当时主要使用 Oracle 类单机版的关系型数据库。随着数据量不断增加,开始引入 TD、ED 等国外高端一体机。2014 年工行正式基于 Hadoop 技术建设了大数据平台,在其之上构建了企业级数据湖及数据仓库。2017 年,随着 AI 技术的兴起,又开始建设机器学习平台,2020 年开始建设数据中台和高时效类场景。

24. Kafka 3.0 新特性全面曝光,真香!

kafka3.0 的版本已经试推行去 zk 的 kafka 架构了,如果去掉了 zk,那么在 kafka 新的版本当中使用什么技术来代替了 zk 的位置呢,接下来我们一起来一探究竟,了解 kafka 的内置共识机制和 raft 算法。

25. Git Commit 规范化工具

大部分人的 commit 完全看不出改了什么东西,在团队人多的时候规范 commit 格式是很有必要的。