<script type="text/javascript"> </script> <script type="text/javascript"> </script> 搜狐 2010 校园招聘第一站北邮笔试题
转自 狼窝 http://blog.csdn.net/haoxing168
转载请注明出处
一.填空选择题。(好像是 20 多分)
太多了,忘了,总之是基础的啦,有看代码的题,有个 Python 脚本的没看懂
1 .以下协议中,报文头最短的协议是:
A.UDP B.TCP C.IP D. 以太网帧
8 20 20 10
所以, udp的报头最小。
2 .一个递归算法球时间复杂度,具体忘了,自己先考虑着吧
3.
二.名词解释。( 10 分,一题 1 分)
例如: COM = Component Object Model = 组件对象模型
1.ATL = active template library
2.SSH(JAVA) =
3.SVN = subversion
4.MSDN = microsoft software develop network
5,NAT = net address traslation
6,JVM = java vitural machine
7,CSS = cascading style sheets
8.AIO, = asynchronous input/ouput
9,AJAX = asynchronous javascript and xml
备注:总共 10 个,忘了一个,另外顺序和原题当然也不一样啦。
三.问答题。(好像是 42 分,第一题 6 分,其他三题 12 分)
1 .分别解释 const char* p, char const* p, char* p const 的作用和区别,如果是 java 程序员,比较 StringBuilder 和 StringBuffer 的区别
const char *p : p是一个指针,指向一个字符串常量
char const *p 同上
char *p const: p 是一个常量指针,指向一个字符串。
2 .有两个表,分别表示用户的发图记录和发帖记录,写一 SQL 语句,求发帖数最少的用户发的图片数 ,以下是表结构,其中两个表以 img_user,rev_user 关联。
表 image
|
表 revision |
如: select _______ as user_id, _______ as rev_count, _______ as img_count from ______
3 .对于函数 strtok 在多线程下会存在什么问题,应该如何解决。
备注: Strtok 是个字符串分割函数,搜狐原题中给了 C 和 JAVA 的实现代码,这个大家可以到网上找找,总之就是 strtok 函数中用到了一个静态变量,并且会读写这个静态变量,所以在多线程情况下是不安全的,需要同步。
4 .已知一个 N*N 矩阵,矩阵内的元素满足如下条件:对于任意的 i+j > x+y 则 Aij > Axy ,写一个算法,查找数 X 的位置,要求算法最优,写出时间复杂度。
备注:搜狐原题中给出了类似的一个矩阵,我肯定是忘了,不过不影响做题。
解答:
分析可以知道,这个矩阵式以副对角线的方向数值递增的。
于是可以用折半查找的方法,1, n ,等,每次沿着对角线的方向遍历一下看看是否又x的存在,如果x比期中最小值还小,那么在下半部分,如果比最大值还大,那么在上半部分,否则,就是没有找到。
时间复杂度,初步估计是 nlogn。
四.编程题。( 20 分,任选一个)
1 .旅行者问题,已知 N*N 的格子,旅行者要从格子的左上角走到右下角,格子中的数字代表格子中的金币数,其中 -1 是旅行者不能走的格子,旅行者需要 N-1 步能走到重点,这里的每一步可以是向下走一格,也可以是向右走任意格然后再向下走一格。写一算法,使得旅行者走过的路径中得到的金币数量最多。
1 | 4 | 4 | 1 |
1 | 1 | 2 | 100 |
2 | 2 | 1 | -1 |
1 | 2 | 1 | 1 |
备注:格子类似于上面的,但是具体数字和原题不一样,记不住了,大家将就看吧,最后的算法是一样的,不影响算法的编写。
解答:
用动态规划的方法:做一个N,N的矩阵 G
G(i,j) 为当前走到i,j 时所能取得的最大的收益。
G(i,j) = max{G(i,j-1)+a(i,j), G(i-1, j)+a(i,j)}
2 .已知一个十二进制数,用字符串表示,如 ”11” ,写一个函数,将其转为 long 型的 10 进制数,如:字符串 ”11” ,最后转为 13(10) ,函数原型为: long convert(const char* pStr);
解答:
先求出字符串的长度。
然后按照转换公式计算即可。
long convert(const char* pStr)
{
int len = strlen(pStr);
long sum = 0;
int num = 0;
for(int i = 0; i < len; i ++)
{
switch( pStr[i])
{
case 'A': num = 10;
break;
case 'B': num = 11;
break;
default: num = pStr[i] - '0';
break;
}
sum = sum * 12 + num;
}
return sum;
}