2012年8月10日
摘要:
在实际项目中对数据库进行查询是再常见不过的东西了,但是根据不同的条件查询所用的语句也是千差万别的,最常见的便是数据库中多表之间的联合查询。说到联合查询就不得不提一下查询语句中的表连接关系。我们所用的多表查询语句中表间关系无非有两种,一种为内连接(inner join),另一种为外连接(outer join)。具体细分一下外连接又可分为:左外连接(left join)、右外连接(right join)、全连接(full join),另外还常见的形式有left outer join,right outer join,full outer join。他们之间的具体关系可以下图简单表示: ...
阅读全文
posted @ 2012-08-10 11:38
Andy Niu
阅读(563)
推荐(0)
摘要:
abstract、virtual、override三个关键字涉及到继承,采用父亲和儿子类比。abstract : 父亲告诉儿子,我只是声明要做这个事情,自己没有做,所以你必须去做这个事情。virtual : 父亲告诉儿子三种情景,a) 这个事情我做了,如果你满意的话,就不需要做了,直接继承就好了;b) 这个事情我做了,如果你有些不满意,可以在我的基础上,修改一下(使用override重写);c) 这个事情我做了,如果你非常不满意,就自己重新做一遍吧(使用new 隐藏父亲的实现)。override : 父亲使用virtual修饰方法,儿子对父亲做的事情不满意,在父亲的基础上,使用override
阅读全文
posted @ 2012-08-10 11:34
Andy Niu
阅读(304)
推荐(0)
2012年7月16日
摘要:
比如:在Web开发中,我们使用CSS定义样式,在WPF中,也有与之完全对应的解决方案。C#中LINQ实质上就是“抄袭”SQL 的非过程化编码。
阅读全文
posted @ 2012-07-16 15:24
Andy Niu
阅读(968)
推荐(0)
2012年3月7日
摘要:
IP地址是一个规定,现在使用的是IPv4,既由4个0-255之间的数字组成,在计算机内部存储时只需要4个字节即可。在计算机中,IP地址是分配给网卡的,每个网卡有一个唯一的IP地址,如果一个计算机有多个网卡,则该台计算机则拥有多个不同的IP地址,在同一个网络内部,IP地址不能相同。IP地址的概念类似于电话号码、身份证这样的概念。由于IP地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在一定的对应关系。如果把IP地址类比成身份证号的话,那么域名就是你的姓名。一台拥有IP地址的主机可以提供许
阅读全文
posted @ 2012-03-07 16:24
Andy Niu
阅读(28108)
推荐(8)
2012年3月6日
摘要:
MSDN的解释:阻塞调用线程,直到某个线程终止时为止。首先明确几个问题:1、一个进程由一个或者多个线程组成,线程之间有可能会存在一定的先后关系和互斥关系。多线程编程,首先就是要想办法划分线程,减少线程之间的先后关系和互斥关系,这样才能保证线程之间的独立性,各自工作,不受影响。Google的MapReduce核心思想就是尽量减少线程之间的先后关系和互斥关系。2、无论如何地想办法,线程之间还是会存在一定的先后关系和互斥关系,这时候可以使用Thread.Join方法。3、一个线程在执行的过程中,可能调用另一个线程,前者可以称为调用线程,后者成为被调用线程。4、Thread.Join方法的使用场景:调
阅读全文
posted @ 2012-03-06 11:12
Andy Niu
阅读(14423)
推荐(8)
摘要:
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?2、某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?我们先回顾一下操作系统原理。操作系统中,CPU竞争有很多种策略。Unix系统使用的是时间片算法,而Windows则属于抢占式的。
阅读全文
posted @ 2012-03-06 09:56
Andy Niu
阅读(55314)
推荐(32)
2012年3月5日
摘要:
1、首先确定一点:同步安全,异步不安全。2、结合实例,针对下面的使用场景:妈妈做蛋糕给儿子吃。3、需求分析:(a)蛋糕的数量是共享数据,应该放入临界区。(b)妈妈做蛋糕的时候,儿子不能吃;儿子吃蛋糕的时候,妈妈不能做。(c)假设儿子很饿,妈妈做一个,儿子吃一个,妈妈做好一个后,等待儿子去吃,吃完后再去做,但是,如果儿子贪玩,很长时间都没吃完一个蛋糕,妈妈就不管了。继续做蛋糕。(d)有一点是肯定的:必须要蛋糕,儿子才能吃,也就是说,如果蛋糕没了,儿子必须等待妈妈做好蛋糕,并且必须一直等下去,知道妈妈做出蛋糕。(e)妈妈做好蛋糕后,通知儿子吃蛋糕;儿子吃完蛋糕后,通知妈妈继续做蛋糕。注意:为了避免
阅读全文
posted @ 2012-03-05 18:23
Andy Niu
阅读(794)
推荐(0)
摘要:
举例来说:程序员为女儿做蛋糕。1、程序员需要食谱,食谱上写出了需要哪些原料,如何做。食谱就是程序,原料就是数据,程序员就是CPU。程序员按照食谱、对原料进行加工,做蛋糕的过程就相当于CPU执行代码、操作数据的过程。做蛋糕的过程就是进程。2、做蛋糕可以分为几个小的步骤,这些步骤共同加工原料。每个小的步骤就是一个线程。比如做蛋糕进程可以分为以下几个线程:取原料(包括鸡蛋、面粉、奶油、糖、水等),混合原料,烘烤混合物。这些步骤之间存在一定的先后关系和互斥关系,比如:混合原料必须在取原料之后,二者不能同时进行。3、假设程序员做蛋糕的时候,淘气的儿子跑进来,对爸爸说,被蜜蜂蛰了(相当于进来一个优先级更高
阅读全文
posted @ 2012-03-05 16:54
Andy Niu
阅读(473)
推荐(1)
2012年2月10日
摘要:
软件测试的粒度分为:单元测试、软件集成测试、系统集成测试、系统测试。单元测试:可以理解为测试函数。软件集成测试:软件包含多个模块,软件集成测试就是 模块集成软件的过程中是否有错误,可以理解为测试函数的调用。系统集成测试:系统包含多个子系统,系统集成测试就是 子系统集成系统的过程中是否有错误,可以理解为测试子系统之间的调用。系统测试:测试整个系统。
阅读全文
posted @ 2012-02-10 17:20
Andy Niu
阅读(649)
推荐(0)
摘要:
1、定义与操作View Code 1 int i =5;2 int *p = // 这里的*表示p是指针,&是取地址操作符,取出i的地址。3 std::cout<<*p;// 这里的*是取内容操作符,取出指针p的内容。4 int &r = i; // 这里的&表示r是引用。 指针通过 -> 调用方法,引用通过 . 调用方法2、引用是弱化了的指针,体现在以下方面:(1)引用不能对地址操作;(2)引用不能为空,只能在定义时初始化一次,不能改变。(注:这一点和C#中的引用不同,C#中的引用可以为null,也可以指向另一个对象)。
阅读全文
posted @ 2012-02-10 16:42
Andy Niu
阅读(164)
推荐(0)