<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[My_Notebook]]></title><description><![CDATA[比较杂乱的知识碎片，以后会抽个时间好好整理，要不没有办法给人看~吼吼~]]></description><link>https://blog.youkuaiyun.com/echo_qiang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; echo_qiang]]></copyright><item><title><![CDATA[大型网站架构演变和知识体系]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/8150683</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/8150683</guid><author>echo_qiang</author><pubDate>Mon, 05 Nov 2012 21:46:26 +0800</pubDate><description><![CDATA[大型网站架构演变和知识体系
之前也有一些介绍大型网站架构演变的文章，例如LiveJournal的、ebay的，都是非常值得参考的，不过感觉他们讲的更多的是每次演变的结果，而没有很详细的讲为什么需要做这样的演变，再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术，于是有了写这篇文章的想法，在这篇文章中 将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的]]></description><category></category></item><item><title><![CDATA[java map]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/7678766</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/7678766</guid><author>echo_qiang</author><pubDate>Wed, 20 Jun 2012 09:54:02 +0800</pubDate><description><![CDATA[Map.Entry 类使用简介(转)




你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦？使用Map.Entry类，你可以得到在同一时间得到所有的信息。标准的Map访问方法如下：
Set keys = map.keySet( );
if(keys != null) {
Iterator iterator = keys.iterator( );
while(it]]></description><category></category></item><item><title><![CDATA[JDK安装方法]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/7523402</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/7523402</guid><author>echo_qiang</author><pubDate>Mon, 30 Apr 2012 02:08:33 +0800</pubDate><description><![CDATA[JAVA_HOME指明JDK安装路径，就是刚才安装时所选择的路径（假设安装在D:\jdk1.4），此路径下包括lib，bin，jre等文件夹（此变量最好设置，因为以后运行tomcat，Eclipse等都需要依靠此变量）。

Path使得系统可以在任何路径下识别java命令，设为：%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 
CLASSPATH为java加载类(cl]]></description><category></category></item><item><title><![CDATA[详解C#委托，事件与回调函数]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6996650</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6996650</guid><author>echo_qiang</author><pubDate>Mon, 21 Nov 2011 14:55:00 +0800</pubDate><description><![CDATA[.Net编程中最经常用的元素，事件必然是其中之一。无论在ASP.NET还是WINFrom开发中，窗体加载(Load),绘制(Paint),初始化(Init)等等。“protected void Page_Load(object sender, EventArgs e)”这段代码相信没有人不熟悉的。细心一点一定会发现，非常多的事件方法都是带了“object sender, EventArgs e”这]]></description><category></category></item><item><title><![CDATA[回调函数]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6996637</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6996637</guid><author>echo_qiang</author><pubDate>Mon, 21 Nov 2011 14:51:17 +0800</pubDate><description><![CDATA[一，回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用（如定时器事件回调处理、用回调函数记录某操作进度等）变得非常方便和符合逻辑，那么它的内在机制如何呢，怎么定义呢?它和其它函数（比如钩子函数）有何不同呢？ 使用回调函数实际上就是在调用某个函数（通常是API函数）时，将自己的一个函数（这个函数为回调函数）的地址作为参数传递给那个函数。 而那个函数在需要的时候，利用传递的地址调用回调函数]]></description><category></category></item><item><title><![CDATA[C#回调函数]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6996595</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6996595</guid><author>echo_qiang</author><pubDate>Mon, 21 Nov 2011 14:42:11 +0800</pubDate><description><![CDATA[C#回调函数应用示例，形象比喻方法助理解，整理了一个简单的例子来说明回调函数的用法: 
namespace CallBackFunction 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            Program prog = new Program()]]></description><category></category></item><item><title><![CDATA[TCP/IP四层模型和OSI七层模型]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6749861</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6749861</guid><author>echo_qiang</author><pubDate>Mon, 05 Sep 2011 15:18:03 +0800</pubDate><description><![CDATA[TCP/IP四层模型和OSI七层模型
    表1-1是 TCP/IP四层模型和OSI七层模型对应表。我们把OSI七层网络模型和TCP/IP四层概念模型对应，然后将各种网络协议归类。
    表1-1  TCP/IP四层模型和OSI七层模型对应表





OSI]]></description><category></category></item><item><title><![CDATA[抽象类和接口的区别与联系]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6729316</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6729316</guid><author>echo_qiang</author><pubDate>Mon, 29 Aug 2011 14:40:11 +0800</pubDate><description><![CDATA[文章是转载的：      

一、抽象类：
      抽象类是特殊的类，只是不能被实例化；除此以外，具有类的其他特性；重要的是抽象类可以包括抽象方法，这是普通类所不能的。抽象方法只能声明于抽象类中，且不包含任何实现，派生类必须覆盖它们。另外，抽象类可以派生自一个抽象类，可]]></description><category></category></item><item><title><![CDATA[动态分配二维数组]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6450635</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6450635</guid><author>echo_qiang</author><pubDate>Fri, 27 May 2011 17:28:00 +0800</pubDate><description><![CDATA[在C语言中动态的一维数组是通过malloc动态分配空间来实现的，动态的二维数组也可以通过malloc动态分配空间来实现。

　　实际上，C语言中没有二维数组，至少对二维数组没有直接的支持，取而代之的是“数组的数组”，二维数组可以看成是由指向数组的指针构成的数组。对于一个二维数组p[i][j]，编译器通过公式*(*(p+i)+j)求出数组元素的值：

　　1、p+i 计算行指针。

　　2、*(P+i) 具体的行，是一个指针，指向该行首元素地址。

　　3、*(P+i)+j 得到具体元素的地址]]></description><category></category></item><item><title><![CDATA[科技英语论文的写作要点]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6431414</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6431414</guid><author>echo_qiang</author><pubDate>Thu, 19 May 2011 10:23:00 +0800</pubDate><description><![CDATA[<br />总体原则（3C）：Correct (正确)，Clear (清楚)；Concise (简洁)。<br /> <br />1 论文题名<br />
1.1 基本要求<br />(1) 准确 (Accuracy)。题名要准确地反映论文的内容。作为论文的“标签”，题名既不能过于空泛和一般化，也不宜过于烦琐，使人得不出鲜明的印象。如果题名中无吸引读者的信息，或写得不堪理解。为确保题名的含义准确，应尽量避免使用非定量的、含义不明的词，如"rapid"，"new"等；并力求用词具有专指性，如"a vanad]]></description><category></category></item><item><title><![CDATA[关于函数返回值的几种情况]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6428625</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6428625</guid><author>echo_qiang</author><pubDate>Wed, 18 May 2011 09:29:00 +0800</pubDate><description><![CDATA[<br />在一个函数的内部，return的时候返回的都是一个拷贝，不管是变量、对象还是指针都是返回拷贝，但是这个拷贝是浅拷贝。<br /> <br />1.     如果返回一个基本类型的变量，比如：<br />int a;<br />a = 5;<br />return a;<br /> <br />那么就会a的一个拷贝，即5返回，然后a就被销毁了。尽管a被销毁了，但它的副本5还是成功地返回了，所以这样做没有问题。<br /> <br />2.     但是对于非动态分配(new/malloc)得到的指]]></description><category></category></item><item><title><![CDATA[序列化实例]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6319478</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6319478</guid><author>echo_qiang</author><pubDate>Wed, 13 Apr 2011 02:17:00 +0800</pubDate><description><![CDATA[<br />#include <stdlib.h><br />#include<stdlib.h><br />#include<time.h><br /><br />#define random(x) (rand()%x)<br /><br />#define OUT<br />#define IN<br /><br />typedef struct _XY<br />{<br />   int nX;<br />   struct _XY* pNext;<br />}XY,* PXY;<br />type]]></description><category></category></item><item><title><![CDATA[结构对齐]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6312120</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6312120</guid><author>echo_qiang</author><pubDate>Sat, 09 Apr 2011 17:07:00 +0800</pubDate><description><![CDATA[有关字节对齐的介绍：什么是对齐，以及为什么要对齐：现代计算机中内存空间都是按照byte划分的，从理论上讲似乎对任何类型的变量的访问可以从任何地址开始，但实际情况是在访问特定变量的时候经常在特定的内存地址访问，这就需要各类型数据按照一定的规则在空间上排列，而不是顺序的一个接一个的排放，这就是对齐。对齐的作用和原因：各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况，但是最常见的是如果不按照适合其平台要求对数据存放进行对齐，会在存取效率上]]></description><category></category></item><item><title><![CDATA[man of grep]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6297303</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6297303</guid><author>echo_qiang</author><pubDate>Sat, 02 Apr 2011 10:44:00 +0800</pubDate><description><![CDATA[<br />GREP <br /> <br /> <br />GREP <br /> <br /> Section: User Commands (1)  <br /> <br />NAME <br /> <br /> grep, egrep, fgrep - 打印匹配给定模式的行  <br /> <br />总览 SYNOPSIS <br /> <br />grep [options] PATTERN [FILE. . .]  <br /> grep [options] [-e PATTERN | -f ]]></description><category></category></item><item><title><![CDATA[回溯法]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6266303</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6266303</guid><author>echo_qiang</author><pubDate>Mon, 21 Mar 2011 22:20:00 +0800</pubDate><description><![CDATA[<br /><br />回溯法<br />    
回
溯法也称为试探法，该方法首先暂时放弃关于问题规模大小的限制，并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时，就选择下一个
候选解；倘若当前候选解除了还不满足问题规模要求外，满足所有其他要求时，继续扩大当前候选解的规模，并继续试探。如果当前候选解满足包括问题规模在内的
所有要求时，该候选解就是问题的一个解。在回溯法中，放弃当前候选解，寻找下一个候选解的过程称为回溯。扩大当前候选解的规模，以继续试探的过程称为向前
试探。 ]]></description><category></category></item><item><title><![CDATA[  C++内存分配秘籍—new，malloc，GlobalAlloc详解]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6255132</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6255132</guid><author>echo_qiang</author><pubDate>Thu, 17 Mar 2011 01:22:00 +0800</pubDate><description><![CDATA[<br />        C++内存分配秘籍—new，malloc，GlobalAlloc详解<br />
                                                   _______只为因内存分配而无法入眠的程序员
<br />一。关于内存<br />　1、内存分配方式<br />　　内存分配方式有三种：<br />　　（1）从静态存储区域分配。内存在程序编译的时候就已经分配好，这块内存在程序的整个运行期间都存在<br />。例如全局变量，static变量。<]]></description><category></category></item><item><title><![CDATA[container_of()理解]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6233389</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6233389</guid><author>echo_qiang</author><pubDate>Wed, 09 Mar 2011 10:20:00 +0800</pubDate><description><![CDATA[<br /><br /><br /><br />
问题：如何通过结构中的某个变量获取结构本身的指针？？？<br /><br />
关于container_of见kernel.h中:<br />
/**<br />
* container_of - cast a member of a structure out to the containing structure<br />
* @ptr:     the pointer to the member.<br />
* @type:     t]]></description><category></category></item><item><title><![CDATA[linux内核链表]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6233117</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6233117</guid><author>echo_qiang</author><pubDate>Wed, 09 Mar 2011 08:14:00 +0800</pubDate><description><![CDATA[<br />国防科技大学计算机学院<br />2004 年 8 月 本文详细分析了 2.6.x 内核中链表结构的实现，并通过实例对每个链表操作接口进行了详尽的讲解。<br />一、 链表数据结构简介<br />链表是一种常用的组织有序数据的数据结构，它通过指针将一系列数据节点连接成一条数据链，是线性表的一种重要实现方式。相对于数组，链表具有更好的动态性，建立链表时无需预先知道数据总量，可以随机分配空间，可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。<br /]]></description><category></category></item><item><title><![CDATA[linux 链表实例应用程序]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6233057</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6233057</guid><author>echo_qiang</author><pubDate>Wed, 09 Mar 2011 02:07:00 +0800</pubDate><description><![CDATA[/*********************************************************************
 *                
 * Filename:      pfile.c
 * Version:       1.0
 * Description:   Demo for Linux LIST utility
 * Compilation:   gcc –D__KERNEL__ -I/usr/src/linux/include pfile.c]]></description><category></category></item><item><title><![CDATA[scanf的注意细节]]></title><link>https://blog.youkuaiyun.com/echo_qiang/article/details/6214984</link><guid>https://blog.youkuaiyun.com/echo_qiang/article/details/6214984</guid><author>echo_qiang</author><pubDate>Tue, 01 Mar 2011 11:18:00 +0800</pubDate><description><![CDATA[scanf()函数的用法和实践daizh摘要：本文阐述了基于ANSI，Win 95，Win NT上的 C/C++语言中scanf()函数的用法，以及在实际使用中常见错误及对策。关键词：scanf()一、             序言在优快云论坛的C/C++版块，我时常见到“对于scanf()函数的用法、及出现的各种错误而迷惑”的帖子，萌发了我写这篇文章的念头。文
中结合自身在学习和编程中对它的认识和体会，以具体示例阐述问题，目的在于使得初学者能够正确使用scanf()函数，少走不必要的弯路。二、    ]]></description><category></category></item></channel></rss>