1,实现一个Memcpy函数(C/C++)
从源src所指的内存地址的起始位置开始,拷贝n个字节的数据到目标dest所指的内存地址的起始位置中。
dest和src没有重叠或者dest在左有部分重叠我们都是用从前往后复制。如果dest在右并且有部分重叠,我们选用从后往前复制。
2,给定N张扑克牌和一个随机函数,设计一个洗牌算法。
3,(智力题)25匹马,每个跑道最多能有1匹马进行比赛,最少比多少次能比出前3名,前5名?
4,100亿个整数,内存足够,如何找到中位数?内存不足如何找到中位数?
内存足够可以使用类似快速排序的方法;内存不足可以采用分桶法,例如字节的首位是0或1,然后缩小范围,直到可以在内存中运行。
5,请简述智能指针原理,并实现一个简单的智能指针。(C/C++)
6,如何处理循环引用问题。
垃圾回收中的引用计数法不能处理循环引用的问题,可以使用标记清除的算法从GCroot进行可达性分析。
7,单例模式,要求线程安全
8,如何定义一个只能在堆上(栈上)生成对象的类(C/C++)
9,引用和指针的区别
本质:引用是别名,指针是地址,具体的:
指针可以在运行时改变其所指向的值,而引用不会,它仅仅是一个别名
在参数传递时,引用会做类型检查,而指针不会
引用不能为空,指针可以为空
10(智力题)1000个灯围成一个环,初始状态是熄灭的,按下一个灯,它及它的左右两盏灯的状态会改变,问如何让所有的灯都亮?
依次按下每一个灯
11,(智力题)n条直线最多能将一个平面分成几部分?
f(n)=n(n+1)/2+1
12,(智力题)n个平面最多能将一个空间切成多少部分
13,n个人,其中只有一个明星,所有人都认识这个明星,这个明星其他人一个都也不认识,如何找到这个明星?如果n很大很大,如何改进你的算法。
线性扫描,两两比较,每次都能排除一个人,如果a认识b那么a就不是明星,如果a不认识b,那么b就不是明星。
14,给50个硬币,面值可以不同,排成一排,两个人轮流取,只能从两端取,先取的人如何保证取到的币值大于等于另一个人?
如果奇数位的数和比较大,则取第一个硬币,后面跟着取奇数位的硬币。如果偶数位的和比较大,则取最后一个硬币,后面跟着取偶数的硬币。
网友评论