数据结构
文章平均质量分 80
YahirQ
你好,我是YahirQ,一个写了十年代码的“老”程序员。
我的技术地图有点广:以 .NET 为根据地,也曾远征 Java、C++、Python 的江湖,并用 Vue、SQL 和 iOS 开发过不少应用。这些经历让我明白,技术之道,万变不离其宗。
而现在,我选择了一条“向下扎根”的道路——嵌入式开发。我着迷于代码如何直接驱动硬件,享受在资源受限的环境下创造价值的乐趣。这对我而言,是一个全新的起点。
在这里,我将以一个“资深新手”的视角,记录并分享从传统软件到嵌入式世界的转型之路。我的文章会力求通俗易懂,既有硬核的代码分析,也有踩坑填坑的实战记录。期待能与志同道合的你一起学习,共同成长!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
高性能存储系统经典范式:环形缓冲区 + 顺序磁盘 I/O
本文探讨了高性能存储系统的经典设计范式:内存环形缓冲区+顺序磁盘I/O。该方案通过环形缓冲区解决内存与磁盘速度不匹配问题,利用零动态分配和无锁设计实现高效生产消费解耦;同时采用顺序I/O最大化磁盘吞吐(HDD/SSD均受益)。工作流程包括数据生产、批量聚合、顺序写入和文件分段管理。高级优化技术涵盖Direct I/O、批量化、无锁设计和零拷贝等。该范式已广泛应用于Kafka、数据库WAL、网络包捕获等场景,有效平衡了性能与持久化需求,是构建高效存储系统的基石方案。原创 2026-04-29 17:16:14 · 594 阅读 · 0 评论 -
环形缓冲区(Ring Buffer / Circular Buffer)详解:原理、优势、应用与高性能实现
环形缓冲区详解:原理与应用 环形缓冲区是一种高效的FIFO数据结构,通过固定大小的连续内存和取模寻址实现确定性O(1)时间复杂度的数据传递。其核心优势包括避免动态内存分配、缓存友好、无需数据搬移以及天然支持批量和DMA传输。特别适合单生产者单消费者(SPSC)场景下的无锁并发实现。本文系统分析了环形缓冲区的数据结构、操作逻辑和设计权衡,并探讨了其在嵌入式系统、网络协议栈和高性能计算中的应用实践。通过批量读写处理和DMA优化,环形缓冲区能够显著提升系统性能,是构建低延迟、高吞吐系统的关键组件。原创 2026-04-29 15:56:31 · 874 阅读 · 0 评论 -
堆的维护时间复杂度
要回答这个问题,我们首先要明确堆是什么?堆的构建过程是什么样的?堆排序是什么?再来计算它们的时间复杂度。呦呦鹿鸣图解大顶堆的构建、排序过程堆就是利用完全二叉树的结构来维护的一维数组。堆可以分为大顶堆和小顶堆。大顶堆:每个结点的值都大于或等于其左右孩子结点的值。小顶堆:每个结点的值都小于或等于其左右孩子结点的值。如果是排序,求升序用大顶堆,求降序用小顶堆。一般我们说topK问题,就可以用大顶堆或小顶堆来实现,最大的 K 个:小顶堆最小的 K 个:大顶堆自底向上建堆和自顶向下建堆。原创 2024-01-01 23:23:10 · 1470 阅读 · 0 评论 -
优先队列的时间复杂度
这个问题主要分为两个部分:优先队列是什么?优先队列的时间复杂度是多少?原创 2023-12-15 14:57:14 · 4812 阅读 · 0 评论 -
算法的时间复杂度是什么?
时间复杂度是用来估算出程序的运行时间的。我们通常会估计算法的操作单元数量,来代表程序消耗的时间。随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。原创 2023-12-15 14:30:52 · 904 阅读 · 0 评论 -
【性能优化实战】一段高性能代码的诞生之旅——如何写出高性能代码
本文通过对一段简单、低效的代码从多个不同层面逐步对其进行性能优化,力求把这段代码的性能提升到最大。以此演示我在工作中常用的几种性能优化手段。原创 2022-07-10 21:49:14 · 1479 阅读 · 6 评论 -
.net软件、网站性能优化
不用改代码逻辑的提速方式 计算机里面,数据类型,比如char(1 个字节)、int(4个字节)、float、double。所以无符号整数能用char的就不要用unsign int,能用float的就不要用double; 计算机里面除法比乘法慢,乘法比加减慢,好像减法比加法慢一些(不确定),位运算比加减快; float 或者 double 类型变量能用乘法的就不用除法。比如除以3,可以写成乘以0.3333; 用位运算的都用位运算; 代码逻辑: 提高代码可读性,命名规范,减少无效逻原创 2020-05-21 13:05:27 · 1192 阅读 · 2 评论 -
C#一颗简单多叉树的实现(原理、广度优先遍历、深度优先遍历)
实现原理:多叉树中的节点有两个域,分别表示节点名以及一个链表,该链表存储其子节点的地址。根据用户输入进行深度递归调用建树。另外还实现了一个层次优先遍历函数。该函数用一个队列实现该多叉树的层次优先遍历。首先将根节点入队列,然后检测队列是否为空,如果不为空,将队列出队列,访问出队列的节点,然后该节点的子节点指针入队列,依次循环下去,直至队列为空,终止循环,从而完成整个多叉树的层次优先遍历。首先原创 2015-07-05 09:22:22 · 12037 阅读 · 2 评论
分享