<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ld_long的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ld_long</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ld_long]]></copyright><item><title><![CDATA[wsl --update 太慢]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/145989433</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/145989433</guid><author>ld_long</author><pubDate>Mon, 03 Mar 2025 15:11:38 +0800</pubDate><description><![CDATA[windows 更新了，wsl 用不了，提示使用wsl --update 命令。但是这个命令不能科学上网，科学上网就报错已拒绝。但是不科学上网，下载地又非常慢。]]></description><category></category></item><item><title><![CDATA[tmux 介绍与使用]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/145353834</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/145353834</guid><author>ld_long</author><pubDate>Sat, 25 Jan 2025 21:39:54 +0800</pubDate><description><![CDATA[比如，我在终端命令行执行htop。当我关闭这个终端时，htop进程也随着这个终端的关闭而结束。我在终端运行着一个程序，它应该一直运行着。我一不小心把终端关闭了，这个程序也随之停止了。tmux就是用来解决这个问题的。即终端关闭，在终端运行着的程序不会关闭。]]></description><category></category></item><item><title><![CDATA[docker使用笔记]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/145245375</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/145245375</guid><author>ld_long</author><pubDate>Sun, 19 Jan 2025 22:13:01 +0800</pubDate><description><![CDATA[(-cs。]]></description><category></category></item><item><title><![CDATA[kmp算法]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/143947392</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/143947392</guid><author>ld_long</author><pubDate>Thu, 21 Nov 2024 16:41:30 +0800</pubDate><description><![CDATA[然后再次判断pattern[j] 是否 = pattern [k]，如果相等，说明这个更小的字串是合适的，那么next[j] = k+1,同时，把k更新为 k = next[j]。next[6]=3 表示pattern[0:6](闭区间，包含头尾）中，后缀串等于前缀串的最长后缀串长度为3.下面说成最长相等前缀串或者最长相等后缀串为3。0时，next[k-1]=next[-1]是不合法的。那么next[j] = k+1,同时，把k更新为 k = next[j]。如果不相等，则让j回溯到next[j-1]。]]></description><category></category></item><item><title><![CDATA[Qt 元对象系统 - 反射篇]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/143879543</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/143879543</guid><author>ld_long</author><pubDate>Tue, 19 Nov 2024 20:46:02 +0800</pubDate><description><![CDATA[QT的大部分类型都能反射。有拷贝构造函数有赋值号运算符重载有!=(本类型)运算符重载Q_DECLARE_METATYPE() 申明第一个和第二个可以是默认的。但有时编译器不一定能生成拷贝构造函数或者赋值号构造函数。典型的如继承了QObject的类。因为QObject delete了拷贝构造函数。所以编译器不会为它的派生类生成默认的拷贝构造函数。举例如下：有一个自定义类public:QString mName = "王老师";]]></description><category></category></item><item><title><![CDATA[spdlog滚动日志以及编译加速]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/143716227</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/143716227</guid><author>ld_long</author><pubDate>Tue, 12 Nov 2024 16:20:47 +0800</pubDate><description><![CDATA[是使用spdlog的是时候发现，include 了<spdlog/spdlog.h>头文件的.cpp文件总是编译的非常慢。但由于他是日志库，大量的源文件会使用它，所以如果它编译慢肯定是不能登上大堂的。有这个宏定义，spdlog才会使用库版本，否则使用的是仅头文件版本。spdlog的滚动日志中，编号最小的日志文件是最新的。当0号日志文件写满时，会把0号日志文件改名为1号。（如果1号日志文件存在，则 把1号日志文件变成2号，依次类推）。使得日志目录中每个日志文件大小固定，日志文件数量有最大值。]]></description><category></category></item><item><title><![CDATA[CMake 实战]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/143706592</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/143706592</guid><author>ld_long</author><pubDate>Tue, 12 Nov 2024 15:28:57 +0800</pubDate><description><![CDATA[本文列举了cmake在项目上的使用。包括如何使用第三方库（第三方库以多种方式提供），如何保证模块内自治，用一个命令使用自治得当的其他模块。]]></description><category></category></item><item><title><![CDATA[mysql 两阶段锁协议（2PL)的作用]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/143604877</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/143604877</guid><author>ld_long</author><pubDate>Thu, 07 Nov 2024 19:38:16 +0800</pubDate><description><![CDATA[两阶段锁是怎么运行的，以及如何证明他产生的调度得到的最终结果一定是和某个串行执行结果相同，就不写了，两阶段锁协议是什么网上可以找得到，证明我还没找到。而非串行调度指的是运行事务1的一个操作，然后运行事务2的操作，然后由运行事务1的操作。运行事务1事务2，结果要么是B=3，A=4（先执行事务1，再执行事务2），要么是A=6，B=7，（先执行事务2，再执行事务1）。然后各自写A,和B,结果是A=6，B=3，他和任意一个串行化执行（先执行事务1再执行事务2或先执行事务2再执行事务1）都不同。]]></description><category></category></item><item><title><![CDATA[linux mysql8大小写敏感问题]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/143503593</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/143503593</guid><author>ld_long</author><pubDate>Tue, 05 Nov 2024 11:39:14 +0800</pubDate><description><![CDATA[在windows或者macOs，mysql对表明的大小写是不敏感的，但是在linux上是敏感的。笔者写了一个程序，程序里的sql语句没有注意大小写问题，访问windows的mysql没有问题，但访问Linux的就出问题了。于是着手解决这个问题，让linux的mysql也变得大小写不敏感。]]></description><category></category></item><item><title><![CDATA[《c++并发编程》中无锁栈的实现为什么要用双引用计数器]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/137692475</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/137692475</guid><author>ld_long</author><pubDate>Sat, 13 Apr 2024 10:31:27 +0800</pubDate><description><![CDATA[c++并发编程》中，实现无锁栈用了引用计数技术。原因是，pop方法要删除栈顶中的节点，然而，由于1.读取栈顶指针->2.根据栈顶指针访问栈顶节点、获取栈顶节点所保存的数据以及下一个节点指针next_node->3.更新栈顶指针为next_node->4.删除栈顶节点这4个 步骤不能做到原子，所以可能出现下面情况，线程A执行完步骤1后，在执行步骤2之前，线程B一口气执行完步骤1-4，把节点删除了，然后线程A执行步骤2，就是一个空悬指针解引用的错误，因为线程A并不知道他要访问的节点，已经被线程B删除了。]]></description><category></category></item><item><title><![CDATA[https的过程以及为什么安全]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/136645944</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/136645944</guid><author>ld_long</author><pubDate>Tue, 12 Mar 2024 11:15:17 +0800</pubDate><description><![CDATA[他首先从CA处获得公钥，然后用公钥解密数字签名。然后用与CA同样的摘要算法对证书其他部分做摘要。如果一样，就可以证明证书确实是由CA颁发的。因为如果一个数字签名不是由CA的私钥加密的，CA的公钥解密出来的摘要就和客户自己对证书其他部门的摘要不同。然而，其他人几乎不可能有CA的私钥，所以他就无法冒充CA颁发证书。但这里的前提是，客户手上的CA的公钥，是真真正正的CA的公钥，而不是冒充的CA的公钥。要做到这点，只需要操作系统出厂时，由可信的操作系统厂商把真正的CA公钥提前注入到系统中即可。]]></description><category></category></item><item><title><![CDATA[使用国内源，加速docker镜像的下载]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/136516821</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/136516821</guid><author>ld_long</author><pubDate>Wed, 06 Mar 2024 20:22:44 +0800</pubDate><description><![CDATA[(:)进入命令行模式。Docker中国区官方镜像。按esc键退出插入模式。]]></description><category></category></item><item><title><![CDATA[unbuntu一条命令安装docker]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/136516661</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/136516661</guid><author>ld_long</author><pubDate>Wed, 06 Mar 2024 20:17:10 +0800</pubDate><description><![CDATA[【代码】unbuntu一条命令安装docker。]]></description><category></category></item><item><title><![CDATA[pthread_cancel]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/136067372</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/136067372</guid><author>ld_long</author><pubDate>Wed, 07 Feb 2024 11:41:18 +0800</pubDate><description><![CDATA[延迟取消不会使得线程立即取消，只是给线程发送一个信号。线程会在取消点检查是否有信号，有信号才取消。也就是延迟到取消点取消。取消点有 IO(printf也是IO)，pthread_mutex_lock()，phtread_join()，phtread_testcancel()函数等。目前，我没有 找到线程取消的回调函数写法。也就是线程被取消后，可能来不及释放它的资源。函数可以取消一个线程的执行。有两种取消方式:立即取消和延迟取消。]]></description><category></category></item><item><title><![CDATA[纯虚析构函数需要实现]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/136059733</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/136059733</guid><author>ld_long</author><pubDate>Tue, 06 Feb 2024 17:06:55 +0800</pubDate><description><![CDATA[纯虚函数不需要实现也可以编译通过，但是纯虚析构函数例外。即使把析构函数声明为纯虚，也需要在某一个.cpp文件中给一个定义。]]></description><category></category></item><item><title><![CDATA[多进程共享的pthread_mutex_t]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/135732039</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/135732039</guid><author>ld_long</author><pubDate>Sun, 21 Jan 2024 17:43:35 +0800</pubDate><description><![CDATA[不用被设置为PTHREAD_PROCESS_SHARED的attr初始化mutex，mutex也能保证互斥：实验表明，如果进程不调用sleep()，省略与不省略步骤4-5的结果是一样的，没有任何两个进程同时进入临界区。不设置PTHREAD_PROCESS_SHARED可能还有其他不预期的事发生，所以还是设置PTHREAD_PROCESS_SHARED好。pthread_mutex_init有个规定，那就是它init的那片内存为全0。它就是mutex初始化时的一个指导，这个指导在哪个位置并不重要。]]></description><category></category></item><item><title><![CDATA[c++ 要求用户输入整数时的风险]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/134096483</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/134096483</guid><author>ld_long</author><pubDate>Sat, 28 Oct 2023 21:27:31 +0800</pubDate><description><![CDATA[不管用户输入的是什么，首先全都接受了，然后再转换为整数。这里使用stoi而不是atoi，是因为atoi在无法把字符串转化为数字时返回0。无法区分是数字就是0，还是无法转换。stoi在无法转化时是抛出异常且不返回。第三行使用getline，还是cin>>a_s。这样这些错误内容可能会使得后面的输入混乱。因为这些错误的内容可能会留在缓冲区。或者用不正确的值覆盖掉a的默认值。因为用户的输入可能无法转化为整数。或者除了整数外输入了额外的内容。为了保证不受用户错误输入的影响。要求用户输入整数时，如果直接这样。]]></description><category></category></item><item><title><![CDATA[c++和java实现策略模式的差异]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/134080248</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/134080248</guid><author>ld_long</author><pubDate>Fri, 27 Oct 2023 17:30:15 +0800</pubDate><description><![CDATA[c++的对象有两种实例化方式，一种是局部变量中直接实例化。一种是new出来的。java的对象构建，没有第一种方式，java的对象都是new 出来的。]]></description><category></category></item><item><title><![CDATA[读磁盘概述]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/132070271</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/132070271</guid><author>ld_long</author><pubDate>Wed, 02 Aug 2023 20:19:51 +0800</pubDate><description><![CDATA[一个磁盘有很多个盘面，上面是其中一个盘面，每个盘面对应一个磁头。磁盘的最小单元是扇区，通过CHS可以定位到一个确定的扇区，每个扇区一般是512个字节。]]></description><category></category></item><item><title><![CDATA[30天自制操作系统 day2 32位处理器的几个寄存器 换种方式制作磁盘镜像 makefile]]></title><link>https://blog.youkuaiyun.com/ld_long/article/details/131871469</link><guid>https://blog.youkuaiyun.com/ld_long/article/details/131871469</guid><author>ld_long</author><pubDate>Sat, 22 Jul 2023 20:16:55 +0800</pubDate><description><![CDATA[用的是它自己写的工具，叫edimg。使用方式如下读取fdimg0at.tek，在读取ipl.bin，从ipl.bin的开头读512个字节到fdimg0at.tek中，并另存为helloos.img。ipl.bin就是编译出来的二进制代码。可以用作者提供的启动程序，也可以用day1自己写的。作者提供的程序多了一些内容。是一些参数。]]></description><category></category></item></channel></rss>