A Za, A Za, Fighting...

坚信:勤能补拙

2011好题收集 - 给C瓜同学吧 [zz]

给C瓜同学吧

C瓜同学一直关注这个我这个小地方,下面是一些我面试中或者和同学讨论的一些不错的面试题,备份一下,也希望对你有用。

1:C++的多态是如何实现的?如果你用C如何来实现面向对象的多态?
解:
C++多态的实现主要依赖虚函数表,以及每个对象中指向虚函数表的指针
至于如何用C来实现面向对象的多态,我觉得比较靠谱的方法是函数指针,通过赋予函数指针不同的函数(地址)来调用不同的函数,得到不同的结果

2:判断一个有向图中是否有环。上篇文章里面写的那个杯子倒水问题。给一个都是正整数的数组,和一个正整数sum,求是否存在和为sum的子数列。
解:
【判断一个有向图是否有环】

【杯子倒水问题】
把所有可能的操作列出来,宽度优先搜索,从初始状态到结束状态

【给一个都是正整数的数组,和一个正整数sum,求是否存在和为sum的子数列】

联想到的问题有:
a. 给一个都是正整数的数组,是否存在两个数的和为某个给定的sum? 三个数呢?
针对两个数的情况,可以先排序,然后一个指针front指向第一个元素(最小),一个指针tail指向最后一个元素(最大),如果*front + *tail < sum, ++front, 如果*front + *tail > sum, --tail;
如果三个数,或者N个数,该如何做?

动态规划,类似于01背包问题
f[i][k]表示前i个元素中任意k个元素的和的集合,那么有:
                 f[i][k] = f[i-1][k] + (f[i-1][k-1] + array[i])
or:
f[i][v]表示前i个元素中是否存在和的v的子数列,那么有:
                 f[i][v] = 1, only if f[i-1][v]=1 or f[i-1][v-array[i]]=1

3:两个有大量id的集合A和B,数量上亿级,如何求出两个集合的交集,A中有的B中没有的,和B中有的A中没有的集合。
涉及海量数据处理: 二分搜索、位图Bitmap、哈希Hash、字典树、分成若干小文件+多路归并... 

4:设计实现一个管理内存的小模块,接口为void* checkout(size_t size), void checkin(void* ptr)。

5: 设计一个数据结构,存储一副象棋子的摆放,尽量压缩空间,使得方便通过传输到另外一台机子上然后恢复棋盘。

6:数组的众数问题,最长递增子序列问题。找大量数据中前k个大的数。找大量数据中第k大的数。

7:一个平面中有很多点,用最快的算法找出相隔最近的两个点。

8:select/poll和epoll,基本互联网公司都会提到这个东西。

9:给敏感词列表,和一大段文本,考虑一个敏感词过滤的算法。

10:海量数据问题,很多,一般方法就为分治、hash、位图。

很多没有标准答案,面试过程中的探讨很重要。找工作不难,找份好工作还是难的,基础知识很重要,数据结构和算法、操作系统、编程语言的掌握,数据库和网络。可以根据自己的喜好,偏向于某个方向。


转自: http://www.moorekang.com/2010/10/27/forc.html

posted on 2011-09-22 23:36 simplyzhao 阅读(233) 评论(0)  编辑 收藏 引用 所属分类: R_找工复习2011


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