- 相關(guān)推薦
百度筆試題目及答案
百度筆試題目及答案(一)
第一題簡(jiǎn)答題
1.多線(xiàn)程和多進(jìn)程模式有什么區別?在用兩種模型開(kāi)發(fā)服務(wù)程序時(shí),分別有什么優(yōu)缺點(diǎn)?采用長(cháng)連接和短連接模式有什么區別?分別有什么優(yōu)缺點(diǎn)?采用同步和異步模式有什么區別?分別有什么優(yōu)缺點(diǎn)。
(1)啟動(dòng)進(jìn)程的時(shí)候,操作系統會(huì )為進(jìn)程分配資源,其中最主要的資源是內存空間,因為程序是在內存中運行的。在進(jìn)程中,有些程序流程塊是可以亂序執行的,并且這個(gè)代碼塊可以同時(shí)被多次執行。實(shí)際上,這樣的代碼塊就是線(xiàn)程體。線(xiàn)程是進(jìn)程中亂序執行的代碼流程。當多個(gè)線(xiàn)程同時(shí)運行的時(shí)候,這樣的執行模式成為并發(fā)執行。
對于一個(gè)進(jìn)程中的多個(gè)線(xiàn)程來(lái)說(shuō),多個(gè)線(xiàn)程共享進(jìn)程的內存塊,當有新的線(xiàn)程產(chǎn)生的時(shí)候,操作系統不分配新的內存,而是讓新線(xiàn)程共享原有的進(jìn)程塊的內存。因此,線(xiàn)程間的通信很容易,速度也很快。不同的進(jìn)程因為處于不同的內存塊,因此進(jìn)程之間的通信相對困難。線(xiàn)程切換快,但實(shí)現稍復雜。進(jìn)程易實(shí)現,較穩定,但性能與線(xiàn)程相比較差。
(2)所謂長(cháng)連接,指在一個(gè)TCP連接上可以連續發(fā)送多個(gè)數據包,在TCP連接保持期間,如果沒(méi)有數據包發(fā)送,需要雙方發(fā)檢測包以維持此連接,一般需要自己做在線(xiàn)維持。
短連接是指通信雙方有數據交互時(shí),就建立一個(gè)TCP連接,數據發(fā)送完成后,則斷開(kāi)此TCP連接,一般銀行都使用短連接。
長(cháng)連接多用于操作頻繁,點(diǎn)對點(diǎn)的通訊,而且連接數不能太多情況,。每個(gè)TCP連接都需要三步握手,這需要時(shí)間,如果每個(gè)操作都是先連接,再操作的話(huà)那么處理速度會(huì )降低很多,所以每個(gè)操作完后都不斷開(kāi),次處理時(shí)直接發(fā)送數據包就OK了,不用建立TCP連接。而像WEB網(wǎng)站的http服務(wù)一般都用短鏈接,因為長(cháng)連接對于服務(wù)端來(lái)說(shuō)會(huì )耗費一定的資源,而像WEB網(wǎng)站這么頻繁的成千上萬(wàn)甚至上億客戶(hù)端的連接用短連接會(huì )更省一些資源,如果用長(cháng)連接,而且同時(shí)有成千上萬(wàn)的用戶(hù),如果每個(gè)用戶(hù)都占用一個(gè)連接的話(huà),那可想而知吧。所以并發(fā)量大,但每個(gè)用戶(hù)無(wú)需頻繁操作情況下需用短連好。
(3)同步:調用方調用一個(gè)程序,等待返回,然后再繼續下面的程序處理
異步: 調用方調用一個(gè)程序,不等待返回,繼續執行下面的程序。
1)異步通信簡(jiǎn)單,雙方時(shí)鐘可允許一定誤差。同步通信較復雜,雙方時(shí)鐘的允許誤差較小。
2)通信效率:異步通信低,同步通信高。
2.請寫(xiě)出以下程序的運行結果,并解釋導致這樣運行結果的關(guān)鍵性原因。
#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
現在要求設計一個(gè)算法, 給定一個(gè)數k 判斷出k是否在這個(gè)矩陣中。 描述算法并且給出時(shí)間復雜度(不考慮載入矩陣的消耗)
算法思想:
沿著(zhù)對角線(xiàn)查找,獲得i,使得k位于a[i][i]與a[i+1][i+1]之間。
k只可能存在于a[i][i]對應的右上角矩陣 和a[i+1][i+1]對應的左下角矩陣。
使用遞歸法繼續查找即可。
時(shí)間復雜度 O(n)
int searchK(int int_arr[][],int n,int startlow,int startclm,int k)
{
int lefttemp=0;
int downtemp=0;
int i=0;
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.設 一個(gè)64位整型n,各個(gè)bit位是1的個(gè)數為a個(gè). 比如7, 2進(jìn)制就是 111, 所以a為3。
現在給出m個(gè)數, 求各個(gè)a的值。要求代碼實(shí)現。
#include
#include
using namespace std;
int count(long long v)
{
int num=0;
while(v)
{
v &=(v-1);
//執行效率為V中1的個(gè)數,時(shí)間復雜度比通過(guò)除操作、位操作比較高出很多
num++;
}
return num;
}
void main()
{
vector
long long i;
cout<<"輸入需要計算的數,Ctrl+z 停止" <
while(cin>>i)
{
//輸入隨機個(gè)數的數,使用Ctrl+z 停止,之后回車(chē)鍵繼續。
arr.push_back(i);
};
for(vector
{
int n=count(arr[idx]);
cout<
}
}
第三題 系統設計題
實(shí)現一個(gè)簡(jiǎn)化的搜索提示系統。給定一個(gè)包含了用戶(hù)query的日志文件,對于輸入的任意一個(gè)字符串s,輸出以s為前綴的在日志中出現頻率最高的前10條query。
由于是分布式系統,假設至少有26臺機器,每個(gè)機器存儲以26個(gè)字母開(kāi)頭的query日志文件(如機器1存的是a字母開(kāi)頭的,機器2存的是以b字母開(kāi)頭的……)
每個(gè)機器上維護著(zhù)一張哈希表,對于每條query, 在哈希表表中存放其地址(哈希地址為鏈式的),并對其進(jìn)行排序,按頻率由高到低進(jìn)行排序。
當用戶(hù)進(jìn)行搜索時(shí),可以很快定位到某臺機器,并根據哈希表,返回出現頻率最高的前10條query。
提示:
1、可以預處理日志
2、假設query不超過(guò)10億條,每個(gè)query不超過(guò)50字節。
3、考慮在大查詢(xún)量的情況下如何實(shí)現分布式服務(wù)
百度筆試題目及答案(二)
一、選擇題:15 分 共 10 題
1. 在排序方法中,關(guān)鍵碼比較次數與記錄地初始排列無(wú)關(guān)的是:
A. Shell 排序 B. 歸并排序 C. 直接插入排序 D. 選擇排序
選擇 A
2. 以下多線(xiàn)程對 int 型變量x的操作,哪幾個(gè)需要進(jìn)行同步:
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. 同一進(jìn)程下的線(xiàn)程可以共享以下:
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. 以下哪種不是基于組件的開(kāi)發(fā)技術(shù)_____。
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. 一個(gè)棧的入棧序列是 A,B,C,D,E,則棧的不可能的輸出序列是:
A. EDCBA B. DECBA C. DCEAB D. ABCDE
選擇 C
二、簡(jiǎn)答題:20 分,共 2 題
1. (5 分)重復多次 fclose 一個(gè)打開(kāi)過(guò)一次的 FILE *fp 指針會(huì )有什么結果,并請解釋。
導致 fp 所指的文件被多次釋放, 導致不可預期的后果.
5. 一個(gè)B類(lèi)網(wǎng)的子網(wǎng)掩碼是255.255.240.0,這個(gè)子網(wǎng)能擁有的最大主機數是:
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 的十進(jìn)制為 82,二進(jìn)制為 101,0010
b 左移 8 位為 101,0010,0000,0000
a 的十進(jìn)制為 72, 二進(jìn)制為 100,1000
b<<8 | a 為 21064
7. 內存的速度遠遠高于磁盤(pán)速度,所以為了解決這個(gè)矛盾,可以采用:
字串2
A 并行技術(shù) B 虛存技術(shù) C 緩沖技術(shù) D 通道技術(shù)
9. 同一進(jìn)程下的線(xiàn)程可以共享以下
A. stack B. data section
C. register set D. thread ID
選擇 B,C
10. 以下哪種操作最適合先進(jìn)行排序處理?
A 找最大、最小值 B 計算算術(shù)平均值
C 找中間值 D 找出現次數最多的值
選擇 A
一、選擇題:15 分 共 10 題
1. 在排序方法中,關(guān)鍵碼比較次數與記錄地初始排列無(wú)關(guān)的是:
A. Shell 排序 B. 歸并排序 C. 直接插入排序 D. 選擇排序
2. 以下多線(xiàn)程對 int 型變量x的操作,哪幾個(gè)需要進(jìn)行同步:
A. x=y; B. x++; C. ++x; D. x=1;
3. 代碼
void func()
{
static int val;
…
}
中,變量 val 的內存地址位于:
A. 已初始化數據段 B.未初始化數據段 C.堆 D.棧
4. 同一進(jìn)程下的線(xiàn)程可以共享以下:
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. 以下哪種不是基于組件的開(kāi)發(fā)技術(shù)_____。
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. 一個(gè)棧的入棧序列是 A,B,C,D,E,則棧的不可能的輸出序列是:
A. EDCBA B. DECBA C. DCEAB D. ABCDE
二、簡(jiǎn)答題:20 分,共 2 題
1. (5 分)重復多次 fclose 一個(gè)打開(kāi)過(guò)一次的 FILE *fp 指針會(huì )有什么結果,并請解釋。
考察點(diǎn):導致文件描述符結構中指針指向的內存被重復釋放,進(jìn)而導致一些不可預期的異常。
2. (15 分)下面一段代碼,想在調用 f2(1) 時(shí)打印 err1,調用 f2(2) 時(shí)打印 err4,但是代碼中有一些問(wèn)題,請做盡可能少的修改使之正確。
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。 這樣這個(gè)函數可以看成一個(gè)生成器,如 93 可以看成由 78 生成。
定義數 A:數 A 找不到一個(gè)數 B 可以由 d(B)=A,即 A 不能由其他數生成,F在要寫(xiě)程序,找出 1 至 10000 里的所有符合數 A 定義的數。
輸出:
1
3
…
四、設計題:35 分 共 1 題
注意:請盡可能詳細描述你的數據結構、系統架構、設計思路等。建議多寫(xiě)一些偽代碼或者流程說(shuō)明。
1. 假設一個(gè) mp3 搜索引擎收錄了 2^24 首歌曲,并記錄了可收聽(tīng)這些歌曲的 2^30 條 URL,但每首歌的 URL 不超過(guò) 2^10 個(gè)。系統會(huì )定期檢查這些 URL,如果一個(gè) URL 不可用則不出現在搜索結果中,F在歌曲名和 URL 分別通過(guò)整型的 SONG_ID 和 URL_ID 唯一確定。對該系統有如下需求:
1) 通過(guò) SONG_ID 搜索一首歌的 URL_ID,給出 URL_ID 計數和列表
2) 給定一個(gè) SONG_ID,為其添加一個(gè)新的 URL_ID
3) 添加一個(gè)新的 SONG_ID
4) 給定一個(gè) URL_ID,將其置為不可用
限制條件:內存占用不超過(guò) 1G,單個(gè)文件大小不超過(guò) 2G,一個(gè)目錄下的文件數不超過(guò) 128 個(gè)。
為獲得最佳性能,請說(shuō)明設計的數據結構、搜索算法,以及資源消耗。如果系統數據量擴大,該如何多機分布處理?
while(int_arr[startlow+i][startclm+i]
【百度筆試題目及答案】相關(guān)文章:
百度筆試題及答案07-17
外貿筆試題目及答案07-17
編導筆試題目及答案08-16
報社筆試題目及答案09-19
文秘筆試題目及答案08-16
java筆試題目及答案07-27
護士招聘筆試題目及答案09-22
c語(yǔ)言筆試題目及答案08-17
2016騰訊筆試題目及答案08-19