<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cckluv的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cckluv</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cckluv]]></copyright><item><title><![CDATA[升级！！！运用select实现一个简单的TCP通信！]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/115420248</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/115420248</guid><author>cckluv</author><pubDate>Sat, 03 Apr 2021 20:31:27 +0800</pubDate><description><![CDATA[升级！！！运用select实现一个简单的TCP通信多路转接模型select模型select模型的操作流程简介TCP的实现封装一个TCP服务端封装一个select类main程序
多路转接模型
多路转接IO：对大量的描述符进行就绪事件监控–让进程能够仅仅对就绪的描述符执行操作 不仅仅提高效率，而且避免阻塞。 只要是存在对描述符进行监控的需求，都可以使用多路转接模型进行事件的监控
多路转接模型使用场景：只要对描述符有(可读，可写，异常)事件的监控需求都可以使用多路转接模型。也使用与对大量描述符进行监控，但是同一时]]></description><category></category></item><item><title><![CDATA[DNS域名解析之递归与非递归查询]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/115269934</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/115269934</guid><author>cckluv</author><pubDate>Sat, 27 Mar 2021 19:25:46 +0800</pubDate><description><![CDATA[DNS域名解析之递归与非递归查询递归查询迭代查询实例
递归查询
主机向本地域名服务器的查询一般是递归查询：如果本地域名服务器不知道查询的IP地址，那么本地域名服务器就会以DNS客户的身份向根域名服务器继续发生请求（即代替主机进行查询），而不是让主机自己进行下一步查询。因此递归的结果只有找到和没找到两种
迭代查询
本地域名服务器向根域名服务器的查询通常是采用迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时，要么给出所要查询的IP地址，要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进]]></description><category></category></item><item><title><![CDATA[深夜没事，抓个ARP包吧！]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/115257715</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/115257715</guid><author>cckluv</author><pubDate>Sat, 27 Mar 2021 00:01:35 +0800</pubDate><description><![CDATA[深夜没事，抓个ARP包吧！
ipconfig查看网卡信息

选择en33这个网卡，发送两次，询问192.168.21.1的mac地址，
注意：
ARP请求只能在同一子网内部进行广播
arping -I ens33 -c 2 192.168.21.1

老板，再开一台机子！
输入以下命令进行抓包：
tcpdump -i any -s 0 -w 123.dat

把我们抓到的包发到windows下：
sz 123.dat

丢入wireshark中：

看看ARP头部字段：


...]]></description><category></category></item><item><title><![CDATA[cpp-httplib库简单原理,听说你还不会开源库？]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/115109108</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/115109108</guid><author>cckluv</author><pubDate>Tue, 23 Mar 2021 09:25:03 +0800</pubDate><description><![CDATA[cpp-httplib库的原理,听说你还不会开源库？介绍httplib.h头文件的处理流程httplib.h头文件的组成httplib.h头文件搭建服务端与客户端的原理Get接口listen(0.0.0.0,8989)接口
介绍
cpp-httplib是一个c++封装的http库，使用这个库可以在windows平台下完成http客户端、http服务端的搭建。
在p2p点对点下载器的项目中，我们只需用到cpp-httplib中的 httplib.h这个头文件，所以我们在这里只讲一下httplib搭建tcp客户]]></description><category></category></item><item><title><![CDATA[回溯算法：计算24点牌]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114685838</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114685838</guid><author>cckluv</author><pubDate>Fri, 12 Mar 2021 09:33:04 +0800</pubDate><description><![CDATA[回溯算法：计算24点牌

1.将4个整数放入数组中
2.在数组中取两个数字的排列，共有 P(4,2) 种排列。对每一个排列，对 – * / 每一个运算符，
3.根据此排列的两个数字和运算符，计算结果
4.改表数组：将此排列的两个数字从数组中去除掉，将 2.1.1 计算的结果放入数组中
5.对新的数组，重复步骤 2
恢复数组：将此排列的两个数字加入数组中，将 2.1.1 计算的结果从数组中去除掉可见这是一个递归过程。步骤 2 就是递归函数。当数组中只剩下一个数字的时候，这就是表达式的最终结果，此时递归结束。
]]></description><category></category></item><item><title><![CDATA[记录2021.3.10]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114628636</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114628636</guid><author>cckluv</author><pubDate>Wed, 10 Mar 2021 11:00:50 +0800</pubDate><description><![CDATA[经验项目OJ数据结构二叉树操作系统基本语法进程线程NginxC++基本语法类与对象动态内存管理STL多态网络
项目
OJ

介绍下你的项目
你说项目支持高并发，介绍下
多个用户链接，是创建多线程还是多进程？
多线程是自己创建的吗？还是调用httplib库？
看过httplib内部具体实现嘛？
怎么获取用户提交的代码？
为什么不用json格式在文件中存储数据???(懵逼)最多能接收多少个请求?
boost库用到了哪些模块?其它模块了解吗?

数据结构
二叉树

平衡二叉树二叉树的删除与插入

操作系统
基本语]]></description><category></category></item><item><title><![CDATA[排序算法：归并排序算法]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/109730018</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/109730018</guid><author>cckluv</author><pubDate>Mon, 08 Mar 2021 20:27:05 +0800</pubDate><description><![CDATA[归并排序算法
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;assert.h&gt;
using namespace std;
void _MergeSort(int *ar, int left, int right,int *tmp)
{
	int mid = (left + right) / 2;
	if (left &gt;= right)//分的最后状态
		return;

		//先分
		_MergeSort(ar, l]]></description><category></category></item><item><title><![CDATA[排序算法：简单选择排序]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114546468</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114546468</guid><author>cckluv</author><pubDate>Mon, 08 Mar 2021 19:55:48 +0800</pubDate><description><![CDATA[排序算法：简单选择排序
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
using namespace std;
void selectSort(int R[],int n)
{
	int i, j, k;
	for (int i = 0; i &lt; n; i++)
	{
		k = i;
		for (j = i + 1; j &lt; n; j++)
		]]></description><category></category></item><item><title><![CDATA[排序算法：快速排序]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114545991</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114545991</guid><author>cckluv</author><pubDate>Mon, 08 Mar 2021 19:47:26 +0800</pubDate><description><![CDATA[排序算法：快速排序
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
using namespace std;
int GetIndex(int R[], int left, int right)
{
	//基准值
	int flag = R[left];
	while (left &lt; right)
	{
		//右边找到小于基准值
		while (righ]]></description><category></category></item><item><title><![CDATA[排序算法：折半插入排序]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114545200</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114545200</guid><author>cckluv</author><pubDate>Mon, 08 Mar 2021 19:29:44 +0800</pubDate><description><![CDATA[排序算法：折半插入排序
前提：一个基本条件就是序列已经有序
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
using namespace std;
void InsertSort(vector&lt;int&gt;&amp; R, int num)
{
	int n = R.size();
	R.resize(n + 1);
	int left = 0;
	in]]></description><category></category></item><item><title><![CDATA[排序算法：直接插入排序]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114543983</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114543983</guid><author>cckluv</author><pubDate>Mon, 08 Mar 2021 19:00:07 +0800</pubDate><description><![CDATA[排序算法：直接插入排序
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
using namespace std;
void InsertSort(int R[], int n)
{
	int i, j;
	int tmp;
	for (int i = 1; i &lt; n; i++)
	{	
		tmp = R[i];
		int j = i - 1;
		if]]></description><category></category></item><item><title><![CDATA[排序算法：堆排序]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114459968</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114459968</guid><author>cckluv</author><pubDate>Mon, 08 Mar 2021 17:15:55 +0800</pubDate><description><![CDATA[排序算法：快速排序
堆排序：
1.堆调整
2.交换堆顶与最后
3.堆调整
数组下标默认从0开始
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
using namespace std;
void AdjustDown(int R[],int parent,int n)
{
	//默认左孩子
	int child = parent * 2 + 1;
	while (]]></description><category></category></item><item><title><![CDATA[贪心算法：分发糖果，一道经典易错的题目]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114538252</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114538252</guid><author>cckluv</author><pubDate>Mon, 08 Mar 2021 16:55:22 +0800</pubDate><description><![CDATA[贪心算法：分发糖果

那么本题我采用了两次贪心的策略：
一次是从左到右遍历，只比较右边孩子评分比左边大的情况。
一次是从右到左遍历，只比较左边孩子评分比右边大的情况。
注意实现细节！
class Solution {
public:
    int candy(vector&lt;int&gt;&amp; ratings) {
        //贪心算法
        //先从左往右遍历
        //再从右往左遍历
        //初始化给每个人一块饼干
        vector&lt;]]></description><category></category></item><item><title><![CDATA[贪心算法：跳跃游戏II]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114442934</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114442934</guid><author>cckluv</author><pubDate>Sat, 06 Mar 2021 15:27:39 +0800</pubDate><description><![CDATA[贪心算法：跳跃游戏II

话说题目思路挺好想的，就是具体实现细节，边界条件真是让人头大啊
提供几种方法留着以后参考：
最好理解的方法：走到maxpos位置，step+1，初始化最远距离是nums【0】
class Solution {
public:
    int jump(vector&lt;int&gt;&amp; nums) {
        if(nums.size() == 1)
        return 0;
        int curmaxPos = nums[0], n = nu]]></description><category></category></item><item><title><![CDATA[贪心算法：跳跃游戏]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114435489</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114435489</guid><author>cckluv</author><pubDate>Sat, 06 Mar 2021 12:37:38 +0800</pubDate><description><![CDATA[贪心算法：跳跃游戏

思路：第一反应是回溯问题，不断穷举nums【i】可能经过的路线，但是很遗憾，运行超时了

代码如下，也算是提供思路吧：
class Solution {
public:
    bool canJump(vector&lt;int&gt;&amp; nums) {
        int startIndex = 0;
        bool flag = false;
        backtrack(nums, startIndex, flag);
        return]]></description><category></category></item><item><title><![CDATA[贪心算法：买卖股票的最佳时机II]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114435106</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114435106</guid><author>cckluv</author><pubDate>Sat, 06 Mar 2021 10:43:54 +0800</pubDate><description><![CDATA[贪心算法：买卖股票的最佳时机II

思路：我们采用贪心算法，计算每天的利润，然后选取正利润即可
代码：
class Solution {
public:
    int maxProfit(vector&lt;int&gt;&amp; prices) {
        int maxSum = 0;
        for(int i = 1; i &lt; prices.size(); i++)
        {
            maxSum += max(prices[i] - prices]]></description><category></category></item><item><title><![CDATA[贪心算法：最大子序和]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114373969</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114373969</guid><author>cckluv</author><pubDate>Thu, 04 Mar 2021 17:49:23 +0800</pubDate><description><![CDATA[贪心算法：最大子序和

贪心算法思路：
如果 -2 1 在一起，计算起点的时候，一定是从1开始计算，因为负数只会拉低总和，这就是贪心贪的地方！
局部最优：当前“连续和”为负数的时候立刻放弃，从下一个元素重新计算“连续和”，因为负数加上下一个元素 “连续和”只会越来越小。
全局最优：选取最大“连续和”
代码如下：
class Solution {
public:
    int maxSubArray(vector&lt;int&gt;&amp; nums) {
        int curSum = 0;]]></description><category></category></item><item><title><![CDATA[回溯算法：N皇后问题]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114319330</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114319330</guid><author>cckluv</author><pubDate>Wed, 03 Mar 2021 15:53:46 +0800</pubDate><description><![CDATA[回溯算法：N皇后问题

N皇后的约数条件：

不能同行
不能同列
不能同斜线

图解：

这样一看，N皇后问题就清晰多了

void backtracking(参数) 
{
    if (row == n) 
    {
        存放结果;
        return;
    }
    for (节点展开) 
    {
        if(isValid(row, col, chessboard, n))
            {
                //设置皇后
    ]]></description><category></category></item><item><title><![CDATA[回溯算法：排列问题II，去重方法全归纳！]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114303272</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114303272</guid><author>cckluv</author><pubDate>Wed, 03 Mar 2021 12:53:19 +0800</pubDate><description><![CDATA[回溯算法：排列问题II

思路，这道题也是需要去重，但和之前的去重又有些不同，对去重进行一下整理：
一般来说：组合问题和排列问题是在树形结构的叶子节点上收集结果，而子集问题就是取树上所有节点的结果
1.组合数问题：i &gt; startIndex &amp;&amp; nums[i] == nums[i - 1] 这是对同一树层的相邻且相同的元素进行去重，比如【1，2 ，3， 3，3，4】，对于一树枝上的相同元素无需去重
2. 递增子序列：利比上面稍微复杂，相同元素并没有相邻了，因此借用set进行去重，u]]></description><category></category></item><item><title><![CDATA[回溯算法：全排列问题]]></title><link>https://blog.youkuaiyun.com/cckluv/article/details/114296221</link><guid>https://blog.youkuaiyun.com/cckluv/article/details/114296221</guid><author>cckluv</author><pubDate>Tue, 02 Mar 2021 22:26:36 +0800</pubDate><description><![CDATA[回溯算法：全排列问题

思路：利用一个数组进行去重
class Solution {
public:
    vector&lt;vector&lt;int&gt;&gt; res;
    vector&lt;int&gt; path;
    vector&lt;int&gt; use;
    vector&lt;vector&lt;int&gt;&gt; permute(vector&lt;int&gt;&amp; nums) {
        int step = 0;
        use.]]></description><category></category></item></channel></rss>