方法调用的方式
摘要:1、方法调用的方式有:像过程一样调用,嵌套调用,递归调用,回调方法。2、考虑回调方法,回调方法的典型情况是:事件驱动程序和多线程。事件驱动比如:按钮的点击事件。多线程,就是把方法传递给线程。3、考虑,一个方法同时传递给多个线程,这个方法的执行流会重叠,不可预料。举个例子,几个人同时使用一个机器加工原料,肯定乱套。因此,线程方法不同于一般的方法调用,可以认为,每个线程都有自己的调用堆栈。对于共享数据,需要进行同步控制。同时,应该避免使用局部static对象,因为一个线程的修改,其他的线程也受到影响。
阅读全文
posted @
2014-03-03 18:41
Andy Niu
阅读(612)
推荐(0) 编辑
100亿个数字找出最大的10个
摘要:1、首先一点,对于海量数据处理,思路基本上是确定的,必须分块处理,然后再合并起来。2、对于每一块必须找出10个最大的数,因为第一块中10个最大数中的最小的,可能比第二块中10最大数中的最大的还要大。3、分块处理,再合并。也就是Google MapReduce 的基本思想。Google有很多的服务器,每个服务器又有很多的CPU,因此,100亿个数分成100块,每个服务器处理一块,1亿个数分成100块,每个CPU处理一块。然后再从下往上合并。注意:分块的时候,要保证块与块之间独立,没有依赖关系,否则不能完全并行处理,线程之间要互斥。另外一点,分块处理过程中,不要有副作用,也就是不要修改原数据,否则
阅读全文
posted @
2014-03-02 15:58
Andy Niu
阅读(17822)
推荐(3) 编辑
【转】C++笔试题汇总
摘要:原文:http://www.cnblogs.com/ifaithu/articles/2657663.htmlC#C++C多线程面试1.static有什么用途?(请至少说明两种)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用2.引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针
阅读全文
posted @
2014-02-25 19:21
Andy Niu
阅读(342)
推荐(0) 编辑
【转】c++笔试题
摘要:原文:http://blog.csdn.net/dongfengsun/article/details/1541926①链表反转单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:struct linka {int data;linka* next;};void revers
阅读全文
posted @
2014-02-25 19:19
Andy Niu
阅读(663)
推荐(0) 编辑
String类的实现
摘要:1、在类中可以访问private成员包括两层含义:可以访问this指针的private成员;可以访问同类对象的private成员。2、这里的String可以认为是个资源管理类,内部有个char指针,在堆上分配对象,而且对于String应该是深复制,不是复制指针,而是要复制指针指向的内容。String类的定义(头文件): 1 #ifndef String_H_ 2 #define String_H_ 3 class String 4 { 5 public: 6 String(const char* src); 7 String(const String& rhs); 8 String&a
阅读全文
posted @
2014-02-24 19:51
Andy Niu
阅读(374)
推荐(0) 编辑
理解 strcpy方法
摘要:1 char* strcpy(char* strDest, const char* strSrc)2 {3 assert((strDest!=NULL) && (strSrc !=NULL)); //strDest和strSrc不为空4 char* address = strDest; //保存strDest,用于返回5 while( (*(strDest++) = *(strSrc++)) != '\0' ); //逐个字符赋值6 return address; //返回地址 7 }注意:1、栈上的char数组,数组名就是一个指针,这个指针的指向不...
阅读全文
posted @
2014-02-24 19:01
Andy Niu
阅读(250)
推荐(0) 编辑
多线程笔试
摘要:1、首先考虑,什么情况下使用多线程? 第一种情况:做事情A的过程中,顺便去做事情B,不需要B完成,可以接着做A余下的部分。这种情况下,对于事情B启动一个线程,往往需要传入一个回调方法,等事情B完成后,在主线程上执行回调方法。 第二种情况:事情A和事情B同时做,他们访问同一块数据,需要对这块数据加锁。2、考虑下面的需求,两个线程t1,t2,修改同一个数据,t1每次增加1,t2每次减2,怎么做? a、首先肯定要准备两个方法Add1和Sub2,分别传给t1,t2; b、准备共享资源和互斥体mutex(也就是值为1 的信号量); c、Add1和Sub2方法内分别加锁,在加锁的语句块内,修改共...
阅读全文
posted @
2014-02-21 20:01
Andy Niu
阅读(540)
推荐(0) 编辑
BOOL,int,float,指针变量与零值比较的if语句
摘要:1、注意这里说的是,与零值比较,而不是与零比较。2、对于int类型,与零值比较就是: if(var == 0) //零值3、对于bool类型,零值表示false,任何非零值表示true,因此使用: if(!var) //零值4、对于float,计算机无法表示准确的浮点数,比如大家都知道:1.0/3 * 3 !=1,因此需要判断变量是否大于一个很小的负数并且小于一个很小的正数。 const float f = 0.000001; if(var>=-f && var<f) //零值5、对于指针,零值就是null,因此应该与null比较。 if(var ==null) /
阅读全文
posted @
2014-02-20 20:49
Andy Niu
阅读(929)
推荐(0) 编辑
有关单向链表的题目
摘要:1、编码的关键是思路,思路不对,不可能编出正确的代码。考虑下面两个关于单向链表的题目:2、单向链表,如何判断是否构成环形? a、思路一:常规做法,建个集合,遍历单向链表,集合没有包含元素,添加进去集合,集合包含元素直接返回true,跳出遍历,返回false。 b、思路二:使用快慢指针,建立两个节点,n1从head开始,n2从head->next开始,while(n1 && n2),n1每次走一步,n2每次走两步。如果n2先走到null,说明没有环。如果n1==n2,说明有环,n2又从后面追上来。3、对于单向链表,查找倒数第K个节点。 a、思路一:先计算节点个数,倒数第K个
阅读全文
posted @
2014-02-20 20:29
Andy Niu
阅读(272)
推荐(0) 编辑
【转】C++ 笔试面试题目
摘要:原文:http://blog.csdn.net/txgc1009/article/details/6700830许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。 分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增.
阅读全文
posted @
2014-01-23 19:08
Andy Niu
阅读(407)
推荐(0) 编辑