- 博客(765)
- 问答 (2)
- 收藏
- 关注

原创 现代C++之万能引用、完美转发、引用折叠(万字长文)
现代C++之万能引用、完美转发、引用折叠0.导语1.问题引入2.引入万能引用3.万能引用出现场合4.理解左值与右值4.1 精简版4.2 完整版4.3 生命周期延长4.4 生命周期延长应用...
2019-12-16 08:00:00
11292
12

原创 记录我的开源之C++那些事
大家好,我是光城,在一个月左右的时间里面完成了侯捷老师相关的资料学习以及其他学习等等,将之前的C++那些事等汇总起来,记录自己的学习历程,关于C++从入门、基础、进阶、源...
2019-11-05 17:47:46
446

原创 机器学习之初学者学习Sklearn
更高级的scikit-learn介绍翻译自:https://github.com/glemaitre/pyparis-2018-sklearn有关翻译项目,欢迎star与加入翻译组:https://github.com/Light-City/Translating_documents在本节教程中将会绘制几个图形,于是我们激活matplotlib,使得在notebook中显示内联图。# 启用...
2019-01-06 14:24:49
1312

原创 特征工程之特征关联
特征工程之特征关联0.说在前面昨天学习了seaborn绘制图形,以及单变量与多变量之间的绘图,那么今天从统计学角度实战分析在处理特征工程过程中所涉及的三个相关系数(具体的三个系数数学推导,在后续更新)。为了更好的便于大家的交流,先建立一个微信总群,二维码在文章最后放出!【关键字】相关系数微信总群1.皮尔逊皮尔逊相关系数:Pearson correlation coeffici...
2018-10-14 13:51:32
3982

