JasonBourne

数据结构与算法

学习建议 掌握基础:从数组、链表、栈、队列等基础数据结构开始,逐步深入到树、图、哈希表等复杂结构。掌握排序、搜索、递归、动态规划等基本算法。 实践为主:多刷题,使用平台如 LeetCode、Codeforces 等锻炼思维。理解常用算法的实际应用场景。 关注效率:分析算法的时间和空间复杂度,学会取舍。 系统学习:阅读经典教材如《算法导论》、《编程珠玑》等,夯实理论基础。 ...

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

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

数据结构与算法:位图

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

webrtc 学习

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

服务治理:限流

定义 限流是指在单位时间内限制接口的请求数量。其主要作用有两个: 保护服务的处理能力:避免因流量洪峰导致系统超载或崩溃。 防范恶意调用:防止人为或恶意的频繁请求耗尽系统资源。 限流位置 客户端:在客户端或前端直接限制用户的请求频率。例如,用户提交表单时设置按钮的防重复点击,或通过前端代码限制调用频次。这样可以有效降低无意义的请求传递到后端。 ...

队列与日志对比

日志无处不在:系统的基础 日志结构在许多关键系统中起着基础性的作用: 关系数据库:数据库首先写入预写日志(WAL),以确保事务的原子性和持久性。即便数据库崩溃,所有表的数据也可以从 WAL 中重建。 文件系统:如 XFS 文件系统,先将文件元数据的更改写入日志,然后再写入文件本身,以保证一致性。 分布式系统:Raft、ZAB、Paxos 等状态机复制协议依赖日志,确保所有副...

RabbitMQ 入门指南

RabbitMQ是目前非常热门的一款消息中间件,其凭借高可靠、易扩展、高可用及丰富的功能特性受到众多开发者的青睐,在互联网、金融传统行业中都在大量的使用。 消息中间件 什么是消息中间件 消息中间件,也称消息队列,是一种在分布式系统中用于消息通信、传输和处理的软件,它提供了异步通信的机制,解耦了系统中的不同服务或组件,使它们能够以松耦合的方式进行交互。 它一般有两种传递模式:点...

git分支管理策略

main: 具有无限生存期的主要分支,用于存放稳定的、可发布的代码。 dev: 作为主开发分支,所有的功能分支都会从这里拉取,并在开发完成后合并回这个分支。 feature: 每开始一个新功能都要从dev分支拉取一个新的功能分支。命名为 feature-*。完成后合并回 dev 分支。功能分支通常仅存在于开发人员存储库中,而不存在于origin 中。功能完成后,可以直接删除...

Twitter工程师如何设计从0到1的百万级并发应用

设计一个拥有上百万用户的系统是很有挑战性的,这将是一个不断优化、持续改进的过程。在本章中,我们先创建一个单用户的系统,然后逐渐将其扩展成可以服务上百万用户的系统。读完本文,你将掌握几个能帮助你破解系统设计面试难题的技巧。 单服务器配置 万里征途总是从第一步开始的,构建一个复杂系统也是如此。我们从简单的部分着手,先让所有的功能都在一个服务器上运行。图1-1展示了如何配置单台服务器,让一切都...