- 博客(385)
- 资源 (11)
- 问答 (1)
- 收藏
- 关注
原创 使用Ventoy安装FnOS
Ventoy是一款多功能U盘启动工具,支持同时存放系统镜像和个人文件。安装时需下载Ventoy安装包,运行Ventoy2Disk.exe格式化U盘为exFAT格式,然后将系统镜像拷贝至U盘根目录。使用时需通过BIOS设置U盘为第一启动项,选择系统镜像安装。安装过程中要注意为系统分区预留空间(建议80-90GB),不能全盘分配,以便后续创建存储空间。安装完成后拔掉U盘即可启动新系统。该工具支持版本升级且不会影响U盘中的个人文件。
2025-12-05 22:54:53
309
原创 通过sunshine+moonlight在客厅的电视上玩书房里电脑上的游戏
摘要:本文介绍如何通过Sunshine和Moonlight实现电脑游戏在客厅电视上串流播放。具体步骤:1)电脑安装ViGEmBus驱动和Sunshine服务端;2)电视安装Moonlight客户端;3)手柄连接提供两种方案:蓝牙直连电视(仅游戏内可用)或2.4G接收器连接电脑。作者推荐使用蓝牙连接电视的方案,并指出多手柄情况需要自行测试。全文采用直白表述,避免常见教程关键信息缺失的问题。(149字)
2025-12-01 00:15:27
158
原创 ceph搬迁的时候压力汇总情况
摘要 本文介绍了一个用于分析Ceph集群数据迁移压力的Python脚本。该脚本通过解析ceph pg dump命令输出,统计各OSD节点在数据迁移过程中的读写压力。主要功能包括: 统计待迁移数据(backfill_wait)和正在迁移数据(backfilling)的分布情况 计算各OSD作为源节点(发送数据)和目标节点(接收数据)的PG数量 提供三种压力视图:发送压力、接收压力和总迁移压力 输出结果按压力降序排列,便于识别高负载节点 使用方式简单,只需通过管道将过滤后的PG信息传递给脚本即可。该工具弥补了原
2025-11-28 18:04:00
183
原创 鼓捣4k仓库(一个旧手机,帮你打造4K观影天堂)
摘要:本文介绍了如何利用闲置的旧手机搭建家庭下载服务器,实现远程控制下载4K电影并本地观看。通过Termux安装Aria2下载工具,配置内网穿透使用frp服务,解决了远程操作、低功耗下载和本地观看三大问题。文中详细记录了从环境配置、Aria2安装、内网穿透到实际下载的全过程,提供了一种经济高效的影音下载解决方案,避免在线观看时的画质压缩问题。
2025-11-19 22:00:52
326
原创 聊聊c++的反射
本文探讨了C++中实现反射功能的几种方法。首先介绍了反射的基本概念,即通过字符串动态修改实例字段的能力。然后分析了RTTR框架的局限性,指出其已多年未更新且与高版本GCC兼容性差。重点介绍了两种实用方案:一是使用boost.pfr库进行字段索引访问,但存在只能通过常量索引访问的限制;二是基于nlohmann/json库的JSON序列化方法,通过模板函数实现了通用的字段修改功能,支持多种数据类型转换,虽然性能不高但足够满足一般需求。文章最后展示了这两种方法的具体实现代码示例,包括对Person和Config结
2025-11-10 17:50:09
188
原创 说说c++的异步 聊聊async_completion
我们从https://blog.youkuaiyun.com/dlf123321/article/details/154187272 看完,从流程上来说就走进了异步的大门。
2025-11-03 11:25:54
285
原创 c++ 关于全局变量
总感觉自己c++基础知识很差。最近看代码看到全局变量。我是这么想的。我定义一个global.h里面有一个int a=10;某个cc文件想用这个全局配置,就include globa.h 就行么。额,报错 multiple definition。那么怎么办呢?
2025-09-26 15:40:34
211
原创 关于Unix Domain Socket的使用入门
Unix Domain Socket(UDS) 是一种 在同一台计算机上的不同进程之间进行通信的机制。你可以把它理解为“本地版的网络套接字”,但它不走网络,只在操作系统内部完成数据交换。简单说一个c++每隔几秒钟打印一个字符串,这个字符串就存在进程的内存里,并不是从磁盘里实时读取的。现在想让程序打印另一个字符串怎么办?最近在看ceph的动态参数修改。就观察到了Unix Domain Socket这个技术。假定我有个c++程序,里面有个变量,我现在想修改它怎么办?那这个UDS具体是个啥呢?
2025-09-26 15:02:48
300
原创 关于使用netserver 进行网络速度的测试
1 在server A上启动 netserver 这个程序;端口,就随便写一个不用的值,这里就暂时用88882 在server B上去进行测试,假定server A的ip是192.168.1.1053 在server A上查看网络流量,就可以看到192.168.1.105绑定的网卡上有流量,另外这个流量的计算单位是KB/s,或者MB/s。记得是大B。4 测试完成关闭server A上面的netserver然后 kill5 测试完成关闭server B上面的netperf。
2025-06-22 19:25:30
298
原创 关于sst的统计信息
不是,使用的是 FdWithKeyRange(就是上面的VersionStorageInfo里面的level_files_brief_)即使我们配置单个sst的大小是64MB,L1L2及更下层次的sst最大大小确实是64MB,但是L0层的sst并不受这个限制。下一个问题,在compact进行选择文件的时候,使用的是FileMetaData么?VersionStorageInfo里面的files_的语意说的很清楚了。Version 记录的某个时刻全局所有sst的信息。记录在sst内部的属性信息。
2025-06-17 11:05:32
367
原创 char* Slice的引用拷贝管理
因为org的清理,只是说让org内部不在指向0x4070a3 ,但是0x4070a3的数据(abc)依然没有被覆盖,而且another依然指向0x4070a3。data_ 本身是一个字符指针,指向0x40709a ,这个位置存放的数据是“abcx\0”data_ 本身是一个字符指针,指向0x40709f,这个位置存放的数据是“defx\0”org和another指向同一个位置,那为什么清理了org,another依然可以读到呢?因为slice_list里面的每个元素的data都指向temp2。
2025-06-09 14:32:16
302
原创 RocksksDB写流程
batch里面有个字符串叫rsp_,里面放的就是每次操作的元数据,rsp_ 的格式如下|8个字节的sequence|4个字节count|serialized-kv-1|serialized-kv-2|serialized-kv的结构就是|1个字符的KTypeValue|4个字节key_size|key_bytes|4个字节value_length|value_bytes|所谓的KtypeValue就是表明这次操作是写还是删除。
2025-06-05 15:24:53
851
原创 谈谈iostat
这个简单的可以理解为快递员要给一个18层的公司所有员工送快递,每一层都有一些包裹,对于快递员来说,最好的办法是同一楼层相近的位置的包裹一起投递,否则如果不采用这种算法,采用最原始的来一个送一个(即noop算法),那么这个快递员,可能先送了一个包括到18层,又不得不跑到2层送另一个包裹,然后有不得不跑到16层送第三个包裹,然后包到1层送第三个包裹,那么快递员的轨迹是杂乱无章的,也是非常低效的。aqu-sz: 发出到设备的请求的平均队列长度。w_await 向设备发出的写请求被处理的平均时间(以毫秒为单位)。
2025-05-28 22:02:49
555
原创 关于甲骨文(oracle cloud)丢失MFA的解决方案
前两年,申请了一个招商的多币种信用卡,然后就从网上撸了一个oracle的免费1h1g的服务器。用了一段时间,人家要启用MFA验证。啥叫MFA验证,类似与短信验证吧,就是绑定一个手机,然后下载一个app,每次登录的时候除了你设置的用户名密码外,还需要那个特定手机上展示的一个code。就这么简单。但是,不出意外的话,有意外了,手机换了,当时忘记更新那个app了。然后 就没法登录oracle了。
2025-05-10 17:05:52
1779
原创 c++ stl的插入获取与删除
emplace_front 和push_front 的区别在于,emplace_front可以直接构造数据放到list最前面,不用再次拷贝。vector在头部增加元素或者删除元素 时间复杂度都是O(n)emplace_back和push_back类似。
2025-04-21 10:36:12
382
原创 关于LRU与LFU
第一个unordered_map key是真实的key,value是一个node,包含了真实的value和它使用的频率。简单地说,就是移除那些最长没有被使用的数据。当容量满的时候,直接从第三个unordered_map 里面找最小的key,然后清理对应的value即可。第一个unordered_map key是真实的key,value是真实的value。第二个unordered_map key是真实的key,value 是它的使用次数。这里麻烦的要记录每个key的使用频率,然后找到最小的那个频率。
2025-04-10 14:48:18
455
原创 c++ vector指针的传递
当vector里面是指针,且整个vector作为参数传递给某个方法的时候。大家看上面的输出,比对一下 就能看出来很多问题。在linux下运行代码,上面两个地址是一样的;在windows下运行,上面两个地址不一样。
2025-03-18 22:04:15
291
原创 c++基础概念
Person里面有个方法叫add,参数是Person *p,那么对p的所有修改,会影响真实的外部调用 这叫使用指针做函数参数。假定有个person类,里面有name和age,有个print方法会打印出name和age。但是你在方法内部修改ptr的指向,那原来myptr的位置 依然没有变呀。上面我们说了如果使用一个指针作为函数的参数,那么内部的修改会影响外部。假如在方法里修改了ptr的内容,那么是会影响到外面的myptr。至此以后,p2就是p1,p1就是p2。如上的代码,运行一次大家就能看到引用的意思了。
2025-03-16 00:36:41
126
原创 谈谈Libaio
但是 我找了半天 都没有一个能运行的例子。一段代码不能运行和shi有什么区别?下面的例子是直接把一个person list写入裸盘,再读出来进行校验的例子。网络上有一堆 aio的例子和说明。
2025-02-17 17:03:26
224
原创 线程池判断当前任务组是否都已经结束
最近写测试代码的时候,需要判断提交的线程池里面的任务是否都已经全部执行完成。在网上找到了一圈,发现这篇博客写到算是比较完整的。但是还是有几个问题。
2024-12-08 20:43:47
194
原创 rocksdb merge的简单记录
rocksdb的merge主要是为了解决读&写需要两步的操作。例如定义一个累加器,总得先把之前的值读出来才能加。下面给两个例子,大家可以直接用。
2024-10-10 17:56:14
447
原创 fio的常用命令
使用fio工具测试磁盘性能时,必须注意:写测试只能在未挂载文件系统的裸盘上进行,已挂载且有数据的磁盘不能直接测试。顺序写测试使用5GB文件,参数包括direct I/O、32队列深度、4K块大小;顺序读测试类似,但可设置多线程。测试命令需指定设备路径(如/dev/sdxxxxx)和测试名称。
2024-09-24 16:32:02
215
原创 谈谈Rocksdb的手动Compact
它默认是true,也就是说,如果我现在手动进行了一次compact,那么在我手动的compact执行完成之前,系统不会再进行内部的compact。也就是说即使L0的sst都满了,也不会把L0的sst往下刷,直到手动compact完成。执行上面的逻辑后,系统就会把L4之前在key1和key100范围内的sst都一层一层合并,最终保证在key1和key100范围内的sst都处于L4层。我已经没想明白为什么要这样,手动compact本身就是个低级别的事情,为什么要阻碍系统内部的compact呢?
2024-09-13 15:16:06
617
原创 Rocksdb一些日志
表示:37号 job 需要从L3读1个文件,然后L4读23个文件,一共需要读取1512930764 字节的数据进行合并。而且通过table_file_creation 也可以看到新生成的sst里面kv总数是多少,墓碑是多少。会答应出每隔10分钟各个列簇compation的信息,具体包括。结果里ingest就是写入的数据总量。
2024-08-30 15:36:38
550
原创 谈谈CosBench
我一直认为,任何一个组件的开发者在编写user guide的时候都应该秉持这样一个思路:最快的,最方便的先让用户能把这个组件跑起来。各种优化细节应该后面再说,而不是一上来就给用户说一大堆琐碎的知识点。
2024-08-23 11:47:28
1040
原创 谈谈Rocksdb的del优化--CompactOnDeletionCollector
在GetIntTblPropCollectorFactory函数里面,会把我们设定的factory包装成一个个UserKeyTablePropertiesCollectorFactory,然后放到ColumnFamilyData的int_tbl_prop_collector_factories_里。核心逻辑就是把sliding_window_size分成128个小段,当处理了sliding_window_size个key之后,128段也走完了,就把第1段的数据抛弃掉,接着处理第129段数据。
2024-08-15 09:30:28
1137
原创 rocksdb的缓存在读流程里面的作用
我认为理解一个东西最好的逻辑,就是先假定它不存在,然后看看在没有它的情况整个流程如何运行,然后再去看看加上它都解决了那些问题。Version::Get里面会按照L0的sst文件都检查一遍,然后之后的每层只用检查1个sst文件的逻辑进行搜索。具体对某个sst文件的查询在Version::Get里面的TableCache::Get方法里。在BlockBasedTable::Open里面,就是按照如下的顺序解析各个block的。这里面大的流程就是先从mem读,如果没有就去imm读,如果还没有就去sst里面读。
2024-08-01 12:02:03
824
原创 Cmake静态库与动态库的构建与使用
但是ForHello_local_share 还动态依赖原来的库,你把目录名称改了,ForHello_local_share 想要去找hello_share这个动态库自然找不到了。ForHello_local_static 已经把库加到自己里面了,外面的库有什么变化,对ForHello_local_static 本身已经没有影响了。之后 我们可以看到两个可执行文件:ForHello_local_static 和ForHello_local_share。假定库不是我们的项目产生的,而是别人给的呢?
2024-07-04 00:22:18
523
fusioncharts/widgets for flex 的swf 与swc文件
2012-11-28
springmvc 异常处理示例
2016-02-27
用java发送邮件
2014-09-09
Collections.sort的源码问题
2015-03-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