百度筆試題四

一、選擇題:15分 共10題
1.    任何一個基於“比較”的內部排序的算法,若對6個元素進行排序,則在最壞情況下所需的比較次數至少爲__a__。
A.10       B.11        C.21         D.36

2.    關係模型有三類完整性約束,定義外鍵實現的是  b   完整性.
A. 實體完整性              B. 參照完整性       
C. 用戶定義的完整性          D. 實體完整性、參照完整性和用戶定義的完整性

3.    64位linux系統和機器,int類型、long類型分別佔用多大的空間(字節數)  b
A. 4,4      B. 4,8         C. 8,4         D. 8,8 

4.    下面說法正確的是: c
A. 根據gprof統計的程序運行時函數調用次數及執行時間,進行程序代碼優化,這是amdahl定律的應用
B. 計算機網絡設備的緩衝區是時間和空間局部性原理的應用 
C. 局域網內的計算機發送數據包的數學模型遵循泊松分佈
D. 分支預測使用先前運行時得到的配置文件,這是依據正態分佈

5.    下列敘述正確的是: c
A . #define fun(x,y) (x/y)
Int I = fun(2+4, 3);
I 的值爲2
B.var++ 與 ++var 沒有區別
C.C++程序,拋出異常時,一定會發生異常對象的拷貝過程
D.quick sort 是一種穩定排序。

6.    上下文無關文法是一種__d__。
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的值爲 c
A. -1;         B. 5;       C. 7;       D. 11;

9.    以下IO函數中,哪個是流式IO函數(b)
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的賦值是_c___。
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

請評價該監控程序的敏感性和正確性。
最好情況應該對角線上的值爲1,其他爲0
敏感性是有異常能夠報警的概率,p(報警的概率|有異常發生) = (0.28*0.98 + 0.12*0.91 + 0.32*.0.90) / (0.28+0.12+0.32) = 0.933
正確性是指能夠正確報警的概率,0.28*0.90 + 0.12*0.80 + 0.32*0.82 + 0.28*0.95 = 0.876
所以如果以0.9的概率爲標準,我覺得敏感性指標高,正確性指標低

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;
         }
1。如果number很大的話,在for循環中就打開了多個文件,而for循環後至關閉了一個文件
2。如果number很大很大的話,i/20的位數加上file_和.txt的位數可能會超過file_name
3. 如果是用C的編譯器來編譯的話,for(int i=0; i<number; i++) 中的int i不能這樣定義。可以用C++編譯器編譯
4. number很大的話,sum就溢出了
5. fp需要賦初值,如果沒有進入for循環的話,fclose出錯

三、編程題: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)的狀態可以在有限時間內趨於一致
最後,請針對你考慮到的意外情況,說明所採用的避免、解決或恢復方案。

考慮的因素是三方面的,一個是發送端的命令的存儲和發送,二是傳輸過程中有序,無漏,無重複性和數據正確性問題,三是接收者如何接收和保證所有的接收者的狀態能在有限時間內趨於一致。

