百度筆試題目及答案

時間:2023-02-13 01:58:31 筆試題目 我要投稿
  • 相關推薦

百度筆試題目及答案

  百度筆試題目及答案(一)

百度筆試題目及答案

  第一題簡答題

  1.多線程和多進程模式有什么區別?在用兩種模型開發服務程序時,分別有什么優缺點?采用長連接和短連接模式有什么區別?分別有什么優缺點?采用同步和異步模式有什么區別?分別有什么優缺點。

  (1)啟動進程的時候,操作系統會為進程分配資源,其中最主要的資源是內存空間,因為程序是在內存中運行的。在進程中,有些程序流程塊是可以亂序執行的,并且這個代碼塊可以同時被多次執行。實際上,這樣的代碼塊就是線程體。線程是進程中亂序執行的代碼流程。當多個線程同時運行的時候,這樣的執行模式成為并發執行。

  對于一個進程中的多個線程來說,多個線程共享進程的內存塊,當有新的線程產生的時候,操作系統不分配新的內存,而是讓新線程共享原有的進程塊的內存。因此,線程間的通信很容易,速度也很快。不同的進程因為處于不同的內存塊,因此進程之間的通信相對困難。線程切換快,但實現稍復雜。進程易實現,較穩定,但性能與線程相比較差。

  (2)所謂長連接,指在一個TCP連接上可以連續發送多個數據包,在TCP連接保持期間,如果沒有數據包發送,需要雙方發檢測包以維持此連接,一般需要自己做在線維持。

  短連接是指通信雙方有數據交互時,就建立一個TCP連接,數據發送完成后,則斷開此TCP連接,一般銀行都使用短連接。

  長連接多用于操作頻繁,點對點的通訊,而且連接數不能太多情況,。每個TCP連接都需要三步握手,這需要時間,如果每個操作都是先連接,再操作的話那么處理速度會降低很多,所以每個操作完后都不斷開,次處理時直接發送數據包就OK了,不用建立TCP連接。而像WEB網站的http服務一般都用短鏈接,因為長連接對于服務端來說會耗費一定的資源,而像WEB網站這么頻繁的成千上萬甚至上億客戶端的連接用短連接會更省一些資源,如果用長連接,而且同時有成千上萬的用戶,如果每個用戶都占用一個連接的話,那可想而知吧。所以并發量大,但每個用戶無需頻繁操作情況下需用短連好。

  (3)同步:調用方調用一個程序,等待返回,然后再繼續下面的程序處理

  異步: 調用方調用一個程序,不等待返回,繼續執行下面的程序。

  1)異步通信簡單,雙方時鐘可允許一定誤差。同步通信較復雜,雙方時鐘的允許誤差較小。

  2)通信效率:異步通信低,同步通信高。

  2.請寫出以下程序的運行結果,并解釋導致這樣運行結果的關鍵性原因。

  #include

  using std::cout;

  class P

  {

  public:

  virtual void print()

  {

  cout << "P";

  }

  };

  class Q: public P

  {

  public:

  virtual void print()

  {

  cout << "Q";

  }

  };

  int main()

  {

  P * p = new P;

  Q * q = static_cast (p);

  q->print();

  delete p;

  cout << endl;

  q = new Q;

  p = q;

  q->print();

  p->print();

  cout << endl;

  p = new (q) P;

  q->print();

  p->print();

  cout << endl;

  p->~P();

  delete q;

  return 0;

  }

  P

  QQ

  PP

  第二題 算法與程序設計題

  1.給定如下的n*n的數字矩陣,每行從左到右是嚴格遞增, 每列的數據也是嚴格遞增

  1 2 3

  3 5 6

  4 8 9

  現在要求設計一個算法, 給定一個數k 判斷出k是否在這個矩陣中。 描述算法并且給出時間復雜度(不考慮載入矩陣的消耗)

  算法思想:

  沿著對角線查找,獲得i,使得k位于a[i][i]與a[i+1][i+1]之間。

  k只可能存在于a[i][i]對應的右上角矩陣 和a[i+1][i+1]對應的左下角矩陣。

  使用遞歸法繼續查找即可。

  時間復雜度 O(n)

  int searchK(int int_arr[][],int n,int startlow,int startclm,int k)

  {

  int lefttemp=0;

  int downtemp=0;

  int i=0;

  while(int_arr[startlow+i][startclm+i]

  i++;

  if (i==n)

  return 0;

  else if(arr[i][i]==k)

  reuturn 1;

  else

  return searchK(int_arr,n,startlow,startclm+i,k)+searchK(int_arr,n,startlow+i,startclm,k);

  }

  2.設 一個64位整型n,各個bit位是1的個數為a個. 比如7, 2進制就是 111, 所以a為3。

  現在給出m個數, 求各個a的值。要求代碼實現。

  #include

  #include

  using namespace std;

  int count(long long v)

  {

  int num=0;

  while(v)

  {

  v &=(v-1);

  //執行效率為V中1的個數,時間復雜度比通過除操作、位操作比較高出很多

  num++;

  }

  return num;

  }

  void main()

  {

  vector arr;

  long long i;

  cout<<"輸入需要計算的數,Ctrl+z 停止" <

  while(cin>>i)

  {

  //輸入隨機個數的數,使用Ctrl+z 停止,之后回車鍵繼續。

  arr.push_back(i);

  };

  for(vector::size_type idx=0;idx!=arr.size();++idx)

  {

  int n=count(arr[idx]);

  cout<

  }

  }

  第三題 系統設計題

  實現一個簡化的搜索提示系統。給定一個包含了用戶query的日志文件,對于輸入的任意一個字符串s,輸出以s為前綴的在日志中出現頻率最高的前10條query。

  由于是分布式系統,假設至少有26臺機器,每個機器存儲以26個字母開頭的query日志文件(如機器1存的是a字母開頭的,機器2存的是以b字母開頭的……)

  每個機器上維護著一張哈希表,對于每條query, 在哈希表表中存放其地址(哈希地址為鏈式的),并對其進行排序,按頻率由高到低進行排序。

  當用戶進行搜索時,可以很快定位到某臺機器,并根據哈希表,返回出現頻率最高的前10條query。

  提示:

  1、可以預處理日志

  2、假設query不超過10億條,每個query不超過50字節。

  3、考慮在大查詢量的情況下如何實現分布式服務

  百度筆試題目及答案(二)

  一、選擇題:15 分 共 10 題

  1. 在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是:

  A. Shell 排序 B. 歸并排序 C. 直接插入排序 D. 選擇排序

  選擇 A

  2. 以下多線程對 int 型變量x的操作,哪幾個需要進行同步:

  A. x=y; B. x++; C. ++x; D. x=1;

  選擇 B, C

  3. 代碼

  void func()

  {

  static int val;

  …

  }

  中,變量 val 的內存地址位于:

  A. 已初始化數據段 B.未初始化數據段 C.堆 D.棧

  選擇 A

  4. 同一進程下的線程可以共享以下:

  A. stack B. data section C. register set D. thread ID

  選擇 A, B

  5. TCP 和 IP 分別對應了 OSI 中的哪幾層?

  A. Application layer

  B. Data link layer

  C. Presentation layer

  D. Physical layer

  E. Transport layer

  F. Session layer

  G. Network layer

  選擇 EG

  6. short a[100],sizeof(a) 返回?

  A. 2 B. 4 C. 100 D. 200 E. 400

  選擇 D

  7. 以下哪種不是基于組件的開發技術_____。

  A. XPCOM B. XP C. COM D. CORBA

  選擇 B

  8. 以下代碼打印的結果是(假設運行在 i386 系列計算機上):

  字串2

  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

  選擇 C,因為st[2]的起始地址比st[0]的起始地址高80位,

  st[2].errstr的起始地址比st[2]的起始地址高8位

  再加上32位就等于 120.

  9. STL 中的哪種結構是連續形式的存儲:

  A. map B. set C. list D. vector

  選擇 D

  10. 一個棧的入棧序列是 A,B,C,D,E,則棧的不可能的輸出序列是:

  A. EDCBA B. DECBA C. DCEAB D. ABCDE

  選擇 C

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

  1. (5 分)重復多次 fclose 一個打開過一次的 FILE *fp 指針會有什么結果,并請解釋。

  導致 fp 所指的文件被多次釋放, 導致不可預期的后果.

  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

  選擇 B,b 的十進制為 82,二進制為 101,0010

  b 左移 8 位為 101,0010,0000,0000

  a 的十進制為 72, 二進制為 100,1000

  b<<8 | a 為 21064

  7. 內存的速度遠遠高于磁盤速度,所以為了解決這個矛盾,可以采用:

  字串2

  A 并行技術 B 虛存技術 C 緩沖技術 D 通道技術

  9. 同一進程下的線程可以共享以下

  A. stack B. data section

  C. register set D. thread ID

  選擇 B,C

  10. 以下哪種操作最適合先進行排序處理?

  A 找最大、最小值 B 計算算術平均值

  C 找中間值 D 找出現次數最多的值

  選擇 A

  一、選擇題:15 分 共 10 題

  1. 在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是:

  A. Shell 排序 B. 歸并排序 C. 直接插入排序 D. 選擇排序

  2. 以下多線程對 int 型變量x的操作,哪幾個需要進行同步:

  A. x=y; B. x++; C. ++x; D. x=1;

  3. 代碼

  void func()

  {

  static int val;

  …

  }

  中,變量 val 的內存地址位于:

  A. 已初始化數據段 B.未初始化數據段 C.堆 D.棧

  4. 同一進程下的線程可以共享以下:

  A. stack B. data section C. register set D. thread ID

  5. TCP 和 IP 分別對應了 OSI 中的哪幾層?

  A. Application layer B. Data link layer C. Presentation layer D. Physical layer E. Transport layer F. Session layer G. Network layer

  6. short a[100],sizeof(a) 返回?

  A. 2 B. 4 C. 100 D. 200 E. 400

  7. 以下哪種不是基于組件的開發技術_____。

  A. XPCOM B. XP C. COM D. CORBA

  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. STL 中的哪種結構是連續形式的存儲:

  A. map B. set C. list D. vector

  10. 一個棧的入棧序列是 A,B,C,D,E,則棧的不可能的輸出序列是:

  A. EDCBA B. DECBA C. DCEAB D. ABCDE

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

  

  1. (5 分)重復多次 fclose 一個打開過一次的 FILE *fp 指針會有什么結果,并請解釋。

  考察點:導致文件描述符結構中指針指向的內存被重復釋放,進而導致一些不可預期的異常。

  2. (15 分)下面一段代碼,想在調用 f2(1) 時打印 err1,調用 f2(2) 時打印 err4,但是代碼中有一些問題,請做盡可能少的修改使之正確。

  1 static int f1( const char *errstr, unsigned int flag ) {

  2   int copy, index, len;

  3   const static char **__err = { "err1", "err2", "err3", "err4" };

  4

  5   if( flag & 0x10000 )

  6     copy = 1;

  7   index = ( flag & 0x300000 ) >> 20;

  8

  9   if( copy ) {

  10     len = flag & 0xF;

  11     errstr = malloc( len );

  12     if( errstr = NULL )

  13       return -1;

  14     strncpy( errstr, __err[index], sizeof( errstr ) );

  15   } else

  16     errstr = __err + index;

  17 }

  18

  19 void f2( int c ) {

  20   char *err;

  21

  22   swtch( c ) {

  23   case 1:

  24     if( f1( err, 0x110004 ) != -1 )

  25       printf( err );

  26   case 2:

  27     if( f2( err, 0x30000D ) != -1 )

  28       printf( err );

  29   }

  30 }

  三、編程題:30 分 共 1 題

  

  注意:要求提供完整代碼,如果可以編譯運行酌情加分。

  1. 求符合指定規則的數。

  給定函數 d(n) = n + n 的各位之和,n 為正整數,如 d(78) = 78+7+8=93。 這樣這個函數可以看成一個生成器,如 93 可以看成由 78 生成。

  定義數 A:數 A 找不到一個數 B 可以由 d(B)=A,即 A 不能由其他數生成。現在要寫程序,找出 1 至 10000 里的所有符合數 A 定義的數。

  輸出:

  1

  3

  …

  四、設計題:35 分 共 1 題

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

  1. 假設一個 mp3 搜索引擎收錄了 2^24 首歌曲,并記錄了可收聽這些歌曲的 2^30 條 URL,但每首歌的 URL 不超過 2^10 個。系統會定期檢查這些 URL,如果一個 URL 不可用則不出現在搜索結果中。現在歌曲名和 URL 分別通過整型的 SONG_ID 和 URL_ID 唯一確定。對該系統有如下需求:

  1) 通過 SONG_ID 搜索一首歌的 URL_ID,給出 URL_ID 計數和列表

  2) 給定一個 SONG_ID,為其添加一個新的 URL_ID

  3) 添加一個新的 SONG_ID

  4) 給定一個 URL_ID,將其置為不可用

  限制條件:內存占用不超過 1G,單個文件大小不超過 2G,一個目錄下的文件數不超過 128 個。

  為獲得最佳性能,請說明設計的數據結構、搜索算法,以及資源消耗。如果系統數據量擴大,該如何多機分布處理?

 

 

 

【百度筆試題目及答案】相關文章:

百度筆試題及答案07-17

外貿筆試題目及答案07-17

編導筆試題目及答案08-16

報社筆試題目及答案09-19

文秘筆試題目及答案08-16

java筆試題目及答案07-27

護士招聘筆試題目及答案09-22

c語言筆試題目及答案08-17

2016騰訊筆試題目及答案08-19

亚洲制服丝袜二区欧美精品,亚洲精品无码视频乱码,日韩av无码一区二区,国产人妖视频一区二区
韩国日本亚洲国产不卡 | 综合久久久久久久青青 | 精品综合久久久久久98 | 丝袜精美视频久久 | 中文字幕亚洲欧美色 | 五月丁香综合激情六月久久 |