<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[天下]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wan13141</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wan13141]]></copyright><item><title><![CDATA[算法，找出落单的两个数]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/99212465</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/99212465</guid><author>wan13141</author><pubDate>Sun, 11 Aug 2019 18:06:53 +0800</pubDate><description><![CDATA[有一组整型数，其中除了2个数字以外的其它的数字都是俩俩成对出现的，编写程序找出这2个不成对出现的数字
函数原型：
void search_diff(int array[],int len,int* pa,int* pb);
示例:
void search_diff(int array[],int len,int* pa,int* pb);
int a=0;
int b=0;
int array[]...]]></description><category></category></item><item><title><![CDATA[C++实现轻量级极简httpserver和httpclient(转)]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/90577019</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/90577019</guid><author>wan13141</author><pubDate>Sun, 26 May 2019 16:06:11 +0800</pubDate><description><![CDATA[一般来说，C++的项目多是偏底层，不怎么需要跟http打交道，但有时候又需要在C++后端项目中加入一些简单 http接口，比如游戏运营服务器，金融交易监控服务等。

但是传统的实现方法比如采用libcurl，asio等较为重型的框架来做有没有必要，因此，这里采用mongoose这个库来实现基本的httpserver和httpclient功能，非常简单，包含一个h文件，一个cpp文件到工程中就行了，...]]></description><category></category></item><item><title><![CDATA[linux拆分日志]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/90140249</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/90140249</guid><author>wan13141</author><pubDate>Sun, 12 May 2019 14:27:48 +0800</pubDate><description><![CDATA[由于后端还没有做日志拆分的功能，有时日志文件会变得很大，用vim或者拷贝到windows上再打开，都会很慢或者卡死，因此就有必要把日志文件拆分成相对小一些的多个文件，
有两种方法：
1.如果日志格式是2019/05/09 19:25:55,后面再跟着具体日志数据就可以用sed命令,
sed -n '/2019/05/09 09:25:54/,/2019/05/09 20:35:54/'p ...]]></description><category></category></item><item><title><![CDATA[Linux文件描述符到底是什么？]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/89433379</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/89433379</guid><author>wan13141</author><pubDate>Sun, 21 Apr 2019 15:19:19 +0800</pubDate><description><![CDATA[Linux 中一切皆文件，比如 C++ 源文件、视频文件、Shell脚本、可执行文件等，就连键盘、显示器、鼠标等硬件设备也都是文件。一个 Linux 进程可以打开成百上千个文件，为了表示和区分已经打开的文件，Linux 会给每个文件分配一个编号（一个 ID），这个编号就是一个整数，被称为文件描述符（File Descriptor）。这只是一个形象的比喻，为了让读者容易理解我才这么说。如果你也仅仅理...]]></description><category></category></item><item><title><![CDATA[数据库(sql server)使用及其中遇到的问题]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/88781731</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/88781731</guid><author>wan13141</author><pubDate>Sun, 24 Mar 2019 22:00:51 +0800</pubDate><description><![CDATA[由于项目需要，需要在windows平台上连接sql server，于是就学了一下，在其中遇到了一些问题，现在自己总结一下.

总结如下:

首先,我们需要连接数据库：

#include "stdafx.h"
#include &lt;windows.h&gt; 
#include &lt;sqltypes.h&gt; 
#include &lt;sql.h&gt; 
#include &l...]]></description><category></category></item><item><title><![CDATA[C++中的动态类型识别--------狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/87545155</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/87545155</guid><author>wan13141</author><pubDate>Sun, 17 Feb 2019 17:59:09 +0800</pubDate><description><![CDATA[1.在面向对象中可能出现下面的情况
基类指针指向子类对象
基类引用成为子类对象的别名

Base* b = new Derived();
Base&amp;amp; r = *b;


2.动态类型是相对于静态类型而言
静态类型：变量（对象）自身的类型
动态类型：指针（引用）所指的对象实际类型
基类指针是否可以强制转换为子类指针取决于动态类型
比如在继承体系中：Derived继承于Base。
期望的类型是...]]></description><category></category></item><item><title><![CDATA[TCP传输层中的options（linux）]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/84471182</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/84471182</guid><author>wan13141</author><pubDate>Sun, 25 Nov 2018 09:40:49 +0800</pubDate><description><![CDATA[TCP在进行建立tcp三次握手连接时，客户端在发送SYN包时，会带有一些选项的信息，服务器在接收到SYN包时，会调用tcp_parse_options函数进行解析，下面是一些选项的概略图：



c/* Look for tcp options. Normally only called on SYN and SYNACK packets.
 * But, this can also be cal...]]></description><category></category></item><item><title><![CDATA[linux消息队列介绍]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/84193914</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/84193914</guid><author>wan13141</author><pubDate>Sat, 17 Nov 2018 23:44:38 +0800</pubDate><description><![CDATA[消息队列就是一个消息的链表，而一条消息则可看作一个记录，具有特定的格式，

进程可以向其中按照一定的规则添加新消息；另一些进程则可以从消息队列中读走消息。相当于生产者和消费者。

int msgget(key_t key,int msgflg)

函数功能：打开或创建消息队列

返回值：成功：返回消息队列ID，失败返回-1

参数：key是一个键值，msgflg是一个打开标志，IPC_CREAT:...]]></description><category></category></item><item><title><![CDATA[linux共享内存（shared memory）使用介绍]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/83927493</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/83927493</guid><author>wan13141</author><pubDate>Sat, 10 Nov 2018 11:07:42 +0800</pubDate><description><![CDATA[共享内存是IPC机制中的一种，顾名思义，它允许两个不相关的进程访问同一段内存，这也是一种传递数据的有效方式。

通过man命令可以查看各个函数的详细说明：

Int shmget(key_t key,size_t size,int shmflg);

功能：创建或获取共享内存，并返回其对应的描述符id

返回值：成功，返回创建或获取对应共享内存的描述符，失败返回-1

参数说明：key：共享内存的...]]></description><category></category></item><item><title><![CDATA[malloc,free和new delete的区别]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/83829253</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/83829253</guid><author>wan13141</author><pubDate>Wed, 07 Nov 2018 19:08:15 +0800</pubDate><description><![CDATA[1.malloc和free是库函数，以字节为单位申请内存

2.new和delete是关键字，以类型为单位申请内存

3.malloc和free单纯的对内存进行申请与释放

4.对于基本类型new关键字会对内存进行初始化

5.对于类类型new和delete还负责构造函数和析构函数的调用


class Test
{
private:
    int i;
public: 
    Test()
...]]></description><category></category></item><item><title><![CDATA[C++中构造和析构介绍]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/83472208</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/83472208</guid><author>wan13141</author><pubDate>Sun, 28 Oct 2018 10:57:32 +0800</pubDate><description><![CDATA[C++中构造和析构介绍：

1.C++中的类可以定义与类名相同的特殊的成员函数，

2.与类名相同的成员函数叫做构造函数

3.构造函数在定义时可以有参数，但是没有任何返回类型的声明

4.类中的成员函数可以和普通函数一样进行重载，遵守相同的重载规则。

两个特殊的构造函数：分别是无参构造函数和拷贝构造函数

1.当类中没有定义任何一个构造函数，c++编译器会提供无参构造函数和拷贝构造函数

2....]]></description><category></category></item><item><title><![CDATA[如何实现ssl在握手阶段，可以精确控制选择何种算法进行协商]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/83047448</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/83047448</guid><author>wan13141</author><pubDate>Sun, 14 Oct 2018 16:01:50 +0800</pubDate><description><![CDATA[       加密原理先暂且不详说，这次只是把如何实现这个控制加载何种算法思路大致说一下，大家都知道，客户端和服务端在进行正真的应用数据通信之前，需要建立tcp三次握手连接之后，还要进行握手协商，客户端会把自己支持的算法套件，产生的随机数，还有支持的版本号，发给对端，这个阶段称为hello阶段，，在这个阶段，我们就可以控制选择把何种支持的算法套件发给服务器，大致如下：算法都有一个唯一的ID，这是可...]]></description><category></category></item><item><title><![CDATA[唐老大]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/75716085</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/75716085</guid><author>wan13141</author><pubDate>Sat, 22 Jul 2017 12:10:23 +0800</pubDate><description><![CDATA[在c语言中，有两个容易被忽略的操作符，分别是#和##。先介绍#符号的作用，下次再介绍##号的作用。
1.#运算符用于在预处理期将宏参数转换为字符串
2.#的转换的作用是在预处理期完成的，因此只在宏定义中有效
3.编译器并不知道#的转换作用
下面开始举例：
#include 
#define STRING(x) #x
int main()
{
    
    printf("%]]></description><category></category></item><item><title><![CDATA[linux密码故障解决]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/69265995</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/69265995</guid><author>wan13141</author><pubDate>Wed, 05 Apr 2017 17:22:19 +0800</pubDate><description><![CDATA[linux密码故障解决
相信很多人都有出差后，忘记自己lroot密码的情况，现在有一种破解root密码的方法。
破解步骤：
1.在系统启动时进入grub选项菜单
2.在grub选项菜单按e进入编辑模式
3.编辑kernel那行，添加 /init
4.按b重启
5.系统启动后，我们需要将root的密码设置为空密码，由于密码信息都放在目录/etc/passwd/中，因此我们用命令vim ]]></description><category></category></item><item><title><![CDATA[指针阅读技巧解析]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/69053410</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/69053410</guid><author>wan13141</author><pubDate>Mon, 03 Apr 2017 22:26:08 +0800</pubDate><description><![CDATA[指针阅读技巧解析
右左法则：
       1.从最里层的圆括号中未定义的标示符看起
       2. 首先往右看，再往左看，
       3.遇到圆括号或方括号时可以确定部分类型，并调转方向
       4.重复2,3步骤，直到阅读结束。
举例：
      int(*p)(int );
      首先我们看到的未定义的标示符是p，在往右看，是个圆括号，不能确定类型，再往]]></description><category></category></item><item><title><![CDATA[智能指针]]></title><link>https://blog.youkuaiyun.com/wan13141/article/details/68945707</link><guid>https://blog.youkuaiyun.com/wan13141/article/details/68945707</guid><author>wan13141</author><pubDate>Sat, 01 Apr 2017 16:25:25 +0800</pubDate><description><![CDATA[智能指针的意义：
            现代C++开发库中的最重要的类模板之一
            C++中自动内存管理的主要手段 
            能够在很大程度上避免内存相关的问题。
STL中的智能指针auto_ptr：
             生命周期结束时，销毁指向的内存空间
             不能指向堆数组，只能指向堆对象或变量
          ]]></description><category></category></item></channel></rss>