JasonBourne

系统设计中的快速估算技巧

拿到一堆数据,去做架构也好,设计也好,可行性分析也好,工程上需要的是严谨。但是也有很多场景,比如即时的问题争辩和讨论,我们往往需要的是快速、直接的估算,这样的数据显然不需要非常精确,甚至可以说它一定会非常粗略,我们的目标往往只停留在 “量级” 的级别,但是我们依然可以对方案有一个具体的、量化的认知,这比像 “海量”、“高吞吐”、“低延迟” 这类感性的、描述性的表述还是要清晰和有力得多。 ...

数据结构与算法:不相交集合(Disjoint set)

并查集 并查集(Disjoint-set)是一种数据结构,用于处理一些不交集的合并及查询问题。并查集支持如下操作: 查询:查询某个元素属于哪个集合,通常是返回集合内的一个“代表元素”。这个操作是为了判断两个元素是否在同一个集合之中。 合并:将两个集合合并为一个。 添加:添加一个新集合,其中有一个新元素。添加操作不如查询和合并操作重要,常常被忽略。 由于支持查询和合并这两...

数据结构与算法:位图

位图(Bitmap) 是一种数据结构,使用位(bit)来标记值的存在或状态。每个元素的状态由一个位表示(0或1),从而可以高效地进行存储和操作。位图常用于需要快速判断某个值是否存在或需要节省存储空间的场景。 位图的优点 节省空间:位图通过使用位(而不是字节或更大的数据类型)表示数据,占用的存储空间非常小。例如,一个32位整数可以表示32个状态(0或1),而不是仅表示一个数值。 ...

Go 标准库学习:os

os包是Go语言标准库中的一个重要包,提供了与操作系统交互的功能。它通过封装了一系列系统调用,使得开发者可以在Go程序中访问和操作底层操作系统的资源。os包的实现依赖于不同的操作系统平台,以提供特定平台上可用的功能。 常用方法 os包提供了丰富的方法和函数,用于处理文件、目录、进程、环境变量等操作系统相关的功能。下面是一些常用的方法: 文件和目录操作:Create、Open、Mk...

Go 编程模式:MAP-REDUCE

在本篇文章中,我们学习一下函数式编程的中非常重要的Map、Reduce、Filter的三种操作,这三种操作可以让我们非常方便灵活地进行一些数据处理——我们的程序中大多数情况下都是在到倒腾数据,尤其对于一些需要统计的业务场景,Map/Reduce/Filter是非常通用的玩法。下面先来看几个例子: 基本示例 Map示例 下面的程序代码中,我们写了两个Map函数,这两个函数需要两个参数, ...

Go 编程模式:委托和反转控制

反转控制 IoC – Inversion of Control 是一种软件设计的方法,其主要的思想是把控制逻辑与业务逻辑分享,不要在业务逻辑里写控制逻辑,这样会让控制逻辑依赖于业务逻辑,而是反过来,让业务逻辑依赖控制逻辑。在《IoC/DIP其实是一种管理思想》中的那个开关和电灯的示例一样,开关是控制逻辑,电器是业务逻辑,不要在电器中实现开关,而是把开关抽象成一种协议,让电器都依赖之。这样的编...

Go 编程模式:FUNCTIONAL OPTIONS

在本篇文章中,我们来讨论一下 Functional Options这个编程模式。这是一个函数式编程的应用案例,编程技巧也很好,是目前在 Go 语言中最流行的一种编程模式。但是,在我们正式讨论这个模式之前,我们需要先来看看要解决什么样的问题。 配置选项问题 在我们编程中,我们会经常性的需要对一个对象(或是业务实体)进行相关的配置。比如下面这个业务实体(注意,这仅只是一个示例): type ...

Go 编程模式:错误处理

错误处理一直以一是编程必需要面对的问题,错误处理如果做的好的话,代码的稳定性会很好。不同的语言有不同的出现处理的方式。Go语言也一样,在本篇文章中,我们来讨论一下Go语言的出错出处,尤其是那令人抓狂的 if err != nil 。 在正式讨论Go代码里满屏的 if err != nil 怎么办这个事之前,我想先说一说编程中的错误处理。这样可以让大家在更高的层面理解编程中的错误处理。 C...

webrtc 学习

基本概念 音视频采集基本概念 摄像头。用于捕捉(采集)图像和视频。 帧率。现在的摄像头功能已非常强大,一般情况下,一秒钟可以采集 30 张以上的图像,一些好的摄像头甚至可以采集 100 张以上。我们把摄像头一秒钟采集图像的次数称为帧率。帧率越高,视频就越平滑流畅。然而,在直播系统中一般不会设置太高的帧率,因为帧率越高,占的网络带宽就越多。 分辨率。摄像头除了可以设置帧率之外...

Go 编程模式:切片,接口,时间和性能

在本篇文章中,我会对Go语言编程模式的一些基本技术和要点,这样可以让你更容易掌握Go语言编程。其中,主要包括,数组切片的一些小坑,还有接口编程,以及时间和程序运行性能相关的话题。 Slice 首先,我们先来讨论一下Slice,中文翻译叫“切片”,这个东西在Go语言中不是数组,而是一个结构体,其定义如下: type slice struct { array unsafe.Point...