百度招聘在線筆試百度招聘在線筆試百度首頁

      一、選擇題:15分 共10題
      1.    C語言,下面語句輸出的結果是什麼?
      假設 test_item_t 結構大小爲16.
      test_item_t* pitem = 0;
      int i=1;
      pitem = pitem + i++;
      printf("%d", (int)pitem );
      A) 1       B) 2           C) 16        D) 32

      2.    下面關於算法和數據結構的說法,不正確的是:
      A.存在額外空間複雜度爲O(1)的算法,判斷一個鏈表是否存在迴路
      B.對hash table而言,桶的數目最佳爲一質數
      C.快速排序算法在數組倒序排列的情況下取得最壞時間複雜度
      D.採用棧對二叉樹後序周遊時,彈出一個子樹的根節點的時機是在第二次訪問該節點時

      3.    下面爲檢查一個數組中元素是否唯一的算法,該算法最壞情況,需要作多少次比較?
      For i = 0 to n-2 do
      For j = i+1 to n-1 do
      If A[i] = A[j] 
      return false
      return true;
      A) n*n/2     B) n*n      C)  n*(n-1)/2     D) 沒有正確答案

      4.    以下程序輸出結果是______。
      #define  M(x,y)   x*y
       printf(“%d”,M(10+1,3));
      A) 33          B)23          C)13                D) 103


      5.    以下操作符優先級最高的是___:
      A) +         B) &&         C) |              D) >>

      6.    下面一段語句的執行結果爲: 
      char buffer[16];
      char *pbuffer=buffer;
      printf("%d,%d",sizeof(buffer),sizeof(pbuffer));
      A) 16,4       B) 16,16      C) 4,4           D)4,16

      7.    以下哪個協議是TCP/IP 網絡層的協議:
      A) UDP        B) DHCP      C) PPP           D) ARP

      8.    觸發器可在表的插入、修改或刪除操作時被觸發執行特定的操作。觸發器主要用於 
      A)數據庫恢復        B)完整性控制
      C)併發控制            D)安全性控制


      9.    下面哪個函數調用可能發生阻塞?
      A 在普通文件的描述符上發出read系統調用
      B 在socket的描述符上發出write系統調用
      C 針對一個普通文件執行open系統調用
      D 在一個普通文件上執行seek系統調用


      10.    關係模型有三類完整性約束,定義外鍵實現的是     完整性.
      A. 實體完整性              B. 參照完整性       
      C. 用戶定義的完整性          D. 實體完整性、參照完整性和用戶定義的完整性

      二、簡答題:20分,共2題

      1.    (5分)指出下列程序有哪些問題,或者不安全因素。
      toUpperCase(char &c);  
      int copyStr_c(const char* str)
      {
         char * pbuffer[MAX_SIZE];
         strcpy(pbuffer, str);
         for(; pbuffer, pbuffer++)
      {
        toUpperCase(pbuffer);
      }
      return pbuffer;
      }


      2.    (15分)怎樣比較有效率地實現具有如下功能的工具:將兩個有定長結構的數據文件按指定的字段進行等值連接。
      例如:A文件的結構爲 
      struct A{
          int x, y;
      };
      B文件的結構爲
      struct B{
          int y;
      };
      並有struct A a1 = {1, 2}, a2 = {2, 2}; struct B b1 = {2}, b2 = { 3};
      則連接後的結果是:
      {{1, 2, 2}, {2, 2, 2}}


          現指定按y字段進行連接 ,提示:先按y值排序,然後找數組中相同的元素


      三、編程題:30分 共1題
      注意:要求提供完整代碼,如果可以編譯運行酌情加分。

      1.    處理大寫字母和小寫字母混排的字符串(長度小於1K字節),要求大寫字母在前、小寫字母在後,並儘可能優化算法。 (一趟快速排序法)


int f(char *str,int len)
{
 if(str==NULL || len == 0)
  return -1 ;
 int i=0;
 int j=len-1;
 while(1)
 {
  while(str[i]>='A'&&str[i]<='Z'&& i < len)i++;
  while(str[j]>='a'&&str[j]<='z'&& j >= 0)j--;
  if(i>=j) break;
  char t=str[i];
  str[i]=str[j];
  str[j]=t;
 }
 return 0;
}

void main()
{
 char str[] = "aBsAdsdASDasd";
 f(str, strlen(str));
 cout << str;
}

      四、設計題:35分 共1題
      注意:請儘可能詳細描述你的數據結構、系統架構、設計思路等。建議多寫一些僞代碼或者流程說明。

      1.    一個程序一直接收這樣數據結構(struct block_t)的網絡隨機數據:
      typedef struct block_t{
                 int  value;    /*節點值,範圍:0-->200,000,000 */
                 int  group;   /*組號,範圍:0-->200,000,000 */
                 char data[1024];  /*其他數據爲1K大小*/
         }block_t;
      每天接收不超過5千萬個這樣的數據,並定時將數據生成分組有序的數據(按group分組,各組按value排序)。

      任務:給出基本思路、設計的具體數據文件格式,以及較詳細的算法描述。
      要求:計算過程要儘可能高效。

         下面是限制和提示:
           a)系統內存4G,一個進程內存不超過2G,一個文件大小不超過2G
           b)IO時間開銷比較大,並且文件的隨機讀取比順序讀取速度至少慢10倍
           c)一個50G字節、5千萬條的數據,要順序全部讀取出來,大約需要20分鐘。如果隨機將所有數據取出來,大概需要4個小時。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章