传说是百度的面试题

 一、选择题:15分   共10题    
  1. 任何一个基于“比较”的内部排序的算法,若对6个元素进行排序,则在最坏情况下所需的比较次数至少为____。    
  A.10               B.11                 C.21                   D.36    
   
  2. 关系模型有三类完整性约束,定义外键实现的是     完整性.    
  A.   实体完整性                             B.   参照完整性                  
  C.   用户定义的完整性                  D.   实体完整性、参照完整性和用户定义的完整性    
   
  3. 64位linux系统和机器,int类型、long类型分别占用多大的空间(字节数)    
  A.   4,4             B.   4,8                   C.   8,4                   D.   8,8      
   
  4. 下面说法正确的是:    
  A.   根据gprof统计的程序运行时函数调用次数及执行时间,进行程序代码优化,这是amdahl定律的应用    
  B.   计算机网络设备的缓冲区是时间和空间局部性原理的应用      
  C.   局域网内的计算机发送数据包的数学模型遵循泊松分布    
  D.   分支预测使用先前运行时得到的配置文件,这是依据正态分布    
   
  5. 下列叙述正确的是:    
  A.  #define   fun(x,y)   (x/y)    
  Int   I   =   fun(2+4,   3);    
  I   的值为2    
  B.var++   与   ++var   没有区别    
  C.C++程序,抛出异常时,一定会发生异常对象的拷贝过程    
  D.quick   sort   是一种稳定排序。    
   
  6. 上下文无关文法是一种____。    
  A   左线性文法       B   右线性文法         C   正则文法         D   以上都不上    
   
  7. 关系表达式   !(A&&(B||C))   和下面哪个表达式表达的意思一致:    
  A   (!(A&&B))||(!(A&&C))     B   (!(A&&B))&&((!A)||(!B))      
  C   (!(A||B))&&(!(A&&B))   D   (!A)||((!B)||(!C))    
   
  8. 设int   x=4;   则执行以下语句:   x+=x-=x-x--;后,x的值为    
  A.   -1;                   B.   5;               C.   7;               D.   11;    
   
  9. 以下IO函数中,哪个是流式IO函数()    
  A、read;             B、fread;       C、mmap;     D、recv;    
   
  10. 已知:    
  struct   st    
  {      
          int   n;    
          struct   st   *next;    
  };    
  static   struct   st   a[3]={1,&a[1],2,&a[2],3,&a[0]},*p;    
  如果下述语句的显示是2,则对p的赋值是____。    
  printf("%d",++(p->next->n));    
  A.   p=&a[0];         B.   p=&a[1];       C.   p=&a[2];       D.   p=*a;    
   
  二、简答题:20分,共2题    
   
  1. (10分)已知某种线上服务存在3种异常D1,   D2,   D3,根据每天在固定时间段长期人工监控的统计结果,3种异常的发生率是:D1   0.28%,   D2   0.12%,   D3   0.32%。现开发一种监控程序,分别对这三种异常做监控,如果发现某种异常就发出相应报警。记无异常为D4,无报警为A4。在各种异常情况下发出报警的溉率如下表:    
            D1         D2         D3       D4    
  A1     0.90     0.06     0.02     0.02    
  A2     0.05     0.80     0.06     0.01    
  A3     0.03     0.05     0.82     0.02    
  A4     0.02     0.09     0.10     0.95    
   
  请评价该监控程序的敏感性和正确性。    
   
  2. (10分)以下是一个常驻内存的C程序,请问程序中有什么问题?    
                    int   f(int   number)    
                    {    
                                        FILE   *   fp;    
                                        char   file_name[20];    
                                        int   sum=0;    
                                        for(int   i=0;   i<number;   i++)    
                                        {    
                                                          if(0==i%30)    
                                                          {     
                                                                sprintf(file_name, "file_%d.txt", i/20);     
                                                                fp=fopen(file_name,"r");     
                                                                 if(fp==NULL)   return   -1;    
                                                          }    
                                                          sum   +=   i;    
                                        }    
                                           
                                        fclose(fp);    
                                        return   sum;    
                    }    
   
  三、编程题:30分   共1题    
  注意:要求提供完整代码,如果可以编译运行酌情加分。    
   
  1. 一条1百万节点的单向链表,链表所有节点是按value字段从小到大的顺序链接;下面是一个节点的结构    
        typedef   struct   node_t{    
                int   value;       /*   节点排序字段   */    
                int   group;       /*   组号:   0,1,2,3,4,5,6,7,8,9   */    
                struct   node_t   *pnext;     /*   下个节点的指针   */    
        }node_t;    
        node_t   head;         /*该单向链表的头节点,全局变量   */    
           
  试设计程序:针对各个group(0-->9),根据value字段排序,输出各组top   10的节点。(top10是从小到大,取后面的大值top10.)    
  要求:尽量减少计算复杂度、遍历次数,不允许大量的辅助内存    
   
  四、设计题:35分   共1题    
  注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。    
   
  1.设想网络上的一个发送者和64个接收者,发送者每秒有不超过128条的命令产生,每条命令包含一个512字节的头部command_head_t和至多4K字节的变长内容。command_head_t的结构如下:    
          typedef   struct   {    
                  int   cmd_no;     //该命令的命令号,唯一识别一个命令     
                  int   version;      //产生该命令的程序的版本    
                  int   detail_len;   //变产内容的实际长度    
                  char   *content;  //指向变长内容的指针    
                  …    
          }   command_head_t;    
  发送者根据命令号将这些命令分别发送给接收者去处理,例如:发送者产生c1,c2,c3,c4命令,并设定将c1,c2命令发送到接收者r1和r2,将c2、c3,c4命令发送到r3。    
          接收者执行接收到的命令,并相应修改自己的状态。    
          现在的问题是:在尽可能多的考虑各种可能的意外情况下(包括但不限于网络故障、传输错误、程序崩溃、停电…),如何设计命令的存储、发送、接收的流程,以保证命令的:    
  1)  传输中的有序、无漏、无重复性    
  2)  整个过程中命令和数据的正确性    
  3)  多个同一类型的接收者(例如r1与r2)的状态可以在有限时间内趋于一致    
  最后,请针对你考虑到的意外情况,说明所采用的避免、解决或恢复方案。  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值