<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[刺猬先生]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/llmys</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; llmys]]></copyright><item><title><![CDATA[InnoDB ICP、MRR、BAK特性]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/108022145</link><guid>https://blog.youkuaiyun.com/llmys/article/details/108022145</guid><author>llmys</author><pubDate>Sat, 15 Aug 2020 14:33:44 +0800</pubDate><description><![CDATA[一、Index Condition Pushdown(ICP)
Index Condition Pushdown(ICP)是MySQL使用索引从表中索引行检索行数据的一种方式，从MySQL5.6开始支持。
1.1 解决了什么问题
在MySQL5.6之前，存储引擎通过编译索引定位基表中的行，然后返回给Server层，再去这些数据行进行WEHERE后的条件过滤。在MySQL5.6后支持ICP后，如果WHERE条件可以使用索引，MySQL会把这部分的过滤操作放在存储引擎层，把满足的行从表中读取出。ICP能够减少引]]></description><category></category></item><item><title><![CDATA[InnoDB关键特性-异步IO、刷新邻接页]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/107895868</link><guid>https://blog.youkuaiyun.com/llmys/article/details/107895868</guid><author>llmys</author><pubDate>Sun, 09 Aug 2020 16:31:07 +0800</pubDate><description><![CDATA[一、IO分类
1）同步IO（Sync IO）,即每次IO操作，需要等待此次操作结束后，才能继续接下来的操作；
2）AIO（Asynchornous IO），发出一个IO请求后立即发出另外一个IO请求，当全部的IO请求发布完成后，等待所有的IO操作完成；
3）Native AIO,内核级别提供的异步IO支持；
二、异步IO
2.1 异步IO解决了什么问题
若没进行一次IO操作，需要等待此次操作结束后才能继续接下来的操作。如果用户发出的是一条索引扫描的查询，那么这条SQL查询语句可能需要扫描多个索引页，即多次进]]></description><category></category></item><item><title><![CDATA[InnoDB关键特性-插入缓冲]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/107880676</link><guid>https://blog.youkuaiyun.com/llmys/article/details/107880676</guid><author>llmys</author><pubDate>Sat, 08 Aug 2020 15:48:59 +0800</pubDate><description><![CDATA[一、什么是插入缓冲（Insert Buffer）
    在InnoDB存储引擎中，主键是行的唯一标识符。通常应用程序查询顺序是按照主键递增的顺序进行插入的。因此，插入聚集索引一般是顺序的，不需要随机读取。如下按照下列SQL定义表。
create table t(
    a int auto_increment,
    b varchar(30),
    primary key(a),
    key (b)
);

    其中a列是你自增长的，对a列进行插入NULL,则会自动增长。同时页中的行记录]]></description><category></category></item><item><title><![CDATA[etcd v3服务注册与发现]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/94878786</link><guid>https://blog.youkuaiyun.com/llmys/article/details/94878786</guid><author>llmys</author><pubDate>Sat, 06 Jul 2019 18:18:28 +0800</pubDate><description><![CDATA[参考博客：https://www.cnblogs.com/sevenPP/p/8149890.html
ETCD服务注册分为以下几个步骤：

服务向ETCD注册自己的信息，即在ETCD的某个目录下创建Key以及填写Value;
服务可能异常退出，所以需要维护一个TTL(V3使用lease实现)，当服务异常退出时，监听程序可以监听到；
监听程序，可以根据自己的需求监听服务的事件；（添加、修改、删除）...]]></description><category></category></item><item><title><![CDATA[QML ListView数据修改刷新问题]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/90344385</link><guid>https://blog.youkuaiyun.com/llmys/article/details/90344385</guid><author>llmys</author><pubDate>Sun, 19 May 2019 16:55:41 +0800</pubDate><description><![CDATA[1.问题
在QML的ListView控件，再填充数据之后，我们有时候还需要对model中的数据进行更改。可是，对model数据进行修改之后，ListView的数据并没有及时刷新出来。甚至有时候forceLayout()也没有作用。
2.解决办法
我们可以获取ListView对象的委托item,通过修改item的属性及时达到刷新的目的。
例如QML如下：
ListView {
	id: layer_...]]></description><category></category></item><item><title><![CDATA[QML TEXT内容上下、左右效果实现]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/90214623</link><guid>https://blog.youkuaiyun.com/llmys/article/details/90214623</guid><author>llmys</author><pubDate>Tue, 14 May 2019 20:41:55 +0800</pubDate><description><![CDATA[1.效果
想要使用QML实现滚动Text的效果，即“能够逐条上下滚动，当每条内容超过Text显示的长度时，鼠标移至上去时，能够左右滚动”；

2.实现思路

上下滚动：实际上使用ListView控件，只让该控件显示一行，每次更改当前的item即可，然后在更换当前item的时候添加动画即可。当移至最后一行时，可以先将第一行移至最后一行，再更换当前item，这样就避免了移到最后出现空白的情况。
左右移...]]></description><category></category></item><item><title><![CDATA[《Windows》内核对象]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/88620038</link><guid>https://blog.youkuaiyun.com/llmys/article/details/88620038</guid><author>llmys</author><pubDate>Sun, 17 Mar 2019 15:24:07 +0800</pubDate><description><![CDATA[感谢两位兄弟优秀的总结：
https://blog.youkuaiyun.com/Sagittarius_Warrior/article/details/52247917
https://blog.youkuaiyun.com/ljianhui/article/details/8171266
内核对象（Kernel Object）是Windows操作系统中的一个核心概念。
本章主要介绍了“内核对象”的公共属性：usage...]]></description><category></category></item><item><title><![CDATA[NodeJS 文件夹拷贝以及删除]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/88618836</link><guid>https://blog.youkuaiyun.com/llmys/article/details/88618836</guid><author>llmys</author><pubDate>Sun, 17 Mar 2019 14:21:29 +0800</pubDate><description><![CDATA[文件夹拷贝


function CopyDirectory(src, dest) {
    if (IsFileExist(dest) == false) {
        fs.mkdirSync(dest);
    }
    if (fs.existsSync(src) == false) {
        return false;
    }
    // console.lo...]]></description><category></category></item><item><title><![CDATA[NSIS 基于QT的自定义安装界面]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/88618177</link><guid>https://blog.youkuaiyun.com/llmys/article/details/88618177</guid><author>llmys</author><pubDate>Sun, 17 Mar 2019 13:44:57 +0800</pubDate><description><![CDATA[前端时间在做安装程序时，需要自定义安装界面代替传统的打包工具制作的安装界面。毕竟打包工具制作的界面定制麻烦也比较丑。我们可以使用第三方界面库写安装程序，再在NSIS脚本中调用即可。

采用NSIS + QT 制作安装程序实际上就是使用QT制作安装程序，而NSIS仅仅将制作的安装程序打包成一个exe。
1.核心NSIS脚本
;这次是打包生成exe的路径
OutFile ${TheOutFile}
...]]></description><category></category></item><item><title><![CDATA[C++获取操作系统的名称]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/88250589</link><guid>https://blog.youkuaiyun.com/llmys/article/details/88250589</guid><author>llmys</author><pubDate>Wed, 06 Mar 2019 19:19:10 +0800</pubDate><description><![CDATA[添加头文件
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;

#ifdef WIN32
#include &amp;lt;Windows.h&amp;gt;
#include &amp;lt;WinBase.h&amp;gt;
#endif

实现
std::string GetOSName()
{
	std::string osname = &quot;&quot;;
#ifdef WIN32
...]]></description><category></category></item><item><title><![CDATA[C++ 打开选择文件夹对话框选择目录]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/87893661</link><guid>https://blog.youkuaiyun.com/llmys/article/details/87893661</guid><author>llmys</author><pubDate>Sat, 23 Feb 2019 16:17:09 +0800</pubDate><description><![CDATA[需要添加头文件：
#ifdef WIN32
#include &amp;lt;shlobj.h&amp;gt;
#endif

调用文件对话框选择目录：
// 选择目录
void CustomInstalWndViewCtrl::OnSigBtnSelectInstallDir()
{
	BROWSEINFO  bi;
	bi.hwndOwner = NULL;
	bi.pidlRoot = CSIDL_DESK...]]></description><category></category></item><item><title><![CDATA[C++解压库bit7z编译以及使用]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/87893606</link><guid>https://blog.youkuaiyun.com/llmys/article/details/87893606</guid><author>llmys</author><pubDate>Sat, 23 Feb 2019 16:13:32 +0800</pubDate><description><![CDATA[1.编译bit7z库
bit7z是一个C++静态库，其封装了简单易用的接口，用于调用7-zip库；编译该库，首先需要下载以下源码：

下载bit7z：https://github.com/rikyoz/bit7z
下载lzma:https://jaist.dl.sourceforge.net/project/sevenzip/LZMA SDK/lzma1805.7z

解压bit7z、lzma;在...]]></description><category></category></item><item><title><![CDATA[“C语言编写NSIS插件与调用”示例]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/87640766</link><guid>https://blog.youkuaiyun.com/llmys/article/details/87640766</guid><author>llmys</author><pubDate>Mon, 18 Feb 2019 19:42:50 +0800</pubDate><description><![CDATA[NSIS可以和C/C++混合编程，就是通过NSIS脚本加载C/C++的动态库。
1.首先创建动态库如下：
// Demo.h文件
#ifdef DEMO_EXPORTS
#define DEMO_API extern &quot;C&quot; __declspec(dllexport)
#else
#define DEMO_API extern &quot;C&quot; __declspec(dllimport)
#endif

D...]]></description><category></category></item><item><title><![CDATA[QML ListView鼠标拖动交换两项的位置]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/87640205</link><guid>https://blog.youkuaiyun.com/llmys/article/details/87640205</guid><author>llmys</author><pubDate>Mon, 18 Feb 2019 19:33:59 +0800</pubDate><description><![CDATA[QML中ListView实现鼠标点击拖动交换两个item的位置，实现如下效果：

首先，重写ListView的move属性，如下代码所示：
ListView {
        id: layer_list
        model: modelLayer
        delegate: delegateLayer
        interactive: false
        mov...]]></description><category></category></item><item><title><![CDATA[LIB和DLL的区别，生成以及使用]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/87456705</link><guid>https://blog.youkuaiyun.com/llmys/article/details/87456705</guid><author>llmys</author><pubDate>Sat, 16 Feb 2019 16:49:22 +0800</pubDate><description><![CDATA[参考该博客：https://www.cnblogs.com/TenosDoIt/p/3203137.html

1.基本概念

首先，介绍下动态链接库和静态链接库的概念，两者都是代码共享的方式。

静态库：在链接步骤中，链接器将从库文件中取得代码，复制到可执行文件中，此种称为静态库。其特点是可执行文件中包含了库代码的一份完整拷贝；缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包...]]></description><category></category></item><item><title><![CDATA[NSIS添加公司、描述、版本等]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/87280055</link><guid>https://blog.youkuaiyun.com/llmys/article/details/87280055</guid><author>llmys</author><pubDate>Thu, 14 Feb 2019 16:20:00 +0800</pubDate><description><![CDATA[更改NSIS脚本变量的值
NSIS 在编译应用程序时，可能会动态更改变量的值，这个时候可以通过命令行传入的方式进行更改，如下所示，我们需要更改的值是OutFile的名称：
OutFile ${ExecName}

这个时候，我们在运行命令时，传入命令如下即可更改ExecName的值了,传入命令如下：
G:\NSIS_Setup&amp;gt;E:\\NSIS\\makensis.exe /DExecNam...]]></description><category></category></item><item><title><![CDATA[Jenkins修改Job工作空间、修改日志路径]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/87279558</link><guid>https://blog.youkuaiyun.com/llmys/article/details/87279558</guid><author>llmys</author><pubDate>Thu, 14 Feb 2019 16:13:48 +0800</pubDate><description><![CDATA[配置Job的工作空间
Job-&amp;amp;gt;Configure-&amp;amp;gt;General-&amp;amp;gt;Advanced-&amp;amp;gt;Use custom workspace

搭建自动化编译
创建一个自由风格的软件项目，并输入名字
设置项目的GIT地址

修改Jenkins的日志路径
在Jenkins安装路径C:\Users\Administrator.jenkins下，文件config.xml中修改配置，同理工...]]></description><category></category></item><item><title><![CDATA[C++线程池]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/86584294</link><guid>https://blog.youkuaiyun.com/llmys/article/details/86584294</guid><author>llmys</author><pubDate>Mon, 21 Jan 2019 21:01:24 +0800</pubDate><description><![CDATA[复制这位同学：https://blog.youkuaiyun.com/liushengxi_root/article/details/83932654
1.概述：什么是线程池
因为程序边运行边创建线程是比较耗时的，所以我们通过池化的思想：在程序开始运行前创建多个线	程，这样，程序在运行时，只需要从线程池中拿来用就可以了．大大提高了程序运行效率。
2.如何实现线程池
一般线程池都会有以下几个部分构成：

线程池...]]></description><category></category></item><item><title><![CDATA[APUE学习笔记-文件共享]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/86172869</link><guid>https://blog.youkuaiyun.com/llmys/article/details/86172869</guid><author>llmys</author><pubDate>Wed, 09 Jan 2019 19:27:05 +0800</pubDate><description><![CDATA[文件共享
Unix系统支持在不同的进程间共享打开文件。其结构如下所示：

内核使用了三种数据结构，它们之间的关系决定了在文件共享方面一个进程对另一个进程的影响。


每个进程在进程表中都有一个记录项，在每个记录项中都有一张打开的文件描述符表，每个描述符占用一项。与每个文件描述符相关联的是：

文件描述符，文件描述符；
指向一个文件表项的指针；



内核为所有打开的文件维持一张文件表。每个文件表包...]]></description><category></category></item><item><title><![CDATA[APUE学习笔记-文件IO]]></title><link>https://blog.youkuaiyun.com/llmys/article/details/86110026</link><guid>https://blog.youkuaiyun.com/llmys/article/details/86110026</guid><author>llmys</author><pubDate>Wed, 09 Jan 2019 00:33:19 +0800</pubDate><description><![CDATA[一、文件描述符
按照惯例，UNIX shell使用文件描述符0与进程的标准输入相结合，文件描述符1与标准的输出相结合，文件描述符2与标准出错输出相结合。
二、相关函数
open函数如下，返回文件描述符
int open(const char* pathname, int oflag, mode_t mode)

oflag参数可以用一个或者多个常数构成：

O_RDONLY 只读打开
O_WRON...]]></description><category></category></item></channel></rss>