原创 实时车票查询及登陆CTC
实时车票查询及登陆CTC0.说在前面本文实现下面两个功能【第一】 如何登陆12306【第二】 如何做到实时车票查询当你们在排队等候服务器响应的时候,我已经买下票了;当你们在抢购最后一张车票的时候,已经没了;当你们在等待放票的时候,我已经调整好买票方案了。哈哈,有点难拉仇恨。。那么没事,学好接下来的操作,会有助于你解决车票麻烦。车票查到了,离心中的远方还远?Close To C...
2018-10-14 13:38:03
869
原创 leveldb高性能读写接口
如果并发写入直接使用同步的方式,对性能影响比较大,在leveldb中采用了一种合并队列方式,即同一时刻存在多个writer,但只有一个writer在执行写(这个写的数据是所有writer往队列中放的batch,会被合并到一块)。SnapshotImpl更像是一个双向链表节点,包含了节点信息,那么维护快照的结构就叫做SnapshotList,实现了链表的维护,比较典型的接口为New、Delete。在leveledb中,同时只有一个write线程在写数据,其他线程只会将自己的write放入。
2025-06-07 12:23:42
730
原创 彻底理解leveldb日志结构
前面一个block只剩余3字节,进行0 padding,新起一个block,写第三条记录,由于字节是65515,需要跨block,拆分为两个block,分别是:fe 89 19 f0 f9 7f 02、d2 bf 90 ae f2 7f 04,即kFirstType + kLastType组成一条记录。7字节0d 63 4a 30 e8 03 01是header,剩下的是内容,其中01是kFullType,e8、03是1000的十六进制,表示第一条记录是1000字节的完整记录。
2025-05-25 10:00:22
696
原创 加速leveldb查询性能之布隆过滤器
这里其实是比较符合预期的,因为start block的时候是4096,按照每2kb写一个filter data,这里就是写2个,但是key在第一次的时候就已经全部放入一个filter data了,所以第二次的时候仅写offset即可,这里就跟前面的9一样了,所以出现了2次。可以看到每次得到当前filter data之前写入的是前面构建好的filter data的offset,而不是当前的,那么当前构建好的filter data的offset(最后数据的offset,图中绿色部分)在哪里写入呢?
2025-05-24 13:39:45
978
原创 加速leveldb查询性能之Cache技术
table cache默认的文件数是990(可以理解为990个sstable文件或索引(data block index)),还保留十个左右的文件用于其他用途,并将其余990个文件交给 TableCache。k = 压缩的file_name不存在,打开sstable文件,并缓存下来,此时会在table cache的lru中写入<k = 压缩的 filename, v = TableAndFile>block cache是在读取真正的data block的时候使用,函数是BlockReader。
2025-05-20 23:13:44
664
原创 多图文讲解leveldb之SST/LDB文件格式
LevelDB 的持久化存储依赖于 SSTable(Sorted String Table)文件,其设计兼顾高效读写与压缩。本文深入剖析 LevelDB 中 SSTable(.ldb/.sst)的物理格式与核心源码实现。在leveldb中有两种文件后缀,一个是.sst,另一个是.ldb,两者区别在于一个是老版本,一个新版本,目前新版本都采用了.ldb文件后缀。:记录 Filter Block 的位置等元信息。:索引各 Data Block 的末尾键及位置。:文件元信息的入口点,固定大小。
2025-05-18 23:01:40
240
原创 C++20图片下载器工具项目实战
Awaitable 本身并不是一个具体的类或接口,而是通过特定的协议(protocol)与协程框架交互。换句话说,Awaitable 是提供 Awaiter 的类型,而 Awaiter 是包含。是用户面对的接口,通常是一个更高层次的类型,封装了异步操作的逻辑。如果 Awaitable 不是 Awaiter,编译器调用。3. Awaitable 和 Awaiter 的关系。3. Awaitable 和 Awaiter 的关系。是 Awaitable 的具体实现,或者说是。以下是对这两者的详细解析,并通过。
2025-05-10 15:34:31
687
原创 LevelDB全面解析Compaction
将VersionEdit的内容与Base Version内容进行合并,保存到新版本中,即:base中有一份added_files,edit或者说levels中有一份added_files,将这两个合并起来作为新版本的added_files。文件合并可以在读/写的过程中发生文件合并,比如读操作时,会去依次查找sst文件,每次发生文件seek,如果文件被多次 seek,超过了seek最大值,但是没有查找到数据,那么就应该被 compact 了。最后,将剩余base中的文件都加入到新版本中即可。
2025-04-26 18:41:54
723
原创 io_uring从原理到实践
SQ与CQ可以理解为环形队列,有head、tail,用户态将SQE放入SQ ring的tail,内核态从SQ ring的head进行收割,将处理好的结果放入CQ ring的tail,用户态从CQ ring的head提取出CQE。要实现用户态与内核的零拷贝,最佳方式就是实现一块内存映射区域,两者共享一段内存,核外往这段内存写数据,然后通知内核使用这段内存数据,在io_uring中用户态可以与内核态共享sq、cq、sqe。:队列深度(SQ/CQ 的容量),需为 2 的幂次(如 1024)。
2025-04-20 18:45:24
953
原创 实战篇之让编译器成为你的多线程保镖
在官方的示例中提供了有个mutex.h,这里为了简单我去掉了,直接使用std::mutex,当然这里还有一些知识点,比如:自定义mutex让clang注解更好识别。更糟糕的是,这些问题往往在代码审查或运行时测试中难以被发现。可以看到一些不安全的地方都被检查出来了,可以提前发现你的代码问题!好了,留个作业,对于上面问题,你知道怎么修复?在拥有多CPU核心的现代服务器上,多线程程序中的。2.Clang线程安全注解:让编译器成为代码卫士。注:懒人版,本节实战代码已更新至星球。:指定函数调用前必须持有的锁(
2025-04-09 22:36:43
270
转载 著名开源项目leveldb主干编译不过
最近想再回顾一下leveldb,拉了一下leveldb代码,然后编译一把,没想到踩坑了,本文分享如何解决以及解决思路。最后,去github issue找了一下,发现有人也反馈这个问题了,感兴趣的可以去关注一下这个话题!第二个办法留给大家当课后作业,你知道怎么做吗,欢迎留言区讨论。第二:不改任何代码,直接添加编译参数。gRPC 实战篇:从零打造库存管理系统。第一:直接修改cmake,11变17。即:默认是11编译,所以就失败了。热度更新,手把手实现工业级线程池。学习更多干货,欢迎关注转发!
2025-04-08 22:09:04
61
原创 gRPC 实战篇:从零打造库存管理系统
说一个好消息,C++那些事开源项目4w star了!开源项目地址:https://github.com/Light-City/CPlusPlusThings网站:可以点击阅读原文或者:https://light-city.github.io/stories_things/gRPC 实战篇:从零打造库存管理系统目录一、项目背景二、如何设计 Protobuf核心代码 (inventory.proto)...
2025-03-09 14:35:48
891
原创 太炸裂了!无需编写一行代码实现海螺语音生成!
大家好,我是光城,最近玩了一下大模型mcp server,写了一个本地mcp server,功能是让大模型读取本地文件,朗诵诗句。需求很简单,怎么实现呢?这里借助几个工具:1.cline+vscode2.deepseek3.minimax海螺ai这里是效果大家可以听一下,具体实现可以看视频,里面分享了如何从0到1搭建出来。懒人版:完整代码也分享到我的星球了,欢迎感兴趣加入下载,后面分享更多有趣的内...
2025-03-01 15:53:12
256
原创 深入浅出 C 语言中的 do{..}while(0):宏定义的秘密武器
深入浅出 C 语言中的 do{..}while(0):宏定义的秘密武器在 C 语言编程中,我们常常会遇到while、for、if-else这些熟悉的循环和条件语句,它们逻辑清晰,用法直观。然而,有一种构造却总是让人摸不着头脑——do{..}while(0)。乍一看,它似乎只是while循环的变种,功能完全可以被替代,那为什么 C 语言之父 Dennis Ritchie 要设计它?它究竟有什...
2025-02-24 22:59:08
602
原创 2025 年,C++ 还能“硬核”多久?
2025 年,C++ 还能“硬核”多久?编程语言江湖:谁主沉浮?JavaScript 稳坐王座,Python 无处不在TypeScript 和 Rust:新星闪耀C++:低调的“硬核大哥”现代 C++:从“老古董”到“新宠儿”C++ vs 新兴语言:谁更胜一筹?2025 年就业风向:C++ 的“硬核”舞台AI 浪潮下的 C++:硬核助力还是边缘化?2025 年,C++ 还值得学吗?如何“硬核”地学...
2025-02-22 17:55:29
1074
原创 C++ 项目:Unsplash 爬虫与瀑布流实战
C++ 项目:Unsplash 爬虫与瀑布流实战你是否曾羡慕那些能轻松从网络抓取数据并优雅展示的神奇工具?你是否想用 C++ 写出既有技术含量又实用性爆棚的项目?今天,我将带你走进一个基于 C++ 的 Unsplash 图片爬虫与瀑布流展示项目。通常大家都在使用Python写一些爬虫项目,那么C++能不能做?那答案是肯定可以的,本篇文章将会从C++17+一些爬虫知识+重磅的第三方库写一篇完...
2025-02-20 23:33:19
648
原创 现代C++并发编程:从零到一实现下载任务调度器
现代C++并发编程:从零到一实现下载任务调度器目录一、现代C++的可调用对象体系1.1 可调用对象的演进1.2 std::function:万能的函数包装器1.3 std::bind:绑定参数1.4 Lambda表达式:现代C++的匿名函数二、主菜:手把手实现一个下载任务调度器2.1 下载任务调度器设计三、总结在学习我提供的线程池项目时,有些小伙伴提出了一些困惑。在C++的现代并发编程中,我们经常...
2025-02-17 21:54:02
795
原创 C++学习路径终极指南
最近有不少朋友问我cpp学习路径及规划,本篇系统讲解学习路径!如果你是初学者请看方案1,如果你是进阶者请看方案2。初学者必看 | 方案1:从零到Offer的完整通关适用人群:刚接触编程/基础薄弱的小白???? Step 1:语法筑基(1-2周)核心目标:掌握编程思维(逻辑控制、循环、函数)必备神器:书籍《C++ Primer》开源项目加持:《C++那些事》开源版???? Step 2:实战深化(3-4周)核心...
2025-02-15 08:49:13
438
原创 如何向DeepSeek提问才能获得神级答案?
如何向DeepSeek提问才能获得神级答案?通常我们写C++程序的时候遇到过各种问题,比如:“又是Segmentation Fault?代码编译一小时,调试一整天?明明代码和教程一模一样,为什么我的IDE疯狂报红?别人的C++20写得像Python一样优雅,我的代码却像祖传屎山?”“为什么我的#include总是找不到.h文件?”“链接时报undefined reference?我明明写了函数啊!...
2025-02-11 22:38:37
321
原创 C++17十大常用特性
玩转cpp小项目星球3周年了!今天分享两个知识点:C++17我常用的十大特性。git am与git apply对patch处理的不同。
2025-02-10 23:05:06
148
原创 2025我的第二次社招,写在春招之季
先说一个好消息,C++那些事 4w star了!前面断更了一个月,本篇文章就可以看到原因,哈哈。大家好,我叫光城,腾讯实习转正做后端开发,后去小公司做数据库内核,经过这几年的成长与积累,终于在2024年末换了工作,再一次靠自己努力实现了大厂跳跃,顺便借此机会聊一下最近的求职行情与看法。在几年前,我的第一次社招,机会非常多,比如:无人驾驶行业,AI各种方向,后端,网络安全等等,再到2024机会少了很...
2025-02-08 21:08:29
326
原创 2024年度回顾
大家好,我是光城,又到一年的最后一天了,按照惯例写出了这篇年度文章。1.C++那些事今年这一年较上一年公众号更新91篇文章,跟去年持平---我的2023年度回顾,知识星球比去年多不少,有327篇。目前公众号已发表原创653篇!C++那些事专栏210篇#C++那些事今年公众号的内容方向划分为:− 性能相关− 多线程相关− 数据库内核心相关− STL相关− 项目相关开源项目C++那些事 39.9k ...
2024-12-31 18:10:32
196
原创 深入浅出事件驱动libev:从理论到实现
深入浅出libev:从理论到实现大纲libev实现原理1.基本框架1.1 事件句柄(ev_watcher)1.2 IO多路复用1.3 Timer1.4 事件循环(ev_loop)2.如何使用?3.课后作业前段时间,有一个小伙伴问我能不能更新一些网络编程相关内容,本节将从源码与实现角度来讲讲libev。libev是一个跨平台的高效事件通知库,主要用于多路复用事件机制(例如select、poll、...
2024-12-11 18:48:21
1006
原创 C++20那些事之span设计与陷阱
C++20那些事之span设计与陷阱本节大纲0.初衷1. 何谓span?2. span的动态与静态2.1 静态 span2.2 动态 span3. subspan4. 使用陷阱4.1 不要让 span引用已经释放的内存4.2 改变底层数组大小时的问题C++20系列文章已经更新了快10篇了,往期如下:C++那些事之C++20协程开篇盘点C++20模块那些事C++20之lambda模版C++20四...
2024-12-10 16:01:23
1073
原创 如何秒懂阅读开源项目代码?
如何秒懂阅读开源项目代码?在实际项目或开源代码中,特别是C代码比较喜欢用宏,那么造成了一个很大问题:阅读代码非常的困难,调试也是另外一个问题,那么给你一个项目带有大量的宏,如何快速理解?通常我们在面试的时候会遇到一个非常重要的知识点:gcc编译过程,大家可能对答如流,那么为了区分候选人的水平,引申出:你知道gcc哪些编译参数,各自参数有什么用?预处理阶段会发生什么?一般你会在这个阶段做些什么,对你...
2024-12-09 10:39:10
414
转载 Apache Cloudberry™ (Incubating) Meetup · 2024 上海站:12 月 7 日,共话未来!
2024 年 10 月 12 日,Cloudberry Database 项目通过投票正式获准加入 Apache 软件基金会孵化器,标志着 Cloudberry 项目及其社区迈出了重要的一步。继此历史性时刻后,2024 年 11 月 5 日,Cloudberry 项目的代码仓库成功迁移至 Apache 软件基金会,正式开启孵化开发进程,且项目名称更改为 Apache Cloudberry™ (In...
2024-11-27 17:38:39
113
原创 深入探讨 C++ 中的 mutable 关键字
深入探讨 C++ 中的 mutable 关键字统一说一下前两天分享的项目一些问题:- 项目的详细文档在docs目录,包含C++特性讲解,框架实现,环境配置等。- 环境配置这一部分小白友好,可以直接用项目docker一键部署,非常方便。重磅C++20项目:现代 C++ HTTP 服务器今天主要来分享mutable,在 C++ 中,mutable 关键字经常被认为是“穿透”常量(const)限制的工具...
2024-10-18 09:47:52
836
原创 重磅C++20项目:现代 C++ HTTP 服务器
现代 C++ HTTP 服务器最近星球小伙伴总是问我有没有网络相关的项目,于是写了一个基于现代C++ + CMake管理的完整项目。该项目具备以下特性:大量现代C++特性C++20相关coroutineconceptstd::formatstd::spanC++17相关if语句初始化结构化绑定optional高效的事件驱动机制使用 epoll 实现事件循环,管理大量的客户端连接。epoll 是 L...
2024-10-15 13:50:34
402
原创 项目实战:从原理到实战C::*ptr
::*,估计99%的人都没用过,甚至没见过,可以留言区打出来!本节将会从0讲解语法,并使用一个项目中的实际例子来实战该用法。大纲1.什么是::*1.1 语法1.2 成员变量指针1.3成员函数指针3.有什么用?4.实际项目衍生实用工具!注:懒人版,本节所有代码与示例已更新至星球,感兴趣加入即可。1.什么是::*C::* 是 C++ 中的成员指针语法,表示指向某个类 C 成员的指针。这个语法用于指向...
2024-10-12 17:53:32
340
原创 C++20那些事之constexpr与comma expr
C++20那些事之constexpr与comma exprC++20 引入了多项新特性,进一步增强了编译时能力和代码安全性。本文将深入探讨两项重要的变更:constexpr 函数中的异常处理以及下标运算符中逗号运算符的弃用。注:懒人版,本节的代码示例与相关文档已更新在星球,感兴趣加入即可。1. constexpr 函数中支持 try-catch 异常处理的变更在 C++20 之前,constexp...
2024-10-11 17:58:52
1079
原创 从浅入深,灵活妙用!避免调用默认构造!
C++那些事之避免调用默认构造在 C++ 中,有一些容器通过 resize() 方法调整大小时,默认构造函数会被调用,这可能并不是我们想要的行为。本文将介绍如何使用自定义分配器来控制这一过程,避免默认构造的调用。示例1://[0,1,2,3,4,5,6,7,8,9]vec.resize(5);vec.resize(10);你知道此时输出什么吗?答案是:[0,1,2,3...
2024-10-09 19:24:49
214
原创 C++与Rust那些事之跳过析构函数
C++与Rust那些事之跳过析构函数在Rust中mem::forget用于防止对象的析构,跳过清理工作,从而让资源的释放交给其他机制管理。例如:letfile=File::open("foo.txt").unwrap();mem::forget(file);那么在C++中如何防止析构?即跳过析构函数呢?本节将给出三种办法,完整代码示例也放于星球。1. placement newplacem...
2024-10-08 19:28:21
531
原创 高频问题:new之后是否有必要判空?
大家在阅读代码的时候可能会看到各种代码,例如:Foo*f=newFoo();if(f==nullptr){//dosomething.}f->print();或者Foo*f=newFoo();f->print();那么这两个问题归为:在new之后的nullptr判空是否必要呢?欢迎留言区讨论~一起探索更多C++项目/知识~往期推荐:向量数据库m...
2024-10-07 13:33:56
285
转载 项目实战:使用 C++17 和 SQLite 实现文件夹大小计算与存储
项目实战:使用 C++17 和 SQLite 实现文件夹大小计算与存储大纲项目目标项目实现步骤本节将会围绕一个项目背景展开:假设业务中需要定时检查某些文件夹大小,并做一下持久化操作,C++如何去完成这一个项目呢?本节带你通过一个小项目,使用 C++17 和 SQLite 实现一个文件夹大小计算与存储的系统,帮助你更好地管理你的文件系统。注:懒人版,完整代码已更新星球。项目目标我们将实现以下功能:递...
2024-09-30 13:32:07
216
原创 C++那些事之const全家桶
C++那些事之const全家桶大纲constconstexprC++20constevalconstinit注:本文所有代码示例已放星球。1.constconst 是我们在学习 C++/C 时最早接触的关键字之一,通常作为 cv-qualifier 使用,表示对象不可变。它并不保证 编译时评估,具体何时评估由编译器决定。例如:constinta=1;//编译时constautox...
2024-09-29 18:06:20
664
空空如也
极小值算法问题,求解!!!
2016-10-10
蓝牙ble Android脉搏波绘制
2016-09-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人