<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Kunikida的专栏]]></title><description><![CDATA[启程，希望不算晚；成长，希望不会断]]></description><link>https://blog.youkuaiyun.com/kunikida</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; kunikida]]></copyright><item><title><![CDATA[git]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/46485943</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/46485943</guid><author>kunikida</author><pubDate>Sat, 13 Jun 2015 23:03:25 +0800</pubDate><description><![CDATA[git log
git reset --hard commit_id 

git rm --cached]]></description><category></category></item><item><title><![CDATA[Linux systemd]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/46369667</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/46369667</guid><author>kunikida</author><pubDate>Fri, 05 Jun 2015 00:15:47 +0800</pubDate><description><![CDATA[一、systemd的诞生
天下武功，唯快不破。所以有了systemd。是为了更快的开机？但systemd做的远远不止这些，或者说做了太多太多了。他似乎接管了整个linux的管理。systemd接管了大致如下事情：
1.Linux的开机启动,取代了init
2.提供日志服务，接管syslog
3.为Linux提供了快照（目前的systemd还不完善）
4.网络管理服务，取代了service]]></description><category></category></item><item><title><![CDATA[Docker学习笔记（一）:Docker的三个基本概念]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/45954877</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/45954877</guid><author>kunikida</author><pubDate>Sun, 24 May 2015 20:37:04 +0800</pubDate><description><![CDATA[Docker 包括三个基本概念

镜像（Image）容器（Container）仓库（Repository）
理解了这三个概念，就理解了 Docker 的整个生命周期。


镜像Image
Docker 镜像就是一个只读的模板。
例如：一个镜像可以包含一个完整的 ubuntu 操作系统环境，里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器]]></description><category></category></item><item><title><![CDATA[getopt()用法详解]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/8922754</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/8922754</guid><author>kunikida</author><pubDate>Mon, 13 May 2013 21:50:46 +0800</pubDate><description><![CDATA[getopt被用来解析命令行选项参数。就不用自己写东东处理argv了。
#include 
       extern char *optarg;  //选项的参数指针
       extern int optind,   //下一次调用getopt的时，从optind存储的位置处重新开始检查选项。 
       extern int opterr,  //当opterr=0时，getopt]]></description><category></category></item><item><title><![CDATA[getopt()]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/8922402</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/8922402</guid><author>kunikida</author><pubDate>Mon, 13 May 2013 20:41:55 +0800</pubDate><description><![CDATA[getopt被用来解析命令行选项参数。
#include 
      extern
 char *optarg;  //选项的参数指针
      extern
 int optind,   //下一次调用getopt的时，从optind存储的位置处重新开始检查选项。 
      extern
 int opterr,  //当opterr=0时，getopt不向stderr输出]]></description><category></category></item><item><title><![CDATA[PostgreSQL 快速入门]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/8846980</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/8846980</guid><author>kunikida</author><pubDate>Wed, 24 Apr 2013 21:53:54 +0800</pubDate><description><![CDATA[PostgreSQL 快速入门 
在Ubuntu系统中怎样安装和配置PostgreSQL服务器

 介绍 
PostgreSQL是一个强大的关系型数据库管理系统，它按照BSD许可[1]发行。PostgreSQL包含很多高级的特性，拥有良好的性能和很好的适用性。
PostgreSQL绑定了很多种编程语言，例如 C, C++, 
Python, Java, PHP, Ruby等 ，它可以操]]></description><category></category></item><item><title><![CDATA[postgresql 常用命令]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/8846964</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/8846964</guid><author>kunikida</author><pubDate>Wed, 24 Apr 2013 21:52:01 +0800</pubDate><description><![CDATA[postgresql 常用命令

（1）用户实用程序：

createdb 创建一个新的PostgreSQL的数据库（和SQL语句：CREATE DATABASE 相同） 
createuser 创建一个新的PostgreSQL的用户（和SQL语句：CREATE USER 相同） 
dropdb 删除数据库 
dropuser 删除用户 
pg_dump 将PostgreSQL数据]]></description><category></category></item><item><title><![CDATA[有了malloc/free为什么还要new/delete？]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7948295</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7948295</guid><author>kunikida</author><pubDate>Wed, 05 Sep 2012 21:39:15 +0800</pubDate><description><![CDATA[malloc与free是C++/C语言的标准库函数，new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

　　对于非内部数据类型的对象而言，光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数，对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符，不在编译器控制权限之内，不能够把执行构造函数和析构函数的任务强加于m]]></description><category></category></item><item><title><![CDATA[C++关键字static的用法]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7946090</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7946090</guid><author>kunikida</author><pubDate>Wed, 05 Sep 2012 14:21:59 +0800</pubDate><description><![CDATA[1、cpp文件中的全局静态变量
全局内的声明：
static int a=0;
这样的静态全局变量就只能被该cpp文件所用，不能被其他cpp文件共享。
若不声明static：
int a=0;
这样的全部变量既不能保证a能被其他cpp文件共享，又不能保证不能被其他cpp文件共享。不建议这样使用，最好加extern：
extern int a=0;


2、静态局部变量
int]]></description><category></category></item><item><title><![CDATA[类String的构造函数、析构函数和赋值函数]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7943861</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7943861</guid><author>kunikida</author><pubDate>Tue, 04 Sep 2012 21:14:24 +0800</pubDate><description><![CDATA[拷贝构造函数和赋值函数的区别：看看下面代码，仔细想想两者的区别。
拷贝构造函数是在定义一个对象的时候调用的，如

Class String
{
	//....
};

String a=b;//b为一个String类型的对象
或者
String a(b);
赋值函数是在用一个类的实例去赋值给另一个实例的时候调用的，如


String a;
a=b;
类String的构造函数、析构]]></description><category></category></item><item><title><![CDATA[strcpy函数与memcpy函数的区别及其函数实现]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7938532</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7938532</guid><author>kunikida</author><pubDate>Mon, 03 Sep 2012 16:24:53 +0800</pubDate><description><![CDATA[先看函数实现：
显然两函数的原型都不一样：void *memcpy(void * ,const void * ,size_t )与char *strcpy(char * ,const char * )；

void *memcpy(void *dst,const void *src,size_t count)
{
	if(dst==NULL || src==NULL)
		return NU]]></description><category></category></item><item><title><![CDATA[排序（之选择排序）]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7926675</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7926675</guid><author>kunikida</author><pubDate>Thu, 30 Aug 2012 20:11:05 +0800</pubDate><description><![CDATA[选择排序是不稳定排序，平均算法复杂度和最坏算法复杂度为：O(n^2)；空间复杂度为O(1)；
稳定性说明：
举个例子，序列5 8 5 2 9， 我们知道第一遍选择第1个元素5会和2交换，那么原序列中2个5的相对前后顺序就被破坏了，所以选择排序不是一个稳定的排序算法


#include

void select_sort(int a[],int n)
{
	int i,j,pos,tmp]]></description><category></category></item><item><title><![CDATA[排序（之希尔排序）]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7926101</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7926101</guid><author>kunikida</author><pubDate>Thu, 30 Aug 2012 17:07:15 +0800</pubDate><description><![CDATA[希尔排序是不稳定排序，平均算法复杂度和最坏算法复杂度为：O(nlgn)，最好的情况为O(n)；空间复杂度为O(1)；
希尔排序是插入排序的一种，且希尔排序的算法复杂度大大低于插入排序，只是由稳定变为不稳定的排序。

#include

void Shell_Insert(int a[],int d,int n)
{
	int i,j,rc;

	for(i=d;i<n;i++)
	{
		i]]></description><category></category></item><item><title><![CDATA[排序（之插入排序）]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7926083</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7926083</guid><author>kunikida</author><pubDate>Thu, 30 Aug 2012 17:04:09 +0800</pubDate><description><![CDATA[插入排序是稳定的排序，平均情况和最坏情况的算法复杂度为O(n^2)，最好情况为O(n)；空间复杂度为：O(1)。
#include

void InsertSort(int a[],int n)
{
	int i,j,rc;

	for(i=1;i<n;i++)
	{
		if(a[i-1]>a[i])
		{
			rc=a[i];
			j=i;
			while(j-1>=0 && rc<]]></description><category></category></item><item><title><![CDATA[排序（之堆排序）]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7925088</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7925088</guid><author>kunikida</author><pubDate>Thu, 30 Aug 2012 14:19:23 +0800</pubDate><description><![CDATA[堆排序是不稳定的排序，平均情况和最坏情况的算法复杂度为O(NlgN)，空间复杂度为：O(1)

#include
#include

void swap(int &a,int &b)
{
	int tmp;

	tmp=a;
	a=b;
	b=tmp;
}

void HeapAjust(int a[],int i,int n)
{
	int rc=i;
	int rs=a[rc];

	fo]]></description><category></category></item><item><title><![CDATA[排序（之冒泡排序）]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7922095</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7922095</guid><author>kunikida</author><pubDate>Wed, 29 Aug 2012 22:15:25 +0800</pubDate><description><![CDATA[冒泡排序是稳定的排序，但是算法复杂度较高，平均和最差都是：O(n^2)，空间复杂度为：O(1)
#include

void bubble_sort(int a[],int n)
{
	int i,j,tmp;

	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(a[j]>a[j+1])
			{
				tmp=a[j];]]></description><category></category></item><item><title><![CDATA[排序（之快速排序）]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7922034</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7922034</guid><author>kunikida</author><pubDate>Wed, 29 Aug 2012 21:59:34 +0800</pubDate><description><![CDATA[快速排序是不稳定的排序，但是算法复杂度低，平均算法复杂度为：O(nlgn)，最差为O(n^2)。空间复杂度为：O(lgn)

#include

int PARTITION(int a[],int i,int j)
{
	int key=a[i];	//记录关键字

	while(i<j)
	{
		while(i<j && key<=a[j])		//向右扫描
			j--;
						/]]></description><category></category></item><item><title><![CDATA[在二元树中找出和为某一值的所有路径（树）]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7884291</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7884291</guid><author>kunikida</author><pubDate>Sun, 19 Aug 2012 21:54:30 +0800</pubDate><description><![CDATA[在二元树中找出和为某一值的所有路径（树）
题目：输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
   10  
   / \  
  5  12   
 / \      
4   7   
则打印出两条路径：10, 12和10, 5, 7
#include
#]]></description><category></category></item><item><title><![CDATA[把二元查找树转变成排序的双向链表]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7874022</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7874022</guid><author>kunikida</author><pubDate>Thu, 16 Aug 2012 16:43:26 +0800</pubDate><description><![CDATA[把二元查找树转变成排序的双向链表（树）
 题目：
输入一棵二元查找树，将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点，只调整指针的指向。
    10
   /  \
  6   14
 / \  / \
4  8 12 16
 转换成双向链表
4=6=8=10=12=14=16。

思路：中序遍历二叉查找树，因此结点按从小到大顺序访问，假设之前访问过的]]></description><category></category></item><item><title><![CDATA[最长公共子序列LCS（动态规划基础）]]></title><link>https://blog.youkuaiyun.com/kunikida/article/details/7726332</link><guid>https://blog.youkuaiyun.com/kunikida/article/details/7726332</guid><author>kunikida</author><pubDate>Sun, 08 Jul 2012 13:44:09 +0800</pubDate><description><![CDATA[动态规划并不是一种算法，而是一种解决问题的思路。典型的动态规划问题，如最长公共子序列（LCS），最长单调子序列（LIS）等。
动态规划分为四个步骤：
1.判断问题是否具有最优子结构
这里以LCS为例，X={x1,x2,...,xi}；Y={y1,y2,...,yj}。最长公共子序列Z={z1,z2,...,zk}；
①如果xi=yj，那么zk=xi=yj，且Zk-1是序列Xi-1和Yj-1]]></description><category></category></item></channel></rss>