<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>c/c++ on zhangbuda7788 blog</title><link>https://tutuwu2019.github.io/tags/c_cpp/</link><description>Recent content in c/c++ on zhangbuda7788 blog</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><lastBuildDate>Thu, 02 Jan 2025 00:58:02 +0800</lastBuildDate><atom:link href="https://tutuwu2019.github.io/tags/c_cpp/index.xml" rel="self" type="application/rss+xml"/><item><title>Svn手册(自用)</title><link>https://tutuwu2019.github.io/svn%E6%89%8B%E5%86%8C%E8%87%AA%E7%94%A8/</link><pubDate>Thu, 02 Jan 2025 00:58:02 +0800</pubDate><guid>https://tutuwu2019.github.io/svn%E6%89%8B%E5%86%8C%E8%87%AA%E7%94%A8/</guid><description>svn手册(自用) 老实说，之前用的svn gui版本，现在用svn终端版，所有关于svn的命令要用起来。老实说，用过git，再用svn应该会容易上手不少吧。
常规操作 checkout(co) 使用 svn checkout path 把svn服务器上的代码down 下来
注意啊，cppProject 替换成 svn://svnbucket.com/xxx/cppProject 如， svn checkout cppProject 或者 svn co cppProject 如果要 down 到指定目录，用 svn co cppProject zhangbuda/cppProject_ 如果要指定用户名和密码 svn co cppProject –username xxx –password yyy
commit 提交 和 git 差不多的意思。 把本地代码，提交到 svn 服务器上 简单的如，svn commit -m ‘提交描述’ 当然可以把 commit 替换成 ci 如，svn ci -m ‘提交描述’ 提交指定的文件或者目录 svn ci /path/cppProject -m ‘提交指定的文件’ 提交指定后缀的文件 svn ci *.cpp -m ‘提交指定文件’ 其实这也没啥好单独拎出来的 更新 update 执行命令，会把其他人提交的代码从svn 服务器更新到自己的电脑上 svn update 可以简写为 svn up 更新到指定的版本(场景：比如当前版本有问题，需要回退到上一个版本) svn update -r xxx 仅更新指定文件或者目录 svn update /path/cppProject 添加文件 svn add /path/xxx 或者添加 *.</description></item><item><title>Redis手册(自用)</title><link>https://tutuwu2019.github.io/redis%E6%89%8B%E5%86%8C%E8%87%AA%E7%94%A8/</link><pubDate>Sun, 29 Dec 2024 23:57:55 +0800</pubDate><guid>https://tutuwu2019.github.io/redis%E6%89%8B%E5%86%8C%E8%87%AA%E7%94%A8/</guid><description>redis操作手册–自用 访问redis 服务器，并测试 ` redis-cli -h host -p port -a password
如果是直接在本地访问 redis-cli
127.0.0.1:6379&amp;gt; ping PONG 127.0.0.1:6379&amp;gt; ping zhangbuda &amp;ldquo;zhangbuda&amp;rdquo; 127.0.0.1:6379&amp;gt; `
数据类型&amp;amp;增删改查 字符串、哈希、列表、集合、有序集合
字符串 127.0.0.1:6379&amp;gt; set zhangbuda 188 OK 127.0.0.1:6379&amp;gt; get zhangbuda &amp;#34;188&amp;#34; 127.0.0.1:6379&amp;gt; del zhangbuda (integer) 1 127.0.0.1:6379&amp;gt; get zhangbuda (nil) 127.0.0.1:6379&amp;gt; #######获取value 的长度(字符串) 、截取指定范围的内容(子字符串)、同时存储多个key、同时获取多个 key 的value、修改原来key的value，拼接字符串 set zhangbuda hello,world OK 127.0.0.1:6379&amp;gt; get zhangbuda &amp;#34;hello,world&amp;#34; 127.0.0.1:6379&amp;gt; getrange zhangbuda 2 4 &amp;#34;llo&amp;#34; 127.0.0.1:6379&amp;gt; getrange zhangbuda 0 4 &amp;#34;hello&amp;#34; 127.0.0.1:6379&amp;gt; strlen zhangbuda (integer) 11 127.</description></item><item><title>随写redis</title><link>https://tutuwu2019.github.io/%E9%9A%8F%E5%86%99redis/</link><pubDate>Sun, 08 Dec 2024 12:54:50 +0800</pubDate><guid>https://tutuwu2019.github.io/%E9%9A%8F%E5%86%99redis/</guid><description/></item><item><title>一些sql技巧</title><link>https://tutuwu2019.github.io/%E4%B8%80%E4%BA%9Bsql%E6%8A%80%E5%B7%A7/</link><pubDate>Tue, 19 Nov 2024 22:48:17 +0800</pubDate><guid>https://tutuwu2019.github.io/%E4%B8%80%E4%BA%9Bsql%E6%8A%80%E5%B7%A7/</guid><description>sql 的一些技巧 sql 与时间相关的用法 获取当前时间 now() 返回当前的日期和时间 (YYYY-MM-DD HH:MM:SS) current_date() 返回当前的日期 (YYYY-MM-DD) current_time() 返回当前的时间(HH:MM:SS) curdate() 返回当前的日期 类似 current_date curtime() 返回当前的时间 类似 current_time SELECT NOW(); -- 获取当前时间 SELECT CURRENT_DATE; -- 获取当前日期 日期与时间运算 date_add() 或 date_sub() 分别用来加、减指定的时间间隔 SELECT DATE_ADD(NOW(), INTERVAL 5 DAY); -- 当前时间加 5 天 SELECT DATE_SUB(NOW(), INTERVAL 2 HOUR); -- 当前时间减去 2 小时 比较日期和时间 日期比较，直接比较date、datetime字段，比如运算符 =、&amp;lt;、&amp;gt;、&amp;lt;=、&amp;gt;= SELECT * FROM orders WHERE order_date &amp;gt; &amp;#39;2024-01-01&amp;#39;; `时间区间比较，通过 between 操作符在指定时间范围内查询记录 `SELECT * FROM events WHERE event_date BETWEEN &amp;#39;2024-01-01&amp;#39; AND &amp;#39;2024-12-31&amp;#39;; `timestampdiff() 计算两个日期时间之间的差异，计算天数、小时、分钟 `SELECT TIMESTAMPDIFF(DAY, &amp;#39;2024-01-01&amp;#39;, NOW()); -- 计算当前日期与 2024-01-01 之间的天数 `datediff() 返回两个日期之间的天数差 `SELECT DATEDIFF(NOW(), &amp;#39;2024-01-01&amp;#39;); -- 返回当前日期与指定日期的天数差 `日期格式化, date_format() 格式化日期时间值，返回指定格式的字符串 `SELECT DATE_FORMAT(NOW(), &amp;#39;%Y-%m-%d&amp;#39;); -- 格式化为 &amp;#39;2024-11-14&amp;#39; SELECT DATE_FORMAT(NOW(), &amp;#39;%H:%i:%s&amp;#39;); -- 格式化为 &amp;#39;14:30:25&amp;#39; `常见格式符： %Y：四位年份（如 2024） %m：月份（01 到 12） %d：日期（01 到 31） %H：小时（00 到 23） %i：分钟（00 到 59） %s：秒（00 到 59） ================================= 获取特定的日期部分: YEAR()：返回日期的年份部分。 MONTH()：返回日期的月份部分。 DAY()：返回日期的日部分。 HOUR()：返回时间的小时部分。 MINUTE()：返回时间的分钟部分。 SECOND()：返回时间的秒部分。 `SELECT YEAR(NOW()); -- 获取当前年份 SELECT MONTH(NOW()); -- 获取当前月份 SELECT DAY(NOW()); -- 获取当前日期 SELECT UNIX_TIMESTAMP(NOW()); -- 当前时间的时间戳 SELECT UNIX_TIMESTAMP(&amp;#39;2024-01-01 00:00:00&amp;#39;); -- 指定时间的时间戳 SELECT FROM_UNIXTIME(1609459200); -- 转换时间戳为日期时间 SELECT * FROM events WHERE event_date &amp;gt; NOW() - INTERVAL 1 WEEK; -- 最近一周内的事件 SELECT DATE(created_at) AS day, COUNT(*) FROM orders GROUP BY day; -- 按天统计订单数量 SELECT MONTH(created_at) AS month, COUNT(*) FROM orders GROUP BY month; -- 按月统计订单数量</description></item><item><title>Poco库学习&amp;近期随写</title><link>https://tutuwu2019.github.io/poco%E5%BA%93%E5%AD%A6%E4%B9%A0%E8%BF%91%E6%9C%9F%E9%9A%8F%E5%86%99/</link><pubDate>Sat, 26 Oct 2024 23:35:23 +0800</pubDate><guid>https://tutuwu2019.github.io/poco%E5%BA%93%E5%AD%A6%E4%B9%A0%E8%BF%91%E6%9C%9F%E9%9A%8F%E5%86%99/</guid><description>Poco库学习&amp;amp;近期随写 poco 库
. xxx.sh ./xxx.sh 和 xxx
poco 库 这个一个c++ 的大一统库，从网络、到文件以及util
让我最直观的感受就是，这是一个 大一统的库，甚至让我梦回学习 java
总的来说，这个项目很大、很广、配置也多，也可以让我学一些新的配置
就比如， bash 脚本 并不一定是 xxx.sh 格式的文件名，xxx 文件也可以是 shell 文件，也可以直接执行
随写 工作上，有些许明显的 工业化 也就是 大家各忙个的 螺丝钉化 还有一个就是 毅力欠缺 不知道要忙啥 忙活 而且重要的是 时间 是实打实的花出去了
还有 好久没有更新了 后面强度得上来，持续性，不能再三天打鱼两天晒网了。
自己，感觉在陌生领域或者是不成熟的领域就容易稳不住阵脚。而且在这个条件下，容易情绪写在脸上，久之不散。</description></item><item><title>纳秒级cpu优化&amp;rdtsc测试</title><link>https://tutuwu2019.github.io/%E7%BA%B3%E7%A7%92%E7%BA%A7cpu%E4%BC%98%E5%8C%96rdtsc%E6%B5%8B%E8%AF%95/</link><pubDate>Mon, 23 Sep 2024 01:51:56 +0800</pubDate><guid>https://tutuwu2019.github.io/%E7%BA%B3%E7%A7%92%E7%BA%A7cpu%E4%BC%98%E5%8C%96rdtsc%E6%B5%8B%E8%AF%95/</guid><description>纳秒级cpu优化&amp;amp;rdtsc测试 起因：看了一段演讲视频，感觉讲的偏底层&amp;amp;基础
除法比乘法慢的原因 访问对齐数据更高效 访问松散数据导致cache命中率低下 访问矩阵元素不要跨行访问，要逐行访问 → 编写 cache 友好代码的 第一原则：局部性原则 授人以渔：纳米级优化第一守则：防止编译器好心帮倒忙； 第二守则：禁止CPU调频，否则看不出优化的效果； 第三守则：使用专业工具精准测量-Intel Vtune
内存对其与内存不对其 结构体的定义 松散的结构体不仅浪费内存而且访问效率很低。
`struct t1{ int x; char testName[Length]; };
struct t2{ int x; const char* testName; }; `&amp;gt; 多核加剧了 CPU与内存之间访问的压力
纳秒级调优守则 编译器优化问题 防止编译器好心干坏事
如果调用的函数返回结果没有使用，可能编译器会抛弃这个函数，造成执行结果没有差别
禁止CPU 调频 使用专业工具：VTUNE PROFILEPROFILER rdtsc参考01
rdtsc demo
使用 rdtsc 指令进行时钟周期级测量
rdtsc 参考02
Pitfalls of TSC usage
rdtsc 参考03
rdtsc 参考04
rdtsc 参考05
rdtsc 参考06
rdtsc 参考07
rdtsc 参考08
后面的话，其实这部分涉及很多汇编，可以很好的作为 汇编&amp;lt;—&amp;gt;c 作为偏操作系c/cpp 开发而言，这很需要！！！ (讲给自己的话)</description></item><item><title>日志项目详解</title><link>https://tutuwu2019.github.io/%E6%97%A5%E5%BF%97%E9%A1%B9%E7%9B%AE%E8%AF%A6%E8%A7%A3/</link><pubDate>Tue, 27 Aug 2024 00:16:12 +0800</pubDate><guid>https://tutuwu2019.github.io/%E6%97%A5%E5%BF%97%E9%A1%B9%E7%9B%AE%E8%AF%A6%E8%A7%A3/</guid><description>详解 tlog 日志项目 日志level、日志时间、日志flag和日志info tlog_level
debug 0 info 1 notice 2 error 3 fatal 4 off 5 end 6 tlog_time
usec、mon、mday、hour、min、sec
日志flag
TLOG_NOCOMPRESS 1 TLOG_SEGMENT 10 TLOG_MULTI_WRITE 100 TLOG_NONBLOCK 1000 TLOG_SCREEN 10000 TLOG_SUPPORT_FORK 100000 TLOG_SCREEN_COLOR 1000000 TLOG_FORMAT_NO_PREFIX 10000000 日志info
level file func line time tlog tlog 可变参数宏定义
// 定于你 tlog_ext 函数，其中 第6个参数采用 printf 格式，从第7个参数采用 可变参数，而且 第6个参数不能为空 extern int tlog_ext(tlog_level level, const char* file, int line, const char* func, void* userptr, const char* format, .</description></item><item><title>Epoll_项目分析</title><link>https://tutuwu2019.github.io/epoll_%E9%A1%B9%E7%9B%AE%E5%88%86%E6%9E%90/</link><pubDate>Tue, 09 Jul 2024 02:50:01 +0800</pubDate><guid>https://tutuwu2019.github.io/epoll_%E9%A1%B9%E7%9B%AE%E5%88%86%E6%9E%90/</guid><description>对项目webServer 再分析 This is a page about »Epoll_项目分析«. int listenfd = socket(PF_INET, SOCKET_STREAM, 0); ... setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &amp;amp;flag, sizeof(flag)); int ret = 0; ret = bind(listenfd, (struct sockaddr*)&amp;amp;address, sizeof(address)); ret = listen(listenfd, 5); epoll_event events[MAX_EVENT_NUMBER]; epollfd = epoll_create(5); // 后面 epoll_create(5)中的参数后面失效 addfd(epollfd, listenfd, bool_); http_conn::m_epollfd = epollfd; ret = socketpair(PF_UNIX, SOCK_STREAM, 0 , pipefd); setnonblocking(pipefd[1]); addfd(epollfd, pipefd[0], bool_); // 设置管道 pipe[1] 的任务，处理信号 初始化，捕获终止信号，然后调用回调函数，给pipe[1] 发送中断信号、捕获时间alarm信号，然后调用回调函数，给pipe[1] 发送alarm信号 addsig(SIGALRM, sig_handler, false); addsig(SIGTERM, sig_handler, false); while(!</description></item><item><title>陈硕论坛的一些问题思考</title><link>https://tutuwu2019.github.io/%E9%99%88%E7%A1%95%E8%AE%BA%E5%9D%9B%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%E6%80%9D%E8%80%83/</link><pubDate>Mon, 01 Jul 2024 12:43:41 +0800</pubDate><guid>https://tutuwu2019.github.io/%E9%99%88%E7%A1%95%E8%AE%BA%E5%9D%9B%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%E6%80%9D%E8%80%83/</guid><description>会陆续贴图片然后谈谈我的思考
编译问题 gcc 让相同的警告只显示一次 一些开发细节 采用 ‘\n’ 截断 遇到 EOF 死循环 c++ 关键字篇 volatile 为什么总是谈到 volatile 就会扯到 多线程 啥的。这个关键字 我在查看源码的时候看的比较多，自己基本没咋用过。 volatile 声明的变量 会禁用 储存在 专有寄存器上(我们都知道寄存器io比内存还要快) 虚函数 socket 在多线程发送数据时要加锁吗？ RAII c++ 泛化 c++ 模版的生命和实现位置问题 关于网络开发 tcp 引用如何避免客户端发送大数据导致心跳超时断开连接？ 关键词：心跳连接、mtu、拆包、丢包 场景问题 一个1G的文件，内存限制10M，有序返回频数最高的50个词，该怎么做？ 关键词：排序
多线程执行顺序控制 文件操作 std::map 在不同线程操作不同的key要不要上锁? ext2 文件系统源码分析方法 程序员发展 要保持什么样的心态？ 关于技术博客 关于学历 总结 这算不算站在巨人的肩膀上？ 可以试着这样学习，先看一些知名的入门图书，然后在看一些资深开发的讨论，再从讨论中的获取关键词，然后google，把所有的东西给串起来。
EOF
未完待续</description></item><item><title>排序算法</title><link>https://tutuwu2019.github.io/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/</link><pubDate>Sun, 30 Jun 2024 19:00:44 +0800</pubDate><guid>https://tutuwu2019.github.io/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/</guid><description>十大排序算法 总结 排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性
冒泡 O(n^2) O(n) O(n^2) O(1) 稳定
选择 O(n^2) O(n^2) O(n^2) O(1) 不稳定
插入 O(n^2) O(n) O(n^2) O(1) 稳定
希尔 O(nlog(n)) O(nlog^2(n)) O(nlog^2(n)) O(1) 不稳定
归并 O(nlog(n)) O(nlog(n)) O(nlog(n)) O(n) 稳定
快速 O(nlog(n)) O(nlog(n)) O(n^2) O(log(n)) 不稳定
堆排序 O(nlog(n)) O(nlog(n)) O(nlog(n)) O(1) 不稳定
计数 O(n + k) O(n + k) O(n + k) O(k) 稳定
桶 O(n + k) O(n + k) O(n^2) O(n + k) 稳定</description></item><item><title>C++基本功</title><link>https://tutuwu2019.github.io/c-%E5%9F%BA%E6%9C%AC%E5%8A%9F/</link><pubDate>Fri, 28 Jun 2024 13:06:38 +0800</pubDate><guid>https://tutuwu2019.github.io/c-%E5%9F%BA%E6%9C%AC%E5%8A%9F/</guid><description>c++ c++基本功 基础 基本类型int、long、数组，控制循环for if while swtich， continue与break区别 有一个原则，叫 短整形 &amp;lt;= 整型、整型 &amp;lt;= 长整型、端整形至少16位，长整型至少32位 32位编译器指针大小位4字节，64位编译器指针大小为8字节 基本数据类型大小 cpp的switch语句 go 的switch 可以接函数、同时列举多个表达式 continue 是跳过这层循环，会进行下一次循环，而break 会退出循环，进去下一步语句 c++面向对象，三大特性的理解 继承 封装 多态（一个接口多种实现） 封装：客观事物封装成抽象类，而且类的成员函数和数据只允许可信类或者对象操作。public、private、protected 继承： 多态：消息以多种形式展示 重载多态（编译期）：函数重载、运算符重载 子类型多态（运行期）：虚函数 参数多态（编译期）：类模版、函数模版 强制多态（编译期/运行期）：基本类型转换、自定义类型转换 c++与c的区别（面向对象与面向过程差异） 面向过程：分析解决问题所需的步骤，并通过函数实现这些步骤 面向对象：把构成问题的事务分成各个对象，建立对象的目的不是为了完成一个步骤，而是描述某个事务在解决整个问题步骤中的行为。 一些其他细小的区别： 赋值 ：c只有 = ，而c++ 还有 () 比如 int x(5); 结构体：虽然c和c++的结构体默认都是public (注意c++类的默认，结构体默认public，继承默认也是public，类默认访问是private，默认继承也是private)，但是c++ 还可以和类一样用剩下的访问控制符 private、protect，而且c++ 的结构体也能通过派生类覆盖基类虚函数实现多态。 c和c++的结构体还有一个区别就是，一个结构标记声明后，在c中必须在结构体标记前添struct，才能做结构体类型名(或者 typedef struct Person{}Person;)。而在c++中可以直接把结构体标记充当结构体类型名来使用。 c/c++ 结构体声明的区别 c 的 string 和 c++ 的string c++ 的string 是对 char* 进行了封装，封装的string包含了 char*数组、容量、长度。注意string 可以动态扩展，每次扩展的时候另外申请一块比原来空间大两杯的空间，并将原字符串拷贝过去，并加上新增内容。 c++允许函数重载，而c不允许 其实也可以引析到c 的NULL 和 c++ nullptr c++三种继承的特点，public、protected、private类型 访问限定符，public、protected、private 外部访问 内部访问 c++重载、重写、重定义（动态） 、模板（静态） https://blog.</description></item><item><title>Cpp_关键字</title><link>https://tutuwu2019.github.io/cpp_%E5%85%B3%E9%94%AE%E5%AD%97/</link><pubDate>Wed, 12 Jun 2024 15:30:32 +0800</pubDate><guid>https://tutuwu2019.github.io/cpp_%E5%85%B3%E9%94%AE%E5%AD%97/</guid><description>cpp 关键字 {{ &amp;lt; toc &amp;gt;}}
static 隐藏。当编译多个文件是，所有未加static 前缀的全局变量和函数都具有全局可见性。(extern static int x; // 这个是无效的) 保持变量内容的持久。存储在静态数据区，默认初始化为0，注意这也是唯一的一次初始化。主持静态存储有两种，一个是 data区，用于存放已经初始化的全局/静态变量，另一个是bss区，用于存放未初始化的全局/静态变量，注意：默认初始化为0x00。这是从底层来讲为什么保持内容持久，从使用来讲的话，每次调用static 变量都是调用它的副本，而不是新开辟一个内存存储。这也可以理解内容的持久。 讲讲c++ 中的 static 一些特点：简单理解，类中的static成员(无论是变量还是方法)所有权都是归这个类本身，而不是类对象(所以，static 是类对象的共享资源)，所以会延伸很多限制，比如static成员方法只能调用static成员变量(注意：正常的类方法可以调用static方法)。不能通过this 指针获取staic 成员。该类的所有对象都只是拥有static的一份拷贝。static成员变量是先于类对象存在的，所以static对象是在类外完成初始化。static成员方法不能被virtual修饰，本质上static不属于任何对象或者实例，虚函数的的实现是通过对象的虚指针，而虚指针是通过this指针调用。(this-&amp;gt;vptr-&amp;gt;ctable-&amp;gt;virtual function) static code
c/c++ 基本数据类型的内存大小</description></item><item><title>Gdb_core_dump</title><link>https://tutuwu2019.github.io/gdb_core_dump/</link><pubDate>Wed, 29 May 2024 02:42:32 +0800</pubDate><guid>https://tutuwu2019.github.io/gdb_core_dump/</guid><description>Gdb_core_dump GDB 调试 GDB中文手册
GDB调试死循环
GDB调试入门
GDB 多线程调试
gdb core dump 调试 cat segfault.cpp
` #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt;
void cause_segfault(){ int *p = NULL; *p = 42;
// int p = (int)malloc(sizeof(int)); // if(p == NULL){ // exit(1); // } // *p = 42; // printf(&amp;ldquo;the *p is %d&amp;rdquo;, *p); }
int main(){ cause_segfault(); return 0; } `编译 g++ -g segfault.cpp -o segfault
`# 查看 core dump 文件 存储路径 cat /proc/sys/kernel/core_pattern |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e</description></item><item><title>Cpp_就业方向</title><link>https://tutuwu2019.github.io/cpp_%E5%B0%B1%E4%B8%9A%E6%96%B9%E5%90%91/</link><pubDate>Sat, 25 May 2024 03:22:21 +0800</pubDate><guid>https://tutuwu2019.github.io/cpp_%E5%B0%B1%E4%B8%9A%E6%96%B9%E5%90%91/</guid><description>Cpp_就业方向 说实话好焦虑，尤其是短时间(这1～2年)，各种复杂的事情席卷而来，让人难以应付。 有工作方向的不断尝试，社会环境的不断变化……我想，最主要的就是从大学到社会的这个转变。 现在回想，我的大学好像也是荒废了，彻头彻尾的荒废，错过了很多东西，这些主要是技术栈的丰富吧，毫无疑问这和我个人的认知息息相关。 扯的有点远，接下来，我们看看 cpp/go 往分布式存储的发展
参考资料 为什么把**参考资料放第一位呢？**出了社会，本就是一无所有，本就是需要不断的汲取大量资料。
分布式存储解决方案
分布式存储阅读笔记
分布式存储系列 我的分布式存储之路
简单的分布式云存储服务
大数据知识汇总
基于哈希一致性k-v分布式存储
go 语言实现分布式存储服务
分布式对象存储
中间件、分布式、高性能存储
分布式存储系统
go 分布式存储系统(和前面的那个项目好像啊)
zheng
哪吒？分布式存储系统
mongodb-4.4
分布式存储与计算
go-fastdfs
go-family
mongodb-5.0
基于 spring-sharding-mybaits 集成 redis 缓存的游戏分布式存储框架
架构师
公开课 CS162 的分布式 KV 存储项目
《分布式对象存储：原理、设计与实现》 算法：c语言实现
看到这里，应该大概才出来了，我是因为浏览器上标签打开的太多了，炸了，所以在这里做笔记呢！
发现很多知识，都是最近或者近一年集成最多了。全是在换大学的账啊！
有些路，必定大家都要走，有的人觉悟高，很早就知道要怎么走，有的人需要多弯两下。
就像进大厂，觉悟高的人，知道走校招是最轻松的路，而有的傻瓜(像我)这里扭下那里停下，错过了很多，如果想冲大厂可能还要等3～5年了。当然也要适当的对大厂祛魅。
未完待续…</description></item><item><title>Cpp_issue</title><link>https://tutuwu2019.github.io/cpp_issue/</link><pubDate>Thu, 23 May 2024 14:08:55 +0800</pubDate><guid>https://tutuwu2019.github.io/cpp_issue/</guid><description>cpp_issue 一些基础讨论 指针大小 | 系统 | 指针大小 | |----------|------| | 32 位 | 4 字节 | | 64 位 | 8 字节 | const 关键字 // 常变量 const int x = 10; // x 不能修改 x =20; // 这是错的 // 注意： const int xxx; int const yyy; /* const int xxx; const 放在类型前面表示这是一个常量类型的变量。这种写法更符合自然语言的习惯，读作 “常量整数 xxx”。 int const yyy; const 放在变量名后面，但在类型之后，语义上与前者相同。这种写法有时更容易理解复杂的指针声明，因为它遵循从右到左的阅读顺序。 */ // 指针 // 指向常量的指针 const int* ptr = &amp;amp;x; *ptr = 20; //这是错的，*ptr 的值不能通过 ptr 修改，但是 ptr可以指向其他地址 int y = 20; prt = &amp;amp;y; // 常量指针 ptr 的地址不能修改，但是 *ptr 可以修改 int* const ptr = &amp;amp;x; int z = 30; *ptr = y; prt = &amp;amp;z; // 这是错误的 // 指向常量的常量指针 const int* const ptr = &amp;amp;x; // *ptr 和 ptr 都不能被修改 // *ptr = 20; // 错误，不能修改 *ptr // int z = 30; // ptr = &amp;amp;z; // 错误，不能修改 ptr 指向的地址 // 引用 // 对常量的引用 const int &amp;amp;ref = x; // ref 不能用于修改 x 的值 // ref = 20; // 错误，不能修改 ref 指向的值 值&amp;amp;指针&amp;amp;引用 值&amp;amp;指针&amp;amp;引用</description></item><item><title>C_cpp_and_game</title><link>https://tutuwu2019.github.io/c_cpp_and_game/</link><pubDate>Sun, 19 May 2024 13:08:20 +0800</pubDate><guid>https://tutuwu2019.github.io/c_cpp_and_game/</guid><description>c_cpp_and_game lua and c/c++ lua 号称世界最快的脚本
参考01
游戏结构之内存池设计 参考01</description></item><item><title>Cpp面试题_自用</title><link>https://tutuwu2019.github.io/cpp%E9%9D%A2%E8%AF%95%E9%A2%98_%E8%87%AA%E7%94%A8/</link><pubDate>Sun, 19 May 2024 11:43:21 +0800</pubDate><guid>https://tutuwu2019.github.io/cpp%E9%9D%A2%E8%AF%95%E9%A2%98_%E8%87%AA%E7%94%A8/</guid><description>cpp 面试题_自用 cpp 专栏 试着思考，有深度
一、关键字
static 有三种作用
final 和 override？为什么final 能提高代码执行效率 thread_local 变量作用、存放位置、生命周期 一个变量可以既是const又是volatile吗？ null和nullptr，为什么要引入nullptr 为什么noexcept能提高性能？ delete[] 是怎么知道数组长度的？ new、placement new ,operator new 的区别,怎么把对象new在栈上 __cdecl 和 __stdcall 重载类的delete运算符，delete这个对象时会发生什么？ 函数调用压栈流程？ 生命和定义的作用，从编译角度说？ 现代大部分编程语言都没有头文件，c++为什么要有头文件？头文件和模块的优劣比较? c++11为什么引用枚举类 程是从main 函数开始执行的吗？ 虚函数怎么实现的，性能真的更慢吗？ 构造函数、西沟函数、重载运算符函数可以是虚函数吗？类成员函数模版可以是虚函数</description></item><item><title>Cpp_and_leecode</title><link>https://tutuwu2019.github.io/cpp_and_leecode/</link><pubDate>Wed, 15 May 2024 23:16:14 +0800</pubDate><guid>https://tutuwu2019.github.io/cpp_and_leecode/</guid><description>leecode2589 你有一台电脑，它可以 同时 运行无数个任务。给你一个二维整数数组 tasks ， 其中 tasks[i] = [starti, endi, durationi] 表示第 i 个任务需要在 闭区间 时间段 [starti, endi] 内运行 durationi 个整数时间点（但不需要连续）。 当电脑需要运行任务时，你可以打开电脑，如果空闲时，你可以将电脑关闭。 请你返回完成所有任务的情况下，电脑最少需要运行多少秒。
示例 1： 输入：tasks = [[2,3,1],[4,5,1],[1,5,2]] 输出：2 解释： - 第一个任务在闭区间 [2, 2] 运行。 - 第二个任务在闭区间 [5, 5] 运行。 - 第三个任务在闭区间 [2, 2] 和 [5, 5] 运行。 电脑总共运行 2 个整数时间点。 示例 2： 输入：tasks = [[1,3,2],[2,5,3],[5,6,2]] 输出：4 解释： - 第一个任务在闭区间 [2, 3] 运行 - 第二个任务在闭区间 [2, 3] 和 [5, 5] 运行。 - 第三个任务在闭区间 [5, 6] 运行。 电脑总共运行 4 个整数时间点。 `&amp;gt; c++11以后还有c++17、c++20、c++21等新特性 &amp;gt; 我想，应该写点什么吧 &amp;gt; 还是用到了，再写一写吧 `int solution(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; tasks){ //用c++20中的 ranges::sort ranges::sort(tasks, [](auto&amp;amp; a, auto&amp;amp; b){return a[1] &amp;lt; b[1];}); vector&amp;lt;int&amp;gt; run(task.</description></item><item><title>Lua_and_c_cpp</title><link>https://tutuwu2019.github.io/lua_and_c_cpp/</link><pubDate>Wed, 15 May 2024 18:55:31 +0800</pubDate><guid>https://tutuwu2019.github.io/lua_and_c_cpp/</guid><description>lua 我想，lua 能这么火，讲全世界最快的脚本 在游戏领域确实首屈一指 c + lua 好像，有人讲国内lua 的火，是云风点的 c/c++ 看似领域很多，但是每个领域又都有自己的护城河，一旦哪天被优化了，很大概率会有因为当初选c/c++ 这条路又骂自己一遍。为什么当初不把 java 给啃下去
lua 与 c/c++ 之间的合作 参考一下的链接就好了，如果还没有入门，那就去B站看看相关的视频
参考01 参考02 参考03 参考04 参考05 参考06 参考07 参考08 参考09 参考10 参考11 参考12 参考13 参考14</description></item></channel></rss>