<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ancientmoondjay的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ancientmoondjay</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ancientmoondjay]]></copyright><item><title><![CDATA[使用java和CORBA实现分布应用编程]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/71374355</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/71374355</guid><author>ancientmoondjay</author><pubDate>Sun, 07 May 2017 21:26:46 +0800</pubDate><description><![CDATA[因为课程的需要，学习了下用java和CORBA来实现分布应用编程，具体的CORBA是什么以及它的框架结构我就不多说了，这里我是给出一个比较完整的例子来展示下代码要怎么写。应用背景：使用java和CORBA构建一个关于制订to-do-list的分布式应用。不同的客户端可以通过连接到服务器来管理自己的to-do-list，比如有add list items、query list items、delete]]></description><category></category></item><item><title><![CDATA[IO多路复用：select、poll、epoll]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/71092848</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/71092848</guid><author>ancientmoondjay</author><pubDate>Tue, 02 May 2017 19:32:46 +0800</pubDate><description><![CDATA[一、同步异步、阻塞非阻塞的概念区分首先，一个 输入操作通常包括两个不同的阶段：（1）等待数据准备好（2）从内核向进程复制数据对于一个套接字上的输入操作，第一步通常涉及等待数据从网络中到达。当所等待分组到达时，它被复制到内核中的某个缓冲区。第二步就是把数据从缓冲区复制到应用进程缓冲区。1.同步与异步 
同步和异步关注的是消息通信机制 (synchronous communication/ asynch]]></description><category></category></item><item><title><![CDATA[POP3数据包捕获]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/71090565</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/71090565</guid><author>ancientmoondjay</author><pubDate>Tue, 02 May 2017 19:05:41 +0800</pubDate><description><![CDATA[POP3，全名为“Post Office Protocol - Version 3”，即“邮局协议版本3”。是TCP/IP协议族中的一员，由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。一、POP3的三种状态POP3协议中有三种状态，认可状态、处理状态和更新状态。命令的执行可以改变协议的状态，对于具体的命令，只能在具体的某状态下使用。 
客户端刚与服务器建立连接时，]]></description><category></category></item><item><title><![CDATA[DHCP数据包捕获]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/70953559</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/70953559</guid><author>ancientmoondjay</author><pubDate>Sat, 29 Apr 2017 15:51:17 +0800</pubDate><description><![CDATA[DHCP（Dynamic Host Configuration Protocol，动态主机配置协议）是一个局域网的网络协议，使用UDP协议工作， 主要有两个用途：给内部网络或网络服务供应商自动分配IP地址，给用户或者内部网络管理员作为对所有计算机作中央管理的手段。 
在wireshark过滤器里输入bootp进行对DHCP包的过滤，在windows命令行里输入ipconfig –renew来重新获取]]></description><category></category></item><item><title><![CDATA[Telnet过程数据包捕获]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/70946175</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/70946175</guid><author>ancientmoondjay</author><pubDate>Sat, 29 Apr 2017 11:13:35 +0800</pubDate><description><![CDATA[Telnet协议是TCP/IP协议族中的一员，是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序，用它连接到服务器。终端使用者可以在telnet程序中输入命令，这些命令会在服务器上运行，就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话，必须输入用户名和密码来登录服务器]]></description><category></category></item><item><title><![CDATA[TCP连接建立与关闭数据包捕获]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/70854980</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/70854980</guid><author>ancientmoondjay</author><pubDate>Thu, 27 Apr 2017 15:09:17 +0800</pubDate><description><![CDATA[一、三次握手与四次挥手建立TCP连接需要三次握手，断开连接则需要四次挥手，整个过程如下： 
（一）连接建立阶段: 
（1）客户端发送一个SYN包给服务器，然后等待应答。 
（2）服务器端回应给客户端一个ACK=1、SYN=1的TCP数据段。 
（3）客户必须再次回应服务器端一个ACK确认数据段。（二）连接断开阶段： 
（1） TCP客户端发送一个FIN，关闭客户端到服务器端的数据传送。（客户端不再发]]></description><category></category></item><item><title><![CDATA[引用常量之我见]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/70177025</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/70177025</guid><author>ancientmoondjay</author><pubDate>Sat, 15 Apr 2017 00:02:07 +0800</pubDate><description><![CDATA[我们先来看下下面的代码：    int a = 10;
    const int &b = a;
    a += b;
    cout << a << endl;
    cout << b << endl;你觉得会输出什么呢？想一想。okay，答案是20和20！ 
我的理解是引用虽说是一个变量的别名，但是实际上还是一个指针常量，也就是这个指针是常量，不能重新赋值为其他地址，所以这也是为什么引]]></description><category></category></item><item><title><![CDATA[C++ STL中Map的按Key排序和按Value排序]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/69361035</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/69361035</guid><author>ancientmoondjay</author><pubDate>Wed, 05 Apr 2017 21:55:39 +0800</pubDate><description><![CDATA[（必须吐嘈下优快云，竟然没有转载功能，搞得看到好文章都不能一键转载，一段一段复制。orz） 
原文：http://blog.youkuaiyun.com/iicy266/article/details/11906189?utm_source=tuicool&utm_medium=referralmap是用来存放< key, value >键值对的数据结构，可以很方便快速的根据key查到相应的value。假如存]]></description><category></category></item><item><title><![CDATA[C++实现排序算法]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/68925910</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/68925910</guid><author>ancientmoondjay</author><pubDate>Mon, 03 Apr 2017 17:01:08 +0800</pubDate><description><![CDATA[八大排序算法有直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 
今天想把排序算法系统学习一下，所以上网搜索了下排序算法。真是个好家伙，那么多！不怕，一个个学习并用代码实现出来！ 
排序算法大体可以分为以下几类：
交换类排序：冒泡排序、鸡尾酒排序、奇偶换位排序、梳子排序、侏儒排序、快速排序、臭皮匠排序
选择类排序：选择排序、堆排序、Smooth排序、笛卡尔树排序]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：图]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/68141946</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/68141946</guid><author>ancientmoondjay</author><pubDate>Wed, 29 Mar 2017 21:34:32 +0800</pubDate><description><![CDATA[图的内容非常多，边学习边写和图有关的算法也花费了不少时间与精力。写着写着最后都有近1000行代码了。orz…… 
接下来详细说说和图有关的都有啥。一、相关概念图分为无向图和有向图。 
在无向图中，若图中任意一对顶点都是连通的，则称此图是连通图。 
在有向图中，若任意一对顶点u和v间存在一条从u到v的路径和从v到u的路径，则称此图是强连通图。 
无向图的一个极大连通子图称为该图的一个连通分量。 
有向]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：散列表]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64934650</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64934650</guid><author>ancientmoondjay</author><pubDate>Wed, 22 Mar 2017 21:00:27 +0800</pubDate><description><![CDATA[散列表通过将关键字值映射到表中某个位置上来存储元素。由给定的关键字值，根据映射，计算得到元素的存储位置来访问元素。 
在散列技术中，冲突是指对于关键字集合中的两个关键字值Ki和Kj，当Ki != Kj时，有h(Ki)==h(Kj)，h是散列函数。 
目前比较常用的散列函数有：除留余数法、平方取中法、折叠法、数字分析法。 
一个散列表中冲突是难以避免的，所以要寻求解决冲突的方法。拉链法和开地址法是两种]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：二叉搜索树]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64919593</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64919593</guid><author>ancientmoondjay</author><pubDate>Wed, 22 Mar 2017 15:05:10 +0800</pubDate><description><![CDATA[设结点由关键字值表征，假定所有结点的关键字值各不相同，二叉搜索树或者是一棵空二叉树，或者是具有下列性质的二叉树： 
（1）若左子树不空，则左子树上所有结点的关键字值均不小于根结点的关键字值。 
（2）若右子树不空，则右子树上所有结点的关键字值均大于根结点的关键字值。 
（3）左、右子树也分别是二叉搜索树。 
具体实现见代码，相关注释已写。//
// Created by huxijie on 17-]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：哈夫曼树]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64521290</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64521290</guid><author>ancientmoondjay</author><pubDate>Tue, 21 Mar 2017 21:30:07 +0800</pubDate><description><![CDATA[首先我们先来明确几个概念。 
树的路径长度：从根到树中任意结点的路径长度是指从根结点到该结点的路径上所包括的边的数目，也相当于是该结点的层次-1。 
树的内路径长度：除叶子结点外，从根到树中其他所有结点的路径长度之和。 
树的外路径长度：从根到树中所有叶子结点的路径长度之和。 
叶子结点的加权路径长度：从根到该叶子的路径长度与叶子的权的乘积。 
树的加权路径长度：树中所有叶子结点的加权路径长度之和。]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：优先权队列]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64136764</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64136764</guid><author>ancientmoondjay</author><pubDate>Mon, 20 Mar 2017 20:51:06 +0800</pubDate><description><![CDATA[一个大小为n的堆是一棵包含n个结点的完全二叉树，该树中每个结点的关键字大于等于其双亲结点的关键字值。完全二叉树的根称为堆顶，若它的关键字值是整棵树上最大的，我们称之为最大堆。反之，就是最小堆。 
如果要求每次从数据结构中取出的元素是具有最高优先级的元素，这样的数据结构被称为优先权队列。可见，堆是实现优先权队列的非常有效的数据结构。另外，因为堆的特性，我们还可以用堆来实现排序，也就是堆排序了。堆排序的]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：二叉树]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64131883</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64131883</guid><author>ancientmoondjay</author><pubDate>Mon, 20 Mar 2017 19:53:39 +0800</pubDate><description><![CDATA[二叉树的定义以及性质在之前的博客里已经说过了，今天来用C++实现二叉树。提供先序遍历、中序遍历、后序遍历的递归和非递归的两种实现方式，也提供了层次遍历的用队列实现方式。详细的看代码学习吧，关键注释都有加上了。————————————————————2017.4.4补充———————————————————— 
今天补充了反转二叉树的实现，提供递归和非递归两个版本。 
————————————————]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：队列]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64127429</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/64127429</guid><author>ancientmoondjay</author><pubDate>Mon, 20 Mar 2017 16:06:25 +0800</pubDate><description><![CDATA[队列是限定在表的一端插入，在表的另一端删除的线性表，是先进先出（FIFO）的线性数据结构。 
队列基类如下：#include <iostream>
using namespace std;//队列基类
template <typename T>
class Queue{
public:
    virtual bool IsEmpty() const = 0;   //若队列空,则返回true]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：堆栈]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/63712845</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/63712845</guid><author>ancientmoondjay</author><pubDate>Sun, 19 Mar 2017 21:42:48 +0800</pubDate><description><![CDATA[堆栈是限定插入和删除操作都在表的同一端进行的线性表，是后进先出（LIFO）的线性数据结构。#include <iostream>
using namespace std;//堆栈基类
template <typename T>
class Stack{
public:
    virtual bool IsEmpty() const = 0;   //若栈空,则返回true
    virtual]]></description><category></category></item><item><title><![CDATA[《C++实现数据结构》：线性表]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/63692123</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/63692123</guid><author>ancientmoondjay</author><pubDate>Sun, 19 Mar 2017 20:50:21 +0800</pubDate><description><![CDATA[线性表类模板如下，是顺序表类和链表类的基类。#include <iostream>
using namespace std;//线性表基类
template <typename T>
class LinearList{
protected:
    int n;      //线性表的长度
public:
    virtual bool IsEmpty() const = 0;   //若线性表空]]></description><category></category></item><item><title><![CDATA[树的术语及性质]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/63684536</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/63684536</guid><author>ancientmoondjay</author><pubDate>Sun, 19 Mar 2017 14:37:47 +0800</pubDate><description><![CDATA[一、基本术语 
若一个结点有子树，那么该结点称为子树根的”双亲”，子树的根是该结点的”孩子”。有相同双亲的结点互为”兄弟”。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。结点：表示树中的元素。 
结点的度：拥有子结点的个数。 
叶子：度为0的结点。  
树的度：树中结点的最大的度。 
结点的层次：根结点是第一层，它的孩子结点是第二层，依次类推。]]></description><category></category></item><item><title><![CDATA[《编程之法》：完美洗牌算法]]></title><link>https://blog.youkuaiyun.com/ancientmoondjay/article/details/63296850</link><guid>https://blog.youkuaiyun.com/ancientmoondjay/article/details/63296850</guid><author>ancientmoondjay</author><pubDate>Sat, 18 Mar 2017 22:00:58 +0800</pubDate><description><![CDATA[题目有一个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn}，希望排序后变成{a1,b1,a2,b2,a3,b3,…,an,bn}。思路书上讲了先用完美洗牌算法将数组排序为{b1,a1,b2,a2,b3,a3,…,bn,an}，然后再两两交换，就变为题目所要求的那样。 
书上完美洗牌算法讲得很好，我这里就简单记录下。 
注意，数组下标是从1开始存储要求排序的数据。 
首先，对]]></description><category></category></item></channel></rss>