百度笔试题

一、选择题:15分 共10题
1.    已知一个线性表(38,25,74,63,52,48),采用的散列函数为Hash($Key)=$Key mod 7,将元素散列到表长为7的哈希表中存储。请选择后面两种冲突解决方法分别应用在该散列表上进行等概率成功查找的平均查找长度,拉链法   ,线性探测法    .
A. 1.0            B. 1.5           C. 1.7           D. 2.0          E. 2.3        
F. 7/6            G. 4/3           H. 3/2

2.    需要将OS缓冲区的数据刷新到硬盘,可以调用的函数有(多选):
A.fflush()     B. fsync()       C. sync()        D.writev()

3.    下面哪个shell语句不能打印出用户主目录的路径?
A. echo “$HOME”              B. echo ~       
C. echo `$HOME`              D. echo $HOME

4.    最坏情况下,合并两个大小为n的已排序数组所需要的比较次数 
A.2n              B.2n-1            C.2n+1             D.2n-2

5.    一个B类网的子网掩码是255.255.240.0,这个子网能拥有的最大主机数是:
A. 240           B. 255            C.4094           D. 65534

6.    以下代码执行后,val的值是___:
unsigned long val = 0;
char a = 0x48;
char b = 0x52;
val = b << 8 | a;
A  20992        B  21064         C   72            D 0

7.    内存的速度远远高于磁盘速度,所以为了解决这个矛盾,可以采用:
A 并行技术       B 虚存技术         C 缓冲技术        D 通道技术

8.    以下代码打印的结果是(假设运行在i386系列计算机上):
    struct st_t
    {
        int    status;
        short* pdata;
        char   errstr[32];
    };

    st_t  st[16];
    char* p = (char*)(st[2].errstr + 32);
    printf("%d", (p - (char*)(st)));

A   32             B 114
C   120            D 1112

9.    同一进程下的线程可以共享以下
A. stack            B. data section
C. register set        D. thread ID

10.    以下哪种操作最适合先进行排序处理? 
A 找最大、最小值                B 计算算术平均值 
C 找中间值                      D 找出现次数最多的值

二、简答题:20分,共2题

1.    (6分)下面是一个http请求:
    GET /baidu/blog/item/6605d1b4eb6433738ad4b26d.html HTTP/1.1
    Host: hi.baidu.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Language: zh-cn,zh;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://hi.baidu.com/baidu
    Cookie: BAIDUID=AFB70E986AC48B336ABAB7505CDD1C76; 
    
    请解释以下各字段基本含义: Host、User-Agent、Accept-Charset、Connection、Referer、Cookie
 

2.    (14分)函数A将字符串str1转成小写,并打印出转化前后的字符串。另外,改错时不能改变函数的接口和主要思路。改错时,请指出行号。
1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4
 5 char*   str1   = "ABDFLjlero我们都是saf";
 6
 7 char*  ToLower(char s[])
 8 {
 9     static size_t i=sizeof(s);
10     
11     for (i; i>=0; i--) {
12         if (s[i]>"A" && s[i]<"Z") {
13             s[i] += 26;
14         }
15     }
16     return s;
17 }
18
19 int A()
20 {
21     printf("old str[%s] after lower[%s]n", str1, ToLower(str1));
22 }

三、编程题:30分 共1题
注意:要求提供完整代码,如果可以编译运行酌情加分。

1.    两个已排序的整型数组,求交集,最快算法
输入:两个已排序的整型数组(int a[m], b[n])
输出:两个数组的交集

四、设计题:35分 共1题
注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。
1.    考虑一个字符串替换的过程,在一个文本文件中含有一些文本内容和一些需要替换的变量,变量的格式为“$Var$”,原来的“$”使用“$$”进行转义,原来的“$$”表示为“$$$”。我们将含有变量的文件称为模板(文件名为t),文本文件的平均长度为100K。另外,还有一系列的变量文件,里面为变量名和变量值的对应关系(文件名为1.v , 2.v… n.v),每个变量文件包含的变量数在百万数量级,且变量排列次序不定。现要求将,模板里的变量分别用变量文件里的变量替换,并将生成的文件写成(1.r, 2.r… n.r)。
要求:从算法和实现上和实现技术上的细节对程序进行优化,尽量使程序高效。程序运行环境为2G内存,4CPU。阐明主要思路,给出伪码和说明,可以着重指出你使用的优化技术。
例子:模板文件为
This is an $FF$ $$. I like $FF$ and $FA$。
变量文件为
1.v
FF : banana
FA : apple
2.v
FA: 苹果
FF : 香蕉
则生成文件为
1.r
This is an banana $$. I like banana and apple。
2.r
This is an香蕉 $$. I like 香蕉and苹果。 

一、选择题
1.BD
2.ABC
3.A
4.B
5.C
6.B
7.CD
8.C
9.B
10.C

二、简答题
1.
Host:请求报头域主要用于指定被请求资源的Internet主机和端口号
User-Agent:请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器
Accept-Charset:请求报头域用于指定客户端接受的字符集
Connection:普通报头域允许发送指定连接的选项
Referer:访问来源链接
Cookie:在客户的计算机上的以小文本文件存储信息

2.
5:由于str1指向的是常量,不允许修改,所以在此要修改为char str1[]="ABDFLjlero我们都是saf";
9:size_t i=strlen(s);
12:改为if (s[i]>='A' && s[i]<='Z'){
13:改为s[i] += 32;

三、编程题
1.
#include <stdio.h>

void GetIntersection(int a[], int m, int b[], int n)
{
 int i = 0;
 int j = 0;

 while(i < m)
 {
  while(j < n)
  {
   if(a[i] == b[j])
   {
    //交集
    printf("%d ",a[i]);
    j++;
    break;
   }
   else if(a[i] < b[j])
   {
    //从a的下一项开始匹配
    break;
   }
   else
   {
    //比较b的下一项
    j++;
   }
  }
  i++;
 }
}

int main(void)
{
 int a[]={1,2,3,4,5};
 int b[]={3,4,5,6};

 GetIntersection(a,5,b,4);
 
 return 0;
}

四、设计题

设计思路:
利用哈希表,正则表达式

数据结构:
可以采用stl中的map来存储变量名和变量值
设计结构体来保存变量文件与该map的对应关系
typedef struct _VarFile
{
 char *pFileName;
 map<string,string>[] varMapping;
}VarFile;

流程说明:
1.首先读取模板文件(t)中的需要替换的变量,用正则表达式去匹配出现的需替换的变量。将它们保存到list(lstNeed)中。
2.定义一个VarFile的结构体数组(设名称为vf),读取变量文件,把变量文件名与该文件下的变量对应关系保存到该数组中。
3.遍历上述数组(vf),针对lstNeed中的元素,设计合适的哈希函数,进行替换,然后写入文件。

伪码:
open(t);
add 需替换的变量 to lstNeed
for i=1:n
  open (i.v)
  add i.v & 变量名和变量值 to vf
end for
遍历vf
design hash function and then replace.

优化思路:
不必一次把所有的内容读入内存,可以采用缓存机制,分批读入,然后分批写入文件。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值