<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[w1724556613的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/w1724556613</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; w1724556613]]></copyright><item><title><![CDATA[Linux权限]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117654396</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117654396</guid><author>w1724556613</author><pubDate>Mon, 07 Jun 2021 11:41:18 +0800</pubDate><description><![CDATA[在Linux中，一切皆文件，因此对文件权限的理解，便是对Linux的权限理解。
开始先对用户有个理解，用户有两种一种事超级用户 root，是＃号提示符，普通用户，$提示符。
文件对于操作来说有三个对象，拥有者，所属组，和其他人，在ll显示文件的情况，第一行的-标识文件，如果是d就是目录，然后有九行，分别标识三种对应的人，拥有者，所属组，其他人的权限，有三种权限，r读，w写，x执行。
然后，后面是文件的拥有者，所属组，文件大小，修改时间，文件名
chmod命令修改权限，u/g/o，分别表示user拥有者，gr]]></description><category></category></item><item><title><![CDATA[平衡搜索二叉树~AVL树]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117628437</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117628437</guid><author>w1724556613</author><pubDate>Mon, 07 Jun 2021 11:00:25 +0800</pubDate><description><![CDATA[作为搜索结构，二叉搜索树有其高效的搜索效率，但是同时也有着其本质的缺陷，就是在数据呈现顺序的时候，效率低下，因此不适合大多数的数据存储，但是如果将其修改，成为一个平衡树，结合两者特点，就可以完成高效的查找，因此我们学习平衡搜索二叉树~AVL树
AVL树的特点是，左子树和右子树的高度差不超过一，也就是说，左右子树的高度最多差一，并且要保证所有的子树都满足这个条件，因此分部均匀，且具有相对优秀的效率。
插入和删除都是二叉搜索树的方式，但是在这之后，需要进行平衡的旋转工作，因此我们一般是随着节点往上走来调节平衡，]]></description><category></category></item><item><title><![CDATA[Linux命令]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117632735</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117632735</guid><author>w1724556613</author><pubDate>Sun, 06 Jun 2021 18:41:09 +0800</pubDate><description><![CDATA[首先在认识Linux前，我们先要知道，Linux是一款操作系统，操作系统是一款用来管理的软件，管理软件和硬件，Linux的开源操作系统，一定是安全高效的，因为有许多人在对其进行改进，漏洞就很少。而对Linux的操作是使用命令行界面的，一般我们的普通电脑都是使用gui的图形化界面，使用点击的方式进行操作，但是Linux是命令行界面，因此需要输入指令来进行操作，因此首先学习Linux就得学习Linux的命令行操作。
ls -a -l
命令后可以加参数，会呈现出不同的效果，

...]]></description><category></category></item><item><title><![CDATA[哈希对于大数据的处理]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117630942</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117630942</guid><author>w1724556613</author><pubDate>Sun, 06 Jun 2021 17:27:25 +0800</pubDate><description><![CDATA[哈希对于大数据的处理一般借助位图和布隆过滤器。首先我们先对于这两种数据结构进行应用。
第一:大数据整数，找只出现一次或者两次或者三次的小次数重复的数。如何寻找？
我们借助于map统计次数的思想，并加以对位图进行改装，使用两个位图进行操作。底层封装两个位图，一个位表示存在，另一个位标识是否出现两次或者以上。比如01表示一次，10表示两次以上，而更多的有限次就可以使用这种方式来表示，其本质的思路，还是利用较小的空间表示更多的状态，还是一种抓特性特点的处理数据方式。
#include "bitset.h"
usi]]></description><category></category></item><item><title><![CDATA[布隆过滤器]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117620994</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117620994</guid><author>w1724556613</author><pubDate>Sun, 06 Jun 2021 10:50:09 +0800</pubDate><description><![CDATA[位图在优点上，效率高效，并且具有空间小的优点，但缺点很明显，只能处理整型，因为其属性全部是描述整型的，因此在处理日常生活中很多的字符串上，就很有必要了，，因此将位图进行改造，变成布隆过滤器，就可以解决这个问题。
首先我们的思路肯定是，将字符串变成整型，这是毋庸置疑的，哈希的字符串算法很多，所以这点不是很难，但是问题是，在位图中，ps：这里的整型都是无符号的，整型是具有唯一的属性，因此它是一一映射，所以当你找到的时候是一定存在的，但是字符串无论使用什么算法，都可能导致重叠，因为对属性的描述不具有唯一性。因此字]]></description><category></category></item><item><title><![CDATA[哈希应用：位图]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117606235</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117606235</guid><author>w1724556613</author><pubDate>Sat, 05 Jun 2021 23:19:14 +0800</pubDate><description><![CDATA[哈希在很多方面都有着其特殊的作用，今天我们来介绍两种关于哈希的应用方面，对于大数据的处理。
第一 位图
如果说，要在4000亿的无符号整型中，找存在的那个数，该如何处理呢，明显是key的模型，找一个数是否存在，但是内存不够啊，1G是10亿的数据，那么4000亿的话是400G，还要有整形4个字节，总来说要1600G，服务器能有这么大吗？
肯定是有这么大的服务器的，但是呢不能全去处理这个数据吧，因此对于大数据的处理，对于空间的要求就比较的高了，我们一方面要考虑数据的查找效率，还有空间的储存可能。
因此根据哈希的]]></description><category></category></item><item><title><![CDATA[unordered_map set的模拟实现]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117605731</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117605731</guid><author>w1724556613</author><pubDate>Sat, 05 Jun 2021 21:37:39 +0800</pubDate><description><![CDATA[设计容器时，哈希注重的是如何处理哈希冲突，显然，开散列的处理方式要优于闭散列，因此使用开散列处理哈希冲突，模拟实现的本质是对迭代器如何处理，因为其他的接口都是很好完成的，但是迭代器如何形成遍历的方式呢？
在封装迭代器前，我们先思考一个问题，如何进行类型的不同调整，因为底层是用除留余数法进行映射的，但是除了整形，还有什么能取余呢，因此需要对不同的类型进行不同的转换，我们只是模拟实现，因此处理最多使用的string类，使用模板的特化，对string类进行特殊处理，这样将其转换成对应的整形，这里也要使用一下仿函数]]></description><category></category></item><item><title><![CDATA[哈希与哈希冲突]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117572694</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117572694</guid><author>w1724556613</author><pubDate>Fri, 04 Jun 2021 21:06:53 +0800</pubDate><description><![CDATA[哈希本质上是一种映射关系，利用映射关系进行快速查找，它的查找效率可以到O(1)的程度，因此在c++11中引进了unordered_set和unordered_map来进行使用，因为在大数据下，map和set的查找效率不是很高，所以引进了以哈希为底层结构的关联容器。
怎么理解哈希的映射呢？哈希的底层是数组，因此其实更多的是对于数组能够随机访问的支持，将数据以数组下标的形式进行一一对应，那么直接用数组下标进行访问数据，查找的效率岂能不快？
但是上述做法是名为直接定制法的哈希函数，一般我们都是使用除留余数法来进行]]></description><category></category></item><item><title><![CDATA[map和set的使用]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117190369</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117190369</guid><author>w1724556613</author><pubDate>Sun, 23 May 2021 11:48:36 +0800</pubDate><description><![CDATA[map和set是关联式容器，它们的底层的实现是都是红黑树，只是它们使用的模型不同，一个是key模型，一个key-value模型，之所以是关联性容器，是因为它们的数据存放是与其特性有关联性的，这里我们简单讲一下使用，因为其使用的方式和其他容器的区别不是很大。
set，因为是二叉树的结构，所以只有insert和erase，删除的是可以用迭代器来删也可以用值来删，如果要用迭代器，就要使用find函数，来查找，也可以用algorithm中的find函数，但是效率上，前者是logn后者是n，set容器的主要使用是判断]]></description><category></category></item><item><title><![CDATA[二叉搜索树]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/117188887</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/117188887</guid><author>w1724556613</author><pubDate>Sun, 23 May 2021 10:55:23 +0800</pubDate><description><![CDATA[二叉搜素树是基于二叉树的结构，给予了一些特性的二叉树，它具有左节点比根小，右节点比根大的特性，这让可以让搜索一个值的时间复杂度到达log(n)，这里二叉搜索树有两种模型，一是key模型，只有一个键值，它可以进行一个值的搜索，在不在，比如门禁卡，一扫就会匹配这个是不是用户，就用的这个模型，还有一种，key-value的模型，通过一个键值来匹配相对应得意义，这里也有统计次数的作用。因为在有序或者接近有序的时候，二叉搜索树的效率很低，所以模型的使用都建立在平衡二叉搜索树上面，因此二叉搜索树重点就是插入和删除的代码]]></description><category></category></item><item><title><![CDATA[多态的实现]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116841261</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116841261</guid><author>w1724556613</author><pubDate>Sat, 15 May 2021 12:18:13 +0800</pubDate><description><![CDATA[首先要了解多态的底层，我们需要了解一个概念：虚函数表
虚函数表是一个函数指针的数组，它存放着虚函数的指针，可以用来调用虚函数，在构造虚函数时候，会将虚函数的地址放入虚表中，而在对象中又会存有一个虚表指针，指向虚表，子类继承父类，会将父类的虚表copy继承，然后重写虚函数，将重写后的虚函数新地址覆盖掉，原来父类虚函数的地址，这样就完成了多态，所以重写也叫覆盖，这样我们通过父类的指针访问子类，子类将父类的成员切片给父类，也包含了虚表指针，而虚函数的调用是由虚表指针来调用的，所以这就和对象有关，而不是和类型有关。]]></description><category></category></item><item><title><![CDATA[多态的语法]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116837570</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116837570</guid><author>w1724556613</author><pubDate>Sat, 15 May 2021 11:36:53 +0800</pubDate><description><![CDATA[多态作为面向对象的三大特性之一，它主要表现是利用父类的指针引用，可以指向子类的函数，实现父类指针的多种形态，既能指向父类，亦可指向子类，这是一种泛型技术，是为了用尽量少的代码逻辑，来实现多的场景应用，模板技术也是如此。今天我们来说说，多态的一些事。
我们用生活中的实例来解释一下多态的应用，比如你要买票，那么普通人一个价，学生票一个价，那么同样是买票这个行为，不同的人做有不同的效果，多态就是为了，让不同的类做同一个事，但是产生的效果却不同，在实现方面就是，调用了同一个函数，即做了同一个事，但是实现方式不同，即]]></description><category></category></item><item><title><![CDATA[继承]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116779794</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116779794</guid><author>w1724556613</author><pubDate>Fri, 14 May 2021 10:10:16 +0800</pubDate><description><![CDATA[继承是面向对象的三大特性之一，继承是类复用的一个手段，如果要定义重复的成员变量或者函数，就可以继承。
class A{
};

class B : public A
{
	
};

一般像这样使用，类名加冒号继承方式加继承对象。一般被继承的叫父类或者基类，继承的叫子类或者派生类，一般情况，子类是具有父类全部的成员变量和函数，并且自己可以扩展。
继承的访问方式变化：
子类继承父类的私有成员是不可见的。不可见即不可访问，如类里的私有成员对类外就是不可见的。
因此保护成员和私有成员在不继承的情况下是一样的，但继承]]></description><category></category></item><item><title><![CDATA[模板进阶]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116723690</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116723690</guid><author>w1724556613</author><pubDate>Thu, 13 May 2021 08:43:58 +0800</pubDate><description><![CDATA[模板可以针对某些类型进行特殊化处理：模板的特化
	template&lt;&gt;
	bool isequal &lt;char*&gt;(char* p1,char* p2)
	{
		return strcmp(p1,p2) == 0; 
	} 

如果参数固定，且不需要别的参数，就给空模板，否则还要给模板参数。
类的模板的特化是在类名后面，这里有偏特化和全特化之区别。

...]]></description><category></category></item><item><title><![CDATA[优先级队列]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116703261</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116703261</guid><author>w1724556613</author><pubDate>Wed, 12 May 2021 17:05:47 +0800</pubDate><description><![CDATA[stl中，有优先级队列这样一个适配器，priority_queue，这个容器是将数据放入，然后按特定优先级排序，默认是大的优先级高。通常我们使用的接口有，size top push pop empty。
那么它的底层是什么呢。是一个堆，默认是大堆，将最大的数一个个选上来，首先将数据插入，然后用向上调整算法进行调整。删除是将顶的和最后一个数据交换，然后删除，最后向下调整，为什么这样做呢，因为优先级队列适配的容器是vector，因此保证效率就需要尾部删除。
namespace whc
{
	template&l]]></description><category></category></item><item><title><![CDATA[STL的栈和队列]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116702497</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116702497</guid><author>w1724556613</author><pubDate>Wed, 12 May 2021 12:35:17 +0800</pubDate><description><![CDATA[在stl库中，栈和队列是有其相对应的库的，所以我们不必再去写栈和队列，直接可以用库里的就行了，但是栈和队列在库中是如何实现的呢？让我们走进他们吧！
首先我们可以了解一下使用，使用基本没啥差别，stack中有栈顶的插入删除，有大小，是否空等接口。
push 栈顶插入
pop 栈顶删除
size 大小
empty 判空
top 栈顶数据
queue中
只有取数据的时候，是front 和back，队头和队尾的数据。
了解完使用后，我们可以去想想，既然我们在C语言中实现它们是用数组和链表的，是不是stl中也是这样的]]></description><category></category></item><item><title><![CDATA[list]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116590037</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116590037</guid><author>w1724556613</author><pubDate>Mon, 10 May 2021 11:56:04 +0800</pubDate><description><![CDATA[list是为了弥补vector的缺陷而设计出来的数据结构，vector有两个缺点：
一 头部或者中间插入，效率低，因为需要挪动数据。
二 增容开新空间，释放旧空间，会付出很大代价。
但是vector也有个不容质疑的优点，就是随机访问，这使得它支持了很多操作。
所以list的优点就是vector的缺点，但是list的缺点却是vector的优点。两者相辅相成。
构造：
	list t;
	list(n,val);
	list(t);
	

可以直接构造空的，也可以构造n个val值，拷贝构造也可以。
遍历
无【】]]></description><category></category></item><item><title><![CDATA[vector的实现]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116525094</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116525094</guid><author>w1724556613</author><pubDate>Sat, 08 May 2021 21:51:00 +0800</pubDate><description><![CDATA[vector底层中，是使用了指针来作成员变量的，利用指针的差值，来表示大小容量，那么要警惕指针在增容时候的变化。
namespace whc
{
 template&lt;class T&gt;
 class vector
 {
 public:
	 typedef T* iterator;
	 typedef const T* const_iterator;


	 vector()
		 :_start(nullptr)
		 , _finish(nullptr)
		 , _endofstorage(]]></description><category></category></item><item><title><![CDATA[栈和队列]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116543718</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116543718</guid><author>w1724556613</author><pubDate>Sat, 08 May 2021 21:29:24 +0800</pubDate><description><![CDATA[栈和队列是基本的数据结构，是对于线性表的一种拓展，其实个人理解就是限制了顺序表和链表的一些操作，使其在一些特定的场合可以使用。
栈，stack，first in last out，先进后出，这是栈的基本特性，它犹如一个竖着的柜子，只能从栈顶出入，就像你将衣服放进柜子中，一定是最后放的最后才能取出来，当然如果你是个规则的人的话，因此当我们学习了顺序表和链表的操作后，对于实现栈，就不那么困难了，因为它只是将顺序表改造了一下。
栈的实现底层链表和数组都可以，但是因为其在尾删尾插的特性，显然，数组更加契合其属性。
]]></description><category></category></item><item><title><![CDATA[vector使用]]></title><link>https://blog.youkuaiyun.com/w1724556613/article/details/116523066</link><guid>https://blog.youkuaiyun.com/w1724556613/article/details/116523066</guid><author>w1724556613</author><pubDate>Sat, 08 May 2021 12:59:17 +0800</pubDate><description><![CDATA[vector的使用与string的使用是基本一样的，底层是实现上，都是用数组来进行底层的实现，因此，基本的接口使用都几乎无差别，实质上，vector就是一个顺序表。那么vector和string类型有何区别呢？
在实现上，vector是没有‘\0’的，而string有，并且在具体的操作上，也有着不同的区别。而在使用上string一般是存单项信息的。
构造：
	vector&lt;int&gt;v1;
	vector&lt;int&gt;v2(v1);
	vector&lt;int&gt;v3(4,100);]]></description><category></category></item></channel></rss>