<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_40508591的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_40508591</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_40508591]]></copyright><item><title><![CDATA[linux文件和目录权限（umask）]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/118684421</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/118684421</guid><author>qq_40508591</author><pubDate>Mon, 12 Jul 2021 21:42:06 +0800</pubDate><description><![CDATA[umask命令用来设置所创建文件和目录的默认权限 。



umask默认的值为0022（掩码），其中第一位代表了一项特别的安全特性，叫作粘着位（sticky bit），后面三个数值组成了umask的八进制值。

其中读（r）写（w）执行（x）分别代表着值4、2、1。

相对于文件来说，权限全部开启时只有读取和写入两种权限。所以全权限时对应的八进制值为666；

相对于目录来说，权限全部开启时有读取、写入和执行三种权限。所以全权限时对应的八进制值为777。

umask值只是个掩码，它会屏蔽掉不想授予...]]></description><category></category></item><item><title><![CDATA[创建ubuntu之后的更新操作]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/113943100</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/113943100</guid><author>qq_40508591</author><pubDate>Mon, 22 Feb 2021 17:49:26 +0800</pubDate><description><![CDATA[1、设置随机生成的root用户的密码

由于刚开始创建的Ubuntu时root用户的密码是随机生成的，此时我们可以使用sudo passwd root用于设定初始的root用户的密码。


sudo passwd root



2、更改镜像源

操作步骤

1、安全起见，先备份：


cp /etc/apt/sources.list /etc/apt/sources.list.bak


2、替换为国内镜像源


cat /dev/null &gt; /etc/apt/sources.list
vi /e]]></description><category></category></item><item><title><![CDATA[BASE64]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108181929</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108181929</guid><author>qq_40508591</author><pubDate>Sun, 23 Aug 2020 13:02:08 +0800</pubDate><description><![CDATA[1、背景：数据在网络中传输是以二进制的形式传输，如果数据是英文，则传输不会出现乱码的情况。如果是中文，不同环境下的编码方式可能造成乱码的现象发生。

2、作用：能够将二进制文件、图片等转换成可见的字符，用于传输，确保图片数据不会丢失。

3、实现步骤：

将待转换的字符串每三个字节分为一组，每个字节占8bit，那么共有24个二进制位。
	将上面的24个二进制位每6个一组，共分为4组。
	在每组前面添加两个0，每组由6个变为8个二进制位，总共32个二进制位，即四个字节。
	根据Base64编码对照表（见下图）]]></description><category></category></item><item><title><![CDATA[libevent反应堆初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108164486</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108164486</guid><author>qq_40508591</author><pubDate>Sat, 22 Aug 2020 10:11:15 +0800</pubDate><description><![CDATA[libevent中的三种事件：I/O事件、定时事件、信号事件





libevent库

开源。精简。跨平台（Windows、Linux、maxos、unix）。专注于网络通信。

源码包安装： 参考 README、readme

./configure 检查安装环境 生成 makefile

make 生成 .o 和 可执行文件

sudo make install 将必要的资源cp置系统指定目录。

进入 sample 目录，运行demo验证库安装使用情况。

编译使用库的 .c 时，...]]></description><category></category></item><item><title><![CDATA[C++之STL初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108161451</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108161451</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 23:33:08 +0800</pubDate><description><![CDATA[STL

六大组件：

	Container(容器)：各种基本数据结构
		Iterator(迭代器)： 连接containers和algorithms
		Algorithm(算法)： 各种基本算法如sort、search.. 等
		Adapter(适配器)：可改变containers、Iterators或Function object接口的一种组件
		Function object( 函数对象)
		Allocator(分配器)：内存分配与管理
	
容器：
	分类：
		顺序容器：放进去在哪里，这个]]></description><category></category></item><item><title><![CDATA[C++之内存管理初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108161313</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108161313</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 23:28:42 +0800</pubDate><description><![CDATA[内存管理

内存管理方式

	交互给用户管理 ----- C语言
		GC机制，垃圾回收机制 ----- Java
	
C++为什么没有GC机制？？？ ------ C++内存管理方式：计数管理+智能指针

	答： 
	
	智能指针：帮助用户自动管理内存  ------ 包含头文件#include &lt;memory&gt;
	shared_ptr ---- 共智能指针
		概念：允许多个共享智能指针指向同一个对象，并对指向该对象的指针计数，当计数到0时会释放该对象
			shared_ptr是一个类，而]]></description><category></category></item><item><title><![CDATA[C++之异常处理机制初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108161244</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108161244</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 23:24:39 +0800</pubDate><description><![CDATA[3、异常

将可能会抛出异常的函数放入到try块中
	用catch来接收异常（注意类型需要一致），可以catch多个不同类型的异常
	在可能发生异常的地方抛出异常（throw）
	栈解旋：throw--------&gt;catch之间被压入栈的部分会在异常抛出之后被析构
	C++内置的异常类：




补充：

1、一般继承中如果想要使用基类指针指向派生类的话，需要将基类的析构函数写成虚析构函数，否则delete基类指针的时候派生类对象无法释放，从而造成内存泄露。

2、析构函数被继承过来了，但是构造函.]]></description><category></category></item><item><title><![CDATA[C++之文件操作初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108161231</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108161231</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 23:23:53 +0800</pubDate><description><![CDATA[2、文件操作

文件的分类：

	二进制文件：将内存中的数据原封不动的读取和写入文件
		文本文件：以字符编码方式保存
	
	以文件流的方式对文件进行操作 ----- 文件流类
文件流 -------- 文件流类对象 ---------- 文件

文件流类的分类：

	ifstream -------- 文件输入流 --------&gt; 对应的是文件的读取
		ofstream -------- 文件输出流 --------&gt; 对应的是文件的写入
		fstream -------- 文件输入输出]]></description><category></category></item><item><title><![CDATA[C++之继承多态初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108161156</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108161156</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 23:21:35 +0800</pubDate><description><![CDATA[3、继承

代码复用的两种方式：

	组合
		继承
	
	继承的权限：private、protected、public；
	子类构造函数：初始化子类成员，调用父类的构造函数初始化父类的成员（对象初始化列表）
	注意：若父类没有无参构造函数，则子类中所有构造函数中显示调用父类的构造函数。
	
	构造函数的调用顺序：先构造父类（继承时的前后顺序），子对象（其他类的对象），后构造子类。
	缺点：固定的调用时机，一般用自己写的init函数代替构造函数。
	
	析构函数的调用顺序：与构造函数相反。
	多继承：


]]></description><category></category></item><item><title><![CDATA[C++之类的封装初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108161095</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108161095</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 23:19:06 +0800</pubDate><description><![CDATA[C++的封装------对外提供接口，对内开放数据

1、特征：C++的维护性------将多个实现方法用class封装起来，其中用访问控制权限进行访问控制，从而保证代码的独立性（对内private、对外public），更加便于快速的定位到bug代码段。

2、构造函数和析构函数

1）构造函数：初始化资源

a、特点：

  1.自动调用

  2.构造函数名和类名一致

  3.构造函数没有返回值

  4.构造函数可以重载

  5.当类中没有任何构造函数时，系统会提供默认无参构造...]]></description><category></category></item><item><title><![CDATA[C++之string类初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108160975</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108160975</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 23:13:54 +0800</pubDate><description><![CDATA[string类-------头文件包含#include&lt;string&gt;

1、string：std提供的标准字符串处理的类 class string；（成员变量，方法）

特点：可变长（动态分配，不再关注字符串的长度）

2、属性：

1）size()：string的大小，不包含‘\0’

2）length()：string的长度，不包含‘\0’

3）empty()：判断字符串是否为空 返回的是bool值

4）capacity()：返回的是string当前的容量

5）resize()：重置]]></description><category></category></item><item><title><![CDATA[c++中对函数的扩展]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108160953</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108160953</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 23:12:38 +0800</pubDate><description><![CDATA[c++对函数的扩展

1、inline内联函数

将函数体中的代码内嵌入函数调用的地方，不再发生函数调用----------内存空间换取运行时 间的操作。

（编译时间换取内存空间：宏函数

内存空间换取运行时间：inline函数）

1）C++对内联函数的扩展：

C语言只要声明inline，一定会以内联的方式进行处理；

C++请求编译器将该函数内联！（会进行判断，可以拒绝请求）。

2）什么时候使用内联函数？

功能简单且代码短小，调用频繁。

3）使用注意事项：

调用内联函数之前必须声明或者定义该]]></description><category></category></item><item><title><![CDATA[虚拟地址和物理地址之间的映射关系]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108154090</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108154090</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 22:28:55 +0800</pubDate><description><![CDATA[1、虚拟地址和物理地址之间的映射是以页（4KB）为单位进行映射的；

2、每一个进程中都有一个进程控制块（PCB），里面包含了一些进程的信息（页目录，状态，句柄表，ID，PID……）；

3、映射过程（32位系统下）：

首先PCB中有一个指向一级分页表的指针，每一个页表的大小均为4096B（4KB），可以存储1024个地址。其中一级页表中每一个地址对应着一个二级页表的首地址，二级页表中也存储着1024个地址，其中每个地址分别对应着物理内存上面的每一个页的首地址。这样一来，虚拟地址空间所能够访问的地址有10]]></description><category></category></item><item><title><![CDATA[Solyog连接ubuntu下面的mysql]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/108145042</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/108145042</guid><author>qq_40508591</author><pubDate>Fri, 21 Aug 2020 13:01:41 +0800</pubDate><description><![CDATA[1、关闭ubuntu下面的防火墙  ufw disable

（查看防火墙的状态：ufw status）

2、开放端口号

 iptables -L -n //查看开放的端口
 iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

3、在mysql中查看系统用户对应的认证插件

select user,host,plugin from mysql. user;



4、将root用户认证插件更改为mysql_native_password，



（...]]></description><category></category></item><item><title><![CDATA[内存分页初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/107980099</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/107980099</guid><author>qq_40508591</author><pubDate>Thu, 13 Aug 2020 15:04:26 +0800</pubDate><description><![CDATA[1、背景：

我们知道进程是跑在虚拟地址空间（对应物理空间上面的某一块）上面的，而数据的存储则是存储在物理内存上面的，所以这之间就涉及到物理地址和虚拟地址之间得翻译过程。如果是以字节为单位的话，则两者之间的对应关系较多，地址翻译过程较为庞大且低效率，所以引用了单位页（4096B）来进行管理。





2、地址翻译的过程 

解释：偏移量为啥是三位16进制数 ---- 0xfff = 2^12；

一页 = 4096个字节，所以用16进制数来表示某一数据在当前页的具体位置



优点：内存分页，可以极大地.]]></description><category></category></item><item><title><![CDATA[C++之可调用对象初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/107781530</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/107781530</guid><author>qq_40508591</author><pubDate>Tue, 04 Aug 2020 10:45:36 +0800</pubDate><description><![CDATA[3、可调用对象

把所有的函数抽象成一个个对象，将用函数运算符操作的对象叫做可调用对象
	种类（七个）：普通函数，类成员函数，函数指针，类的成员函数指针，可转换为函数指针的类、函数对象，lambda表达式

#include &lt;iostream&gt;
using namespace std;


//可调用对象：普通函数，函数指针，类成员函数/静态成员函数，类成员函数指针，可转换为指向函数的类，函数对象，lambda表达式


//普通函数
int add(int a, int b)
{
    r]]></description><category></category></item><item><title><![CDATA[mysorts]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/107733109</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/107733109</guid><author>qq_40508591</author><pubDate>Sat, 01 Aug 2020 16:44:58 +0800</pubDate><description><![CDATA[#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cmath&gt;
#include &lt;cstring&gt;

#define SIZE 10

using namespace std;

void bubble(int *num)
{
    for (int i = 0; i &lt; SIZE; ++i)
    {
        int flag = 0;
        for (int j = 0; j &l]]></description><category></category></item><item><title><![CDATA[C++之类型推导初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/107729394</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/107729394</guid><author>qq_40508591</author><pubDate>Sat, 01 Aug 2020 13:03:42 +0800</pubDate><description><![CDATA[new operator 分配新的空间，调用operator new
	operator new 运算符
	右值引用本身是一个左值，可以对其进行修改操作。！！！
1、内存管理

重载new、delete、new[ ]、delete[ ]

	何时使用：实现内存管理，提高内存使用效率的时候
		重载new[ ]的时候会多出一个指针来管理分配的空间，其中就保存了需要delete的字节数
		new、delete和构造函数、析构函数的调用顺序：
		先调用new，再调用构造函数
			先调用析构函数，在调用del]]></description><category></category></item><item><title><![CDATA[demo_memory_pool.cpp]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/107729369</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/107729369</guid><author>qq_40508591</author><pubDate>Sat, 01 Aug 2020 13:01:36 +0800</pubDate><description><![CDATA[V1.0


#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

//V1.0
namespace _nmsp2
{
//#define MYMEMPOOL 1
    class A
    {
    public:
        static void *operator new(size_t size);
        static void operator delete(void *phead);.]]></description><category></category></item><item><title><![CDATA[C++类模板和函数模板初识]]></title><link>https://blog.youkuaiyun.com/qq_40508591/article/details/107685127</link><guid>https://blog.youkuaiyun.com/qq_40508591/article/details/107685127</guid><author>qq_40508591</author><pubDate>Thu, 30 Jul 2020 10:53:53 +0800</pubDate><description><![CDATA[宏定义
	函数的重载：
	内存管理方式
	交互给用户管理 ----- C语言
		GC机制，垃圾回收机制 ----- Java
	


1、模板类和模板函数

宏定义：简单的替换不安全，而且不能实现复杂的函数
	函数的重载：需要重载多个版本
	模板：一段程序实现能够处理不同的类型的对象，使参数的多态(使相同的逻辑代码处理不同的数据类型)，是一个实现多态的工具。
	分类：类模板、函数模板、成员函数模板。
	
	函数模板
	可以进行重载的
		格式template &lt;typename T1, typen.]]></description><category></category></item></channel></rss>