<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[leikun153的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/leikun153</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; leikun153]]></copyright><item><title><![CDATA[tcp协议和udp协议的使用场景]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/82557210</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/82557210</guid><author>leikun153</author><pubDate>Sun, 09 Sep 2018 12:15:03 +0800</pubDate><description><![CDATA[一：什么是TCP（Transmission Control Protocol，传输控制协议）

tcp是面向连接的协议，也就是说，在收发数据前，必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来，其中的过程非常复杂，只简单的描述下这三次对话的简单过程：主机A向主机B发出连接请求数据包：“我想给你发数据，可以吗？”，这是第一次对话；主机B向主机A发送同意连接和要求同步（同步就...]]></description><category></category></item><item><title><![CDATA[系统调用和库函数调用的区别]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/82385249</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/82385249</guid><author>leikun153</author><pubDate>Tue, 04 Sep 2018 16:19:24 +0800</pubDate><description><![CDATA[一：系统调用和库函数调用的区别：

1：系统调用是最底层的应用，是面向硬件的。而库函数的调用是面向开发的，相当于应用程序的API(即预先定义好的函数)接口；

2：各个操作系统的系统调用是不同的，因此系统调用一般是没有跨操作系统的可移植性，而库函数的移植性良好(c库在Windows和Linux环境下都可以操作)；

3：库函数属于过程调用，调用开销小；系统调用需要在用户空间和内核上下文环境切换，开...]]></description><category></category></item><item><title><![CDATA[数据库sqlite的基本介绍]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/82319539</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/82319539</guid><author>leikun153</author><pubDate>Sun, 02 Sep 2018 21:26:53 +0800</pubDate><description><![CDATA[1：SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS，它可移植性好，很容易使用，很小，高效而且可靠。

2：SQLite嵌入到使用它的应用程序中，它们共用相同的进程空间，而不是单独的一个进程。从外部看，它并不像一个RDBMS，但在进程内部，它却是完整的，自包含的数据库引擎。

3：嵌入式数据库的一大好处就是在你的程序内部不需要网络配置，也...]]></description><category></category></item><item><title><![CDATA[C++面向对象的五大原则]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/82313829</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/82313829</guid><author>leikun153</author><pubDate>Sun, 02 Sep 2018 11:29:08 +0800</pubDate><description><![CDATA[一：什么是面向对象

面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发，扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法，是计算机编程技术发展到一定阶段后的产物。

二：面向对象的五大基本原则：SPR, OCP, LSP, DIP, ISP...]]></description><category></category></item><item><title><![CDATA[接口继承和实现继承的区别]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/82193909</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/82193909</guid><author>leikun153</author><pubDate>Wed, 29 Aug 2018 22:33:27 +0800</pubDate><description><![CDATA[public继承概念由两部分组成，函数接口(function interfaces)继承和函数实现(function implementations)继承。
作为类的开发人员，我们主要研究类的三种继承情况：
1、派生类只继承成员函数的接口(也就是声明)；
2、派生类同时继承函数的接口和实现，但又希望能够覆写(override)它们所继承的实现；
3、派生类同时继承函数的接口和实现，并且不允许覆盖任...]]></description><category></category></item><item><title><![CDATA[虚函数不能声明为内联函数的原因解读]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/82187505</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/82187505</guid><author>leikun153</author><pubDate>Wed, 29 Aug 2018 17:24:33 +0800</pubDate><description><![CDATA[内联函数（inline）
内联函数的目的是为了减少函数调用时间。它是把内联函数的函数体在编译器预处理的时候替换到函数调用处，这样代码运行到这里时候就不需要花时间去调用函数。但内联函数有个缺点是它会增加执行文件大小。所以如果不适当的使用内联函数会造成执行文件特别大。

而使用内联函数有以下几点需要注意：

头文件中不仅要包含inline函数的声明，还要包含inline函数的定义
	编译器需要把inl...]]></description><category></category></item><item><title><![CDATA[c++基类的析构函数为虚函数的原因]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81869473</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81869473</guid><author>leikun153</author><pubDate>Mon, 20 Aug 2018 13:13:46 +0800</pubDate><description><![CDATA[1、原因：

　　 在实现多态时， 当用基类指针操作派生类， 在析构时候防止只析构基类而不析构派生类。

2、例子：

(1)：　


#include&amp;lt;iostream&amp;gt;
　　using namespace std;
　　class Base{
　　public:
  　　 Base() {};
　　  ~Base() {cout &amp;lt;&amp;lt; &quot;Output from the ...]]></description><category></category></item><item><title><![CDATA[c++之虚函数的声明规则详解]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81869375</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81869375</guid><author>leikun153</author><pubDate>Mon, 20 Aug 2018 13:02:28 +0800</pubDate><description><![CDATA[虚函数规则详解：
定义： 
虚函数必须是基类的非静态成员函数，其访问权限可以是protected或public，是C++多态的一种表现。 
作用： 
实现动态联编，也就是在程序的运行阶段动态地选择合适的成员函数，在定义了虚函数后，可以在基类的派生类中对虚函数重新定义，在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型，以实现统一的接口，不同定义过程。如果在派生类中没有对虚函数重新定义，...]]></description><category></category></item><item><title><![CDATA[在C++中，编译器会为空类提供哪些默认成员函数？]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81840814</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81840814</guid><author>leikun153</author><pubDate>Sun, 19 Aug 2018 19:31:25 +0800</pubDate><description><![CDATA[一：问题描述：

在C++中，编译器会为空类提供哪些默认成员函数？分别有什么样的功能呢？ 

二：详解

1：空类在声明的时候，编译器并不会为其生成任何成员函数，只会生成1个字节的占位符。

2：有时可能会以为编译器会为空类生成默认构造函数等，事实上是不会的，编译器只会在需要的时候生成6个成员函数：一个缺省的构造函数、一个拷贝构造函数、一个析构函数、一个赋值运算符、一对取址运算符和一个this指针...]]></description><category></category></item><item><title><![CDATA[内存池，进程池，和线程池的比较分析]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81748565</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81748565</guid><author>leikun153</author><pubDate>Thu, 16 Aug 2018 20:47:57 +0800</pubDate><description><![CDATA[池的概念

由于服务器的硬件资源“充裕”，那么提高服务器性能的一个很直接的方法就是以空间换时间，即“浪费”服务器的硬件资源，以换取其运行效率。这就是池的概念。池是一组资源的集合，这组资源在服务器启动之初就完全被创建并初始化，这称为静态资源分配。当服务器进入正式运行阶段，即开始处理客户请求的时候，如果它需要相关的资源，就可以直接从池中获取，无需动态分配。很显然，直接从池中取得所需资源比动态分配资源的...]]></description><category></category></item><item><title><![CDATA[详解两个栈如何实现队列的功能(考虑最全面)]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81661136</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81661136</guid><author>leikun153</author><pubDate>Tue, 14 Aug 2018 09:40:32 +0800</pubDate><description><![CDATA[话不多说。代码奉上，各种情况自认为考虑的比较完善啦，如有不足，请指正！

注释上面都有，就不在一一解读啦。


/*
主要功能：用两个栈实现一个队列
具体实现：两个栈，先进后出，现在要将其实现为队列，先进先出
用栈s1完成数据的入，栈s2完成数据的弹出
栈s1只管数据的入，栈s2弹出的时候，先要保证队列里面有元素才可以弹出，
当栈s2为空时，必须将栈s1的元素全部弹出且入栈s2，不为空的时候直接弹...]]></description><category></category></item><item><title><![CDATA[详解c++指针和引用的区别与联系]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81636629</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81636629</guid><author>leikun153</author><pubDate>Mon, 13 Aug 2018 20:44:04 +0800</pubDate><description><![CDATA[ ★ 相同点：

    1. 都是地址的概念；

    指针指向一块内存，它的内容是所指内存的地址；引用是某块内存的别名。

 ★ 区别：

    1. 指针是一个实体，而引用仅是个别名；

    2. 引用使用时无需解引用（*），指针需要解引用；

    3. 引用只能在定义时被初始化一次，之后不可变；指针可变；引用“从一而终” ^_^

    4. 引用没有 const，这是因为引...]]></description><category></category></item><item><title><![CDATA[详解线程池的原理及作用]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81609392</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81609392</guid><author>leikun153</author><pubDate>Sun, 12 Aug 2018 20:00:01 +0800</pubDate><description><![CDATA[一：为什么引入线程池

大多数的网络服务器，包括Web服务器都具有一个特点，就是单位时间内必须处理数目巨大的连接请求，但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的：一旦有个请求到达，就创建一个新的线程，由该线程执行任务，任务执行完毕之后，线程就退出。这就是&quot;即时创建，即时销毁&quot;的策略。尽管与创建进程相比，创建线程的时间已经大大的缩短，但是如果提交给线程的任务是执行时间较短，而且...]]></description><category></category></item><item><title><![CDATA[详解接口和抽象类的区别]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81587358</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81587358</guid><author>leikun153</author><pubDate>Sat, 11 Aug 2018 15:55:08 +0800</pubDate><description><![CDATA[一：首先要明白什么是抽象类和接口：

抽象类：抽象类是特殊的类，只是不能被实例化（将定义了一个或多个纯虚函数的类称为抽象类）；除此以外，具有类的其他特性；重要的是抽象类可以包括抽象方法，这是普通类所不能的，但同时也能包括普通的方法。抽象方法只能声明于抽象类中，且不包含任何实现，派生类必须覆盖它们。另外，抽象类可以派生自一个抽象类，可以覆盖基类的抽象方法也可以不覆盖，如果不覆盖，则其派生类必须覆盖它...]]></description><category></category></item><item><title><![CDATA[论述含参数的宏与函数的优缺点]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81532229</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81532229</guid><author>leikun153</author><pubDate>Thu, 09 Aug 2018 10:40:18 +0800</pubDate><description><![CDATA[论述函数的宏及函数的优缺点

1.函数调用时，先求出实参表达式的值，然后带入形参。而使用带参的宏只是进行简单的字符替换。

2.函数调用是在程序运行时处理的，分配临时的内存单元；而宏展开则是在编译时进行的，在展开时并不分配内存单元，不进行值的传递处理，也没有“返回值”的概念。

3.对函数中的实参和形参都要定义类型，二者的类型要求一致，如不一致，应进行类型转换；而宏不存在类型问题，宏名无类型，它的...]]></description><category></category></item><item><title><![CDATA[详解信号量和互斥锁之间的区别和联系]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81515186</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81515186</guid><author>leikun153</author><pubDate>Wed, 08 Aug 2018 20:50:55 +0800</pubDate><description><![CDATA[一：信号量与互斥锁之间的区别：

(1)：互斥量用于线程的互斥，信号线用于线程的同步。这是互斥量和信号量的根本区别，也就是互斥和同步之间的区别。

(2)：互斥量值只能为0/1，信号量值可以为非负整数。

也就是说，一个互斥量只能用于一个资源的互斥访问，它不能实现多个资源的多线程互斥问题。

信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是，也可以完成一个资源的互斥访问。信号量...]]></description><category></category></item><item><title><![CDATA[大端小端模式及其判别方式]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81415255</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81415255</guid><author>leikun153</author><pubDate>Sat, 04 Aug 2018 21:14:09 +0800</pubDate><description><![CDATA[Little endian 和Big endian 是CPU 存放数据的两种不同顺序。

对于整型、长整型等数据类型，Big endian 认为第一个字节是最高位字节（按照从低地址到高地址的顺序存放数据的高位字节到低位字节）；而Little endian 则相反，它认为第一个字节是最低位字节（按照从低地址到高地址的顺序存放数据的低位字节到高位字节）。例如，假设从内存地址0x0000 开始有以下数据...]]></description><category></category></item><item><title><![CDATA[将两个有序链表合并成一个链表]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81412782</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81412782</guid><author>leikun153</author><pubDate>Sat, 04 Aug 2018 17:05:37 +0800</pubDate><description><![CDATA[代码实现功能如下：将两个有序链表合并成一个有序链表。

具体思路如下：首先自己调用链表的创建函数，手动创建两个有序链表，链表的创建以输入0作为截止标志。创建好两个有序链表之后，将两个链表的头结点进行比较，小的那个作为合并后的链表的头结点，同时，创建两个指针分别指向两个链表的的头结点或头结点的下一个节点，当两个链表进行比较的元素都不为空的话，依次从下到大连接，若有一个链表中比较的节点开始为空时，则将...]]></description><category></category></item><item><title><![CDATA[c++中，重载，重定义，重写 的区别]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81382469</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81382469</guid><author>leikun153</author><pubDate>Fri, 03 Aug 2018 10:28:33 +0800</pubDate><description><![CDATA[一：重载

在一个类中，函数名相同，参数列表不同(具体表现为参数个数或参数类型不同)，至于返回型可同可不同。重载属于静态多态，而不是通过继承和虚函数实现的动态多态。编译器会根据这些函数的参数列表的不同，将同名的函数名称做修饰，从而生成不同名称的预处理函数。

eg：

double  max(double x,double y),

int  max(int  x,int y);

这两个函数就是...]]></description><category></category></item><item><title><![CDATA[简单工厂模式，工厂模式，抽象工厂模式的区别]]></title><link>https://blog.youkuaiyun.com/leikun153/article/details/81346984</link><guid>https://blog.youkuaiyun.com/leikun153/article/details/81346984</guid><author>leikun153</author><pubDate>Wed, 01 Aug 2018 19:51:39 +0800</pubDate><description><![CDATA[简单工厂模式，工厂方法模式和抽象工厂模式都是属于创建型设计模式，这三种创建型模式都不需要知道具体类。我们掌握一种思想，就是在创建一个对象时，需要把容易发生变化的地方给封装起来，来控制变化（哪里变化，封装哪里），以适应客户的变动，项目的扩展。用这三种设计模式都可以实现，那究竟这三种设计模式有什么异同呢？下面根据这三者之间的特点，优点，缺点，适用范围进行比较。

一．特点

简单工厂模式：专门定义一个...]]></description><category></category></item></channel></rss>