<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jochebed666的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Jochebed666</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jochebed666]]></copyright><item><title><![CDATA[C语言和C++关键字总结——一篇就够了]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/90613927</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/90613927</guid><author>Jochebed666</author><pubDate>Mon, 27 May 2019 23:09:25 +0800</pubDate><description><![CDATA[C语言和C++关键字总结


C语言和C  关键字总结

一、auto
* 1、C语言
* 2、C  
二、struct
三、static
* 1、程序的内存分配
* 2、局部静态变量
* 3、全局静态变量
* 4、静态函数
* 5、类的静态成员变量
* 6、类的静态成员函数
* 7、static const 成员
四、register
* 1、皇帝身边的小太监----寄存器
* 2、regist...]]></description><category></category></item><item><title><![CDATA[特殊字符和整数之间对应转换问题（LeetCode12 整数转罗马数字）]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/90342255</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/90342255</guid><author>Jochebed666</author><pubDate>Sun, 19 May 2019 14:23:10 +0800</pubDate><description><![CDATA[LeetCode12 整数转罗马数字
罗马数字包含以下七种字符： I， V， X， L，C，D 和 M。




字符
数值




I
1


V
5


X
10


L
50


C
100


D
500


M
1000


例如， 罗马数字 2 写做 II ，即为两个并列的 1。12 写做 XII ，即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。
...]]></description><category></category></item><item><title><![CDATA[什么是鸡尾酒排序和地精排序？]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/90180420</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/90180420</guid><author>Jochebed666</author><pubDate>Mon, 13 May 2019 20:12:30 +0800</pubDate><description><![CDATA[什么是鸡尾酒排序和地精排序？
从冒泡排序开始，先来看回顾一下冒泡排序的思想和原理。
冒泡排序的思想
冒泡排序的每一个元素都可以像小气泡一样，根据自身大小，一点一点向着数组的一侧移动。
冒泡排序算法的原理

比较相邻的元素。如果第一个比第二个大，就交换他们两个。
对每一对相邻元素作同样的工作，从开始第一对到结尾的最后一对。这步做完后，最后的元素会是最大的数。
针对所有的元素重复以上的步骤，除了最后一...]]></description><category></category></item><item><title><![CDATA[内存映射文件原理]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/89220454</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/89220454</guid><author>Jochebed666</author><pubDate>Thu, 11 Apr 2019 21:26:03 +0800</pubDate><description><![CDATA[之前一直对虚拟地址映射物理地址有比较浅显的认识，后面学习了页面置换算法，就对于磁盘文件的映射产生了疑惑，后来知道了内存映射的概念，不知道它和虚拟内存有什么区别，而且映射这个词也很让人迷茫，今天终于搞清楚了。。。下面，我先解释一下我对映射这个词的理解，再区分一下几个容易混淆的概念，之后，什么是内存映射就很明朗了。
原理
首先，“映射”这个词，就和数学课上说的“一一映射”是一个意思，就是建立一种一一对...]]></description><category></category></item><item><title><![CDATA[解读TCP的四种定时器]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/89157835</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/89157835</guid><author>Jochebed666</author><pubDate>Tue, 09 Apr 2019 18:30:02 +0800</pubDate><description><![CDATA[一、TCP的四种定时器
TCP 是提供可靠的传输层，它使用的方法之一就是确认从另一端收到的数据。但是数据和确认都可能会丢失。TCP 通过在发送时设置一个定时器来解决这个问题。如果当定时器溢出时还没收到确认，它就会重传该数据。关键在于超时和重传策略，即怎样决定超时的时间间隔和如何确定重传的频率。
TCP使用四种定时器（Timer，也称为“计时器”）：
重传计时器：Retransmission Tim...]]></description><category></category></item><item><title><![CDATA[HTTP Session、Cookie机制详解]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/89156031</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/89156031</guid><author>Jochebed666</author><pubDate>Tue, 09 Apr 2019 17:37:15 +0800</pubDate><description><![CDATA[一、什么是http session,有什么用
HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息，于是，Web Server中引入了session的概念，用来保存客户端的状态信息。

这里用一个形象的比喻来解释session的工作方式。假设Web Server是一个商场的存包处，HTTP Request是一个顾客，第一次来到存包处，管理员把顾客的物品存放在某一个柜子里面（这个柜子...]]></description><category></category></item><item><title><![CDATA[页面置换算法]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/88660157</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/88660157</guid><author>Jochebed666</author><pubDate>Fri, 05 Apr 2019 18:45:42 +0800</pubDate><description><![CDATA[操作系统将内存按照页的进行管理，在需要的时候才把进程相应的部分调入内存。当产生缺页中断时，需要选择一个页面写入。如果要换出的页面在内存中被修改过，变成了“脏”页面，那就需要先写会到磁盘。页面置换算法，就是要选出最合适的一个页面，使得置换的效率最高。页面置换算法有很多，简单介绍几个，重点介绍比较重要的LRU及其实现算法。
一、最优页面置换算法
最理想的状态下，我们给页面做个标记，挑选一个最远才会被再...]]></description><category></category></item><item><title><![CDATA[归并排序]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/88572080</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/88572080</guid><author>Jochebed666</author><pubDate>Fri, 15 Mar 2019 13:25:12 +0800</pubDate><description><![CDATA[一、介绍：
归并排序（Merge sort）是建立在归并操作上的一种有效的排序算法。该算法是采用分治法（Divide and Conquer）的一个非常典型的应用。将已有序的子序列合并，得到完全有序的序列；即先使每个子序列有序，再使子序列段间有序。
该算法的核心思想是二路归并。
二、二路归并介绍
在归并的过程中步骤如下：

设定两个指针（不一定非是指针，只需要记住对应开始下标即可），最初位置分别为...]]></description><category></category></item><item><title><![CDATA[在浏览器中输入一个URL会发生什么？]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/88377253</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/88377253</guid><author>Jochebed666</author><pubDate>Sun, 10 Mar 2019 14:08:31 +0800</pubDate><description><![CDATA[最近看到一个题目，**当在浏览器中输入一个url后回车，后台发生了什么？**比如输入url后，你看到了百度的首页，那么这一切是如何发生的呢？
网上各种的说法，不外乎都是这样的：

第一步：客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
第二步：当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
第三步：如果本地的缓存中没有该纪录...]]></description><category></category></item><item><title><![CDATA[DNS域名解析]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/88377615</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/88377615</guid><author>Jochebed666</author><pubDate>Sun, 10 Mar 2019 13:49:52 +0800</pubDate><description><![CDATA[一、DNS域名解析步骤
下图是DNS域名解析的一个示例图，它涵盖了基本解析步骤和原理。

下面DNS解析步骤进行讲解，后面将采用命令行的形式来跟踪DNS解析过程。当用户在地址栏键入www.baidu.com并敲下回车键之后，域名解析就开始了。
第一步：检查浏览器缓存中是否缓存过该域名对应的IP地址
用户通过浏览器浏览过某网站之后，浏览器就会自动缓存该网站域名对应的IP地址，当用户再次访问的时候，浏...]]></description><category></category></item><item><title><![CDATA[基于HTTP的文件共享服务器]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/88092590</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/88092590</guid><author>Jochebed666</author><pubDate>Sun, 03 Mar 2019 22:27:06 +0800</pubDate><description><![CDATA[基于TCP、HTTP的文件共享服务器
服务器的基础架构
构建TCP服务器
对于文件的传输来说，我们必须要保证文件内容的准确性。所以在数据传输时我们选择保证数据可靠传输的TCP协议。

首先使用socket创建套接字进行对端口号与IP地址进行绑定。
然后监听来自客户端的请求。
连接任务的处理
对于来自客户端的连接请求，我们使用多线程对每个请求进行处理。能够保证并发性的请求处理。
创建线程任务，将线程...]]></description><category></category></item><item><title><![CDATA[c++11新特性]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/88087396</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/88087396</guid><author>Jochebed666</author><pubDate>Sun, 03 Mar 2019 18:57:00 +0800</pubDate><description><![CDATA[1. nullptr
nullptr 出现的目的是为了替代 NULL。
在某种意义上来说，传统 C++ 会把 NULL、0 视为同一种东西，这取决于编译器如何定义 NULL，有些编译器会将 NULL 定义为 ((void)0)*，有些则会直接将其定义为 0。
C++ 不允许直接将 void * 隐式转换到其他类型，但如果 NULL 被定义为 ((void*)0)，那么当编译char *ch = N...]]></description><category></category></item><item><title><![CDATA[send()和recv()函数]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/87920947</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/87920947</guid><author>Jochebed666</author><pubDate>Mon, 25 Feb 2019 17:30:59 +0800</pubDate><description><![CDATA[send()函数

int send( SOCKET s, const char FAR *buf, int len, int flags );


不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。
客户程序一般用send函数向服务器发送请求，而服务器则通常用send函数来向客户程序发送应答。
该函数的第一个参数指定发送端套接字描述符；
第二个参数指明一个存放应用程序要...]]></description><category></category></item><item><title><![CDATA[参考Google的TCMalloc内存池实现并发内存池ConcurrentMemoryPool]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/87722084</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/87722084</guid><author>Jochebed666</author><pubDate>Tue, 19 Feb 2019 18:16:41 +0800</pubDate><description><![CDATA[项目背景

TCMalloc 是 Google 开发的内存分配器，在不少项目中都有使用，例如在 Golang 中就使用了类似的算法进行内存分配。它具有现代化内存分配器的基本特征：对抗内存碎片、在多核处理器能够 scale。之所以学习 TCMalloc，是因为想对内存管理进行深入理解。

解决问题

提高效率
并发处理
内存碎片（内碎片、外碎片）

三大块
thread cache：一个线程对应一个...]]></description><category></category></item><item><title><![CDATA[2N皇后问题]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/86768067</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/86768067</guid><author>Jochebed666</author><pubDate>Wed, 06 Feb 2019 13:53:30 +0800</pubDate><description><![CDATA[题目描述
给定一个nn的棋盘，棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后，使任意的两个黑皇后都不在同一行、同一列或同一条对角线上，任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法？n小于等于8。*
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;string&amp;gt;
#include&amp;lt;vector&amp;gt;
#incl...]]></description><category></category></item><item><title><![CDATA[多态的底层原理]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/86598525</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/86598525</guid><author>Jochebed666</author><pubDate>Tue, 22 Jan 2019 17:37:49 +0800</pubDate><description><![CDATA[在上一篇博客中https://blog.youkuaiyun.com/Jochebed666/article/details/86596585说明了多态，那么多态的底层原理是什么呢？？？
他与虚函数有没有关联？？？
虚函数的工作原理

C++规定了虚函数的行为，但将实现方法留给了编译器作者。 不需要知道实现方法就可以使用虚函数。但了解虚函数的工作原理有助于更好地理解概念，因此，这里对其进行介绍。
通常，编译器...]]></description><category></category></item><item><title><![CDATA[C++多态及静态联编和动态联编]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/86596585</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/86596585</guid><author>Jochebed666</author><pubDate>Tue, 22 Jan 2019 16:31:10 +0800</pubDate><description><![CDATA[
程序调用函数时，将使用哪个可执行代码块呢?
编译器负责回答这个问题。将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编(binding)。 在C语言中，这非常简单，因为每个函数名都对应一个不同的函数。在C++中，由于函数重载的缘故，这项任务更复杂。编译器必须查看函数参数以及函数名才能确定使用哪个函数。然而，C/C++编译器可以在编译过程完成这种联编。在编译过程中进行联编被称为静态联编...]]></description><category></category></item><item><title><![CDATA[多继承]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/86572522</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/86572522</guid><author>Jochebed666</author><pubDate>Tue, 22 Jan 2019 12:44:59 +0800</pubDate><description><![CDATA[多继承
之前在https://blog.youkuaiyun.com/Jochebed666/article/details/86571445博客中主要提到了单继承，那么什么是多继承呢？？？
多继承即一个子类可以有多个父类，它继承了多个父类的特性。
C++ 类可以从多个类继承成员，语法如下：

class &amp;lt;派生类名&amp;gt;:&amp;lt;继承方式1&amp;gt;&amp;lt;基类名1&amp;gt;,&amp;lt;继承方式2&amp;gt;...]]></description><category></category></item><item><title><![CDATA[重载、重写、重定义、覆盖、隐藏的区别]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/86572231</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/86572231</guid><author>Jochebed666</author><pubDate>Mon, 21 Jan 2019 13:37:23 +0800</pubDate><description><![CDATA[



重载
重写=覆盖
重定义=隐藏




即函数重载或运算符重载，需要在同一作用域里，函数名相同，参数类型或者参数个数不同，返回值可同可不同
用于多态，函数名和参数都相同，仅仅只有内部实现不同
用于继承，基类和派生类中有同名成员，派生类成员将屏蔽基类对同名成员的直接访问，即在基类和派生类中的同名成员


重载举个栗子：
#include &amp;lt;iostream&amp;gt;
using name...]]></description><category></category></item><item><title><![CDATA[实现一个不能被继承的类]]></title><link>https://blog.youkuaiyun.com/Jochebed666/article/details/86572481</link><guid>https://blog.youkuaiyun.com/Jochebed666/article/details/86572481</guid><author>Jochebed666</author><pubDate>Mon, 21 Jan 2019 13:07:54 +0800</pubDate><description><![CDATA[// C++98中构造函数私有化，派生类中调不到基类的构造函数。则无法继承
class NonInherit
{
public: //成员函数定义成static属于类，不属于对象
 static NonInherit GetInstance()
 {
 return NonInherit();
 }
private:
 NonInherit()
 {}
};
//// C++11给出了新的关键字f...]]></description><category></category></item></channel></rss>