<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gmy2016wiw的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gmy2016wiw</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gmy2016wiw]]></copyright><item><title><![CDATA[Linux工具之grep&&sed&&awk]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/74202849</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/74202849</guid><author>gmy2016wiw</author><pubDate>Mon, 03 Jul 2017 15:56:59 +0800</pubDate><description><![CDATA[grep:
      grep是一种行过滤工具，我们经常会用grep在一个文件中找出包含某些字符串的行，比如在头文件中中找出一个宏定义。但是grep还可以找出符合某个模式(Pattern)的一类字符串。
 grep的一般格式为：grep  [选项]  基本正则表达式  [文件]
常用的grep选项有：
-E：扩展正则匹配
-R：递归是查询
-i：忽略大小写
-q：安静模式匹配，不显]]></description><category></category></item><item><title><![CDATA[eval调研]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/74004444</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/74004444</guid><author>gmy2016wiw</author><pubDate>Fri, 30 Jun 2017 16:10:22 +0800</pubDate><description><![CDATA[eval可以将字符串生成执行语句，和SQL的exec()类似。eval是Javascript内置函数，用于计算字符串表达式的值。例如eval("2+3")返回的是5。
        Linux中，shell中的eval命令将会首先扫描命令行进行所有的替换，然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。]]></description><category></category></item><item><title><![CDATA[进程间通信—消息队列]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73823910</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73823910</guid><author>gmy2016wiw</author><pubDate>Tue, 27 Jun 2017 21:29:55 +0800</pubDate><description><![CDATA[消息队列
         消息队列提供了一种从一个进程向另一个进程发送数据块的方法。每个数据块都被认为是有一个类型，接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题。消息队列与管道不同的是，消息队列是基于消息的，而管道是基于字节流的，且消息队列的读取不一定是先入先出。消息队列与命名管道有一样的不足，就是每个消息的最大长度是有上限的，每个消息队列的总的]]></description><category></category></item><item><title><![CDATA[进程间通信—管道]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73807768</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73807768</guid><author>gmy2016wiw</author><pubDate>Tue, 27 Jun 2017 17:20:46 +0800</pubDate><description><![CDATA[进程间通信本质上让不同的进程拥有一份公共的资源。管道则是进程间通信的一种，分为匿名管道和命名管道。
 管道特点：
 1.管道只能用于单向通信。
 2.匿名只能用于有血缘关系之间的通信，命名管道也能用于无血缘关系之间的通信 。
 3.面向数据流通信。
 4.管道的生命周期随进程。进程退出，管道也随之释放。
 5.管道访问资源时按顺序访问，父子进程同步。
管道其实是一种最基本的IPC机制]]></description><category></category></item><item><title><![CDATA[基于TCP协议服务器]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73730285</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73730285</guid><author>gmy2016wiw</author><pubDate>Sun, 25 Jun 2017 22:21:17 +0800</pubDate><description><![CDATA[socket编程：
         在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。
         在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思,因此用来描述网络连接的一对一关系。]]></description><category></category></item><item><title><![CDATA[CRC校验]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73605464</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73605464</guid><author>gmy2016wiw</author><pubDate>Thu, 22 Jun 2017 16:06:25 +0800</pubDate><description><![CDATA[CRC即循环冗余校验码，是数据通信领域中最常用的一种查错校验码，其特征是信息字段和校验字段可以任意选定。循环冗余检查是一种数据传输检错功能，对数据进行多项式计算，并将得到的结果附在帧的后面，接收设备也执行类似的算法，以保证数据传输的正确性和完整性。
工作原理：
       循环冗余校验码（CRC）的基本原理：在K位信息码后再拼接R位的校验码，整个编码长度为N位，因此，这种编码也叫（N , K]]></description><category></category></item><item><title><![CDATA[进程间通信—信号量]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73469561</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73469561</guid><author>gmy2016wiw</author><pubDate>Mon, 19 Jun 2017 17:26:22 +0800</pubDate><description><![CDATA[信号量的本质是一种数据结构操作锁，它本身不具有数据交换的功能，而是通过控制其他的通信资源（文件，外部设备）来实现进程间通信，它本身只是一种外部资源的标识，信号量在此过程中负责数据结构的互斥，同步等功能。
       当请求一个使用信号量来表示的资源时，进程需要先读取信号量的值来判断资源是否可用。大于0，资源可以请求，等于0，无资源可用，进程会进入睡眠状态直至资源可用。当进程不再使用一个信号量控]]></description><category></category></item><item><title><![CDATA[AVL树的实现]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73335605</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73335605</guid><author>gmy2016wiw</author><pubDate>Fri, 16 Jun 2017 17:10:46 +0800</pubDate><description><![CDATA[AVL树的概念：
一棵AVL树或者是空树，或者是具有以下性质的二叉搜索树：
1.它的左右子树都是AVL树
2.左子树和右子树高度之差（简称平衡因子）的绝对值不超过（-1,0,1）
如果一棵二叉搜索树是高度平衡的，它就是AVL树，如果它有n个结点，其高度可保持在O（lgn）,平均搜索时间复杂度O（lg(n)）。AVL在构建时，插入的每一个节点都需要满足搜索二叉树的性质，但同时也要保证左右子树]]></description><category></category></item><item><title><![CDATA[进程死锁]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73302211</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73302211</guid><author>gmy2016wiw</author><pubDate>Thu, 15 Jun 2017 20:21:51 +0800</pubDate><description><![CDATA[首先，我们来了解一下什么是进程死锁。
       所谓进程死锁，就是如果多个进程同时占有对方需要的资源而同时请求对方的资源，而它们在得到请求之前不会释放所占有的资源，那么就会导致死锁的的发生，也就是进程不能实现同步。
 产生死锁的原因：
 1.系统资源不同。
 2.进程（线程）推进的顺序不当。
 3.资源分配不当。
 产生死锁的四个必要条件：
 1.互斥条件：资源不能共享，只能由一]]></description><category></category></item><item><title><![CDATA[进程等待及子进程异步等待方式]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73277991</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/73277991</guid><author>gmy2016wiw</author><pubDate>Thu, 15 Jun 2017 12:33:22 +0800</pubDate><description><![CDATA[首先我们来看两个函数，wait和waitpid函数。
      一个进程在终止时会关闭所有的文件描述符，释放在用户空间分配的内存，但它的PCB还保留着，内核在其中保存了一些信息；如果是正常终止则保存着退出状态，如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid获取这些信息，然后彻底清除掉这个进程。
      当一个进程正常或异常终止时，内核就]]></description><category></category></item><item><title><![CDATA[BSTree树的实现]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/72783295</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/72783295</guid><author>gmy2016wiw</author><pubDate>Sat, 27 May 2017 18:17:57 +0800</pubDate><description><![CDATA[二叉搜索树：又称二叉排序树，它或者是一棵空树，或者是具有以下性质的二叉树
1.若它的左子树不为空，则左子树所有结点的值都小于根节点的值。
2.若它的右子树不为空，则右子树所有结点的值都大于根节点的值。
3.它的左右子树也分别为二叉搜索树。
下面是关于二叉搜索树的实现，其中比较难以操作的就是删除操作。我们来分析一下删除操作都有哪几种情况：
首先查找元素是否在二叉搜索树中，若不存在，则返回；]]></description><category></category></item><item><title><![CDATA[Linux下file_struct以及文件描述符]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/72594093</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/72594093</guid><author>gmy2016wiw</author><pubDate>Sun, 21 May 2017 09:51:31 +0800</pubDate><description><![CDATA[首先我们来简单看看进程与程序的区别
       程序可以理解为硬盘上的普通二进制文件；进程是加载到内存中的二进制文件，除了加载到内存中的二进制文件外，还附有所有对于该二进制文件描述信息的结构体，描述该进程的结构体叫PCB（进程控制块），这在前文中已经介绍，在这就不在讨论。对于程序与进程，也就可以简单地理解为是否有PCB（进程控制块）。下面我们再来讨论PCB与file_struct的关系。
 ]]></description><category></category></item><item><title><![CDATA[从尾到头打印链表每一个节点的值]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/71189711</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/71189711</guid><author>gmy2016wiw</author><pubDate>Thu, 04 May 2017 22:37:16 +0800</pubDate><description><![CDATA[题目描述：
            输入一个链表，从尾到头打印链表每个节点的值。
       分析：从尾到头输出，可利用递归来实现。]]></description><category></category></item><item><title><![CDATA[二叉树前序、中序、后序遍历非递归写法的透彻解析]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/71173484</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/71173484</guid><author>gmy2016wiw</author><pubDate>Thu, 04 May 2017 18:49:21 +0800</pubDate><description><![CDATA[目录(?)[+]



前言


在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法，只要理解思想，几行代码。可是非递归写法却很不容易。这里特地总结下，透彻解析它们的非递归写法。其中，中序遍历的非递归写法最简单，后序遍历最难。我们的讨论基础是这样的： 
   





[cpp] view
 plain copy


 



//]]></description><category></category></item><item><title><![CDATA[替换空格]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/71101185</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/71101185</guid><author>gmy2016wiw</author><pubDate>Tue, 02 May 2017 19:52:45 +0800</pubDate><description><![CDATA[题目描述：
       请实现一个函数，将一个字符串中的空格替换成“%20”。例如，当字符串中为We Are Happy。则经过替换后的字符串为We%20Are%20Happy。
         解题思路：要进行替换，是在原有的字符串上进行替换，还是需要开辟一个新的空间来进行替换，在这里，假设原字符串的空间足够，那么我们需要考虑第二个问题，就是要从前往后替换还是从后往前替换，从前往后替换字]]></description><category></category></item><item><title><![CDATA[二维数组的查找]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70609941</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70609941</guid><author>gmy2016wiw</author><pubDate>Mon, 24 Apr 2017 17:00:55 +0800</pubDate><description><![CDATA[题目描述
       在一个二维数组中，每一行都按照从左到右递增的顺序排序，每一列都按照从上到下递增的顺序排序。请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。]]></description><category></category></item><item><title><![CDATA[浅谈进程与task_struct]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70314390</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70314390</guid><author>gmy2016wiw</author><pubDate>Fri, 21 Apr 2017 14:23:35 +0800</pubDate><description><![CDATA[进程的概念
      OS：程序的一个执行实例。正在执行的程序。能分配处理器并由处理器执行的实体。
      内核观点：担任分配系统资源（CPU时间，内存）的实体。
      进程的两个基本元素是程序代码（可能被执行相同程序的其他进程共享）和代码相关联的数据集。进程是一种动态描述，但是并不代表所有的进程都在运行。进程在内存中因策略或调度需求，会处于各种状态，这个我们到后面再来讨论。
]]></description><category></category></item><item><title><![CDATA[模板&泛型编程]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70186689</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70186689</guid><author>gmy2016wiw</author><pubDate>Sat, 15 Apr 2017 20:28:16 +0800</pubDate><description><![CDATA[泛型编程：编写与类型无关的逻辑代码，是代码复用的一种手段。模板是泛型编程的基础。
      模板分为类模板和函数模板。函数模板代表了一个函数家族，该函数与类型无关，在使用时被参数化，根据实参类型产生函数的特定类型版本。
    
      如上例所示，就是一个简单加法函数的模板，typename是用来定义模板参数的关键字，也可以使用class，T代表着传入实参的类型，可以为int，flo]]></description><category></category></item><item><title><![CDATA[浅谈智能指针shared_ptr]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70145959</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70145959</guid><author>gmy2016wiw</author><pubDate>Wed, 12 Apr 2017 18:19:39 +0800</pubDate><description><![CDATA[首先什么是智能指针？
      RAII：资源分配即初始化，通俗点来讲，就是定义一个类来封装资源的分配和释放，再构造函数完成资源的分配和初始化，在析构函数完成资源的清理，可以保证资源的正确初始化和释放。
      实现机制：是利用类的构造和析构函数（释放资源）是由编译器自动调用的。
      智能指针不仅管理执行对象的释放问题，还可以像指针一样的使用。
      C++标准库中主要]]></description><category></category></item><item><title><![CDATA[日期类的实现]]></title><link>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70145825</link><guid>https://blog.youkuaiyun.com/gmy2016wiw/article/details/70145825</guid><author>gmy2016wiw</author><pubDate>Wed, 12 Apr 2017 18:04:23 +0800</pubDate><description><![CDATA[代码如下：
#pragma once
#include
using namespace std;
#include
#include

class Date
{
public:
	Date(int years = 1900, int month = 1, int day = 1);
	Date operator+(int day);
	Date& operator+=(int day);
	Da]]></description><category></category></item></channel></rss>