曾经的面试题目总结

猴子分桃问题:

五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;.....其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?(朋友说,这是小学奥数题)。http://blog.csdn.net/v_july_v/article/details/6803368

每个猴平均分成5份,都多1个
那就从别处再弄4个桃子来
这样,第一个猴分的时候,正好能分成5份
拿走1份(包括原来多的那个)以后,弄来的4个桃子还在,
这样以后每个猴子分的时候也正好能分成5份
5^5-4=3121个 

2,数组的面试题目:http://www.cnblogs.com/graphics/archive/2010/08/24/1761620.html#link08

3,使用do while(0)把多条宏语句放在一起。http://chenshaochong1112.blog.163.com/blog/static/1707470472010899116427/

4,四种同步方式的区别:http://blog.csdn.net/renjwjx/article/details/3917407

5,理解递推(循环)和递归

走楼梯问题 / 费波纳茨序列:循环和递归写法,

int Fib(int n)
{
	if (n <= 0)
		return 1;
	else if ( n==1 )
		return 1;
	
	return Fib(n-1) + Fib(n-2);
}

int table[100] = {0};

int Fib1(int n)
{
	for (int i=2; i<=n; i++)
	{
		table[i] = table[i-1] + table[i-2];
	}

	return table[n];
}

long Fib2(int n)
{
	long n1 = 1;
	long n2 = 1;

	for (int i=3; i<=n; i++)
	{
		int temp = n2;
		n2 = n2 + n1;
		n1 = temp;
	}

	return n2;
}

辗转相除求最大公约数

二叉树的遍历:先序,中序,后序,层次。递归非递归

递归和栈:

   递归调用基于函数

6,整数拆分 4=1+1+1+1=1+1+2=1+3=2+2

 整数因式分解:12 = 2*2*3 分解成质因数乘积。

7,后缀数组 

求取:abcdcdabc中最长重复子串,abc。

abcdcdabc

bcdcdabc

cdcdabc

dcdabc

cdabc

dabc

abc

bc

c

8,字典树

 http://kymowind.blog.163.com/blog/static/18422229720114264416738/

 http://hi.baidu.com/sulipol/blog/item/ce9ae139e2ed39ffb311c7e0.html

9,求取数组中第二大元素,

1) 一次遍历O(n)

2) 建大顶堆,然后取第一个后调整大顶堆,O(n + lgn)

3) 建一个两个元素的小顶堆,O( 2n)

4) 分治思想,二分查找 O(n*lgn)

10,金条问题

你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。如果你只能将金条切割两次,你怎样分给这些工人?

切割两次,分出三块 1、2、 4。
第一天 付1
第二天 收回1,付2
第三天 付1(1+2)
第四天 收回1、2 付4
第五天 付1 (4+1)
第六天 收回1 付2(4+2)
第七天 付1 (4+2+1)

11,函数调用约定

http://www.cnblogs.com/StudyRush/archive/2011/03/06/1966553.html

http://hi.baidu.com/xy2401/blog/item/ac2a2e5ade3959cb9c8204c9.html

12,MFC消息机制:http://blog.163.com/zhoumhan_0351/blog/static/3995422720103821847339/,这篇博文中关于句柄和指针的讲解!

Win32的消息机制:http://www.cppblog.com/mzty/archive/2006/11/24/15619.html,这篇博文图画的不错。

13,句柄和指针

句柄是由系统分配的资源ID(我们认为它是一个标识某个系统资源的32位的整数),用于标识系统所分配的资源,这里的资源包含进程、线程等的广泛内容。句柄和指针都是地址。
句柄可以认为是某种意义上的指针,但不是指针;句柄是一些表的索引;也就是指向指针的指针(即二级指针),是windows系统在内存中维护的一个对象或一个窗口。因为以虚拟存储方式,需要调度页面,所以程序实际的物理地址是不断变化的,系统中用一个内存地址不变的表来维护这个变化的地址(进行登记),因此当访问到这个不变的表项时就能确定程序的物理地址(所以叫句柄为指向指针的指针。)
Win32里,句柄是指向一个“无类型对象”(void*)的指针,是一个4字节长的数据。
从构造上看,句柄是一个指针,尽管它没有指向用于存储某个对象的内存位置。事实上,句柄指向一个包含了对该对象进行的引用的位置。
句柄的声明是这样的: 
typedef void *HANDLE 
由于Windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本,这些运行的程序称为一个实例。为了对同一程序的多个副本进行管理,Windows引入了实例句柄。Windows为每个应用程序建立一张表,实例句柄就好象是这张表的一个索引。 
不同在于: 
1)句柄所指的可以是一个很复杂的结构,并且很有可以是与系统有关的,比如说上面所说的线程的句柄,它指向的就是一个类或者结构,他和系统有很密切的关系,当一个线程由于不可预料的原因而终止时,系统就可以回收它所占用的资源,如CPU,内存等;这个句柄中的某一些项,是与系统进行交互的。
2)指针也可以指向一个复杂的结构,但通常是用户定义的,所以必需的工作都要用户完成,特别是在删除的时候。

14,内核对象


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值