Table of Contents
Algorithm
Leetcode 968: Binary Tree Cameras
https://dreamume.medium.com/leetcode-968-binary-tree-cameras-f0faa54161e1
Review
Announcing bpftop: Streamlining eBPF performance optimization
今天,我们兴奋地宣布 bpftop 发布了,一个命令行工具设计用来更好地性能优化和监控 eBPF 程序。随着 Netflix 递增地适应 eBPF,应用相同的严格要求到这些应用程序如同我们对其他管理服务一样是及其重要的。在 BPF 的利益和系统负载之间取得平衡是很重要的,确保它加强而不是妨碍了我们的操作效率。这个工具启动 Netflix 拥抱 eBPF 的潜力
介绍 bpftop
bpftop 提供一个动态实时运行 eBPF 程序的视图。它显示平均执行时间,每秒事件数和估计每个程序总 CPU 耗时百分比。这个工具通过只在激活时启动性能统计来最小化过载
bpftop 通过启动一个评测的高效循环,代码提炼和立即反馈来简化 eBPF 程序的性能优化进程。没有 bpftop,优化效果需要手动计算,增加进程的不必要的复杂度。对 bpftop,用户可快速建立一个基线,实现改进和检查加强,提高进程的效率
这个工具一个非常好的特性是以时间序列图显示统计。这个处理可揭露范型和趋势
它如何工作
bpftop 使用 BPFENABLESTATS 系统调用命令来启动全局 eBPF 运行时统计收集,其默认禁止来减少性能过载。它每秒收集这些统计,计算平均运行时间,每秒事件数和估计采样时间内每个 eBPF 程序的 CPU 利用率。这个信息在一个 10 秒移动窗口上以 top 图表形式显示或一个时间序列图。一旦 bpftop 终止,它关闭统计收集函数。该工具用 Rust 编写,在 libbpf-rs 和 ratatui 之间做了装箱平衡
开始
访问工程的 GitHub 主页 来学习更多关于这个工具的东西。我们以 Apache 2 的许可证开源了 bpftop 且期待社区的贡献
Tips
Demystifying Parameterized Protocols in Swift
苹果的编程语言 Swift 持续演进,每次更新引入新的特性和加强。一个这样的提供灵活性和重用性的特性是参数化协议。在本文中,我们将探讨 Swift 中参数化协议的概念,探讨它们是什么,如何工作和你如何平衡它们来写更模块化和自定义的代码
理解 Swift 协议
在我们深入参数化协议之前,让我们简单介绍一些 Swfit 中的协议。一个协议定义一个方法、属性和其他需求满足一个特殊任务或功能片段的企划。在你的类、结构、枚举中适应一个协议意味着你提供一个那个协议里定义的需求功能的实现
介绍参数化协议
参数化协议,也因关联类型而熟知,通过允许你引入类型的一般化使得协议的概念再前进了一步。这使得你可以创建协议与各种类型工作而不需要指定明确的类型直到协议适配时
protocol MyParameterizedProtocol {
associatedtype MyType
func performAction(with value: MyType)
}
这个例子 MyParameterizedProtocol 引入一个关联类型 MyType。协议定义一个方法 performAction(with:) 带一个关联类型的参数。然而,实际的类型 MyType 在协议里是不指定的,它将在类或结构适配的时候被定义
平衡参数化协议
让我们创建一个练习例子来阐述参数化协议的能力。假设我们想要定义一个一般化容器持有任意类型的一个值。我们可使用一个参数化协议获得
protocol Container {
associatedtype Item
var content: Item { get set }
}
struct AnyContainer<T>: Container {
var content: T
}
var stringContainer = AnyContainer(content: "Hello, Swift!")
var intContainer = AnyContainer(content: 42)
在这个例子中,Container 协议引入一个关联类型 Item。AnyContainer 结构然后适配协议,用一个固定类型(T)指明关联类型。这允许我们创建 AnyContainer 的实例带不同的类型
参数化协议的好处
- 代码重用:参数化协议启动创建一般化组件带不同的类型,使代码重用在你的应用程序的不同部分
- 灵活性:参数化协议的适配有选择特殊类型最大化它们的需要的灵活性,加强你的代码的适配能力
- 类型安全:尽管有灵活性,Swift 的类型系统确保适配类型遵从关联类型满足特别的需求
结论
Swift 参数化协议使得程序员写出更通用和重用的代码。通过引入关联类型,Swift 允许你创建协议适配不同类型同时维护类型安全。当你探索这个特性,你将发现新方法来在你的 Swift 工程中设计模块化和灵活的组件
Share
后端开发小结
到目前为止看了很多后端开发面试视频和文章后,有一些小的感受总结一下
第一个印象最深的是整体性思维,即给定一个系统,如果从头开始设计的话,首先要有整体性思维,定义好需求之后,设计系统时先把主要的模块设计出来,即一个简单的小模型,使整个系统可以工作,然后再优化。这样可以避免一个是缺乏整体化,另一个是过早深入某个细节。有了整体分析之后,然后模块就清晰了,后序就可以一个个模块分而治之
第二个是对整个系统有个粗略的估计,对系统的规模和相关关键指标进行简约的估计,不同规模的系统设计会很不一样,这样对要做的系统才有个基本的认识
第三个即是对各个模块逐步展开,根据要解决的细节问题并参考通用的解决方案分析优劣
这样的经验其实是很通用的很好用的,可以套在任何事情上。我们遇到任何事情,要解决它,首先都要先有一个整体上的认识,然后尝试分析简化,把其分成几个步骤,一个步骤一个步骤的解决