- 博客(664)
- 资源 (3)
- 收藏
- 关注

原创 我写操作系统的一点经验【原创】
我的项目代码: http://code.google.com/p/maray/这两天我在写计划,完成后在此博客公布。发信人: raywill (晓楚), 信区: Linux标 题: 我写操作系统的一点经验发信站: 武汉白云黄鹤站 (2007年09月14日22:39:30 星期五)转瞬2年!Linux版上又见“有人写操作系统吗?”这样的帖子。2年前,有个叫raywill的小子不也是发过
2007-10-07 10:22:00
2479
7
原创 std::move
如果写一个相关的教程,完全不应该从 std::move 入手,而是应该从如何降低对象拷贝代价入手。所以,std::move 的确什么事情都不做,它只是提示编译器,去调用支持 move 语义的函数而已,具体做事情的,是这些函数。Note:STL 中,vector 的 emplace_back、push_back 等也实现了支持 move 语义等版本。对于这种情况,就算用了 std::move,也没有什么用。有些时候,我们不希望做深拷贝。此时,下面的逻辑取决于 A 的拷贝构造函数实现,一般来说,会把。
2025-03-19 22:20:47
324
原创 DailyNotes 增加提醒功能
TODO:准备给 DailyNotes 增加一个提醒功能,准备接入 AI 来做一些事情。试了一下,非常靠谱。具体 DailyNotes 和 Ollama 的交互方式,可以直接调用命令行,也可以走网络API。
2025-03-05 23:40:24
251
原创 深入理解 Clang-Tidy 的窄整形转换警告(Narrowing Conversion)及其配置方法
窄整形转换是指将一个较大范围的数据类型转换为一个较小范围的数据类型,可能导致数据丢失或溢出。常见的转换包括将 int 转换为 short 或将 size_t 转换为 int。如果目标类型的范围比源类型小,则可能丢失数据,尤其是在数值超出目标类型的表示范围时。例子 1:窄整形转换假设我们在 64 位系统中工作,size_t 和 ptrdiff_t 是 8 字节类型,而 int 和 short 是 4 字节和 2 字节类型。如果将一个大范围的类型转换为较小范围的类型,就可能发生溢出或数据丢失。
2025-02-28 03:48:31
943
原创 支持lambda的ctags
universal ctags 安装也简单,直接从 github checkout 编译安装,然后把 ctags 路径放到 PATH 最前面,覆盖默认的 exuberant ctags。universal ctags 能更好地支持现代 C++,例如 using 里定义的类型、lambda 等。如果你发现你的 ctags 不支持 Lambda 函数的跳转,那说明你的 ctags 该更新了。exuberant ctags 在 2009 年就停止更新了,你大概率用的是这一个。
2024-11-11 10:32:21
171
原创 向量执行优化之手工 unrolling
如果只有一个元素,静态unroll 了多个元素,那就会越界访问了。如果编译器知道 bound.end() 和 bound.start() 之间有1024 个元素,那么它就敢大胆 unroll 了。理论上是可以,如果元素多,就走 unroll 分支,元素少就不走 unroll 分支。但是,要知道,编译器并不知道我们这是一个向量化的计算,它怎么会轻易做这样的优化呢?在数据库实现中,我们有一个认知误区:当我们把数据结构组织成向量后,只要写好 for 循环,编译器就会自动帮我们做好 SIMD 优化。
2024-10-23 23:35:56
294
原创 The 48 bit pointer
基于这样一个事实,在部分场景下我们可以对空闲的高 16 位加以利用,存储一些辅助 flag,这样可以让内存结构更加紧凑。为什么高 16 位总是为 0?这是因为,就目前的应用程序需求来说,只使用低 48 位已经足够。位数越少,CPU 构建成本越低。对于 ARM 处理器,可以看到下面的描述。也就是说,48 bit 不是定数,未来也可能变化。如此这样,我们就可以在 HashSlot 里存下更多信息了。的指针地址默认都只使用低 48 位,高16 位总是 0。在 Intel CPU 和 Arm CPU 中,
2024-10-17 04:29:53
349
原创 Disjunct & Conjunct Bloom Filter
Disjunct Bloom Filter:查询元素是否在任意一个集合中(“或”操作)。Conjunct Bloom Filter:查询元素是否在所有集合中(“与”操作)。这两种扩展方法都可以提高集合查询的效率,但选择哪种方法取决于具体的应用需求和场景。
2024-10-02 05:20:23
317
原创 给 git 添加扩展命令
公司里的 git 代码分支既没有和 issue 关联,也没有和 review 关联,每次找起来太费劲。于是,写个脚本吧!没想到 git 添加扩展命令这么方便,早知道这么简单,我的好多工具都做成 git 插件好了!
2024-09-25 23:04:14
621
原创 Dance with Compiler - EP3 ARM64 汇编传参约定以及 restrict 汇编分析
v0 - v7: 对于浮点数和 SIMD(单指令多数据)参数,这 8 个寄存器用于传递前 8 个浮点数参数(每个寄存器可以存储一个 64 位的浮点数,或者一组 128 位的 SIMD 数据)。x0 - x7: 这 8 个寄存器用于传递函数的前 8 个参数(对于整数类型的参数)。如果函数有更多的参数,这些额外的参数会通过栈传递。v0: 用于返回浮点数或 SIMD 类型的结果(例如,float、double、__m128 等)。x0: 用于返回整数类型的结果(例如,int、long、pointer 等)。
2024-09-09 09:53:09
470
原创 Dance with compiler - EP1
此时,我个人理解是:编译器先假设 a 总是可以信任寄存器中的值,当 b 写着块内存时,a 可以读不到最新的修改,当 b 读这块内存时,a 也不需要做任何写回操作使得 b 能读到最新数据。不过,在我们的例子里,我们通过 restrict 关键字欺骗了编译器,实际上 x 和 y 指向了同一片内存,这也导致了最终的结果错误。也是非常考验人的,需要深刻地认识到调整分支概率后编译器可能的行为是什么,才能有的放矢,不然,编译器认为,y 是以指针的形式传入函数体内,说明外部也有指针引用了 y,并且,
2024-09-07 02:58:54
661
原创 使用 Visual Studio 编辑器作为 DailyNotes 的 markdown 编辑器
除了使用 Typora 作为 markdown 编辑器,Visual Studio Code 也是一个非常不错的选择,令人惊喜的是,它也支持从剪贴板粘贴图片到 markdown 里,并且直接把图片保存到指定位置。DailyNotes 是我使用过的最优秀的日常笔记管理工具,为它配置一个好的 markdown 编辑器,可以大幅提升效率。设置方法来源:https://www.cnblogs.com/xbotter/p/17528063.html。通过下面的配置,可以让剪贴板粘贴出来的图片保存到。
2024-08-22 00:54:17
451
原创 假设我写了一段C++循环代码,我希望对这段代码做 profiling,计算出每次循环需要消耗的指令 cycle 数。我应该如何实现这种 profiling?
perf 是一个 Linux 性能分析工具,可以对运行时程序进行详细的硬件事件分析,例如 CPU cycles。perf stat 将会报告各种性能计数,包括指令周期数。使用 perf 工具 (Linux)
2024-07-22 15:03:43
332
原创 论文阅读神器 SonyDPT RP1
我个人还是觉得闲鱼比较香,因为很多人买了电纸书后,不过是三份热度,当做泡面伴侣而已,闲鱼出掉是迟早的,捡漏容易!如果预算还高点,可以去淘宝“暖风家”买,帮忙破解了系统,增加了更多格式和书籍商城的支持,甚至支持键盘鼠标。索尼把整个产品线全部卖给了富士通,去淘宝搜“富士通 电纸书” 也能搜到,新产品价格降低到了3000多点。配套 App 名称:Digital Paper App,用于在电脑上做论文同步。优点:13寸,对阅读论文非常友好!缺点:仅支持 pdf 格式,不支持 epub 等格式。
2024-07-21 22:18:02
864
原创 各种开发脚本备份
My Personal Vim & Bash Setting in OceanBase/AntFin/AlibabaNote:本文内容已做适当脱敏vimrc" call plug#begin('~/.vim/plugins')" Plug 'tomasr/molokai'" Plug 'octol/vim-cpp-enhanced-highlight'" Plug 'vim-airline/vim-airline'" "Plug 'Valloric/YouComplet
2024-07-11 13:11:49
417
原创 2024年浙江省高考分数一分一段数据可视化
不过,浙江是考两次取最大,不是很有代表性。另外,从这个图也可以看出,湖北的高分区段竞争其实非常不激烈,大部分人都只是分母而已。这和浙江形成了巨大的区别,一种可能性的猜想:湖北地区发展极不均衡,仅仅大城市才容易出高分,广大农村地区的普高孩子都是分母。而浙江经济发达,各个地区都教育的投入要高得多,所以竞争更加激烈。江苏只公布到462分以上的,但从表格趋势基本也能窥见一二,和浙江更像。下图根据 2024 年浙江高考一分一段表绘制,可以看到,竞争最激烈的分数区间在620分到480分之间。
2024-07-08 10:53:28
658
原创 如何将 gz 文件通过 local data 导入 OceanBase?
在很多领域,数据的传输是基于 csv,并且,为了方便,属于同一张表的多个 csv 文件还是打包成 gz 文件进行传输。有没有办法把 gz 文件直接导入到 OceanBase 中呢?这种方法有一个弊端:解压 gz 文件,既耗费时间,也耗费存储空间。,然后导入到数据库。这个方案在 v4.3.3 中支持。
2024-06-20 19:21:54
373
原创 OceanBase 列存中多列过滤性能解析
Hi 晓楚,帮评估个OTS替换场景 大概1亿大宽表,查询姿势就是任意字段的组合,进行等值查询+group by/sum这些聚合操作,业务模型大概是这样1亿表,过滤性最强的字段会扫50万左右数据,单SQL OTS现在不超过300毫秒,这个场景能搞定不?还比如,过滤性不确定的情况下,还可以动态地选择三个表达式中的一个来做,做一段时间发现过滤性不好,就换另一个表达式。由此推算,1亿行的场景,也一定可以满足客户对延迟的需求。再比如,在先计算哪个条件的选择上,可以选择过滤性最好的条件先做,这样就可以跳过更多的微块。
2024-06-20 00:13:40
523
原创 通过 github 分析职业研发数量
通过这个命令可以看到该数据库最近半年的 commiter 代码提交次数。将提交次数低于 10 次以下的剔除掉,剩下的就可以当做职业研发了,就能粗略估计出背后的职业研发力量。如何了解一个开源项目背后,到底有多少职业研发呢?换个角度看,依赖开源而生存的商业公司,是否应该做好信息保护呢?的范围,还可以分析出人员流动情况,非常有趣。
2024-06-19 15:26:37
400
原创 如何在 Doris 中通过外表访问 OceanBase 表
然后在 Doris 中通过外表 et1 可以访问 OceanBase 中的 t1 表。其余和 MySQL jdbc 一模一样。
2024-06-15 00:10:01
353
原创 OceanBase 并行执行参数 parallel_servers_target 理解
为了最大程度降低 PX 使用难度,OceanBase 3.1 版起,parallel_max_servers 参数废弃。用户只需用好 parallel_servers_target 即可。
2024-06-13 14:26:11
911
原创 pg_lakehouse 与 datafusion
也就是说,Postgres 基于 pg_lakehouse 做数据湖分析,计算能力主要靠 pg_lakehouse 提供,而不是主要依赖 Postgres 自身的计算引擎能力。它的出现,使得 Postgres 能够轻松访问 S3 等对象存储,轻松访问 Delta Lake 上的表格,具备数据湖分析能力。所以,从原来上看, pg_lakehouse 提供了一组访问数据湖的方法,并将这些方法和 DataFusion 的计算能力结合起来,帮助 Postgres 获得分析数据湖数据的能力。
2024-05-28 11:38:46
1458
原创 duckdb 插件机制研究
插件机制是个好东西。为了你的系统能够获得这个好东西,最好是系统在第一天设计的时候就做好抽象,把每一类系统功能都抽象成集合,每一类功能都支持“运行时可寻址”。在 OceanBase 中,最容易插件化的是系统函数,因为它数量众多,客观上从第一天起就逼迫 OceanBase 把它做成易扩展、易寻址的样子。
2024-05-27 21:16:54
1514
原创 数仓领域,Serving 是什么概念?
在数据仓库(Data Warehouse)和更广泛的数据工程领域中,“Serving”通常指的是将处理和优化后的数据提供给最终用户或应用程序的过程。这包括数据的查询、检索、展示等操作,使得数据能够在决策支持、报告、分析、或机器学习等应用中被有效使用。简而言之,数据“Serving”强调的是数据的最终用途及其可用性。
2024-05-24 18:30:12
381
原创 理解 Hologres 和 MaxCompute 的关系
理解了 Hologres 和 MaxCompute 的关系,就理解了数据仓库(DW)和数据服务(Serving)之间的关系,也有助于理解试试数仓和离线数仓之间的关系。那么,Hologres 的优势是什么呢?回答这个问题之前,我们再看 MaxCompute 和 Hologres 的一个区别:存储成本。可以看到,MaxCompute 可以拥有更低的存储成本,适合海量数据存储。可以看到,MaxCompute 可以拥有更低的计算成本,适合海量数据计算。低存储成本,低计算成本,这正好满足海量数据的数仓的成本需求。
2024-05-24 15:43:20
1431
原创 【概念学习】云上的 IOPS
此句话表明使用 Provisioned IOPS 卷能够提供更一致的性能,相较于其他类型如通用目的SSD或各种优化的HDD,在处理随机和顺序磁盘访问时,可以预期更好的表现,这对于性能敏感的应用是十分重要的。IOPS 买太大通常是浪费,要因地制宜,不大不小是最好的。确定合适的 IOPS 的方式,在 AWS 上是在 CloudWatch 上看 VolumnQueueLength 指标,如果这个指标比分配的 IOPS 大,同时我们又比较关注延迟,那么就应该增加一些 IOPS。
2024-05-14 14:59:34
1067
原创 从ETL与ELT谈起,理解数仓的任务
最近有个朋友,有几十 PB 的异构数据,数据源包括 MySQL、DB2、Oracle、CSV、磁带机,等等,然后他需要把这些数据中的一些信息做关联整合,从这几十 PB 的数据中提取出若干业务字段到数据仓库,做统一分析。
2024-05-06 21:37:27
727
3
原创 OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案
是一个 Oracle 不推荐继续使用的函数,所以 OceanBase 没有对其兼容,取而代之的是兼容了。但是,并不是所有业务都接受修改源码,因为复杂系统里,涉及到的修改点可能无法枚举。这里提供一种临时解决方案:使用 OceanBase PL/SQL 实现一个。可见,上述 PL 代码完全实现了相关功能。
2024-05-06 17:33:35
592
原创 Bitmap 原理简述
为了尽可能解决稀疏编号导致的 bitmap 膨胀,引入了 RoaringBitmap。之前写过一篇 bitmap 应用场景的文章。
2024-04-24 10:52:39
321
原创 OceanBase OLAP collation utf8mb4_bin 优先
utf8mb4_bin是一种二进制的排序规则,比较字符串时直接比较字符串的二进制值,不需要进行复杂的字符比较和排序运算,这样可以有效减少CPU的使用,提高查询效率,特别是在涉及到大量数据操作时,性能优势更为明显。在大数据系统中,如无特别需要,建议 collation 指定为 utf8mb4_bin。
2024-04-23 20:53:27
863
4
原创 ctrl+c后终端没有回显了如何解决?
在正常的程序退出流程中,这些改变过的设置会在程序结束时被恢复到之前的状态,以确保终端的行为回到正常。这种情况通常是因为Ctrl+C中断了某些需要用户输入的命令,而这些命令可能会更改终端的设置,例如关闭回显功能。这意味着终端将保持在非回显模式,所以你在命令行中键入的任何内容都不会被显示出来,虽然它实际上是在背后被处理的。当按下Ctrl+C导致回显消失的情况,这通常是因为你中断了一个正在运行的进程,而这个进程改变了终端的模式设置,特别是改变了“回显”(echo)的配置。输入这个命令后,按回车。
2024-04-23 20:45:24
1200
同义词词林(扩展版)
2010-05-18
FASS简介-抗锯齿原理
2009-01-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人