博客系统更新记录
2023-01-07
主要更新
更新 Hexo 框架 ^5.4.2 -> 6.3.0
更新 Butterfly 主题 ^4.1.0 -> ^4.5.1
删除电子时钟组件
更新 Twikoo 评论组件的云函数
2022-04-25
主要更新
更新 Hexo 框架 ^5.3.0 → ^5.4.2
更新 Butterfly 主题 ^3.6.2 → ^4.1.0
2022-02-12
主要更新
彻底放弃 chentyit.cn 和 chentyit.com 域名,修改为 tybook.cc,没有什么特别原因,就是因为 .cc 的域名比较便宜。
域名相关
访问 http://tybook.cc 会自动跳转到 https://www.tybook.cc,放弃之前将多个域名指向同一个 OSS 对象存储容器的方案,使用多个域名有可能会造成评论系统失效。
CDN 相关
使用阿里云的云盾证书,强制开启 HTTPS,因为用的是免费的,需要每年手动申请一次。
开启 HTML,CSS,JS 文件优化
开启压缩
打开限流,防止被恶意跑流量(话说我这博客目前也没啥流量 QAQ) ...
Vite+React 没有 ReactComponent 解决方案
好久没写笔记了,也好久没写代码了,最近在重新搞起始页,这次我想搞得离谱一些,以趣味性为主,这个笔记就是在这次开发中遇到的一个问题。
这次我用 Vite+React 对前端进行构建,但是在编写 Icon 组件的过程中,ReactComponent 没了,就是下面代码中的这个:
1234// Search Engine Iconsimport { ReactComponent as BaiduLogo } from "../../assets/svg/searchEngineLogo/baidu.svg";import { ReactComponent as GoogleLogo } from "../../assets/svg/searchEngineLogo/google.svg";import { ReactComponent as BingLogo } from "../../assets/svg/searchEngineLogo/bing.svg";
React ...
MacBook M1平台使用 C++ 连接 MySQL
Photo by Igor Miske on Unsplash
原本以为上一篇博客就是今年最后一片博客了,今天突发奇想,想用 C++ 操作一下 MySQL,然后就又折腾了好久,一度想要放弃,最后在我坚持不懈的努力下,终于成功了,但也只是连接上,并没有对增删改查进行封装,后面封装好了再写(水)一篇博客,诶嘿。
环境
软硬件
参数
操作系统
MacOs Monterey(version 12.0.1)
芯片
Apple M1
g++ / gcc
4.2.1
clang
13.0.0
CMake
17
Clion
2021.2.3
其实这里并没有涉及到编译,所以 g++,GCC 和 Clang 并需要跟我统一,CMake 版本主要是代码编译链接的时候用的,也没必要跟我一样。
第一步先安装 MySQL
MacOs 虽然是类 Linux 系统,但还是有本质上的区别的,网上很多在 linux 上进行的操作我亲自操作后不可以使用,比如安装 libmysqld-dev 或者 mysql-devel,因为没有 MacOs 的特供搬,也可能是我没找到,所以 ...
2021 回顾
去年 12 月份,我重新搭建了新的博客,想以此为我在 2021 年的新起点,同时也告别 2020 这让我恍惚的一年。
同样的时间,不同的地点,一年中我又走过了很多地方,故事也有了新的内容,写下这篇回顾作为记录,只为在不久的将来,当自己回忆起这一年时,有着可以向别人述说的故事。
在下笔之前,我想了很多种文章格式,18 年和 19 年,我都是以长文进行记录,很传统但也很老土,且不说别人看了累不累,我自己都不想去再看一遍,大篇章的文字实在是太难阅读。所以这次我想用一种问答的新格式来进行叙述,问自己也是反思自己,自省而得新。
问题1:今年最开心的是什么?
要说最开心的,莫过于今年 7 月 10 号去的 Bilibili World 了!
那天是我最开心的日子,怎么说呢?emmmmmm,那天我是最无忧无虑的,整个展都是我喜欢的东西,看到从四面八方来的同好汇聚在这里,大家有着相同的爱好,展会之外,大家素不相识,但来到 BW 感觉就是无话不谈的朋友,有都喜欢的游戏,动漫,唱见,COS,等等等等。
还有最让我开心的就是原神展区,终于在线下见到了游戏角色的 C ...
C++的智能指针笔记
Photo by Ryan Stone on Unsplash
在之前红黑树中使用到了智能指针,所谓智能无非就是能够自己析构释放内存,不需要像裸指针一样手动 delete。
红黑树的代码中使用的 share_ptr,还有另外两个智能指针,分别是 unique_ptr 和 weak_ptr,本篇笔记主要记录的是 share_ptr 和 weak_ptr,至于 unique_ptr 等我后面再研究研究。
share_ptr
顾名思义,share 表示这个指针的所有权是可以共享的,换句话来说就是支持拷贝,允许多个“人”使用,跟原来的裸指针差不多,同时它的共享也是安全的,在 share_ptr 中有个引用计数,用来记录有多少个持有者,如果发生了拷贝复制,就 +1,如果发生析构就 -1,当减到 0 的时候那就会被释放掉。用下面的代码来举例:
123456789101112131415161718192021222324252627282930313233343536#include <iostream>using namespace std;class Node final ...
数据结构基础(C++语言实现)- 红黑树
2-3 树
基本性质
满足二分搜索树的基本性质;
节点可以存放一个元素或者两个元素;
在某种意义上,红黑树其实可以等价于 2-3 数,只不过红黑树的节点只放了一个元素,用红黑颜色表示了是否属于同一个节点
红黑树
基本性质
每个节点或者是红色,或者是黑色
根节点是黑色
每个叶子节点(最后的空节点)是黑色
如果一个节点是红色的,那么他的孩子节点都是黑色
从任意一个节点到叶子节点,经过的黑色节点是一样的
旋转解决平衡问题
红黑树添加或者删除节点都会经过以下几种结构类型,只需要判断当前结构满足类型,直接进行后续的步骤即可。
1234567/* * X(B) X(B) X(B) * / / / Z(B) Z(R) * Y(R) == 添加元素 => Y(R) == 左旋转 => Z(R ...
数据结构基础(C++语言实现)——-平衡二叉搜索树
声明:
该代码基于之前的二叉搜索树代码修改来的,可以点击这里查看相关笔记;
上一条提到的笔记里面的代码有 bug,可以选择不用看了,bug 如下:
节点使用 location 字段记录是左子还是右子,其实没有必要,整个代码里面使用到的地方并不多;
在删除节点时没有对父子关系进行维护,会存在隐藏问题,比如死循环;
对于新代码主要修改有以下:
修改:
删除 location 字段以及相关操作;
将 add 函数和 delete 函数修改为递归函数;
对可能出现空指针异常的地方添加判断(这个是这次改动中出现的最多的问题)
添加:
添加节点左旋转与右旋转操作,用于实现平衡二叉树;
添加判断是否平衡和是否为搜索树的函数;
再唠一句
这次编写平衡二叉树再次让我体会到了 C++ 空指针有多么恶心,这玩意完全不按照套路来,或者说我也没有摸清楚 C++ 操作指针的套路,可能是因为 Java 和 Python 写多了,对于指针的理解没有那么深刻,算是得到了一个教训吧,只能说慢慢练,还不知道后面写图的代码会遇到多恶心的东西,我这里甚至还没用上模板,要是用上了,估计 ...
数据结构基础(C++语言实现)—— 二叉搜索树(不支持重复数据)
注意:该笔记的代码有 bug,已经在平衡二叉树的笔记中修正,点击这里跳转笔记;
先说明一下为什么这个代码不支持重复数据,主要是删改查这三个操作没有对重复数据进行操作,所以不支持(主要是懒的实现了)。
这个代码可能和其他博客里面的实现方式有些许不同,主要在以下几个方面:
树节点记录了父节点以及该结点是左子还是右子,需要多维护几个属性;
左右操作针对结点对象操作,不对结点里面的值操作,比如删除操作,并不是将替换节点直接 replace,而是将整个替换节点的地址覆盖删除节点的地址;
应该没了
下面就是代码实现,至于二叉搜索树的概念和前面一样,自己去查,大佬说的比我更好。
类定义
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101//// Created ...
基础算法(C++语言实现)——二分查找变形
基础的二分查找代码过于简单就不写了,这里主要记录几种变形题,在面试题中出现过:
查找第一个出现指定值
查找最后一个出现的指定值
查找第一个大于指定值的值
查找最后一个小于指定值的值
对于二分查找的前提都是有序的,所以在使用二分查找之前需要先进行排序,由此可见二分差查找不适用于那些频繁修改的数据集
(直接贴代码了,代码量不大,看着就能理解)
查找第一个出现指定值
123456789101112131415161718192021int find_fist_value(int arr[], int len, int value) { int low = 0; int high = len - 1; while (low <= high) { int mid = low + ((high - low) >> 1); if (arr[mid] > value) { high = mid - 1; } else if (arr[mid] < ...
数据结构基础(C++语言实现)——-归并排序
别在这里问什么是归并排序,请善用搜索引擎,数据结构系列的学习笔记只是我用来整理,归纳和复习的系列,不会说原理。
相关代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114//// Created by Tianyi on 2021/11/10.//#include <iostream>using namespace std;void merge_sort_c(int *arr, int start, int end);void merge(int *arr, int start, int mid, int end);void show(int *arr, in ...