<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lwoyvye]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lyh__521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lyh__521]]></copyright><item><title><![CDATA[myisam和innodb索引实现的不同]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50988675</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50988675</guid><author>lyh__521</author><pubDate>Sat, 26 Mar 2016 20:27:22 +0800</pubDate><description><![CDATA[转载：http://www.2cto.com/database/201211/172380.html




 myisam和innodb索引实现的不同




MyISAM引擎使用B+Tree作为索引结构，叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图：



这里设表一共有三列，假设我们以Col1为主键，则上图是一个MyISAM表的主索引（]]></description><category></category></item><item><title><![CDATA[编译器的工作过程]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50987888</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50987888</guid><author>lyh__521</author><pubDate>Sat, 26 Mar 2016 17:33:49 +0800</pubDate><description><![CDATA[转载：http://www.ruanyifeng.com/blog/2014/11/compiler.html




源码要运行，必须先转成二进制的机器码。这是编译器的任务。

比如，下面这段源码（假定文件名叫做test.c）。


#include stdio.h>

int main(void)
{
  fputs("Hello, world!\n", stdout);
 ]]></description><category></category></item><item><title><![CDATA[c 程序必须要从main函数开始执行么？]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50979427</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50979427</guid><author>lyh__521</author><pubDate>Fri, 25 Mar 2016 14:23:32 +0800</pubDate><description><![CDATA[这是在面试中被问到的一个问题，回答了是。这问题第一感觉答案就是否定的，一时也没想出来理由只能回答了是。当时太紧张了，其实回想一下汇编语言就该想到程序的入口地址是可以指定的，c语言编译器默认以main作为入口地址。网上查阅后，发现了 __attribute__ 这个关键字，它可以设置函数属性，变量属性，类型属性。参考：http://www.cnblogs.com/Anker/p/3462363.htm]]></description><category></category></item><item><title><![CDATA[C++为什么要引入静态成员函数]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50886233</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50886233</guid><author>lyh__521</author><pubDate>Mon, 14 Mar 2016 14:39:59 +0800</pubDate><description><![CDATA[在静态成员函数出来之前就已经有了静态成员变量。静态成员变量是为了为用户提供在类级别上访问，而不是类对象有关的数据。静态成员变量在编译期就存在了，而不像非静态成员变量只有实例化了对象才会给分配内存。静态成员变量是所有类对象共享的，例如，我们可以为类定义一个 static  int    n 来统计实例化了多少个对象，对象构造时 n++ , 析构时 n– 。但是，如果为类定义的静态成员变量是私有的（不希]]></description><category></category></item><item><title><![CDATA[c++对象模型]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50883539</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50883539</guid><author>lyh__521</author><pubDate>Mon, 14 Mar 2016 08:46:59 +0800</pubDate><description><![CDATA[参阅： 
http://blog.youkuaiyun.com/ljianhui/article/details/46408645环境：ubuntu15.04   、  gcc编译器做个简单的笔记：
  类内只保存非静态数据成员变量和虚函数表指针，虚函数表中按声明顺序依次保存所有的虚函数指针。其他的静态成员和静态成员函数、非静态成员函数在类外保存。
注：vptr 表示指向虚函数表的指针单独的类多继承布局：]]></description><category></category></item><item><title><![CDATA[GDB调试多线程及死锁]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50848751</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50848751</guid><author>lyh__521</author><pubDate>Thu, 10 Mar 2016 17:47:32 +0800</pubDate><description><![CDATA[参考文章：http://www.cnblogs.com/zhuyp1015/p/3618863.html我在这里总结一下：查看正在执行的所有线程
  info threads
切换到指定线程
  thread  ID     //这里的ID是info threads后各线程前面的序号
  
  break thread_test.c:123 thread all //在所有线程中相应的行上设置断点]]></description><category></category></item><item><title><![CDATA[初识protobuf]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50716144</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50716144</guid><author>lyh__521</author><pubDate>Mon, 22 Feb 2016 13:04:41 +0800</pubDate><description><![CDATA[这里（IBM）给出了protobuf的基本介绍和原理http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/安装
  开始按照上面IBM给出的文档安装了protobuf3.0版本，但是装完后生成的 .pb.cc 和 .pb.h 代码无法编译链接。不知道是静态链接库的问题还是源码包的问题。于是按照下面这篇博客成功安装了 protobuf2.6.1 。
h]]></description><category></category></item><item><title><![CDATA[C++的一些笔记]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50602844</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50602844</guid><author>lyh__521</author><pubDate>Thu, 28 Jan 2016 19:42:54 +0800</pubDate><description><![CDATA[发现一些小的知识点长期不用都得忘，决定再次遇到了一定要记录一下。
const 成员函数
const对象只能调用const成员函数。
const对象的值不能被修改，在const成员函数中修改const对象数据成员的值是语法错误
在const函数中调用非const成员函数是语法错误  任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时，不慎修改了数据成员，或者调用了其它]]></description><category></category></item><item><title><![CDATA[C语言一些少见但很有用的语法]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50597266</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50597266</guid><author>lyh__521</author><pubDate>Wed, 27 Jan 2016 23:23:52 +0800</pubDate><description><![CDATA[在阅读一些项目的源代码时，遇到了一些我平时很少见，但发现很有用的C语言语法，在此整理一下。
#undef我们平时用的都是#define，突然遇到了这个。。。其实，#undef 与 #define 相对应。#undef 的作用是取消已经有的宏定义。#include<stdio.h>
#define MAX 5
int main()
{
#undef     MAX
//    printf("%d\n]]></description><category></category></item><item><title><![CDATA[修改终端命令提示符颜色]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50499585</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50499585</guid><author>lyh__521</author><pubDate>Mon, 11 Jan 2016 21:05:50 +0800</pubDate><description><![CDATA[转载：http://www.centoscn.com/CentOS/2013/0418/321.html

相信很多人已经看厌了Linux已成不变的命令提示符的颜色，多数人要么使用默认的绿色，要么在使用PUTTY的时候设置成绿色的，不知道是否有人想到提示符可以设置成其他的颜色呢，本文就说明命令提示符变量PS1的设置。

1、PS1变量简介

PS1是Linux终端用户的一个环境变量，用]]></description><category></category></item><item><title><![CDATA[libevent安装]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50350938</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50350938</guid><author>lyh__521</author><pubDate>Fri, 18 Dec 2015 12:26:49 +0800</pubDate><description><![CDATA[查看是否已安装ls -al /usr/lib |grep libevent没有输出说明未安装下载进入官网 http://libevent.org/ 
我下载的是：libevent-2.0.22-stable.tar.gz 解压tar -zxvf libevent-2.0.22-stable.tar.gz 编译安装进入解压目录cd libevent-2.0.22-stable/编译安装./config]]></description><category></category></item><item><title><![CDATA[查找含有某字符串的所有文件(grep)]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50347691</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50347691</guid><author>lyh__521</author><pubDate>Thu, 17 Dec 2015 22:47:19 +0800</pubDate><description><![CDATA[比如想要查询当前目录下哪个文件中含有字符串 “PAGE”：

grep -n "PAGE" *




-n 显示行号

*   表示匹配所有文件

-r  递归查找




参阅：http://151wqooo.blog.51cto.com/2610898/1162118]]></description><category></category></item><item><title><![CDATA[追踪系统调用流程]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50332819</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50332819</guid><author>lyh__521</author><pubDate>Wed, 16 Dec 2015 20:47:02 +0800</pubDate><description><![CDATA[前言   我不是专业的内核研读者，只因自己的好奇心，想一探（IO多路复用）select系统调用的实现原理，于是一路追踪到其内核的底层调用。特此记录这一段学习过程。本机系统：ubuntu15.04 
内核版本：3.19.0-29-genericsys_select 哪去了？   当用户态使用系统调用的时候，操作系统会根据该函数的系统调用号找到其对应的底层函数(前缀 sys_ )去执行。比如当用户调用下]]></description><category></category></item><item><title><![CDATA[Linux异步IO+实例（POSIX IO与 libaio）]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50300379</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50300379</guid><author>lyh__521</author><pubDate>Mon, 14 Dec 2015 20:55:01 +0800</pubDate><description><![CDATA[异步IO基本API
  API函数
  说明  aio_read
  异步读操作
  aio_write
  异步写操作
  aio_error
  检查异步请求的状态
  aio_return
  获得异步请求完成时的返回值
  aio_suspend
  挂起调用进程，直到一个或多个异步请求已完成
  aio_cancel
  取消异步请求
  lio_list
  发起一系列异步I/O请求
上]]></description><category></category></item><item><title><![CDATA[LinuxC多线程求和]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50168315</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50168315</guid><author>lyh__521</author><pubDate>Thu, 03 Dec 2015 23:37:42 +0800</pubDate><description><![CDATA[我们要实现的是，使用多线程来计算 1 ～ n 范围的所有整数和。计算运行时间  因为要将普通求和程序与多线程作比较，所以先介绍一下如何计算程序运行的时间。获取时间函数：#include<sys/time.h>int gettimeofday(struct timeval*tv, struct timezone *tz);参数：
  其参数tv是保存获取时间结果的结构体，参数tz用于保存时区结果。tz]]></description><category></category></item><item><title><![CDATA[Linux用户管理]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50161305</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50161305</guid><author>lyh__521</author><pubDate>Thu, 03 Dec 2015 15:18:58 +0800</pubDate><description><![CDATA[useradd新建用户test (不创建主目录)
  sudo useradd test
新建用户test (并创建主目录等信息)
  sudo useradd  -m -s /bin/bash test
查看/etc/passwd查看/etc/shadow设置用户密码再看/etc/shadow新建用户（一次性配好所有环境）
  sudo adduser test
删除用户
  sudo userd]]></description><category></category></item><item><title><![CDATA[父子进程ID和进程收养问题(init与upstart)]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50148025</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50148025</guid><author>lyh__521</author><pubDate>Wed, 02 Dec 2015 14:39:03 +0800</pubDate><description><![CDATA[本文链接：http://blog.youkuaiyun.com/lyh__521/article/details/50148025孙子进程的父进程是谁？为了方便描述，这里将子进程中创建的子进程称为孙子进程。测试代码：/*
 * getpid() 获取当前进程PID
 * getppid() 获取父进程的PID
 */
#include<stdio.h>
#include<stdlib.h>
main()
{]]></description><category></category></item><item><title><![CDATA[64位系统下进程的内存布局]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50137057</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50137057</guid><author>lyh__521</author><pubDate>Tue, 01 Dec 2015 23:59:30 +0800</pubDate><description><![CDATA[环境
操作系统：ubuntu15.04
物理内存：4G
测试程序
#include<stdio.h>
#include<stdlib.h>int  a;
int  b=1;main()
{
    int  n = 0;
    char *p1 = NULL;
    char *p2 = NULL;
    const int s = 10;
    p1 = (char*)malloc(200]]></description><category></category></item><item><title><![CDATA[测试栈空间的大小]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50115943</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50115943</guid><author>lyh__521</author><pubDate>Mon, 30 Nov 2015 17:22:11 +0800</pubDate><description><![CDATA[比如局部变量是保存在栈空间中的，今天突然在想栈的上限是多大呢，什么时候才会栈溢出？ulimit 命令linux下使用ulimit 命令可以查看系统的很多上限值。
ulimit -a   查看所有ulimit -s   查看栈空间的大小
可以看到系统设置栈的上限是8M测试现在我们写个程序测试一下两种方法：1、第一种方法：最简单的是在函数或直接在main()函数里定义多个局部变量。局部变量一定要初始化，]]></description><category></category></item><item><title><![CDATA[64位系统下gcc按照32位编译c程序]]></title><link>https://blog.youkuaiyun.com/lyh__521/article/details/50113635</link><guid>https://blog.youkuaiyun.com/lyh__521/article/details/50113635</guid><author>lyh__521</author><pubDate>Mon, 30 Nov 2015 15:59:07 +0800</pubDate><description><![CDATA[有时候我们需要测试c代码在32位环境下的运行结果，这时候就需要gcc按照32位来编译c了。1、 安装sudo apt-get install lib32readline-gplv2-dev2、编译。加 -m32 参数gcc  -m32 hello.c]]></description><category></category></item></channel></rss>