<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yake25的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yake25</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yake25]]></copyright><item><title><![CDATA[操作系统学习笔记——生产者与消费者，读者和写者]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7522375</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7522375</guid><author>yake25</author><pubDate>Sun, 29 Apr 2012 15:13:42 +0800</pubDate><description><![CDATA[i.                   生产者生产一条数据
1.      首先查看缓冲区能否放入数据，有没有空的位置，如果有往下执行，否则说明缓冲区全
满了，消费者可能干什么去了没有来取数据，所以生产者阻塞等待资源，当一定的时候被唤醒（有空的了）。在此处，生产者如果发现缓冲区已经满了，生产者阻塞在此处。
2.      之后查看临界区是否可用（有没有进程在临界区），否则必须等待使用权，当]]></description><category></category></item><item><title><![CDATA[操作系统学习笔记——进程互斥与同步]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7522369</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7522369</guid><author>yake25</author><pubDate>Sun, 29 Apr 2012 15:12:19 +0800</pubDate><description><![CDATA[1.    并发控制
l  当并发进程使用同一资源时，他们会发生冲突。
l  如果操作系统将资源分配给其中的某一个使用，另一个进程必须等待，直到申请的资源可用时，由操作系统分配给它。
l  如果竞争资源的进程太多，这些进程必须等待在一个队列里，如就绪队列，阻塞队列。
l  死锁的话，阻塞进程永远得不到申请的资源。
2.    竞争资源
l  竞争资源受限必须解决“互斥”问题。某些资源必]]></description><category></category></item><item><title><![CDATA[操作系统学习笔记——线程]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7522366</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7522366</guid><author>yake25</author><pubDate>Sun, 29 Apr 2012 15:11:00 +0800</pubDate><description><![CDATA[1.    多线程
l  操作系统引入进程的目的是，为了描述和实现多个程序的并发执行，以改善资源利用率级提高系统的吞吐量。
l  为什么引入线程？为了减少程序并发执行时系统所付出的额外开销，使操作系统具有更好的并发性。
l  进程的两个属性
n  进程是一个拥有资源的独立单位；
n  进程同时又是一个可以独立调度的基本单位。
2.        系统为进程进行的操作（进程带来的开销）]]></description><category></category></item><item><title><![CDATA[操作系统学习笔记——进程控制]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7522364</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7522364</guid><author>yake25</author><pubDate>Sun, 29 Apr 2012 15:09:59 +0800</pubDate><description><![CDATA[三  进程控制
1.    两种执行模式
l 系统模式（系统态，控制模式，内核模式）：
n 具有较高的特权。
n 运行系统特定的指令，包括读/写控制寄存器的指令，基本I/O指令以及与存储器管理有关的指令，及一些特定的内存区。
n 内核模式下的处理机及其指令、寄存器和内存收受到完全控制和保护
l 用户模式（或用户态）：
n 具有较低的特权。
n 用户程序一般运行在用户模式。]]></description><category></category></item><item><title><![CDATA[操作系统学习笔记——进程的状态]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7522361</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7522361</guid><author>yake25</author><pubDate>Sun, 29 Apr 2012 15:09:23 +0800</pubDate><description><![CDATA[1.    为什么要分开就绪和阻塞状态
       答：因为就绪态只需要等待处理机，而阻塞态可能在等待输入输出，即使分配给处理机也是徒劳，所以两状态图不妥。对于调度进程，只需要等待就绪队列里的进程，因为阻塞状态可以转换到就绪队列里去。
 
2.    进程五状态

 
1)       新状态：进程已经创建，但未被OS接纳为可执行进程。（还没有申请到相应的资源）。
2)]]></description><category></category></item><item><title><![CDATA[操作系统学习笔记——  进程的概述]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7522351</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7522351</guid><author>yake25</author><pubDate>Sun, 29 Apr 2012 15:07:20 +0800</pubDate><description><![CDATA[包括进程的概述、进程的状态、进程控制。参考书目：操作系统精髓与设计中文版第五版，操作系统（汤子赢）

  进程的概述
1.    进程的概念
l  定义：可并发执行的程序，在一个数据集合上的运行。
l  申请/拥有资源~调度资源（线程）
l  程序：静态概念，是指令和数据的集合，可上期存储
l  进程与程序对应关系
n  一个程序可以对应一个进程或多个进程
n  一个进程可以对应]]></description><category></category></item><item><title><![CDATA[getopt的用法]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7478153</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7478153</guid><author>yake25</author><pubDate>Thu, 19 Apr 2012 16:44:35 +0800</pubDate><description><![CDATA[转自： http://www.cnitblog.com/zouzheng/archive/2007/04/02/25034.html

getopt被用来解析命令行选项参数。就不用自己写东东处理argv了。
#include 
extern char *optarg;  //选项的参数指针
extern int optind,   //下一次调用getopt的时，从optind存储的位置]]></description><category></category></item><item><title><![CDATA[strlen和sizeof的区别]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7469700</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7469700</guid><author>yake25</author><pubDate>Tue, 17 Apr 2012 15:17:40 +0800</pubDate><description><![CDATA[一、sizeof
    sizeof(...)是运算符，在头文件中typedef为unsigned int，其值在编译时即计算好了，参数可以是数组、指针、类型、对象、函数等。
    它的功能是：获得保证能容纳实现所建立的最大对象的字节大小。
    由于在编译时计算，因此sizeof不能用来返回动态分配的内存空间的大小。实际上，用sizeof来返回类型以及静态分配的对象、结构或数组所占的]]></description><category></category></item><item><title><![CDATA[Thinking in c++学习笔记 5,6]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7463462</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7463462</guid><author>yake25</author><pubDate>Sun, 15 Apr 2012 19:21:42 +0800</pubDate><description><![CDATA[第5章     隐藏实现
1.      设置限定
         Cstruct无法控制客户程序员进行特殊的行为，无法控制客户程序员操作struct里的函数
2.      C++访问权限控制
         public成员：任何人都可以访问。类似于struct。
         private成员：只有自己可以访问，任何人都不可以访问，private是设计者与客户程序员之间的]]></description><category></category></item><item><title><![CDATA[char 与 unsigned char的本质区别]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7461276</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7461276</guid><author>yake25</author><pubDate>Sat, 14 Apr 2012 19:18:47 +0800</pubDate><description><![CDATA[http://www.cnblogs.com/qytan36/archive/2010/09/27/1836569.html


在C中，默认的基础数据类型均为signed，现在我们以char为例，说明(signed) char与unsigned char之间的区别 

首先在内存中，char与unsigned char没有什么不同，都是一个字节，唯一的区别是，char的最高位为符号位，]]></description><category></category></item><item><title><![CDATA[I/O重定向和管道：使用pipe、fork、exec详解。]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7447086</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7447086</guid><author>yake25</author><pubDate>Tue, 10 Apr 2012 21:03:42 +0800</pubDate><description><![CDATA[I/O重定向和管道：使用pipe、fork、exec详解。
要使who|sort用程序实现，需进行I/O重定向，参考了Unix/Linux编程实践教程，画了几个图来理解这个程序，可能会更好。
1.      当运行pipe(pipe_id)以及fork之后，父进程和子进程共享stdin、stdout和管道，如图所示：



2. 我们知道，可以设定子进程写，父进程读，也就是子进程执行w]]></description><category></category></item><item><title><![CDATA[unix编程学习路线图]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7423422</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7423422</guid><author>yake25</author><pubDate>Tue, 03 Apr 2012 13:30:20 +0800</pubDate><description><![CDATA[http://hi.baidu.com/tkblue/blog/item/98aef5cade45fb42f21fe795.html

建议学习路径：
　　首先先学学编辑器，vim, emacs什么的都行。
然后学make file文件，只要知道一点就行，这样就可以准备编程序了。
　　然后看看《C程序设计语言》K&R，这样呢，基本上就可以进行一般的编程了，顺便找本数据结构的书来看。]]></description><category></category></item><item><title><![CDATA[查找最小的k个元素（数组)]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7375700</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7375700</guid><author>yake25</author><pubDate>Tue, 20 Mar 2012 21:39:25 +0800</pubDate><description><![CDATA[题目：输入n个整数，输出其中最小的k个。
例如输入1，2，3，4，5，6，7和8这8个数字，则最小的4个数字为1，2，3和4。
 

以下内容转自：http://zhedahht.blog.163.com/blog/static/2541117420072432136859/




分析：这道题最简单的思路莫过于把输入的n个整数排序，这样排在最前面的k个数就是最小的k个数。只是]]></description><category></category></item><item><title><![CDATA[在二元树中找出和为某一值的所有路径（树）]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7375532</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7375532</guid><author>yake25</author><pubDate>Tue, 20 Mar 2012 21:02:59 +0800</pubDate><description><![CDATA[题目：输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
  10 
  / /  
 5 12   
 /  /   
4     7
则打印出两条路径：10, 12和10, 5, 7。

二元树节点的数据结构定义为：
struct BinaryTreeNode]]></description><category></category></item><item><title><![CDATA[求子数组的最大和]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7375120</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7375120</guid><author>yake25</author><pubDate>Tue, 20 Mar 2012 19:14:56 +0800</pubDate><description><![CDATA[#include 
#include 
using namespace std;

const int SIZE = 1024;

int main()
{
	int n, cnt = 0;
	int array[SIZE];
	int maxarray[SIZE];
	int beg = 0, last = 0;
	memset(array, 0, sizeof(array[0]) * SIZE]]></description><category></category></item><item><title><![CDATA[计算n bit的整数中有多少bit 为1]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7354445</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7354445</guid><author>yake25</author><pubDate>Wed, 14 Mar 2012 20:21:59 +0800</pubDate><description><![CDATA[例如“7”，里面有3个1:111；
移位，位运算比较方便。
n & (n-1)，那么二进制n从右往左第一个1变为0；#include 
using namespace std;

int main()
{
	int n;
	while(cin >> n)
	{
		int cnt = 0;
		/*
		while(n)
		{
			if(n & 1 == 1)
				cnt++;]]></description><category></category></item><item><title><![CDATA[腾讯实习生电面记录]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7354413</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7354413</guid><author>yake25</author><pubDate>Wed, 14 Mar 2012 20:06:27 +0800</pubDate><description><![CDATA[问题涉及：

C++三大特性 
const三种情况
 模板的用法 
stl容器 
遍历
 数据结构栈 
特定情况下的最高效排序 
多线程程序
 搜索，索引的概念
 linux如何查看CPU 内存 怎样安装程序
项目经验  技术专长


C++的基本知识知道，但涉及到继承，多态类，如果没做过项目什么的，没什么概念，
排序追求效率，往往空间换时间
STL容器常用了ve]]></description><category></category></item><item><title><![CDATA[将一个句子按单词反序]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7354319</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7354319</guid><author>yake25</author><pubDate>Wed, 14 Mar 2012 19:35:21 +0800</pubDate><description><![CDATA[将一个句子按单词反序。比如 “My name is daydayup”，反序后变为 “daydayup is name My”。
算法：首先将整个字符串逆置，然后对每个单词求逆


#include 
#include 
#include 
using namespace std;

const int SIZE = 100;

void swap(char &a, char &b)
{]]></description><category></category></item><item><title><![CDATA[Linux多线程概念]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7347944</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7347944</guid><author>yake25</author><pubDate>Tue, 13 Mar 2012 11:28:06 +0800</pubDate><description><![CDATA[1.  多线程与进程的区别（优点）
     1).  和进程相比，它是一种比较“节俭”的多任务操作方式。在Linux系统中，启动一个新的进程，必须分配给它独立到地址空间，建立众多的数据表来维护它的代码段、堆栈段和数据段，这是一种昂贵的多任务工作方式。
     2).  线程间方便的通信机制。对不同进程来说，它们具有独立的数据空间，要进行数据的传递只能通过进程间通信的方式进行，这种方式不仅费]]></description><category></category></item><item><title><![CDATA[1024! 末尾有多少个0？]]></title><link>https://blog.youkuaiyun.com/yake25/article/details/7346260</link><guid>https://blog.youkuaiyun.com/yake25/article/details/7346260</guid><author>yake25</author><pubDate>Mon, 12 Mar 2012 20:14:46 +0800</pubDate><description><![CDATA[末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数，所以我们只需统计因子5的个数。
是5的倍数的数有： 1024 / 5 = 204个
是25的倍数的数有：1024 / 25 = 40个
是125的倍数的数有：1024 / 125 = 8个
是625的倍数的数有：1024 / 625 = 1个
所以1024! 中总共有204+40+8+1=253个因子5。
也]]></description><category></category></item></channel></rss>