
设计
文章平均质量分 75
春夜喜雨
好雨知时节.当春乃发生.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SQLite中SQL的解析执行:Lemon与VDBE的作用解析
词法分析tokenize.c):生成 Token 序列;语法与语义分析(Lemon 生成的parse.c):检查语法合法性并验证语义;中间代码生成:将 SQL 转化为 Opcode 序列;中间代码执行(VDBE):解释执行 Opcode,完成数据库操作;存储交互:通过 B + 树和分页管理实现数据的物理存储。Lemon 和 VDBE 作为核心组件,分别解决了 “如何解析 SQL” 和 “如何执行 SQL” 的问题,共同支撑了 SQLite 轻量高效的数据库功能。(注:文档部分内容由 AI 润色生成)原创 2025-07-25 19:56:28 · 985 阅读 · 0 评论 -
高并发系统下Mutex锁、读写锁、线程重入锁的使用思考
本文对比了三种锁机制——Mutex互斥锁、RWLock读写锁和ThreadMutex可重入锁的工作原理。Mutex仅允许单线程访问;读写锁区分读/写状态,实现读共享/写互斥;可重入锁允许持有线程重复加锁。高并发系统设计关键在于"快进快出"原则:缩短锁持有时间、避免在锁内进行IO/计算/内存操作,建议使用原子操作替代传统锁。原创 2025-05-26 21:42:40 · 459 阅读 · 0 评论 -
关于高级工程师的想法
关于高级工程师,自己的想法是这样的,一是相关的行业经验积累,二是抽象总结与表达能力,三是心态上从容笃定,四是能够接受更长时间的不确定性。原创 2025-01-17 21:00:00 · 235 阅读 · 0 评论 -
软考系统架构师一些知识点记录--质量评估效用树Utility Tree
可以理解为信息安全Security、数据安全security、系统安全security,也即系统不容易被病毒、黑客所攻破,系统比较安全;也或操作需要授权,权限管理等。例如:也可能通过负载均衡多个主机提供服务,一个网络出问题了,负载转到另一个机器上服务,服务高可用;关注的是系统能够支持的服务响应速度,系统能支持的容量限额等要求,或是系统对系统资源的占用限额要求。可以理解为修改定制比较容易,定制业务相关的新功能特性时,耗费的开发成本比较低,部署成本比较低。例如:可能通过热双机,一个主机出问题了,另一个启用;原创 2024-10-24 22:05:16 · 641 阅读 · 0 评论 -
实现一个自定义STL类模版DataStorage
尝试自己来实现一个模版类,来满足一些常用语法、常用接口的使用。综合std::vector与std::array特点,提供一个由这两个类对象组合出来的内存结构类模版,该模版类有一个固定内存块和一个动态内存块,对外提供stl的相关访问方法。原创 2024-08-19 22:01:02 · 864 阅读 · 0 评论 -
leveldb的cache实现研究
近来研究leveldb的数据cache,又发现了一些新的细节,发现的这些细节还是很有趣的,一起来看看。原创 2024-06-07 20:57:06 · 831 阅读 · 0 评论 -
软考系统架构师一些知识点记录-2-系统质量属性与架构评估
接着上次的内容,这次记录的是”第三篇-架构设计高级知识---系统质量属性与架构评估“的内容,这一节在软考时,也出了有不少题目。原创 2024-05-31 17:27:50 · 538 阅读 · 0 评论 -
惊艳的KMP字符串匹配算法
KMP字符串匹配算法是早有耳闻的,但之前并未去了解它的字符串匹配思路;昨天晚上偶然翻书看到,发现算法设计思路非常棒,在自己看来,可以用惊艳来形容。原创 2024-02-20 10:20:42 · 1078 阅读 · 0 评论 -
堆排序与大顶堆
有一天,别人问到你,你了解 堆排序吗?或者 你对大顶堆了解吗?之前问我的话,我是不太了解的,不过现在了解多了。也期望通过下文,你也能对它了解起来。原创 2023-05-17 22:53:44 · 604 阅读 · 0 评论 -
为什么在leveldb::DB类实现Put/Delete方法
leveldb::DBImpl并不是实现leveldb::DB全部方法,leveldb::DB也实现了一些方法:Put,Delete就是其中两个。原创 2023-03-24 22:50:09 · 535 阅读 · 0 评论 -
leveldb的Compaction线程
在leveldb中,有一个全局的后台线程BGThread,用于数据库的MinorCompact与MajorCompact。重点关注“全局线程”:这个标识着无论一个进程打开多少个leveldb库,该Compact线程只有一个;原创 2023-03-24 22:41:04 · 484 阅读 · 0 评论 -
读写锁RWLock简单实现研究
读写锁在服务端程序开发时,用的还是比较广泛的一种锁,比较适合用于多读少写的场景。多读少写场景,可以减少加锁时间;因为能够对大多数的读场景减少加锁时间,也一定程度减少多线程程序的编写难度。原创 2023-01-15 21:19:19 · 574 阅读 · 0 评论 -
shared_ptr代码研究
shared_ptr被使用的很广泛,许多经典库使用share_ptr作为实现函数的接口类型使用。出share_ptr构建时:会构建出两个指针,一个用来指向维护的元素,一个用来指向元素的计数管理类对象。原创 2023-01-05 20:43:19 · 939 阅读 · 0 评论 -
leveldb的sstable-ldb解析
leveldb的sstable-ldb文件作为sorted-stable-table,是一个自成体系的单数据库文件,自身就包含了排序索引信息,以及相应的key,value信息;原创 2022-10-19 20:31:45 · 666 阅读 · 0 评论 -
多线程下类对象的服务承诺探讨
多线程下,哪些需要**类本身**处理资源共享冲突,哪些需要**类调用**方保证共享冲突。**类对象** 与 **调用者** 各自应该有哪些服务承诺?原创 2022-07-28 21:10:03 · 244 阅读 · 0 评论 -
std::make_shared特点
std::make_shared的使用,从堆上内存分配的角度来看,对比直接使用std::shared_ptr构造,可以减少一次堆内存的申请。原创 2022-06-19 10:59:14 · 5233 阅读 · 0 评论 -
简单读写锁实现研究
当我们想实现一个读写锁的时候,我们需要清楚的知道:读写锁有哪些功能特点?读写锁的局限性?读写锁实现后的使用效果是什么?原创 2022-03-19 17:27:08 · 548 阅读 · 0 评论 -
基类与实现类分离实践
基类与实现类分离,在google开源代码中有大量的使用,便于减少依赖,把类方法声明和实现分离。原创 2022-03-08 23:04:53 · 295 阅读 · 0 评论 -
生产数据与消费数据实现思考
假设有两个线程:一个线程不断的写数据,一个线程不断的读取数据、处理数据。原创 2022-01-03 19:03:39 · 660 阅读 · 0 评论 -
qsort代码解析
最近看The C Programming language 这本书,看到里面qsort的代码;这次感受又不太一样,觉得里面qsort实现的很优雅。原创 2022-01-03 18:40:06 · 485 阅读 · 0 评论 -
指针与指针的指针
指针与指针的指针,本质上来看,两者都是存储地址,体现在语言特性上来看的话,一个是一层指针,一个是二层指针。原创 2021-11-28 13:55:03 · 1328 阅读 · 0 评论 -
std::move与std::forward右值引用研究
之前总看到std::move, std::forward提供右值引用,但原理一直没有去细研究过;想当然以为是std::move/std::forward内部识别了stl库的几种类型,提供的内部参数转移;原创 2021-09-18 20:03:31 · 354 阅读 · 1 评论 -
C语言整数取值范围-负数多1的问题
整数范围上,负数是多一个的,不知道大家是否好奇?BYTE/char型取值范围是:[-128, +127],为什么是-128,为什么不也是-127?原创 2021-09-01 22:08:26 · 678 阅读 · 0 评论 -
如何高效的读写文件思考
如何高效的读写文件是大多数涉及磁盘读写程序都关注的一个问题。特别是海量数据的时候,有时候不同的读写方式差别的数量级会有1~2个数量级。原创 2021-09-01 21:36:20 · 560 阅读 · 0 评论 -
栈溢出分析-stackoverfow-Segmentation fault: 11
stack:栈,也常常称作堆栈;stack vs heap:栈(堆栈)与堆,从stack翻译来看一叠,一摞,一堆,感觉和heap翻译差不多,不过heap表达的是凌乱的一堆,stack表达的也是一堆,但是一层层叠放的、一摞一摞的,有规律的一堆:-)原创 2021-08-22 20:01:47 · 620 阅读 · 0 评论 -
也来分析BloomFilter
BloomFilter是在1970由Burton Howard Bloom发表。也因此,方法名上带了Burton Bloom先生的名字Bloom,通常我们称为这个方法布隆过滤器。原创 2021-08-15 15:46:55 · 257 阅读 · 0 评论 -
计算机存储结构与程序局部性原理
计算机存储结构本身也是一个不小的领域,可以探讨的地方很多,和程序局部性原理关系是与软件性能联系比较紧密的一块了。原创 2021-07-18 11:35:08 · 649 阅读 · 0 评论 -
std::string存储结构与字符串结束符
std::string确实是一个很棒的类结构。之前使用时,还在想,std::string如何保存末尾的字符串结束符,std::wstring时呢又是如何;一般在vs上调试查看时并没有看到字符串结束符啊;另外结束符算不算到size里面去呢,要算到分配的空间里面去吧;带着这些疑问,去看下string的源码,就会比较清楚了。原创 2021-07-16 22:15:33 · 2444 阅读 · 0 评论 -
leveldb认识与Manifest解析
Leveldb是一个设计很好的文件KV数据库;KV数据的需求简单,支持put/get/delete即可,所以使用基本文件结构管理就可以支持。原创 2021-05-29 19:30:10 · 874 阅读 · 0 评论 -
关于图形精度
图形处理的过程中,精度的处理是很重要的:绝对的符合要求通常是一个点;精度处理的意义在于扩大符合要求的范围区间,在某个区间范围内,都认为是符合要求的;从而更贴近实际处理。原创 2017-03-09 22:53:39 · 830 阅读 · 0 评论 -
Release下随机出现问题分析定位(Windows下)
最近碰到一个问题:Release随机出现,Debug下不出现的问题1 分析的时候采用方法:A. 先界定问题范围:通过进一步去掉影响因素,缩小定位问题的范围,例如 a. 减少排查范围:用例中有很多元素,可以尝试删除掉某类元素,从而进一步减少排查范围 b. 确立排他条件:其他类元素同等条件会不会出问题原创 2016-05-12 23:05:19 · 545 阅读 · 0 评论 -
笔记-关于云平台的架构原则
今天听一个培训,讲云平台,其中讲到几个架构原则,觉得挺好,特记录如下1. 面向失效的设计所有组件都可能会失效,如何应对失效情况2. 组件解耦减少组件间关联,例如通过工单的机制3. 弹性扩展4. 并行计算5. 安全性原创 2015-08-27 13:45:28 · 979 阅读 · 0 评论 -
设计模式-GOF行为模式(6-11)
6. 备忘录Memento7. 监听Observer8. 状态State9. 策略Strategy10. 模板Template11. 访问者Visitor原创 2017-08-10 21:44:01 · 369 阅读 · 0 评论 -
设计模式-GOF行为模式(1-5)
1. 责任链Chain of Responsibility 2. 命令Command 3. 解释器Interpreter 4. 迭代器Interator 5. 中介者Mediator原创 2017-08-10 21:35:35 · 523 阅读 · 0 评论 -
设计模式学习-GOF结构型设计模式
Golf 四人组 定义的设计模式有23种,创建型的5种,结构型的7种,行为的11种;关于结构型的7种模式如下:1. 接口Adapter2. 桥接Birdge3. 组合Composite4. 装饰Decorator5. 外观Fasade6. FlyWeight享元7. 代理Proxy Ada原创 2017-06-12 23:16:28 · 445 阅读 · 0 评论 -
设计模式学习-创建型模式
近来看设计模式的一些内容,发现一些和自己认知有所不同:创建型模式的话,是最常用的模式,像singleton,factory,具体还有那种,就在看设计模式的过程中了解区分清楚的创建型模式:Factory Method:Abstract Factory MethodBuilderprototypesingletonSimple FactoryFactory Method特点:一个工厂构造一原创 2017-05-16 23:02:13 · 596 阅读 · 0 评论 -
utf8格式设计分析
如果你来设计一个多字节的格式,你将如何设计呢?首先:要求兼容asc的可见字符0x00-0x7F那么:二进制的范围里0b0xxxxxx被占用了,作为开头的标示符号,首个二进制码流是0单字节剩余的二进制范围是:0b1xxxxxx (0x80-0xFF)经过这一步后,字节的开头拆分为两种:0b0xx...原创 2020-03-14 00:10:23 · 409 阅读 · 0 评论 -
制作简单fileServer传输文件
制作简单fileServer传输文件制作FileServerfileServer/fileClient需求分析信息传输的序列图上传的序列图:下载的序列图:实现代码样例制作FileServer很多时候,我们有在不同电脑上传输文件的需求,例如局域网的两台电脑,例如本机与一台网络上的Linux/unix服务器。这时我们通常可以考虑几种形式来满足这种需求:使用社交软件(如qq)进行传输局域网情...原创 2019-01-08 20:57:07 · 2458 阅读 · 0 评论 -
读书笔记-系统分析师-领域
对于一个小的系统,它的 层次 / 服务分级 领域独立服务-核心服务层: core services / optional services 领域相关服务-域服务层: domain specific central services / domain specific optional services 应用服务层: applicaion specific service include mid原创 2017-05-26 21:47:33 · 590 阅读 · 0 评论 -
QThread多线程简单触发式消息响应服务
使用的场景: 例如 大型超市的收银-多个收银柜台应对客户的买单需求每个收银柜台相当于一个线程收银柜台提供收银的服务,每次服务都是对客户买单事件的响应反向设计来看: // 收银服务: 提供对客户收银等服务 class BillService { event(QEvent e); }; // 收银柜台:提供独立的收银线程环境,并一直等待客户 class BillThre原创 2017-05-18 23:11:15 · 1142 阅读 · 0 评论