百度筆試題面試題集總

1:堆和棧的區別,何時用堆何時用棧?
2:樹的深度優先搜索算法
按照某種條件往前試探搜索,若是前進中遭到失敗(正如老鼠鑽迷宮老鼠遇到死衚衕)則退
回頭另選通路繼續搜索,直到找到條件的目標爲止。
3:廣度優先搜索算法
寬度優先搜索算法(又稱廣度優先搜索)是最簡便的圖的搜索算法之一,這一算法也是不少
重要的圖的算法的原型。Prim 最小生成樹算法採用了和寬度優先搜索相似的思想。其別名
又叫 BFS,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的全部節點,以找尋結果。
換句話說,它並不考慮結果的可能位址,完全地搜索整張圖,直到找到結果爲止。
4:樹的非遞歸實現
5:數據庫事務的四大特性
原子性 atomic、一致性 consistency、分離性 isolation、持久性 durability
◎事務的原子性指的是,事務中包含的程序做爲數據庫的邏輯工做單位,它所作的對數據修
改操做要麼所有執行,要麼徹底不執行。這種特性稱爲原子性。
◎事務的一致性指的是在一個事務執行以前和執行以後數據庫都必須處於一致性狀態。
◎分離性指併發的事務是相互隔離的。即一個事務內部的操做及正在操做的數據必須封鎖起
來,不被其它企圖進行修改的事務看到。
◎持久性意味着當系統或介質發生故障時,確保已提交事務的更新不能丟失。即一旦一個事
務提交,DBMS 保證它對數據庫中數據的改變應該是永久性的,耐得住任何系統故障。
持久性經過數據庫備份和恢復來保證。
6:ASCII 碼--十進制(對應關係)
0--48 9--57
A--65 Z--90
a--97 z—122
十進制:decimal,簡稱:DEC
7:算法與程序設計題
#include <iostream>
using namespace std;
//該函數實現返回一個以「\0」結束的字符串中最長的數字串的長度,
//並把該數字子串的首地址賦給outputstr
//不能使用任何庫函數或已經存在的函數,如strlen。
//例如:在字符串「abc123abcdef12345abcdefgh123456789」中,
//把該字符串的首地址賦給inputstr,函數返回,
//outputstr指向字符串「」的首地址。
int maxContinuNum(const char inputstr,const char outputstr)
{
int max=0,count=0;
while(inputstr!='\0') //若是字符串沒有到末尾,繼續循環
{
if(
inputstr>=49 && inputstr<=57) //若是在統計範圍內
{
count++;
}
else //若是在統計範圍外
{
if(count>max)
{
max=count;
outputstr=inputstr-count; //返回最大數字子串的首地址對應的數字
count=0;
}
else
{
count=0;
}
}
inputstr++;
}
if(
inputstr=='\0') //特殊狀況,最長字符串在末尾
{
max=count;
outputstr=inputstr-count; //返回最大數字子串的首地址對應的數字
}
cout<<"返回最大數字子串的首地址對應的數字:"<<outputstr<<endl;
return max;
}
int main()
{
int max;
char
str="abc123abcdef12345abcdefgh123456789";
max=maxContinuNum(str,str);
cout<<"字符串「abc123abcdef12345abcdefgh123456789」中最長的數字串的長度爲:"<<max<<endl;
}
8:New Coke 的一項失敗營銷方略
始於可口可樂與百事可樂之爭的。這是商業史上的著名案例,不少人曾經從不一樣角度分析這
個案例。而在 blink 書中,兩種可樂在作產品比較時採起了錯誤的「切片」方法。百事在最初
***可口時,曾經經過在大街上隨即抽取人員做雙盲測試,並發現大多數人認爲百事可樂更
好喝,以此爲證聽說明百事的優勢。可口也做了一樣的測試,驚恐的發現事實確實如此。於
是他們判定可口可樂必須在產品上改進,通過大量的投入,一種新的New Coke發佈出來了。
New Coke 在作一樣的雙盲測試時,更多人認爲 New Coke 比 Pepsi 好喝。當時的 CEO 郭思
達在發佈時說,這是可口可樂有史以來作的最有把握的一件事。但是,事實是,New Coke
迅速被消費者抵制,最後可口可樂不得不從新推出原來的可口可樂並徹底摒棄 New Coke。
這種雙盲測試是一種錯誤的切片方法,由於在作這種試驗時,用戶對每種飲料都只喝一小口,
而不是像正常時一次喝一瓶。而當用戶只喝一小口飲料時,大多數人會更喜歡更甜的那一種
——雖然當他們喝一整瓶的時候會有不一樣的見解。書中又舉了更多例子說明,所謂的用戶測
試並非一種可以讓你相信的結果,由於用戶測試會被不少不一樣的因素所影響,包括包裝、
飲用方法。
9:鏈表和數組的優缺點?
鏈表:鏈表是一塊不連續的動態空間,長度可變;鏈表須要按順序檢索節點,效率低;
鏈表的優勢是能夠快速插入和刪除節點,大小動態分配,長度不固定。
鏈表不存在越界問題。
數組:數組是一快連續的空間,聲明時長度就須要固定。
數組的優勢是速度快,數據操做直接使用偏移地址。
數組有越界問題。
2008-9-24 百度電子科技大學網絡工程師筆試題(第五套筆試題)
第一大題,共 6 小題,每題 5 分,共 30 分
1:什麼是保留 IP 地址,請列舉?爲何規定保留 IP 地址?
保留 IP 地址:1 個 A 類地址 10...;16 個 B 類地址 172.16..---172.31..
256 個 C 類地址 192.168.0.
---192.168.255.;保留 IP 地址不會在 internet 網上出現,
用於企業網絡,A 企業能夠用,B 企業也能夠使用!
2:IPv4 和 IPv6 的地址分別是多少?
IPv4 的地址是 32 位,IPv6 的地址是 64 位。
3:什麼是訪問控制列表?它的執行流程?
訪問控制列表(ALC)實際上就是一系列容許和拒絕匹配準則的集合。總的一句話就是數據包與 ALC 中的一旦出現的匹配狀況,就執行相應的操
做,而此時對此數據包的檢測就到此爲止了,後面無論出現多少不匹配的狀況將不做檢測。
4:802.1Q 協議實現什麼功能?和 ISL 有何區別
5:端口鏡像,鏈路匯聚的功能是什麼,請用你熟悉的交換機寫出它們的命名。
6:linux 下解釋: ip rule add from 192.168.3.112/32 [tos 0x10] table 2 pref 1500
第二大題,30 分
你如今有一個文件,文件中順序存有 N 個記錄,R1,R2,...,RN,這些記錄不是有序的,可是你
知道一個整數 M,
這些記錄知足 R1<R2<...<RM 以及 RM+1<RM+2<...RN.
1,設計一個算法或編寫一個程序,將文件中的記錄排序爲 R1',R2',...,RN',算法或程序讀取文件
的次數爲 O(N),不限內存使用,
2,設計一個算法或編寫一個程序,將文件中的記錄排序爲 R1',R2',...,RN',算法或程序讀寫文件
的次數爲 O(N),空間複雜度
爲 O(1),亦即,你使用的內存大小和 M,N 均無關。
第三大題,每小題 20 分,共 40 分
1:在某些狀況下,網絡中會出現路由環路,請根據你的理解,說明可能出現路由環路的原
理,並以你最熟悉
的路由協議,說明該路由協議採起了哪些措施避免路由環路。
2:若是用戶向你申述上百度主頁很慢,你會從哪些方面取分析這個問題,如何高效的分析
並判斷故障根源所在?
第四套題的第三大題的第一個
如今須要對 2000 臺機器升級某個軟件?已經有這個軟件的最新代碼,
1:你會選擇用什麼工具自動升級該軟件?請給出具體步驟或方法?
2:爲了便於後期的運維,若是讓你設計一套軟件部署方案,你會怎麼設計?
一、請實現兩棵樹是否相等的比較,相等返回,不然返回其餘值,並說明算法複雜度。
數據結構爲:
typedef struct_TreeNode{
char c;
TreeNode
leftchild;
TreeNode rightchild;
}TreeNode;
函數接口爲:int CompTree(TreeNode
tree1,TreeNode tree2);
注:A、B 兩棵樹相等當且僅當 Root->c==RootB-->c,並且 A 和 B 的左右子樹相等或者左右互換相等。
二、寫一段程序,找出數組中第 k 大小的數,輸出數所在的位置。例如{2,4,3,4,7}中,第一大的數是
7,位置在 4。第二大、第三大的數都是 4,位置在 一、3 隨便輸出哪個都可。
函數接口爲:int find_orderk(const int
narry,const int n,const int k)
2'、已知一個字串由 GBK 漢字和 ansi 編碼的數字字母混合組成,編寫 c 語言函數實現從中去掉全部 ansi
編碼的字母和數字(包括大小寫),要求在原字串上返回結果。
函數接口爲:int filter_ansi(char* gbkstring)
注:漢字的 GBK 編碼範圍是 0x8140-0xFEFE
百度筆試題
1)此題 10 分
對任意輸入的正整數 N,編寫 C 程序求 N!的尾部連續 0 的個數,並指出計算複雜度。如:18!=
6402373705728000,尾部連續 0 的個數是 3。
(不用考慮數值超出計算機整數界限的問題)
2)此題 10 分
編寫一個 C 語言函數,要求輸入一個 url,輸出該 url 是首頁、目錄頁或者其餘 url
以下形式叫作首頁:
militia.info/
www.apcnc.com.cn/
http://www.cyjzs.comwww.greena888.com/
www.800cool.net/
http://hgh-products.my-age.net/
以下形式叫作目錄頁:
thursdaythree.net/greenhouses--gas-global-green-house-warming/
http://www.mw.net.tw/user/tgk5ar1r/profile/
http://www.szeasy.com/food/yszt/chunjie/
www.fuckingjapanese.com/Reality/
請注意:
a) url 有可能帶 http 頭也有可能不帶
b)動態 url(即含有"?"的 url)的一概不算目錄頁,如:
www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/
www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/
另:若是你會 linux,請用 linux 下的 grep 命令實現第 2 題的功能(附加 5 分)。
3)此題 40 分
若是必須從網頁中區分出一部分"重要網頁"(例如在 10 億中選 8 億),比其餘網頁更值得展示給用戶,請
提出一種方案。
4)此題 40 分
假設有 10 億網頁已經被咱們存下來,並提供以下信息:網頁全文(即網頁的源碼)、全文長度、網頁正文
(即網頁中提取的主體文字)、
正文長度,以及其餘網頁提取物等,如今但願去掉其中的重複網頁,請提出可行的方案,計算出每一個網頁
對應的重複度,你能夠本身
對網頁重複下定義,也能夠提出須要哪些更多的網頁提取物來實現更好的去重複方案
百度試題
1、 選擇題:15 分 共 10 題
1.一個含有 n 個頂點和 e 條邊的簡單無向圖,在其鄰接矩陣存儲結構中共有個零元素。
A.e B.2e C.n2-e D.n2-2e
2.
是面向對象程序設計語言中的一種機制。這種機制實現了方法的定義與具體的對象無
關,而對方法的調用則能夠關聯於具體的對象。
A.繼承(Inhertance) B.模板(Template)
C.對象的自身引用(Self-Reference) D.動態綁定(Dynamic Binding)
3.應用層 DNS 協議主要用於實現 網絡服務功能.
A. IP 地址到網絡設備名字的映射 B. IP 地址到網絡硬件地址的映射
C. 網絡設備名字到 IP 地址的映射 D. 網絡硬件地址到 IP 地址的映射
4.linux 默認狀況下,一個進程最多能打開多少文件
A.64 B. 128 C. 512 D. 1024
5.下面結構體
struct s1 {
char ch, ptr;
union {
short a, b;
unsigned int c:2, d:1;
}
struct s1
next;
};
的大小是____

A. 12 字節 B.16 字節 C.20 字節 D. 24 字節
6.任何一個基於"比較"的內部排序的算法,若對 6 個元素進行排序,則在最壞狀況下所需的
比較次數至少爲
A.10 B.11 C.21 D.36
7.如下不是進程間通信的是_
A 共享內存 B 信號量 C 線程局部存儲 D 消息隊列
8.下面程序,求 count 的值
int func(x)
{
int count= 0;
x=9999;
while(x)
{
Count ++;
x = x&(x-1);
}
return count;
}
A 8; B 10; C 5; D 11
A
9.使用 malloc 系統調用分配的內存是在
D_ 上分配的
A 棧; B bss; C 物理內存; D 堆
10.最壞狀況下,合併兩個大小爲 n 的已排序數組所須要的比較次數

A.2n B.2n-1 C.2n+1 D.2n-2
2、簡答題:20 分,共 3 題
1.(5 分)下面這段代碼是把中英文混合字符串(漢字用兩個字節表示,特色是第一個字節的
最高位爲 1)中的大寫字母轉化爲小寫字母,請找出其中的 bug,注意各類異常狀況。
for (char piterator = szWord; piterator != 0; piterator++)
{
if (piterator & 0x80 != 0)
{
piterator++;
}
else if (
piterator >= 'A' && piterator <= 'Z')
piterator += 32;
}
2.(5 分)對給定的上億條無序的 url,請按照 domain、site 以及 path 分別排序,並請指出排
序過程當中可能會遇到的哪些問題 如何提升效率
例如:http://www.baidu.com/path/about.html,domain、site 以及 path 的定義分別以下:
Domain:baidu.com
Site:www.baidu.com
Path: www.baidu.com/path
3.(10 分)某型 CPU 的一級數據緩存大小爲 16K 字節,cache 塊大小爲 64 字節;二級緩存
大小爲 256K 字節,cache 塊大小爲 4K 字節,採用二路組相聯。經測試,下面兩段代碼運行
時效率差異很大,請分析哪段代碼更好,以及可能的緣由。
爲了進一步提升效率,你還能夠採起什麼辦法
A 段代碼
int matrix[1023][15];
const char
str = "this is a str";
int i, j, tmp, sum = 0;
tmp = strlen(str);
for(i = 0; i < 1023; i++) {
for(j = 0; j < 15; j++) {
sum += matrix[j] + tmp;
}
}
B 段代碼
int matrix[1025][17];
const char *str = "this is a str";
int i, j, sum = 0;
for(i = 0; i < 17; i++) {
for(j = 0; j < 1025; j++) {
sum += matrix[j] + strlen(str);
}
}
3、編程題:30 分 共 1 題
注意:要求儘量提供完整代碼,若是能夠編譯運行酌情加分。
1.內存中有一個長數組,條目數爲 10 萬,數組單元爲結構體 struct array,sizeof(struct array)
爲 512 字節。結構有一 int 型成員變量 weight。現須要取得按 weight 值從大到小排序的前 500
個數組單元,請實現算法,要求效率儘量高。
4、設計題:35 分 共 1 題
注意:請儘量詳細描述你的數據結構、系統架構、設計思路等,建議多寫一些僞代碼或者
流程說明。
1.請設計一個字典。以字符串爲索引,存儲用戶定義的定長結構。要求有增、刪、查、改的
功能。已經給定一個函數,能夠由字符串映射到一個簽名,每一個簽名由兩個 unsigned int 類
型組成。假設每個字符串可以對應惟一的一個簽名,徹底沒有重複(或者重複的機率能夠
忽略),而且簽名分佈足夠均勻。
請描述你的數據結構 內存如何申請 增、刪、查、改的功能如何實現 若是操做很頻繁,該
如何優化
取 自
"http://wiki.xyzp.net/index.php/2006%E7%99%BE%E5%BA%A6%E7%AC%94%E8%AF%95
%E9%A2%98
1、選擇題:15 分 共 10 題php

  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
    2、簡答題:20 分,共 2 題
  11. (5 分)重複屢次 fclose 一個打開過一次的 FILE *fp 指針會有什麼結果,並請解釋。
    考察點:致使文件描述符結構中指針指向的內存被重複釋放,進而致使一些不可預期的異常。
  12. (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 }
    3、編程題:30 分 共 1 題
    注意:要求提供完整代碼,若是能夠編譯運行酌情加分。
  13. 求符合指定規則的數。
    給定函數 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

    4、設計題:35 分 共 1 題
    注意:請儘量詳細描述你的數據結構、系統架構、設計思路等。建議多寫一些僞代碼或者
    流程說明。
  14. 假設一個 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
    個。
    爲得到最佳性能,請說明設計的數據結構、搜索算法,以及資源消耗。若是系統數據量擴大,
    該如何多機分佈處理
    百度第二套

1、選擇題:15 分 共 10 題html

  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 找出現次數最多的值
    2、簡答題:20 分,共 2 題
  11. (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
  12. (14 分)函數 A 將字符串 str1 轉成小寫,並打印出轉化先後的字符串。另外,改錯時不
    能改變函數的接口和主要思路。改錯時,請指出行號。
    1 #include
    2 #include
    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>"A" && s<"Z") {
    13 s += 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 }
    3、編程題:30 分 共 1 題
    注意:要求提供完整代碼,若是能夠編譯運行酌情加分。
  13. 兩個已排序的整型數組,求交集,最快算法
    輸入:兩個已排序的整型數組(int a[m], b[n])
    輸出:兩個數組的交集
    4、設計題:35 分 共 1 題
    注意:請儘量詳細描述你的數據結構、系統架構、設計思路等。建議多寫一些僞代碼或者
    流程說明。
  14. 考慮一個字符串替換的過程,在一個文本文件中含有一些文本內容和一些須要替換的變
    量,變量的格式爲「$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)此題 10 分
    對任意輸入的正整數 N,編寫 C 程序求 N!的尾部連續 0 的個數,並指出計算複雜度。如:
    18!=6402373705728000,尾部連續 0 的個數是 3。
    (不用考慮數值超出計算機整數界限的問題)
    2)此題 10 分
    編寫一個 C 語言函數,要求輸入一個 url,輸出該 url 是首頁、目錄頁或者其餘 url
    以下形式叫作首頁:
    militia.info/
    www.apcnc.com.cn/
    http://www.cyjzs.comwww.greena888.com/
    www.800cool.net/
    http://hgh-products.my-age.net/
    以下形式叫作目錄頁:
    thursdaythree.net/greenhouses--gas-global-green-house-warming/
    http://www.mw.net.tw/user/tgk5ar1r/profile/
    http://www.szeasy.com/food/yszt/chunjie/
    www.fuckingjapanese.com/Reality/
    請注意:
    a) url 有可能帶 http 頭也有可能不帶
    b)動態 url(即含有" "的 url)的一概不算目錄頁,如:
    www.buddhismcity.net/utility/mailit.php l=/activity/details/3135/
    www.buddhismcity.net/utility/mailit.php l=/activity/details/2449/
    另:若是你會 linux,請用 linux 下的 grep 命令實現第 2 題的功能(附加 5 分)。
    3)此題 40 分
    若是必須從網頁中區分出一部分"重要網頁"(例如在 10 億中選 8 億),比其餘網頁更值得展
    現給用戶,請提出一種方案。
    4)此題 40 分
    假設有 10 億網頁已經被咱們存下來,並提供以下信息:網頁全文(即網頁的源碼)、全文長
    度、網頁正文(即網頁中提取的主體文字)、
    正文長度,以及其餘網頁提取物等,如今但願去掉其中的重複網頁,請提出可行的方案,計
    算出每一個網頁對應的重複度,你能夠本身
    對網頁重複下定義,也能夠提出須要哪些更多的網頁提取物來實現更好的去重複方案
    百度面經:我是 9 月份跟百度聯繫的,當時連簡歷都沒寫,只是寫了一下本身作過的一些東
    西,而後就通知我 9 月 21 日面試,第一次面試通過了 3 個小時,見了 4 位面試官,一個系
    統構建師,一個 team leader,一個技術部經理,還有一個 hrJJ,主要問的問題就是我曾經作
    過的信息檢索項目,基本上照着簡歷(若是有的話)仔細地問,還會出點題目考你,建議大
    家多去看看《數據結構》,尤爲是算法分析、查找、排序方面的東西。還有一些就看你的反
    應能力了,這裏就不說了。
    而後她會讓你問一些問題,記得去以前到網上搜集點百度的資料看看,對百度有些認識,然
    後再問寫關於公司發展和我的發展的問題,薪水的問題就別問題。
    大約 3 個星期後,通知我去二面,又見了一個 team leader 和技術副總裁,這回仍是圍繞着
    簡歷提問,但自由交流的成份不少,就看你的親和力和素質了,總之讓他認爲你這我的有創
    意,有想法,跟你一塊兒合做會很愉快就是了。
    當時那個副總裁邀請我到公司去作兼職,由於最近比較忙,就說下學期才能開始,能夠說是
    整個面試中最大的敗筆。
    一個星期後打電話到 HR 那裏問結果,被告知應屆生招聘計劃暫時推遲,感受很 faint,只好
    去找別的工做了。
    百度的待遇一直不知道,工做時間大約是天天 10 小時以上,週六常常加班。
    有股票期權,看你是否是喜歡了。
    主要注意的是他讓你問他問題的時候,必定問點有水平的問題,給他們點表現的機會,它表
    現的很爽,一高興,對你也有好處。
    百度網絡筆試題目
    1.假設 Apache 產生的日誌文件名爲 access_log,在 apache 正在運行時,執行命令 mv
    access_log access_log.bak,執行完後,請問新的 apache 的日誌會打印到哪裏,爲何
    2.在 Shell 環境下,如何查看遠程 Linux 系統運行了多少時間
    3.處理如下文件內容,將域名取出並進行計數排序,如處理:
    http://www.baidu.com/index.html
    http://www.baidu.com/1.html
    http://post.baidu.com/index.html
    http://mp3.baidu.com/index.html
    http://www.baidu.com/3.html
    http://post.baidu.com/2.html
    獲得以下結果:
    域名的出現的次數 域名
    3 www.baidu.com
    2 post.baidu.com
    1 mp3.baidu.com
    能夠使用 bash/perl/php/c 任意一種
    4.若是獲得隨機的字串,長度和字串中出現的字符表可定義,並將字串倒序顯示,如
    把 0123456789 做爲基準的字串字符表,產生一個 6 位的字串 642031,打印出的字串爲
    130246,可以使用 bash/perl/php/c 任意一種.
    5.如何查看當前 Linux 系統的狀態,如 CPU 使用,內存使用,負載狀況等.
    6.你在大學中作的最成功的一件事是什麼(沒必要必定與計算機相關) 百度面試過程:
    個人求職路程好像非常艱辛„„到目前爲止面試了不少家,簡歷更是投了幾十份,只有
    Neusofe 給了我一個 offer。這個 offer 並非對我能力的確定,只是以爲我可能會留在東軟。
    惋惜東軟我已經給拒了,基本上沒有退路了。
    說一下個人百度求職過程吧。
    通過在線筆試、兩輪電話面試,今天上午收到了百度的拒信,個人百度求職算是告一段落
    了„„
    從百度校園招聘開始,我就投了一份簡歷。在別人都有在線筆試機會的時候,我卻沒有任何
    消息。
    據說師兄能夠給推薦,我就又經過內部推薦的方式投遞了一次,此次很快就有消息了——拒
    信。
    那時基本上就放棄了百度。但是大概 20 多天之後,我投遞的第一份簡歷有消息了——通知
    我在線筆試。通過精心準備,筆試題答得還湊合。過了幾天給我來了封郵件告知我筆試經過,
    會找時間安排電話面試。又過了好幾天,我正在剃頭的時候接到百度電話,約了次日下午
    三點電話面試。心情異常興奮,回到寢室拼命複習數據結構並收集百度面試題型„„臨陣磨
    槍 呵呵。
    百度的面試氛圍非常輕鬆,讓你很快就以爲是在聊天而不是面試。第一輪主要是在針對個人
    在線筆試的題目進行提問和分析,主要講的是作題的思路和改進的方法。面試時間大概有半
    個小時,以爲應該有下一輪。
    果真上個星期五晚上接到了百度技術經理的電話,自稱姓劉。在前一天我同窗也是這個時候
    接到百度第二面電話,看來是同一我的,後來的面試內容證明了是同一我的。面試過程大概
    以下:
    一、介紹一下項目。
    二、提了一個問題:上千萬條記錄,統計出重複記錄最多的前 N 條。
    三、一個機率題:54 張撲克牌,除去兩張大小王剩下 52 張撲克牌。問紅桃 A 和黑桃 A 同時
    被一我的拿到的機率是多少
    四、多個線程訪問共享內存時因該怎麼辦
    五、在寫程序遇到問題的時候,一般採用什麼調試方法
    六、一個 client/server 的協議問題
    七、剩下就是隨便聊聊,好比有缺點、指望工做的性質、職業規劃等
    總結一下教訓:
    一、介紹項目的時候不能一味的按照事前想好的模板說,應該根據所申請的工做的性質,多
    說一些和本身申請的工做內內容相近的東西說。我在介紹個人項目的時候,說了不少硬件的
    東西,而相關的 Linux 下的 C 編程卻沒有提到多少,一大失敗之處。
    二、對於他提的第二個問題,當時由於緊張沒有想出來,掛了電話之後纔有了思路。
    三、這個機率題之前碰到過,並且和同窗們討論過,答案很早就知道了。可是遇到面試的時
    候,不能立刻就說出答案,由於這樣擺明了高訴人家你之前就見過這道題,這樣就失去了做
    爲考題的意義。因此,若是事前知道答案也不要立刻說出來,裝做考慮中,而後慢慢說出答
    案。我就是很快就說出了答案,失敗!
    四、在問項目的時候,他問我代碼行大概有多少 我說大概有 5.6K 行左右。在回答第四個問
    題的時候,我幾乎是將書上所講過的東西背了一遍給他,雖然答案是正確的,可是我估計他
    一聽就聽出來是在背書了,因此這也會減分很多。,並且百度強調創新,其實就算你不知道
    答案也能夠按照本身的思路說一下的,只要邏輯清晰、合理都會比我背書強„„
    五、個人回答是有時候用 gdb,有時候用輸出日誌的形式。以我以前給他講的項目經驗是不
    大可能會涉及這麼多的知識的,因此估計他又聽出我是在背書了„„繼續減分
    六、後來我發現這個問題其實他不是在考我問題的答案,是考我解決問題的能力和考慮問題
    的思路。這點是我比較差的地方,沒辦法„„減分
    我前面表現那麼失敗,基本上已經沒有什麼但願了,後面的談話已經沒有意義了,只不過是
    禮貌性的結束此次面試了。
    上面的總結是我收到拒信之後才總結出來的,可悲的是電話面試結束之後,還覺得能被錄取
    呢„„
    面試官太和善了,並且氣氛及其融洽,根本沒有任何很差的徵兆,面試官好厲害!
    至此,個人百度求職過程到此告一段落„„生活還在繼續,工做還得繼續努力去找,加油!
    百度電話面試題目: 1.談談你對數據庫中索引的理解 2.如今普通關係數據庫用得數據結構
    是什麼類型的數據結構 3.索引的優勢和缺點 4.session 和 cache 的區別是什麼 5.若是有幾千個
    session,怎麼提升效率 6.session 是存儲在什麼地方,以什麼形式存儲的。
    百度技術研發筆試題目
    /*百度面試題
    • 有一根 27 釐米的細木杆,在第 3 釐米、7 釐米、11 釐米、17 釐米、23 釐米這五個位置
      上各有一隻螞蟻。
    • 木杆很細,不能同時經過一隻螞蟻。開始 時,螞蟻的頭朝左仍是朝右是任意的,它們只
      會朝前走或調頭,
    • 但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每
      秒鐘能夠走一釐米的距離。
    • 編寫程序,求全部螞蟻都離開木杆 的最小時間和最大時間。
    • 分析:題目中的螞蟻只可能相遇在整數點,不能夠相遇在其它點,好比 3.5cm 處之類的,也就
      是可讓每隻螞蟻走 1 秒,而後
    • 查看是否有相遇的便可.
    • 這樣個人程序實現思路就是,初始化 5 只螞蟻,讓每隻螞蟻走 1 秒,而後看是否有相遇的,如
      果有則作相應處理.當每隻螞蟻都
    • 走出木杆時,我就記錄當前時間.這樣就能夠獲得當前狀態狀況下,須要多久能夠走出木杆,
      而後遍歷全部狀態則能夠獲得所胡
    • 可能.
      /
      package baidu;
      public class Ant {
      /
    • step 表示螞蟻每個單位時間所走的長度
      /
      private final static int step = 1;
      /
    • position 表示螞蟻所處的初始位置
      /
      private int position;
      /
    • direction 表示螞蟻的前進方向,若是爲 1 表示向 27 釐米的方向走, 若是爲-1,則表
      示往 0 的方向走。
      /
      private int direction = 1;
      /
    • 此函數運行一次,表示螞蟻前進一個單位時間,若是已經走下木杆則會拋出異常
      /
      public void walk() {
      if (isOut()) {
      throw new RuntimeException("the ant is out");
      }
      position = position + this.direction
      step;
      };
      /**
    • 檢查螞蟻是否已經走出木杆,若是走出返回 true
    • */
      public boolean isOut() {
      return position <= 0 || position >= 27;
      }
      /**java

    • 檢查此螞蟻是否已經遇到另一隻螞蟻
    • @param ant
    • @return 若是遇到返回 true
      */
      public boolean isEncounter(Ant ant) {
      return ant.position == this.position;
      }
      /**
    • 改變螞蟻的前進方向
      /
      public void changeDistation() {
      direction = -1
      direction;
      }
      /**
    • 構造函數,設置螞蟻的初始前進方向,和初始位置
    • @param position
    • @param direction
      */
      public Ant(int position, int direction) {
      this.position = position;
      if (direction != 1) {
      this.direction = -1;//方向設置初始位置,好比爲 0 時,也將其設置爲 1.這樣能夠方便後面的
      處理
      } else {
      this.direction = 1;
      }
      }
      }
      /////////////////////////////////////////////////////////
      package baidu;
      public class Controller {
      public static void main(String[] args) {
      int time = 0;
      for (int i = 0; i < 32; i++) {
      Ant[] antArray = getAntList(getPoistions(), getDirections(i));
      while (!isAllOut(antArray)) {
      for (Ant ant : antArray) {
      if (!ant.isOut()) {
      ant.walk();
      }
      }
      time++;
      // 查看是否有已經相遇的 Ant,若是有則更改其前進方向
      dealEncounter(antArray);
      }
      System.out.println(time);
      // 將時間歸 0,這樣能夠從新設置條件,再次獲得所有走完所須要的時間.
      time = 0;
      }
      }
      /**
    • 這個函數的算法很亂,但暫時能解決問題
    • @param list
      */
      public static void dealEncounter(Ant[] antArray) {
      int num_ant = antArray.length;
      for (int j = 0; j < num_ant; j++) {
      for (int k = j + 1; k < num_ant; k++) {
      if (antArray[j].isEncounter(antArray[k])) {
      antArray[j].changeDistation();
      antArray[k].changeDistation();
      }
      }
      }
      }
      /**
    • 由於有 5 只 Ant,因此組合以後有 32 種組合.恰好用 5 位二進制來表示,若是爲 0 則表示
      Ant 往 0 的方向走 若是爲 1,則表示往 27 的方向走
    • 注:在經過 Ant 的構造函數設置初始值時,經過過濾把 0 修改爲了-1.
      */
      public static int[] getDirections(int seed) {
      int result[] = new int[5];
      result[0] = seed % 2;
      result[1] = seed / 2 % 2;
      result[2] = seed / 4 % 2;
      result[3] = seed / 8 % 2;
      result[4] = seed / 16 % 2;
      System.out.println("directions is " + result[0] + "|" + result[1] + "|"
    • result[2] + "|" + result[3] + "|" + result[4]);
      return result;
      }
      /**
    • 批量設置 Ant 的初始位置,這樣設置不是十分必要,能夠直接在代碼中設置
    • @return
      */
      public static int[] getPoistions() {
      return new int[] { 3, 7, 11, 17, 23 };
      }
      /**
    • 取得設置好初始值的 5 只 Ant
    • @param positions
    • @param directions
    • @return
      */
      public static Ant[] getAntList(int[] positions, int[] directions) {
      Ant ant3 = new Ant(positions[0], directions[0]);
      Ant ant7 = new Ant(positions[1], directions[1]);
      Ant ant11 = new Ant(positions[2], directions[2]);
      Ant ant17 = new Ant(positions[3], directions[3]);
      Ant ant23 = new Ant(positions[4], directions[4]);
      return new Ant[] { ant3, ant7, ant11, ant17, ant23 };
      }
      /**
    • 判斷是否全部的 Ant 都已經走出了木杆,也就是設置退出條件
    • @param antArray
    • @return
      /
      public static boolean isAllOut(Ant[] antArray) {
      for (Ant ant : antArray) {
      if (ant.isOut() == false) {
      return false;
      }
      }
      return true;
      }
      }
      編程:
      用 C 語言實現一個 revert 函數,它的功能是將輸入的字符串在原串上倒序後返回。
      2 編程:
      用 C 語言實現函數 void
      memmove(void dest,const void src,size_t n)。memmove
      函數的功能是拷貝 src 所指的內存內容前 n 個字節
      到 dest 所指的地址上。
      3 英文拼寫糾錯:
      在用戶輸入英文單詞時,常常發生錯誤,咱們須要對其進行糾錯。假設已經有一個包
      含了正確英文單詞的詞典,請你設計一個拼寫糾錯
      的程序。
      (1)請描述你解決這個問題的思路;
      (2)請給出主要的處理流程,算法,以及算法的複雜度;
      (3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
      4 尋找熱門查詢:
      搜索引擎會經過日誌文件把用戶每次檢索使用的全部檢索串都記錄下來,每一個查詢串
      的長度爲 1-255 字節。假設目前有一千萬個記錄,
      這些查詢串的重複度比較高,雖然總數是 1 千萬,但若是除去重複後,不超過 3 百萬個
      。一個查詢串的重複度越高,說明查詢它的用戶越多,
      也就是越熱門。請你統計最熱門的 10 個查詢串,要求使用的內存不能超過 1G。
      (1)請描述你解決這個問題的思路;
      (2)請給出主要的處理流程,算法,以及算法的複雜度。
      5 集合合併:
      給定一個字符串的集合,格式如:
      {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}
      要求將其中交集不爲空的集合合併,要求合併完成後的集合之間無交集,例如上例應
      輸出
      {aaa bbb ccc ddd hhh},{eee fff}, {ggg}
      (1)請描述你解決這個問題的思路;
      (2)請給出主要的處理流程,算法,以及算法的複雜度
      (3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
      ////////////////////////////////1
      1 題
      char revert(char str)
      {
      int n=strlen(str);
      int i=0;
      char c;
      for(i=0;i
      {
      c=str;
      str=str[n-i];
      str[n-i]=c;
      }
      return str;
      }
      ///////////////////////////////////
      2 題
      void memmove(void dest,const void src,size_t n)
      {
      assert((dest!=0)&&(src!=0));
      char
      temp=(char )dest;
      char
      ss=(char )src;
      int i=0;
      for(;i<N;I++)
      {
      temp++=*ss++;
      }
      return temp;
      }
      /////////////////////////////////////////////////
      3 題
      (1)思路 :
      字典以字母鍵樹組織,在用戶輸入同時匹配
      (2)
      流程:
      每輸入一個字母:
      沿字典樹向下一層,
      a)若能夠順利下行,則繼續至結束,給出結果;
      b)若該處不能匹配,糾錯處理,給出拼寫建議,繼續至 a);
      算法:
      1.在字典中查找單詞
      字典採用 27 叉樹組織,每一個節點對應一個字母,查找就是一個字母
      一個字母匹配.算法時間就是單詞的長度 k.
      2.糾錯算法
      狀況:當輸入的最後一個字母不能匹配時就提示出錯,簡化出錯處理,動態提示
      可能 處理方法:
      (a)當前字母前缺乏了一個字母:搜索樹上兩層到當前的匹配做爲建議;
      (b)當前字母拼寫錯誤:當前字母的鍵盤相鄰做爲提示;(只是簡單的描述,可
      以有更多的)
      根據分析字典特徵和用戶單詞已輸入部分選擇(a),(b)處理
      複雜性分析:影響算法的效率主要是字典的實現與糾錯處理
      (a)字典的實現已有成熟的算法,改進不大,也不會成爲瓶頸;
      (b)糾錯策略要簡單有效 ,如前述狀況,是線性複雜度;
      (3)改進
      策略選擇最是重要,能夠採用統計學習的方法改進。
      //////////////////////////////////////////////
      4 題
      (1)思路:
      用哈希作
      (2)
      首先逐次讀入查詢串,算哈希值,保存在內存數組中,同時統計頻度
      (注意值與日誌項對應關係)
      選出前十的頻度,取出對應的日誌串,簡單不過了。
      哈希的設計是關鍵。
      //////////////////////////////////////////////////
      5 題
      (1)思路:先將集合按照大小排列後,優先考慮小的集合是否與大的集合有交集。有
      就合併,若是小集合與全部其餘集合都沒有交集,則獨立。獨立的集合在下一輪的比
      較中不用考慮。這樣就能夠儘可能減小字符串的比較次數。當全部集合都獨立的時候,
      就終止。
      (2)處理流程:
      1.將集合按照大小排序,組成集合合併待處理列表
      2.選擇最小的集合,找出與之有交集的集合,
      若是有,合併之;
      若是無,則與其它集合是獨立集合,從待處理列表 中刪除。
      3.重複直到待處理列表爲空
      算法:
      1。將集合按照大小從小到大排序,組成待處理的集合列表。
      2。取出待處理集合列表中最小的集合,對於集合的每一個元素,依次在其餘集合中搜索
      是否有此元素存在:
      1>若存在,則將此小集合與大集合合併,並根據大小插入對應的位置 。轉 3

      2>若不存在,則在該集合中取下一個元素。若是無下一個元素,即全部元素
      都不存在於其餘集合。則代表此集合獨立,從待處理集合列表中刪除。並加入結果集
      合列表。轉 3。
      3。若是待處理集合列表不爲空,轉 2。
      若是待處理集合列表爲空,成功退出,則結果集合列表就是最終的輸出。
      算法複雜度分析:
      假設集合的個數爲 n,最大的集合元素爲 m
      排序的時間複雜度能夠達到 nlog(n)
      而後對於元素在其餘集合中查找,最壞狀況下爲(n-1)
      m
      查找一個集合是否與其餘集合有交集的最壞狀況是 mm(n-1)
      合併的時間複雜度不會超過查找集合有交集的最壞狀況。
      因此最終最壞時間複雜度爲 O(mmnn)
      須要說明的是:此算法的平均時間複雜度會很低,由於不管是查找仍是合併,都是處
      於最壞狀況的機率很小,並且排序後優先用最小集合做爲判斷是否獨立的對象,優先
      與最大的集合進行比較,這些都最大的迴避了最壞狀況。
      (3)可能的改進:
      首先能夠實現將每一個集合裏面的字符串按照字典序進行排列,這樣就能夠將查找以及
      合併的效率增高。
      另外,可能採起恰當的數據結構也能夠將查找以及合併等操做的效率獲得提升。
      2006 百度筆試題
      1、選擇題:15 分 共 10 題
      1.一個含有 n 個頂點和 e 條邊的簡單無向圖,在其鄰接矩陣存儲結構中共有個零元素。
      A.e B.2e C.n2-e D.n2-2e
      2.
      是面向對象程序設計語言中的一種機制。這種機制實現了方法的定義與具體的對象無
      關,而對方法的調用則能夠關聯於具體的對象。
      A.繼承(Inhertance) B.模板(Template)
      C.對象的自身引用(Self-Reference) D.動態綁定(Dynamic Binding)
      3.應用層 DNS 協議主要用於實現 網絡服務功能.
      A. IP 地址到網絡設備名字的映射 B. IP 地址到網絡硬件地址的映射
      C. 網絡設備名字到 IP 地址的映射 D. 網絡硬件地址到 IP 地址的映射
      4.linux 默認狀況下,一個進程最多能打開多少文件?
      A.64 B. 128 C. 512 D. 1024
      5.下面結構體
      struct s1 {
      char ch,
      ptr;
      union {
      short a, b;
      unsigned int c:2, d:1;
      }
      struct s1 next;
      };
      的大小是_
      A. 12 字節 B.16 字節 C.20 字節 D. 24 字節
      6.任何一個基於"比較"的內部排序的算法,若對 6 個元素進行排序,則在最壞狀況下所需的
      比較次數至少爲__

      A.10 B.11 C.21 D.36
      7.如下不是進程間通信的是_

      A 共享內存 B 信號量 C 線程局部存儲 D 消息隊列
      8.下面程序,求 count 的值
      int func(x)
      {
      int count= 0;
      x=9999;
      while(x)
      {
      Count ++;
      x = x&(x-1);
      }
      return count;
      }
      A 8; B 10; C 5; D 11
      9.使用 malloc 系統調用分配的內存是在__ 上分配的?
      A 棧; B bss; C 物理內存; D 堆
      10.最壞狀況下,合併兩個大小爲 n 的已排序數組所須要的比較次數___

      A.2n B.2n-1 C.2n+1 D.2n-2
      2、簡答題:20 分,共 3 題
      1.(5 分)下面這段代碼是把中英文混合字符串(漢字用兩個字節表示,特色是第一個字節的
      最高位爲 1)中的大寫字母轉化爲小寫字母,請找出其中的 bug,注意各類異常狀況。
      for (char
      piterator = szWord; piterator != 0; piterator++)
      {
      if (
      piterator & 0x80 != 0)
      {
      piterator++;
      }
      else if (piterator >= 'A' && piterator <= 'Z')
      piterator += 32;
      }
      2.(5 分)對給定的上億條無序的 url,請按照 domain、site 以及 path 分別排序,並請指出排
      序過程當中可能會遇到的哪些問題?如何提升效率?
      例如:http://www.baidu.com/path/about.html,domain、site 以及 path 的定義分別以下:
      Domain:baidu.com
      Site:www.baidu.com
      Path: www.baidu.com/path
      3.(10 分)某型 CPU 的一級數據緩存大小爲 16K 字節,cache 塊大小爲 64 字節;二級緩存
      大小爲 256K 字節,cache 塊大小爲 4K 字節,採用二路組相聯。經測試,下面兩段代碼運行
      時效率差異很大,請分析哪段代碼更好,以及可能的緣由。
      爲了進一步提升效率,你還能夠採起什麼辦法?
      A 段代碼
      int matrix[1023][15];
      const char
      str = "this is a str";
      int i, j, tmp, sum = 0;
      tmp = strlen(str);
      for(i = 0; i < 1023; i++) {
      for(j = 0; j < 15; j++) {
      sum += matrix[i][j] + tmp;
      }
      }
      B 段代碼
      int matrix[1025][17];
      const char *str = "this is a str";
      int i, j, sum = 0;
      for(i = 0; i < 17; i++) {
      for(j = 0; j < 1025; j++) {
      sum += matrix[j][i] + strlen(str);
      }
      }
      3、編程題:30 分 共 1 題
      注意:要求儘量提供完整代碼,若是能夠編譯運行酌情加分。
      1.內存中有一個長數組,條目數爲 10 萬,數組單元爲結構體 struct array,sizeof(struct array)
      爲 512 字節。結構有一 int 型成員變量 weight。現須要取得按 weight 值從大到小排序的前 500
      個數組單元,請實現算法,要求效率儘量高。
      4、設計題:35 分 共 1 題
      注意:請儘量詳細描述你的數據結構、系統架構、設計思路等,建議多寫一些僞代碼或者
      流程說明。
      1.請設計一個字典。以字符串爲索引,存儲用戶定義的定長結構。要求有增、刪、查、改的
      功能。已經給定一個函數,能夠由字符串映射到一個簽名,每一個簽名由兩個 unsigned int 類
      型組成。假設每個字符串可以對應惟一的一個簽名,徹底沒有重複(或者重複的機率能夠
      忽略),而且簽名分佈足夠均勻。
      請描述你的數據結構?內存如何申請?增、刪、查、改的功能如何實現?若是操做很頻繁,
      該如何優化?
      2007 百度筆試題
      1、選擇題:15 分 共 10 題
  15. 在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是 .
    A. Shell 排序 B. 歸併排序 C. 直接插入排序 D. 選擇排序
  16. 如下多線程對 int 型變量 x 的操做,哪幾個須要進行同步:
    A. x=y; B. x C. x; D. x=1;
  17. 代碼
    void func() {
    static int val;

    }
    中,變量 val 的內存地址位於:
    A. 已初始化數據段 B.未初始化數據段 C.堆 D.棧
  18. 同一進程下的線程能夠共享如下
    A. stack B. data section
    C. register set D. thread ID
  19. 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
  20. short a[100],sizeof(a)返回?
    A 2 B 4 C 100 D 200 E 400
  21. 如下哪一種不是基於組件的開發技術_____。
    A XPCOM B XP C COM D CORBA
  22. 如下代碼打印的結果是(假設運行在 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
  23. STL 中的哪一種結構是連續形式的存儲
    A map B set C list D vector
  24. 一個棧的入棧序列是 A,B,C,D,E,則棧的不可能的輸出序列是( )
    A、EDCBA; B、DECBA; C、DCEAB; D、ABCDE
    2、簡答題:20 分,共 2 題
  25. (5 分)重複屢次 fclose 一個打開過一次的 FILE *fp 指針會有什麼結果,並請解釋。
    考察點:致使文件描述符結構中指針指向的內存被重複釋放,進而致使一些不可預期的異
    常。
  26. (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 }
    3、編程題:30 分 共 1 題
    注意:要求提供完整代碼,若是能夠編譯運行酌情加分。
  27. 求符合指定規則的數。
    給定函數 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

    4、設計題:35 分 共 1 題
    注意:請儘量詳細描述你的數據結構、系統架構、設計思路等。建議多寫一些僞代碼或
    者流程說明。
  28. 假設一個 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) 給定一個 URLID,將其置爲不可用
    限制條件:內存佔用不超過 1G,單個文件大小不超過 2G,一個目錄下的文件數不超過 128


    爲得到最佳性能,請說明設計的數據結構、搜索算法,以及資源消耗。若是系統數據量擴
    大,該如何多機分佈處理?
    騰訊筆試題:
    1 計算 a^b << 2 (運算符優先級問題)
    2 根據先序中序求後序
    3 a[3][4]哪一個不能表示 a[1][1]: (&a[0][0]) ((a+1)+1) (&a[1]+1) (&a[0][0]+4)
    4 for(int i...)
    for(int j...)
    printf(i,j);
    printf(j)
    會出現什麼問題
    5 for(i=0;i<10;++i,sum+=i);的運行結果
    6 10 個數順序插入查找二叉樹,元素 62 的比較次數
    7 10 個數放入模 10hash 鏈表,最大長度是多少
    8 fun((exp1,exp2),(exp3,exp4,exp5))有幾個實參
    9 希爾 冒泡 快速 插入 哪一個平均速度最快
    10 二分查找是 順序存儲 鏈存儲 按 value 有序中的哪些
    11 順序查找的平均時間
    12
    p=NULL p=new char[100] sizeof(p)各爲多少
    13 頻繁的插入刪除操做使用什麼結構比較合適,鏈表仍是數組
    14 enum 的聲明方式
    其餘 1 個選擇暫時想不起來了
    大題:
    1 把字符串轉換爲小寫,不成功返回 NULL,成功返回新串
    char
    toLower(char ***cStr)
    {
    char
    sDest= NULL;
    if( 1
    )
    {
    int j;
    sLen = strlen(***cStr);
    sDest = new [__2];
    if(sDest == NULL)
    return NULL;
    sDest[sLen] = '\0';
    while(_3)
    sDest[sLen] = toLowerChar(***cStr[sLen]);
    }
    return sDest;
    }
    2 把字符串轉換爲整數 例如:"-123" -> -123
    main()
    {
    .....
    if(
    string == '-' )
    n = 1__;
    else
    n = num(string);
    .....
    }
    int num(char string)
    {
    for(;!(
    string==0);string++)
    {
    int k;
    k = 2;
    j = --sLen;
    while( 3)
    k = k * 10;
    num = num + k;
    }
    return num;
    }
    附加題:
    1 linux 下調試 core 的命令,察看堆棧狀態命令
    2 寫出 socks 套接字 服務端 客戶端 通信程序
    3 填空補全程序,按照個人理解是添入:win32 調入 dll 的函數名 查找函數入口的函數名 找
    到函數的調用形式 把 formView 加到 singledoc 的聲明 將 singledoc 加到 app 的聲明
    4 有關係 s(sno,sname) c(cno,cname) sc(sno,cno,grade)
    1 問上課程 "db"的學生 no
    2 成績最高的學生號
    3 每科大於 90 分的人數
    其餘
    1)此題 10 分
    對任意輸入的正整數 N,編寫 C 程序求 N!的尾部連續 0 的個數,並指出計算複雜度。如:
    18!=6402373705728000,尾部連續 0 的個數是 3。
    (不用考慮數值超出計算機整數界限的問題)
    2)此題 10 分
    編寫一個 C 語言函數,要求輸入一個 url,輸出該 url 是首頁、目錄頁或者其餘 url
    以下形式叫作首頁:
    militia.info/
    www.apcnc.com.cn/
    http://www.cyjzs.comwww.greena888.com/
    www.800cool.net/
    http://hgh-products.my-age.net/
    以下形式叫作目錄頁:
    thursdaythree.net/greenhouses--gas-global-green-house-warming/
    http://www.mw.net.tw/user/tgk5ar1r/profile/
    http://www.szeasy.com/food/yszt/chunjie/
    www.fuckingjapanese.com/Reality/
    請注意:
    a) url 有可能帶 http 頭也有可能不帶
    b)動態 url(即含有"?"的 url)的一概不算目錄頁,如:
    www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/
    www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/
    另:若是你會 linux,請用 linux 下的 grep 命令實現第 2 題的功能(附加 5 分)。
    3)此題 40 分
    若是必須從網頁中區分出一部分"重要網頁"(例如在 10 億中選 8 億),比其餘網頁更值得
    展示給用戶,請提出一種方案。
    4)此題 40 分
    假設有 10 億網頁已經被咱們存下來,並提供以下信息:網頁全文(即網頁的源碼)、全文
    長度、網頁正文(即網頁中提取的主體文字)、
    正文長度,以及其餘網頁提取物等,如今但願去掉其中的重複網頁,請提出可行的方案,
    計算出每一個網頁對應的重複度,你能夠本身
    對網頁重複下定義,也能夠提出須要哪些更多的網頁提取物來實現更好的去重複方案
    百度 2008 年校園招聘筆試題(研發技術)
    不定項選擇題
    線程與進程比較而言,下面論述成立的有()
    A. 一個線程能夠有多個進程組成
    B. 一個進程能夠有多個線程組成
    C. 相對而言,線程運行須要更多的資源
    D. 線程比進程運行須要更少的系統資源
    2.13*16=244 在使用
    進制時成立()
    A.6 B.11 C.9 D.7 E.8
    3.如下的 C 程序代碼片斷運行後 C 和 d 的值分別是多少()
    Int a =1,b =2;
    Int c,d;
    C =(a&b)&&a;
    d =(a&&b)&a;
    A.0,0 B.0,1 C.1,0 D.1,1
    4.假設局域網中子網掩碼是 255.255.0.0,那麼在這個局域網中哪些 IP 地址是可用的?()
    A.192.168.0.0 B.192.168.0.1 C.192.168.255.1 D.192.168.255.255
    5.給定數列(541,132,982,746,518,181,946,314,205,827)按照從小到大的順
    序排列,採用冒泡排序時,第一趟掃描 結果是();採用直接選擇大值開始排序時,第一趟掃
    描結果是();採用快速排序(以中間元素 518 爲基準)的第一趟掃描結果是()。
    A.(541,132,827,746,518,181,946,314,205,984)
    B.(205,132,314,181,518,746,946,984,541,827)
    C.(132,541,746,984,181,518,314,946,205,827)
    6.有若干 5g 和 7g 的砝碼,任何大於()克都可以用 5g 和 7g 的砝碼組合出。
    A.35 B.23 C.12 D.53
    7.93486781634*22349659874=_____6(30 秒)
    8.在 Linux 系統中,對命令「In file 1 file2」描述正確的是?()
    A.創建軟連接 file1,並指向 file2
    B. 創建硬連接 file1,並指向 file2
    C. 創建軟連接 file2,並指向 file1
    D. 創建硬連接 file2,並指向 file1
    9.在 Shell 編程中,下面哪一個表示上一步所運行程序的返回值?()
    A. $#
    B. $(後一字符打不出來能夠描述一下„S 下面在加一點‟)
    C. $&
    D. $!
    編程和測試設計題(2 道)
    (一) 簡述:實現一個函數,對一個正整數 n,算獲得 1 須要的最少操做次數:
    若是 n 爲偶數,將其處以 2; 若是 n 爲奇數,能夠加 1 或減 1; 一直處理下去。
    例子:
    ret = func(7);
    ret = 4,能夠證實最少須要 4 次運算
    n = 7
    n—6
    n/2 3
    n/2 2
    n++ 1
    要求:實現函數(實現儘量高效)
    Int func(unsign int n);n 爲輸入,返回最小的運算次數。
    給出思路(文字描述),完成代碼,並分析你算法的時間複雜度。
    請列舉測試方法和思路
    (二) 簡述:IP 防火牆
    Security 公司的網絡管理工程師 Mr. leak 最近發現有很多來自公司外部 IP 的請求,試圖
    非法訪問公司內部資源,爲了避免影響數據訪問流程。他不得不寫一個高效的程序——一個工
    做在 Ipv4 上的防火牆,若是請求來自非受權的 ip 地址,則將請求丟棄。爲了便於管理,通
    過文本文件 IP.TXT 來配置受權的 IP 地址,文件格式爲每行(‟/n‟)一個 IP 地址(或 IP 段),範
    圍不超過一個 B 類。例如:
    162.105.91.163
    59.66.105.0 59.66.105.255
    211.71.0.0 211.71.255.255
    限制:IP 段的起止地址間以空格隔開。文件不超過 10 萬行,內存不超過 4M 字節。
    要求:請編寫一個程序,讀入 IP.TXT 文件。並從標準輸入接受一個 IP 地址。若是該地址在
    受權範圍內,則在標準輸出上打印 Y,不然打印 N.若是輸入爲一個空行,程序結束。
    請給出思路(文字描述),完成代碼,分析你採用算法的優劣。
    請列舉測試方法和思路
    設計思考題(2 道,請選作一道)
    (三) 設計一個簡單的網頁抓取系統,目標是抓取 z.baidu.com 站點上的有價值網頁。
    1) 請設計基本模型,並作出簡要說明。
    請考慮如何獲取網頁、如何存儲網頁、如何判斷網頁的價值。。。。。。。。
    2) 實際應用中,須要考慮哪些因素。
    (四) 簡述:某廣告投放系統採用 B/S 結構,其主要用戶爲廣告主,廣告主可經過該廣
    告投放系統在各個網站上投放廣告並查看投放效果。該廣告系統須要實現以下功能:
    1) 用戶可向本身帳戶中加款。
    2) 用戶可提交廣告,廣告包括四種形式:文字廣告,圖片廣告,flash 廣告和對媒體廣
    告。
    3) 用戶可制定哪些廣告在哪些網站上展示,用戶可分別廣告在制定網站上的點擊單價
    4) 廣告被點擊時,直接從用戶帳戶中扣除相應的錢款
    5) 用戶帳戶餘額不足時,全部廣告失效,用戶加款後,恢復生效。
    6) 用戶可查詢廣告的每日消費狀況(點擊次數、消費額)、廣告在各個網站的消費狀況。
    要求:1)設計該系統的數據表結構,要求知足上述功能,結構清晰,並儘量靈活。
    2)寫出功能 6 所涉及的 SQL 語句
    3)請分析隨着廣告主的增長、廣告點擊次數的增加,系統可能會在哪些方面出項性能瓶
    頸?你在設計時是如何考慮解決這些瓶頸的?潛在的性能瓶頸還有哪些?
    1)此題 10 分
    對任意輸入的正整數 N,編寫 C 程序求 N!的尾部連續 0 的個數,並指出計算複雜度。如:18!=
    6402373705728000,尾部連續 0 的個數是 3。
    (不用考慮數值超出計算機整數界限的問題)
    2)此題 10 分
    編寫一個 C 語言函數,要求輸入一個 url,輸出該 url 是首頁、目錄頁或者其餘 url
    以下形式叫作首頁:
    militia.info/
    www.apcnc.com.cn/
    http://www.cyjzs.comwww.greena888.com/
    www.800cool.net/
    http://hgh-products.my-age.net/
    以下形式叫作目錄頁:
    thursdaythree.net/greenhouses--gas-global-green-house-warming/
    http://www.mw.net.tw/user/tgk5ar1r/profile/
    http://www.szeasy.com/food/yszt/chunjie/
    www.fuckingjapanese.com/Reality/
    請注意:
    a) url 有可能帶 http 頭也有可能不帶
    b)動態 url(即含有"?"的 url)的一概不算目錄頁,如:
    www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/
    www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/
    另:若是你會 linux,請用 linux 下的 grep 命令實現第 2 題的功能(附加 5 分)。
    3)此題 40 分
    若是必須從網頁中區分出一部分"重要網頁"(例如在 10 億中選 8 億),比其餘網頁更值得展示給用戶,請
    提出一種方案。
    4)此題 40 分
    假設有 10 億網頁已經被咱們存下來,並提供以下信息:網頁全文(即網頁的源碼)、全文長度、網頁正文
    (即網頁中提取的主體文字)、
    正文長度,以及其餘網頁提取物等,如今但願去掉其中的重複網頁,請提出可行的方案,計算出每一個網頁
    對應的重複度,你能夠本身
    對網頁重複下定義,也能夠提出須要哪些更多的網頁提取物來實現更好的去重複方案
    1 編程:
    用 C 語言實現一個 revert 函數,它的功能是將輸入的字符串在原串上倒序後返回。
    2 編程:
    用 C 語言實現函數 void memmove(void dest,const void src,size_t n)。memmove 函數
    的功能是拷貝 src 所指的內存內容前 n 個字節到 dest 所指的地址上。
    3 英文拼寫糾錯:
    在用戶輸入英文單詞時,常常發生錯誤,咱們須要對其進行糾錯。假設已經有一個包含
    了正確英文單詞的詞典,請你設計一個拼寫糾錯的程序。
    (1)請描述你解決這個問題的思路;
    (2)請給出主要的處理流程,算法,以及算法的複雜度;
    (3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
    4 尋找熱門查詢:
    搜索引擎會經過日誌文件把用戶每次檢索使用的全部檢索串都記錄下來,每一個查詢串的
    長度爲 1-255 字節。假設目前有一千萬個記錄,這些查詢串的重複度比較高,雖然總數是 1
    千萬,但若是除去重複後,不超過 3 百萬個。一個查詢串的重複度越高,說明查詢它的用戶
    越多,也就是越熱門。請你統計最熱門的 10 個查詢串,要求使用的內存不能超過 1G。
    (1)請描述你解決這個問題的思路;
    (2)請給出主要的處理流程,算法,以及算法的複雜度。
    5 集合合併:
    給定一個字符串的集合,格式如: {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd
    hhh} 要求將其中交集不爲空的集合合併,要求合併完成後的集合之間無交集,例如上例應
    輸出 {aaa bbb ccc ddd hhh},{eee fff}, {ggg}
    (1)請描述你解決這個問題的思路;
    (2)請給出主要的處理流程,算法,以及算法的複雜度
    (3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
    ////////////////////////////////
    1 題
    char
    revert(char str)
    {
    int n=strlen(str);
    int i=0;
    char c;
    for(i=0;i {
    c=str;
    str=str[n-i];
    str[n-i]=c;
    }
    return str;
    }
    ///////////////////////////////////
    2 題
    void
    memmove(void dest,const void src,size_t n)
    {
    assert((dest!=0)&&(src!=0));
    char temp=(char )dest;
    char ss=(char )src;
    int i=0;
    for(;i {
    temp =ss ;
    }
    return temp;
    }
    /////////////////////////////////////////////////
    3 題
    (1)思路: 字典以字母鍵樹組織,在用戶輸入同時匹配
    (2) 流程:
    每輸入一個字母:
    沿字典樹向下一層,
    a)若能夠順利下行,則繼續至結束,給出結果;
    b)若該處不能匹配,糾錯處理,給出拼寫建議,繼續至 a);
    算法:
    1.在字典中查找單詞
    字典採用 27 叉樹組織,每一個節點對應一個字母,查找就是一個字母
    一個字母匹配.算法時間就是單詞的長度 k.
    2.糾錯算法
    狀況:當輸入的最後一個字母不能匹配時就提示出錯,簡化出錯處理,動態提示可能 處理方
    法:
    (a)當前字母前缺乏了一個字母:搜索樹上兩層到當前的匹配做爲建議;
    (b)當前字母拼寫錯誤:當前字母的鍵盤相鄰做爲提示;(只是簡單的描述,可 以有更多的)
    根據分析字典特徵和用戶單詞已輸入部分選擇(a),(b)處理
    複雜性分析:影響算法的效率主要是字典的實現與糾錯處理
    (a)字典的實現已有成熟的算法,改進不大,也不會成爲瓶頸;
    (b)糾錯策略要簡單有效 ,如前述狀況,是線性複雜度;
    (3)改進
    策略選擇最是重要,能夠採用統計學習的方法改進。
    //////////////////////////////////////////////
    4 題
    (1)思路:用哈希作
    (2) 首先逐次讀入查詢串,算哈希值,保存在內存數組中,同時統計頻度(注意值與日誌項
    對應關係) my.chinahrlab.com 選出前十的頻度,取出對應的日誌串,簡單不過了。哈希的
    設計是關鍵。
    //////////////////////////////////////////////////
    5 題
    (1)思路:先將集合按照大小排列後,優先考慮小的集合是否與大的集合有交集。有就合併,
    若是小集合與全部其餘集合都沒有交集,則獨立。獨立的集合在下一輪的比較中不用考慮。
    這樣就能夠儘可能減小字符串的比較次數。當全部集合都獨立的時候,就終止。
    (2)處理流程:
    1.將集合按照大小排序,組成集合合併待處理列表
    2.選擇最小的集合,找出與之有交集的集合,若是有,合併之;若是無,則與其它集合是獨
    立集合,從待處理列表 中刪除。
    3.重複直到待處理列表爲空
    算法: 1。將集合按照大小從小到大排序,組成待處理的集合列表。 2。取出待處理集合列
    表中最小的集合,對於集合的每一個元素,依次在其餘集合中搜索是否有此元素存在:
    1>若存在,則將此小集合與大集合合併,並根據大小插入對應的位置 。轉 3。
    2>若不存在,則在該集合中取下一個元素。若是無下一個元素,即全部元素都不存在於其
    他集合。則代表此集合獨立,從待處理集合列表中刪除。並加入結果集合列表。轉 3。
    3。若是待處理集合列表不爲空,轉 2。
    若是待處理集合列表爲空,成功退出,則結果集合列表就是最終的輸出。
    算法複雜度分析:
    假設集合的個數爲 n,最大的集合元素爲 m 排序的時間複雜度能夠達到 nlog(n) 而後
    對於元素在其餘集合中查找,最壞狀況下爲(n-1)
    m 查找一個集合是否與其餘集合有交
    集的最壞狀況是 mm(n-1) 合併的時間複雜度不會超過查找集合有交集的最壞狀況。因此
    最終最壞時間複雜度爲 O(mmn*n)
    須要說明的是:此算法的平均時間複雜度會很低,由於不管是查找仍是合併,都是處於
    最壞狀況的機率很小,並且排序後優先用最小集合做爲判斷是否獨立的對象,優先與最大的
    集合進行比較,這些都最大的迴避了最壞狀況。
    (3)可能的改進:
    首先能夠實現將每一個集合裏面的字符串按照字典序進行排列,這樣就能夠將查找以及合
    並的效率增高。另外,可能採起恰當的數據結構也能夠將查找以及合併等操做的效率獲得提
    高。
    取 自
    "http://wiki.xyzp.net/%E7%99%BE%E5%BA%A611%E6%9C%884%E6%97%A5%E7%BD%9
    1%E4%B8%8A%E7%AC%94%E8%AF%95%E9%A2%98%E5%8F%8A%E7%AD%94%E6%
    A1%88%EF%BC%88%E4%BB%85%E4%BE%9B%E5%8F%82%E8%80%83%EF%BC%89.ht
    m"
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    1)此題 10 分
    對任意輸入的正整數 N,編寫 C 程序求 N!的尾部連續 0 的個數,並指出計算複雜度。
    如:18!=6402373705728000,尾部連續 0 的個數是 3。 (不用考慮數值超出計算機
    整數界限的問題)
    2)此題 10 分 編寫一個 C 語言函數,要求輸入一個 url,輸出該 url 是首頁、目錄頁或
    者其餘 url
    以下形式叫作首頁:
    militia.info/
    www.apcnc.com.cn/
    http://www.cyjzs.comwww.greena888.com/
    www.800cool.net/
    http://hgh-products.my-age.net/
    以下形式叫作目錄頁:
    thursdaythree.net/greenhouses--gas-global-green-house-warming/
    http://www.mw.net.tw/user/tgk5ar1r/profile/
    http://www.szeasy.com/food/yszt/chunjie/
    www.fuckingjapanese.com/Reality/
    請注意:
    a) url 有可能帶 http 頭也有可能不帶
    b)動態 url(即含有"?"的 url)的一概不算目錄頁,如:
    www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/
    www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/
    另:若是你會 linux,請用 linux 下的 grep 命令實現第 2 題的功能(附加 5 分)。
    3)此題 40 分
    若是必須從網頁中區分出一部分"重要網頁"(例如在 10 億中選 8 億),比其餘網頁更值得
    展示給用戶,請提出一種方案。
    4)此題 40 分
    假設有 10 億網頁已經被咱們存下來,並提供以下信息:網頁全文(即網頁的源碼)、全
    文長度、網頁正文(即網頁中提取的主體文字)、正文長度,以及其餘網頁提取物等,如今
    但願去掉其中的重複網頁,請提出可行的方案,計算出每一個網頁對應的重複度,你能夠本身
    對網頁重複下定義,也能夠提出須要哪些更多的網頁提取物來實現更好的去重複方案。
    取 自
    "http://wiki.xyzp.net/%E7%99%BE%E5%BA%A6%E7%AC%94%E8%AF%95%E9%A2%98%
    282005%29.htm"
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    很久沒來了。
    發生了一些事情,其間的心情已不是幾行文字所能表述的了。
    終於明白有些事情,並非本身努力就必定能圓滿的;有些事情,是我控制不了的。
    唉,不提也罷!
    說說今天去百度筆試的經歷吧
    部門:百度搜索應用技術部。
    地點:海淀南路銀科大廈(海淀圖書城西臨)18 層。
    時間:2005/6/15 10:00-11:20 am
    九點從實驗室出發,725 到知春路,轉 735,到海淀橋下車,9:50 到達百度。在 725
    的車上碰到一男士索要手機號,說本身認識信息產業部的部長楊澤民先生,以居高臨下的姿
    態把手機號給了他-_-!
    在百度前臺見到了一直幫我安排筆試的楊韞敏 jj,不是想象中的 HR 形象,而是一副幹
    練的女 IT 的樣子跳躍的靈魂很快,給我找了一間小會議室,只有一張桌子,兩把椅子,還
    幫我開了燈,關門,走人,我開始看題。冷汗也開始流。翻了一下三頁紙的筆試題,只有很
    少的傳說中的 Linux 題目,其餘的全是 C、數據結構、算法編程的題。第一反應:走人!但
    又以爲對不起陳 jj,關鍵的是我已經在筆試題上寫了姓名和學校了,sign,總的爲本身的名
    字和學校負責吧,他們是無辜的。如此鬥爭良久,決定堅持下來。
    題目大體是這樣的:
    第一部分選擇題:有幾道網絡相關的題目,巨簡單,好比第一題是 TCP、RIP、IP、FTP
    中哪一個協議是傳輸層的......。有一道 linux 的 chown 使用題目。其餘的全是數據結構的題目!
    什麼鏈,表,碼的,不知所云跳躍的靈魂唉,我能夠沒有學過數據結構的人吶!真殘忍!這
    一部分迅速猜完!
    第二部分簡答題:
    一、在 linux 中如何編譯 C 程序,使之成爲可執行文件?如何調試?
    答案:
    1)檢查程序中.h 文件所在的目錄,將其加入系統 PATH 中;
    2)執行 C 編譯:#gcc [源文件名] -o [目標文件名]
    執行 C++編譯:#g++ [源文件名] -o [目標文件名]
    3)改變目標文件爲可執行文件:#chmod +x [目標文件名]
    4)如需將多個可執行文件連續執行,可生成批處理文件:
    #vi [批處理文件名]
    可執行文件 1
    可執行文件 2
    .........
    最後將該批處理文件屬性該位可執行。
    調試:在編譯時使用-g 參數,就能夠使用 gdb 進行調試。
    二、寫出內存分配和釋放的函數,並指出區別。
    答案:
    C 語言的標準內存分配函數:malloc,calloc,realloc,free 等。
    malloc 與 calloc 的區別爲 1 塊與 n 塊的區別:
    malloc 調用形式爲(類型)malloc(size):在內存的動態存儲區中分配一塊長度爲「size」
    字節的連續區域,返回該區域的首地址。
    calloc調用形式爲(類型
    )calloc(n,size):在內存的動態存儲區中分配n塊長度爲「size」
    字節的連續區域,返回首地址。
    realloc 調用形式爲(類型)realloc(ptr,size):將 ptr 內存大小增大到 size。
    free 的調用形式爲 free(void*ptr):釋放 ptr 所指向的一塊內存空間。
    C++中爲 new/delete 函數。
    三、寫出 socket 函數,並指出其功能。
    socket():創建 socket 通訊描述符;
    bind():將套接字和機器上的必定的端口關聯;
    connect():鏈接到遠程主機;
    listen():使套接字作好鏈接的準備,規定等待服務請求隊列的長度;
    accept():接受鏈接,一旦有客戶端發出鏈接,accept 返回客戶地址信息和一個新的
    sock;
    有了這個新的 sock,雙方就能夠開始收發數據:
    send()和 recv():用於流式套接字或者數據套接字的通信;
    sendto()和 recvfrom():用於無鏈接的數據報套接字;
    close():關閉套接字;
    shutdown():選擇性的關閉套接字,能夠只容許某一方向的通信關閉;
    getpeername():返回流式套接字時對端 peer 信息;
    gethostname():返回程序所運行的機器的主機名字;
    gethostbyname():返回本機 IP;
    第三部分編程題:
    一、從文件中讀取字符串數據,反序顯示並大小寫轉換。
    二、給定 26 字母表以及對應的密碼錶,編程實現加密及解密功能。
    第四部分思考題(正是傳說中的字典糾錯題):
    用戶在輸入英文單詞時常常出錯,現對其進行就錯。給定一個正確的英文詞典,考慮糾
    錯實現。1)指出思路。2)流程、算法難易程度及可能的改進策略。
    不過陳 jj 沒有給我答題紙,只好拿試題的背面作了答題紙兼草稿紙-
    -!說實話有些題
    目是很基礎的,就是沒背過。不知怎麼搞得,巨潦草。實驗室參加過筆試的通同窗都是憋着
    勁作了兩個多小時才答完,而我只一個小時就完了,唉,正好說明肚子裏只有別人一半的東
    西看着潦草而不着邊際的答題,決定在最後給陳 jj 寫段話,大意就是感謝她幫我挽回了
    一次筆試的機會,但個人表現很遺憾等等......而後交卷走人

    沒想到交了試卷沒讓我走,等了大約 30 分鐘的樣子,有個很深沉的 gg 來看個人卷子跳
    躍的靈魂-___-!我顫顫的跟他說我很長時間沒有接觸 C 了,當時脖子都紅了,真以爲丟人。
    gg 看了一下,沒有很鄙視的樣子,問我有沒有帶簡歷。固然木有啦~~答應回來給他發個電
    子版的,而後趕忙跑人了!
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    題目大體是這樣的:
    第一部分選擇題:
    有幾道網絡相關的題目,巨簡單,好比第一題是 TCP、RIP、IP、FTP 中哪一個協議是傳
    輸層的......。有一道 linux 的 chown 使用題目。其餘的全是數據結構的題目!什麼鏈,表,
    碼的,不知所云.唉,我能夠沒有學過數據結構的人吶!真殘忍!這一部分迅速猜完!
    第二部分簡答題:
    一、在 linux 中如何編譯 C 程序,使之成爲可執行文件?如何調試?
    答案: 1)檢查程序中.h 文件所在的目錄,將其加入系統 PATH 中;
    2)執行 C 編譯:#gcc [源文件名] -o [目標文件名]
    執行 C++編譯:#g++ [源文件名] -o [目標文件名]
    3)改變目標文件爲可執行文件:#chmod +x [目標文件名]
    4)如需將多個可執行文件連續執行,可生成批處理文件:
    #vi [批處理文件名]
    可執行文件 1
    可執行文件 2
    .........
    最後將該批處理文件屬性該位可執行。
    調試:在編譯時使用-g 參數,就能夠使用 gdb 進行調試。
    二、寫出內存分配和釋放的函數,並指出區別。
    答案:
    C 語言的標準內存分配函數:malloc,calloc,realloc,free 等。
    malloc 與 calloc 的區別爲 1 塊與 n 塊的區別:
    malloc 調用形式爲(類型)malloc(size):在內存的動態存儲區中分配一塊長度爲「size」
    字節的連續區域,返回該區域的首地址。
    calloc調用形式爲(類型
    )calloc(n,size):在內存的動態存儲區中分配n塊長度爲「size」
    字節的連續區域,返回首地址。
    realloc 調用形式爲(類型)realloc(ptr,size):將 ptr 內存大小增大到 size。
    free 的調用形式爲 free(voidptr):釋放 ptr 所指向的一塊內存空間。
    C++中爲 new/delete 函數。
    三、寫出 socket 函數,並指出其功能。
    socket():創建 socket 通訊描述符;
    bind():將套接字和機器上的必定的端口關聯;
    connect():鏈接到遠程主機;
    listen():使套接字作好鏈接的準備,規定等待服務請求隊列的長度;
    accept():接受鏈接,一旦有客戶端發出鏈接,accept 返回客戶地址信息和一個新的 sock;
    有了這個新的 sock,雙方就能夠開始收發數據:
    send()和 recv():用於流式套接字或者數據套接字的通信;
    sendto()和 recvfrom():用於無鏈接的數據報套接字;
    close():關閉套接字;
    shutdown():選擇性的關閉套接字,能夠只容許某一方向的通信關閉;
    getpeername():返回流式套接字時對端 peer 信息;
    gethostname():返回程序所運行的機器的主機名字;
    gethostbyname():返回本機 IP;
    第三部分編程題:
    一、從文件中讀取字符串數據,反序顯示並大小寫轉換。
    二、給定 26 字母表以及對應的密碼錶,編程實現加密及解密功能。
    第四部分思考題(正是傳說中的字典糾錯題):
    用戶在輸入英文單詞時常常出錯,現對其進行就錯。給定一個正確的英文詞典,考慮糾
    錯實現。1)指出思路。2)流程、算法難易程度及可能的改進策略。
    一道算法題目答案
    int Replace(Stringtype &S,Stringtype T,Stringtype V);//將串 S 中全部子串 T 替換爲 V,並返回置
    換次數
    {
    for(n=0,i=1;i〈=Strlen(S)-Strlen(T)+1;i++) //注意 i 的取值範圍
    if(!StrCompare(SubString(S,i,Strlen(T)),T)) //找到了與 T 匹配的子串
    { //分別把 T 的前面和後面部分保存爲 head 和 tail
    StrAssign(head,SubString(S,1,i-1));
    StrAssign(tail,SubString(S,i+Strlen(T),Strlen(S)-i-Strlen(T)+1));
    StrAssign(S,Concat(head,V));
    StrAssign(S,Concat(S,tail)); //把 head,V,tail 鏈接爲新串
    i+=Strlen(V); //當前指針跳到插入串之後
    n++;
    }//if
    return n;
    }//Replace
    分析:i+=Strlen(V);這一句是必需的,也是容易忽略的.如省掉這一句,則在某些狀況下,會引發
    不但願的後果,雖然在大多數狀況下沒有影響.請思考:設 S='place', T='ace', V='face',則省掉
    i+=Strlen(V);運行時會出現什麼結果? (無限遞歸 face)
    百度 2005 年的筆試題
    1.實現 void delete_char(char
    str, char ch);
    把 str 中全部的 ch 刪掉
    2.把字符串 S 中全部 A 子串換成 B,這個沒給函數原型
    3.搜索引擎的日誌要記錄全部查詢串,有一千萬條查詢,不重複的不超過三百萬
    要統計最熱門的 10 條查詢串. 內存<1G. 字符串長 0-255
    (1) 主要解決思路 //具體用詞和原題不大同樣
    (2) 算法及其複雜度分析
    4.有字典,設計一個英文拼寫糾正算法 (1) 思想 (2) 算法及複雜度 (3) 改進
  29. { aaa, bb, ccc, dd }, { bbb, ff }, { gg } 等一些字符串的集合
    要求把交集不爲空的集合並起來,如上例會獲得 { aaa, bb, ccc, dd, ff }, {gg}
    (1) 思想 (2) 算法及複雜度 (3) 改進
    取 自
    "http://wiki.xyzp.net/%E7%99%BE%E5%BA%A6%E7%AC%94%E8%AF%95%E9%A2%9820
    05.htm"
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    1、選擇題:15 分 共 10 題
    1.一個含有 n 個頂點和 e 條邊的簡單無向圖,在其鄰接矩陣存儲結構中共有個零元素。
    A.e B.2e C.n2-e D.n2-2e
    2.
    是面向對象程序設計語言中的一種機制。這種機制實現了方法的定義與具體的對象無
    關,而對方法的調用則能夠關聯於具體的對象。
    A.繼承(Inhertance) B.模板(Template)
    C.對象的自身引用(Self-Reference) D.動態綁定(Dynamic Binding)
    3.應用層 DNS 協議主要用於實現 網絡服務功能.
    A. IP 地址到網絡設備名字的映射 B. IP 地址到網絡硬件地址的映射
    C. 網絡設備名字到 IP 地址的映射 D. 網絡硬件地址到 IP 地址的映射
    4.linux 默認狀況下,一個進程最多能打開多少文件?
    A.64 B. 128 C. 512 D. 1024
    5.下面結構體
    struct s1 {
    char ch, ptr;
    union {
    short a, b;
    unsigned int c:2, d:1;
    }
    struct s1
    next;
    };
    的大小是_
    A. 12 字節 B.16 字節 C.20 字節 D. 24 字節
    6.任何一個基於"比較"的內部排序的算法,若對 6 個元素進行排序,則在最壞狀況下所需的
    比較次數至少爲__

    A.10 B.11 C.21 D.36
    7.如下不是進程間通信的是_

    A 共享內存 B 信號量 C 線程局部存儲 D 消息隊列
    8.下面程序,求 count 的值
    int func(x)
    {
    int count= 0;
    x=9999;
    while(x)
    {
    Count ++;
    x = x&(x-1);
    }
    return count;
    }
    A 8; B 10; C 5; D 11
    9.使用 malloc 系統調用分配的內存是在__ 上分配的?
    A 棧; B bss; C 物理內存; D 堆
    10.最壞狀況下,合併兩個大小爲 n 的已排序數組所須要的比較次數___

    A.2n B.2n-1 C.2n+1 D.2n-2
    2、簡答題:20 分,共 3 題
    1.(5 分)下面這段代碼是把中英文混合字符串(漢字用兩個字節表示,特色是第一個字節的
    最高位爲 1)中的大寫字母轉化爲小寫字母,請找出其中的 bug,注意各類異常狀況。
    for (char piterator = szWord; piterator != 0; piterator++)
    {
    if (piterator & 0x80 != 0)
    {
    piterator++;
    }
    else if (
    piterator >= 'A' && piterator <= 'Z')
    piterator += 32;
    }
    2.(5 分)對給定的上億條無序的 url,請按照 domain、site 以及 path 分別排序,並請指出排
    序過程當中可能會遇到的哪些問題?如何提升效率?
    例如:http://www.baidu.com/path/about.html,domain、site 以及 path 的定義分別以下:
    Domain:baidu.com
    Site:www.baidu.com
    Path: www.baidu.com/path
    3.(10 分)某型 CPU 的一級數據緩存大小爲 16K 字節,cache 塊大小爲 64 字節;二級緩存
    大小爲 256K 字節,cache 塊大小爲 4K 字節,採用二路組相聯。經測試,下面兩段代碼運行
    時效率差異很大,請分析哪段代碼更好,以及可能的緣由。
    爲了進一步提升效率,你還能夠採起什麼辦法?
    A 段代碼
    int matrix[1023][15];
    const char
    str = "this is a str";
    int i, j, tmp, sum = 0;
    tmp = strlen(str);
    for(i = 0; i < 1023; i++) {
    for(j = 0; j < 15; j++) {
    sum += matrix[i][j] + tmp;
    }
    }
    B 段代碼
    int matrix[1025][17];
    const char *str = "this is a str";
    int i, j, sum = 0;
    for(i = 0; i < 17; i++) {
    for(j = 0; j < 1025; j++) {
    sum += matrix[j][i] + strlen(str);
    }
    }
    3、編程題:30 分 共 1 題
    注意:要求儘量提供完整代碼,若是能夠編譯運行酌情加分。
    1.內存中有一個長數組,條目數爲 10 萬,數組單元爲結構體 struct array,sizeof(struct array)
    爲 512 字節。結構有一 int 型成員變量 weight。現須要取得按 weight 值從大到小排序的前 500
    個數組單元,請實現算法,要求效率儘量高。
    4、設計題:35 分 共 1 題
    注意:請儘量詳細描述你的數據結構、系統架構、設計思路等,建議多寫一些僞代碼或者
    流程說明。
    1.請設計一個字典。以字符串爲索引,存儲用戶定義的定長結構。要求有增、刪、查、改的
    功能。已經給定一個函數,能夠由字符串映射到一個簽名,每一個簽名由兩個 unsigned int 類
    型組成。假設每個字符串可以對應惟一的一個簽名,徹底沒有重複(或者重複的機率能夠
    忽略),而且簽名分佈足夠均勻。
    請描述你的數據結構?內存如何申請?增、刪、查、改的功能如何實現?若是操做很頻繁,
    該如何優化?
    取 自
    "http://wiki.xyzp.net/2006%E7%99%BE%E5%BA%A6%E7%AC%94%E8%AF%95%E9%A2%
    98.htm"
    、、、、、、、、、、、、、、、、、、、、、、、、、、
    通過在線筆試、兩輪電話面試,今天上午收到了百度的拒信,個人百度求職算是告一段落
    了……
    從百度校園招聘開始,我就投了一份簡歷。在別人都有在線筆試機會的時候,我卻沒有
    任何消息。
    據說師兄能夠給推薦,我就又經過內部推薦的方式投遞了一次,此次很快就有消息了
    ——拒信。
    那時基本上就放棄了百度。但是大概 20 多天之後,我投遞的第一份簡歷有消息了——
    通知我在線筆試。通過精心準備,筆試題答得還湊合。過了幾天給我來了封郵件告知我筆試
    經過,會找時間安排電話面試。又過了好幾天,我正在剃頭的時候接到百度電話,約了第二
    天下午三點電話面試。心情異常興奮,回到寢室拼命複習數據結構並收集百度面試題型……
    臨陣磨槍 呵呵。
    百度的面試氛圍非常輕鬆,讓你很快就以爲是在聊天而不是面試。第一輪主要是在針對
    個人在線筆試的題目進行提問和分析,主要講的是作題的思路和改進的方法。面試時間大概
    有半個小時,以爲應該有下一輪。
    果真上個星期五晚上接到了百度技術經理的電話,自稱姓劉。在前一天我同窗也是這個
    時候接到百度第二面電話,看來是同一我的,後來的面試內容證明了是同一我的。面試過程
    大概以下:
    一、介紹一下項目。
    二、提了一個問題:上千萬條記錄,統計出重複記錄最多的前 N 條。
    三、一個機率題:54 張撲克牌,除去兩張大小王剩下 52 張撲克牌。問紅桃 A 和黑桃 A 同時
    被一我的拿到的機率是多少?
    四、多個線程訪問共享內存時因該怎麼辦?
    五、在寫程序遇到問題的時候,一般採用什麼調試方法?
    六、一個 client/server 的協議問題
    七、剩下就是隨便聊聊,好比有缺點、指望工做的性質、職業規劃等
    總結一下教訓:
    一、介紹項目的時候不能一味的按照事前想好的模板說,應該根據所申請的工做的性質,多
    說一些和本身申請的工做內內容相近的東西說。我在介紹個人項目的時候,說了不少硬件的
    東西,而相關的 Linux 下的 C 編程卻沒有提到多少,一大失敗之處。
    二、對於他提的第二個問題,當時由於緊張沒有想出來,掛了電話之後纔有了思路。
    三、這個機率題之前碰到過,並且和同窗們討論過,答案很早就知道了。可是遇到面試的時
    候,不能立刻就說出答案,由於這樣擺明了高訴人家你之前就見過這道題,這樣就失去了做
    爲考題的意義。因此,若是事前知道答案也不要立刻說出來,裝做考慮中,而後慢慢說出答
    案。我就是很快就說出了答案,失敗!
    四、在問項目的時候,他問我代碼行大概有多少?我說大概有 5.6K 行左右。在回答第四個問
    題的時候,我幾乎是將書上所講過的東西背了一遍給他,雖然答案是正確的,可是我估計他
    一聽就聽出來是在背書了,因此這也會減分很多。,並且百度強調創新,其實就算你不知道
    答案也能夠按照本身的思路說一下的,只要邏輯清晰、合理都會比我背書強……
    五、個人回答是有時候用 gdb,有時候用輸出日誌的形式。以我以前給他講的項目經驗是不
    大可能會涉及這麼多的知識的,因此估計他又聽出我是在背書了……繼續減分
    六、後來我發現這個問題其實他不是在考我問題的答案,是考我解決問題的能力和考慮問題
    的思路。這點是我比較差的地方,沒辦法……減分
    我前面表現那麼失敗,基本上已經沒有什麼但願了,後面的談話已經沒有意義了,只不過是
    禮貌性的結束此次面試了。
    上面的總結是我收到拒信之後才總結出來的,還覺得能被錄取呢……
    面試官太和善了,並且氣氛及其融洽,根本沒有任何很差的徵兆,面試官好厲害!
    至此,個人百度求職過程到此告一段落……生活還在繼續,工做還得繼續努力去找,加油!
    百度電話面試題目:
    1.談談你對數據庫中索引的理解
    2.如今普通關係數據庫用得數據結構是什麼類型的數據結構
    3.索引的優勢和缺點
    4.session 和 cache 的區別是什麼
    5.若是有幾千個 session,怎麼提升效率
    6.session 是存儲在什麼地方,以什麼形式存儲的。
    百度川大站筆試題
    技術類試卷一
    一、編程題
    判斷字符串 b 的全部字符是否都再字符串 a 中出現過,a,b 都是可能包含漢
    字的字符串。b 中重複出現的漢字,那麼 a 中也要至少出現相同的次數。
    漢字使用 gbk 編碼(簡單的所,用兩個字節表示一個漢字,高字節最高位爲
    1 的表明漢字,低字節最高位能夠不爲 1)。
    int is_include(char a , char b)
    返回 0 表示沒有都出現過,返回 1 表示都出現過。
    二、 算法題
    序列 seq=[a,b,…,z,aa,ab,…,az,ba,bb,…,bz,…,za,zb,…,zz,aaa,…]相似於 excel 的
    字母序排列,任意給一字符串 s=[a-z]+(由 a-z 字符串組成的任意長度字符串),
    請問 s 是序列 seq 的第幾個字符串。
    三、 系統設計
    需求:須要引入用戶對搜索結果相關性的評分,100 分制。但願用戶的打分
    能幫助搜索引擎排序,但又避免惡意投票、做弊等。請設計一個比較公平的評分
    系統。
    覺得你們對百度不是很敢興趣呢,我上個月去那裏面試了,來發一篇吧
    我是上個月在 chinahr 上直接給他們投的簡歷,那個時候可能人比較少吧,他們很快就發
    了筆試通知,而後偶就過去了,地點在盈科 18 層(海淀圖書城很近),到了,之後,先給偶
    做了一套題,一共四道大題,時間是兩個小時,題都是很是典型的算法題,對算法的效率和
    健壯性要求比較高,好比說,在百萬數量級的文件中查找某個可匹配的關鍵字,千萬個節點
    的鏈表的逆序(具體的題目因爲百度要求不讓外泄,因此只能說這麼多拉)偶憋了半天寫了
    三道題,能夠說都沒寫完。還有一題只是把想法寫了寫,沒有編代碼,就交了,而後在一個
    屋子裏面等,過了一會進來一個看起來像頗有編程經驗的 gg,自我介紹是高級軟件工程師,
    他主要問的是關於筆試這四道題,個人思路什麼,偶的數據結構早就還給老師拉,憋了半天,
    就瞎說了一通,他顯然不是很滿意,說給 5 分鐘,再好好想一想,偶又憋了半天,仍是沒想出
    好的辦法,基本上沒題都要問一遍,偶實在答不出來了,他說時間不夠了,算了,終於長舒
    了一口氣,而後就問了些作過的項目,終於輕鬆一些了,偶就老老實實作了什麼就說什麼了,
    二面是技術經理,就是網上鼎鼎有名的齊玉傑,見到真人後,看起來很是親切,不知道
    爲何心情就放鬆起來了,接下來就聊了聊項目,還有對搜索的見解,還重點文了搜索算法
    的思路9是沒答上來?( 不過齊 gg 仍是很是 nice 的,也沒有刁難我,三面是技術總監,他們
    叫 dan,就是很是有名的郭耽,偶是次日去的,偶想象技術總監怎麼也應該有些年紀了,結
    果也是出乎意料的年輕,感受像個學生,最令偶吃驚的是,他竟然穿着拖鞋....呵呵,他主要
    問一些概要的東東,好比說最大的困難是什麼啊,能爲百度貢獻什麼啊,諸如此類
    整個過程就是這樣,補充一下,我申請的是搜索應用部(就是作 mp 搜索的部門),對了,
    他們還屢次問到有沒有用過百度地業務,偶只知道 mp3,其實還有好多,寒...感受百度的氛
    圍仍是挺寬鬆,經理也沒什麼架子,你們放鬆心情去就行了
    轉 載 請 注 明 出 自 應 屆 生 求 職 招 聘 論 壇 http://bbs.yingjiesheng.com/, 本貼地
    址:http://bbs.yingjiesheng.com/thread-14497-1-1.html
    百度 2010 暑期實習筆試面試全面備戰
    百度 2010 暑期實習網申將於 2010 年 5 月 29 日截止。
    筆試階段
    5 月 30 日前,對於經過了簡歷篩選的申請人百度將會經過系統發送筆試通知。註冊時請務
    必填寫正確有效的郵箱地址。
    面試階段
    6 月 7 日起,百度將陸續安排現場面試。
    大街網爲你們準備了百度往年的實習和校園招聘筆試及面試經驗,供你們參考。
    如下爲百度 2010 校園招聘各崗位筆試真題,所有是大街網網友整理,不表明今年筆試內容,
    請你們參考。
    【百度 2010 校園招聘技術類筆經】
    第一題:簡要說明樹的深度優先、廣度優先遍歷算法擠特色
    第二題:一個複數相加的編碼挑錯題
    第三題:告訴內存大小和 cpu 速度,計算可能的程序運行最長時間
    第四題:複雜項目的組件編譯依賴,設計一個快速算法並計算複雜度
    第五題:寫個 c 程序,返回字符串中最長數字字符串的長度和地址,不能用標準庫函數
    第六題:設計個系統,存儲 100 億個 url 和屬性信息,並能夠更改屬性信息和查找 url,快速
    搜索站點的全部 url 及信息
    【百度 2010 校園招聘非技術類筆試題】
    一、09 年的第一道圖形推理題,不過我不知道正確答案,知道的童鞋請幫忙告訴一聲,我選
    的 C
    二、仍是往年論壇上有的非技術題,只是換了下字,分析 2010 年的網絡購物,寵物用品和化
    妝品
    三、說出 10 種易拉罐爲何作成圓柱形的理由
    四、一個八邊形,各角覺有一小蟲,爬呀爬,計算終點之類的,題目太長,沒記住,抱歉。。。
    五、3 個男人、2 個女人一塊兒渡河,只有一條船,每次只能渡兩我的
    女人要求:不能讓一男一女同時一塊兒過河
    男人要求,每人只能劃一次漿
    若是隻有一個划槳的,阿特第一,本第二,**第三。。
    問:用最短的過河次數推測,誰最後一個划槳渡河?
    六、有兩張標準版的世界地圖,一張的比例尺是 1:3600 萬,另外一張的比例尺是 1:2000 萬,
    將較大的一張徹底的覆蓋較小的一張(兩張都是平整鋪開的狀況)。請問:取出一枚圖釘,
    是否能夠選擇到一個點,按下去,刺穿的兩張地圖的點對應的是同一個真實地球上的點?不
    論是或否,請給出你的思考和論證過程。
    七、說明一些你對互聯網和百度產品的理解、分析之類的
    八、你認爲此次測試是否可以基本反映出本身的水平?你對本身今天的答案滿意麼?若是不
    是,你還有哪些補充?
    【2010 校園招聘百度用戶體驗部筆試題】
    第一部分:答一題,多答不限
    1.方差分析的統計原理和運用條件
    2.什麼是社會網絡研究?它的主要觀點是什麼?有哪些應用?
    3.市場調研過程分爲幾個階段?各個階段的核心任務和目標是什麼?
    第二部分:三題必須都答
    1.用戶體驗研究領域有哪些專家?用一句話描述他們的主要觀點?
    2.用戶體驗研究和產品運營之間的關係
    3.交互設計是什麼?一個好的交互設計具有哪些特徵?舉例說明。
    第三部分:答兩題,多答不限
    1.簡述用戶體驗研究方面的企業實踐項目?(沒有能夠不寫)
    2.有用戶提出反饋「搜索結果頁面,須要將頁面拖放到最底纔可點擊下一頁,能否實現翻頁
    置頂或自動反應功能」,如何處理這個問題
    3.百事可樂***可口可樂時,曾經在馬路上隨機作雙盲實驗,多數人認爲百事可樂比可口可
    樂好喝,百事可樂公司以此爲據進行推廣。可口可樂也在馬路上作雙盲實驗,驚奇地發現,
    多數人認爲百事可樂比可口可樂好喝,所以,可口可樂公司下定決心改進產品,推出新產品
    「new coke」,沒想到「NEWCOKE」推出後消費者抵制,而且要求推出原來的口味。請分
    析「new coke」失敗的緣由。
    4.統計關鍵詞的搜索量時(有一個圖,統計 2007 2008 2009 關鍵詞搜索量),有人說「......,
    所以,當颱風來時,人們就更關注變形金剛」,設計一個研究說明結論正確與否。
    第四部分:附加題
    有四道邏輯推理題
    估算你所在城市的出租車數量?簡述估算理由。
    【百度 2010 校園招聘運維 web 開發兩道筆試題】
    1.推理:24 我的,每人至少養一種寵物,養鳥、狗、魚、貓的分別爲 1三、五、十、9 人,同
    時養鳥和狗的 2 人,同時養鳥和魚、鳥和貓、魚和貓的各爲 4 人,養狗的既不養貓也不養魚。
    問只養一種寵物的總共幾人?同時養鳥魚貓的幾人?
    2.找程序的錯和不足:
    int test(char *value,int value_len,int flag)
    {
    char temp_buf[BUF_SIZE];
    sprintf(temp_buf,value);
    char temp_new_buf=new char[value_len];
    if(flag)
    {
    strcat(temp_buf,"flag is true");
    printf(temp_buf);
    return 1;
    }
    delete[] temp_new_buf;
    return 0;
    }
    【百度 2010 網頁搜索產品市場部筆試題】
    1.微軟搜索引擎 Bing 的相關搜索是放在搜索結果左側的,而百度的相關搜索是放在搜索結
    果下方,請分析一下,這樣作各有什麼優缺點,你以爲怎樣設計更好?
  30. 分別列出如下檢索 query 的網頁前十理想結果,須要給出每條結果的排名並闡明理由。(我
    以爲這幾個關鍵詞是比較實事性或隨機的,因此每一個時期筆試給出的檢索詞可能不同。)
    【百度 2010 非技術類筆試】
    1、選擇題
    30 道,共 60 分
    主要是邏輯(verbal 類、推理類,無數字題)和互聯網商業常識(好比市場份額最大的搜索
    引擎)。
    2、論述題
    1 道,40 分
    對推廣「百度知道」產品的思路和方法。
    難度不大,時間充裕。不少人提早交卷的。
    【2010 年百度運維部筆試及相關說明】
    此次應聘的是運維部的數據庫 DBA,實際上運維部的全部崗位試題是一張卷子,五個簡答,
    一個算法完善程序,一個系統設計題。
    此次百度是分部門考試的,每一個部門一張卷,不是像以往的好幾張卷子。
    因爲公司的保密性以及對其餘同窗的公平性考慮,這裏不透漏具體題目,可是能夠告訴你們
    方向。
    以前一直覺得會考不少算法,後來證實是錯誤的
    運維部的備考仍是以運維崗位的需求爲主題,重點不是算法,而是系統,數據庫,以及簡單
    的算法知識。
    整張卷子只有一道題目要寫程序,並且是比較基礎的。
    其餘簡答題裏,有一道算法題,只是簡答,EASY;另外有關於 linux 的文件系統的題,性
    能優化,數據庫基本概念,以及硬件處理能力相關知識之類
    最後的設計題,也是和運維緊密相關的,固然是數據庫和系統架構知識的結合,不是很細。
    但願對你們有幫助。祝考完的同窗好運!
    【百度 2010 運維部筆試題】
    總共三部分 7 道題
    第一部分·簡答
    1·簡述樹的深度優先算法、廣度優先算法,及非遞歸實現的特色。
    2·在文件系統中,元數據(好比 ext2 中的 inode)的基本做用是什麼?ext2 跟 ext3 的根本
    區別是什麼?
    3·在 web 服務中,負載均衡的基本做用是什麼?請舉例你熟悉的一款負載均衡軟件或者實
    現方案,簡述它們的實現原理。(這題後半部分爲開放性,我也沒記多深,大概就這樣)
    4·數據庫事務的四大特性是什麼?請你簡單舉例對一個徹底不懂數據庫的人解釋這四個特
    性。投數據庫管理員(DBA)必答。
    5·一個微型處理器,1KB 內存和 1MHz(每 MHz 運算次數爲 10^6),在這樣的計算機上面
    運行程序(程序到該終止時會自動終止,不會出現死循環)最長能運行多長時間?你能夠進
    行任何須要的假定。
    第二部分·算法和程序設計
    1·int maxContinuNum(const char inputstr,char outputstr)
    編寫一段程序實現該函數,實現返回一個以「\0」結束的字符串中最長的數字串的長度,並
    把該數字子串的首地址賦給 outputstr。不能使用任何庫函數或已經存在的函數,如 strlen。
    例如:在字符串「abc123abcdef12345abcdefgh123456789」中,把該字符串的首地址賦給 inputstr,
    返回 9,outputstr 指向字符串「123456789」的首地址。
    第三部分·備份系統設計
    (這題太長了,記住的很少,下面是大概的)
    設計一個備份系統,要求符合三個備份場景,寫出你的設計思路,框架模塊設計,實現原理。
    要求:1·該系統要能實現對多服務器備份工做(大概這樣,仍是。。)
    2·該系統要具有很好容錯性,不能由於多服務器中的一臺出現故障兒致使整個備份工做不
    能進行。
    3·。。。
    4·。。。(這兩點記不清了,很差意思)
    5·具備較強的擴展性,例如當服務器內存不夠時,能靈活的添加內存。
    擴展性是附加,在實現前面的要求後再考慮擴展性
    備份場景服務器備份網絡速度 備份開始時間
    場景 1 a1~a1010M/S 天天上午 10 點 10 分
    場景 2a1,b1,c1,d130M/S(忘了- -!)
    四臺服務器
    場景 3a1~a100 5M/S(也不大記得了。。)
    【分享百度 13 日筆經】
    1.簡述深度優先及廣度優先遍歷算法,並說明非遞歸實現的特色
  31. 程序找錯,一大段。
  32. 假設有一臺迷你計算機,1KB 的內存,1MHZ 的 cpu,已知該計算機執行的程序可出現
    肯定性終止(非死循環),問如何求得這臺計算機上程序運行的最長時間,能夠作出任何大
    膽的假設。
  33. 大型軟件有不少組件,編譯時存在複雜的依賴關係,好比 N1 和 N2 存在依賴關係,要編
    譯 N1 必須先編譯 N2,假設存在 N<1000 個組件,之間存在複雜的依賴關係,但不存在依賴
    環,問採用怎樣的算法來構建編譯規則,說明算法的複雜度。
    5.寫一個函數 int MaxContinuNum(const char inputstr,char outputstr)
    找出一個字符串中最長的連續數字串,返回最長數字串的長度,並將最長字符串存入
    Outputstr 指定的地址,
    如, abcd1234abd123abcd123456789, 最長連續字符串爲 123456789,長度爲 9
    6.有 100 億個 url,要求設計一個系統,能實現 url 的添加、刪除、更新,並能查看 url 的內

    【百度 2010 商務搜索部筆試】
    1,深度優先廣度優先定義。它們非遞歸實現的特色
    2,一個複數實部 虛部分別相乘求和的程序改錯
    3,一個有內存 1KB, 處理器速度 10^6/S
    最長計算時間
    4, N 個文件相互有倚賴(編譯的時候) 設計一個算法,編譯之
    5,一個字符串中最長的數字子串
    6,100 憶個 URL 的存儲,查找,刪除,更新,添加
    【百度 2010 筆試歸來】
    第一題:樹的深度遍歷,廣度遍歷,和非遞歸實現算法的特色。
    第二題:一堆代碼,找錯誤和潛在的危險。
    第三題:一個有 1kb 內存和 1mhz 處理器的計算機在上面運行的程序的最長時間是多少
    算法題目
    1.包編譯依賴問題,設計算法,可以最快的完成包的編譯
    2.對輸入的字符串可以從中找到最大連續數字的字符串
    系統設計題目
    百度最常出的題目,如何在 100 萬 url 處理 path、屬性等等。
    其餘筆試經驗:
    昨晚監考百度技術類考試的感想 2008.10.17
    http://company.dajie.com/discuss/theme/20/0/280
    09.10.18 百度商業產品部筆試歸來~~~真題奉獻~
    http://company.dajie.com/discuss/theme/20/0/8091
    百度 2010 年校園招聘軟件測試筆試題
    http://company.dajie.com/discuss/theme/20/0/8452
    百度筆試-2009.10.18
    http://company.dajie.com/discuss/theme/20/0/8169
    百度 2010 校招運維部門筆試
    http://company.dajie.com/discuss/theme/20/0/8095
    百度 09 年 10 月 18 號的交大筆試題——質量部
    http://company.dajie.com/discuss/theme/20/0/8099
    09 年 10 月 18 日百度商務搜索筆試題
    http://company.dajie.com/discuss/theme/20/0/8098
    09 年 10 月 18 號百度北京管培筆試
    http://company.dajie.com/discuss/theme/20/0/8097
    09 年 10 月 18 日百度產品市場部筆試題型
    http://company.dajie.com/discuss/theme/20/0/8096
    09.10.18 百度商業應用產品部(非技術類)筆試題目
    http://company.dajie.com/discuss/theme/20/0/8094
    2009.10.18-百度質量部筆試試題
    http://company.dajie.com/discuss/theme/20/0/8093
    09 年 10 月 18 號 RD-2 卷(質量部等)筆試真題
    http://company.dajie.com/discuss/theme/20/0/8092
    百度 08-9-24 成都電子科技大學筆試題(第五套)
    http://company.dajie.com/discuss/theme/20/0/3002
    百度 08-9-24 成都電子科技大學筆試題(第四套-網工)
    http://company.dajie.com/discuss/theme/20/0/3001
    百度 08-9-24 成都電子科技大學筆試題(第一套)
    http://company.dajie.com/discuss/theme/20/0/3000
    2009 校園招聘 NS 試題
    http://company.dajie.com/discuss/theme/20/0/310
    百度 08-9-24 成都電子科技大學筆試題(第三套)
    http://company.dajie.com/discuss/theme/20/0/307
    百度 08-9-24 成都電子科技大學筆試題(第二套)
    http://company.dajie.com/discuss/theme/20/0/306
    昨晚百度的筆試題(市場部) 2007.10.23
    http://company.dajie.com/discuss/theme/20/0/300
    百度筆個人題目 2007.05.29
    http://company.dajie.com/discuss/theme/20/0/283
    baidu 非技術類一道筆試題
    http://company.dajie.com/discuss/theme/20/0/282
    baidu 2007 校園招聘電子商務軟件筆試題
    http://company.dajie.com/discuss/theme/20/0/281
    百度商業應用產品部筆試真題 2007.09.14
    http://company.dajie.com/discuss/theme/20/0/271
    2007 年百度招聘在線筆試真題解答
    http://company.dajie.com/discuss/theme/20/0/259
    百度往年實習面試經驗及體會
    百度日文產品部實習兩週分享 09-09
    http://company.dajie.com/discuss/theme/20/0/20538
    百度系統部實習面試-2009.6.17
    http://company.dajie.com/discuss/theme/20/0/19750
    百度搜索新產品研發部實習一面面經-2009.6.17
    http://company.dajie.com/discuss/theme/20/0/19752
    百度實習面試-2009.6.16
    http://company.dajie.com/discuss/theme/20/0/19751
    百度往年校園招聘面試經驗分享
    衆裏尋他籤百度--從網申到 OFFER(搜索引擎產品市場部-產品設計師-武漢)
    http://company.dajie.com/discuss/theme/20/0/10120
    在百度 SEARCHPM 作實習生經歷
    http://company.dajie.com/discuss/theme/20/0/264
    北京?百度?互聯網產品經理助理?2007-04-25
    http://company.dajie.com/discuss/theme/20/0/314
    我也來 88 我所經歷的百度
    http://company.dajie.com/discuss/theme/20/0/18819
    SuperHR 找工做須要積極的心態【關於百度之爭】
    http://company.dajie.com/discuss/theme/20/0/18823
    產品設計師終面(武漢)
    http://company.dajie.com/discuss/theme/20/0/10122
    百度面試趣味見聞【面經】
    http://company.dajie.com/discuss/theme/20/0/10121
    百度最後的電面!熱呼呼的新鮮出爐
    http://company.dajie.com/discuss/theme/20/0/8715
    百度質量部面經-2009.10.19
    http://company.dajie.com/discuss/theme/20/0/8416
    百度質量部一面熱乎的面經-2009.10.22
    http://company.dajie.com/discuss/theme/20/0/8394
    百度質量部一面面經-2009.10.22
    http://company.dajie.com/discuss/theme/20/0/8393
    百度產品類(非技術)面經分享 -2009.7.14
    http://company.dajie.com/discuss/theme/20/0/316
    百度-搜索應用部-面經+筆經 -2007.9.26
    http://company.dajie.com/discuss/theme/20/0/317
    北京-百度系統部面試歸來 -2009.6.18
    http://company.dajie.com/discuss/theme/20/0/315
    寫寫百度的事
    http://company.dajie.com/discuss/theme/20/0/313
    sniper·找工之路·百度篇
    http://company.dajie.com/discuss/theme/20/0/312
    Suth_Job hunting_百度篇
    http://company.dajie.com/discuss/theme/20/0/311
    百度 Ecom 二面 2007.10.27
    http://company.dajie.com/discuss/theme/20/0/304
    百度電面 2007.10.26
    http://company.dajie.com/discuss/theme/20/0/303
    百度二面歸來 2007.10.25
    http://company.dajie.com/discuss/theme/20/0/302
    百度一面歸來 2007.10.25
    http://company.dajie.com/discuss/theme/20/0/301
    發滾燙的百度一面面經 2008.09.23
    http://company.dajie.com/discuss/theme/20/0/299
    塵埃落定,回顧個人漫漫求職路(4)Baidu 篇
    http://company.dajie.com/discuss/theme/20/0/298
    分享百度一二面經歷 以記念第一個 offer 2007.09.15
    http://company.dajie.com/discuss/theme/20/0/297
    發下午的百度軟件質量部面經 2007.10.24
    http://company.dajie.com/discuss/theme/20/0/296
    百度軟件質量部測試工程師面經 2007.10.24
    http://company.dajie.com/discuss/theme/20/0/295

    開始答題
    提醒:請注意分配各個部分的答題時間
    本次在線筆試答題已過期間: 0 小時 06 分 22 秒 剩餘時間: 1 小時 53 分 38 秒
    題目
    2010 年實習生招聘筆試題 RD-混合
    試卷說明:
    <!--[if !supportLists]-->1. <!--[endif]-->本試卷共兩套題目,請先用幾分鐘的時間瀏覽一遍,
    選擇一套適合你的試卷進行筆試。
    <!--[if !supportLists]-->2. <!--[endif]-->請在您答案的第一行標註您選擇的是 A 卷仍是 B
    卷。
    <!--[if !supportLists]-->3. <!--[endif]-->兩套試卷的成績不會合並計算,僅計算其中一套的
    分數。請安排好答題時間,不要兩套都作而耽誤時間。
    A 卷(共三道大題)
    【請先閱讀卷首的試卷說明,在 A、B 卷選擇一套試卷做答,同時做答試卷無效】
    第一題、簡答題
    <!--[if !supportLists]-->1. <!--[endif]-->簡要說明樹的深度優先、廣度優先遍歷算法,及非
    遞歸實現的特色。
    <!--[if !supportLists]-->2.<!--[endif]-->在處理磁盤數據時,須要首先將其讀入內存才能進行
    處理。若是要讀取的數據已經在內存中,則能夠直接訪問內存。一般來講內存是有限的,
    所以要讀取新的數據時必須覆蓋內存中一部分原有的數據。假設如今有 n 塊一樣大小的
    數據,內存一共能夠容納 m 塊數據。如今給出一系列對這些數據的讀取請求,要求它們
    必須按照給定的順序被讀取,同時要求讀取磁盤的次數儘量地少。請簡述一個策略滿
    足這樣的要求。
    第二題、算法與程序設計
    1.百度全體員工玩分組遊戲,前面五分鐘你們分頭找隊友,並將每一個人找到的隊友信息匯
    報給主持人,若是 A 和 B 是隊友,B 和 C 是隊友,那麼 A 和 C 也是隊友;接着主持人不斷
    地隨機抽取兩我的,但願判斷兩者是否爲隊友。請設計一個計算機程序輔助主持人判斷兩個
    人是否爲隊友,說明程序的關鍵算法,不須要代碼實現。
    例如:
    <小明,小王>,<小軍,小王>,<小麗,小李>是隊友,那麼小軍和小明是隊友,小軍和小
    麗不是隊友。
    2.給定如下二叉樹:
    struct node_t
    {
    node_t left, right;
    int value;
    };
    要求編寫函數 node_t foo(node_t node, unsigned int m, unsigned int k);
    輸出以 node 爲根的二叉樹第 m 層的第 k 個節點值.
    (level, k 均從 0 開始計數)
    注意:
    <!--[if !supportLists]-->1) <!--[endif]-->此樹不是徹底二叉樹;
    <!--[if !supportLists]-->2) <!--[endif]-->所謂的第 K 個節點,是本層中從左到右的第 K 個節

    第三題、系統設計題
    百度打算開發一個投票系統,它提供建立、查看、參與和管理投票功能。用戶建立一個投票
    時,有以下信息可知:建立者、標題、各選項內容、截止時間、可投票數。另外,該投票是
    否對全部用戶可見繼承於建立者的個性設置。查看一個投票時,除了顯示上述信息外,還需
    要顯示每一個選項的投票數。在截止時間以前,用戶能夠參與投票。管理投票功能爲建立者提
    供刪除一個投票和調整進行中投票截止時間的功能。
    預計該投票系統會很受用戶歡迎,天天可望建立超過 1 萬個投票。天天瀏覽次數達數
    百萬,而且有約一百萬人次參與投票。經驗還代表,用戶更喜歡新近的內容。
    實習生小 A 針對上述需求,打算用數據庫來實現這個投票系統,他給出了數據庫的表
    設計以下:
    user_info:
    uid name … visible
    1 「Alex Wang」 … 1 (all)
    2 「Jeff Li」 … 0 (self)
    vote_info:
    vid u
    id
    title options counts close_time max visible
    1 1 「Do you like 「Yes; No; Who?」 「4; 2; 1」 1339071276 1 1
    Lady Gaga?」
    2 1 「Who‟s the best
    forward?」
    「Messi; Ronaldo;
    Droba; Millito」
    「912;
    654; 400;
    301」
    1339076234 1 1
    (紅色爲主鍵)
    問題:
    一、小 A 的設計存在什麼問題,如何改善?
    二、若是想增長一個功能,即每一個用戶對每一個投票只能投一次。如何設計?
    三、系統運行了較長一段時間以後,用戶反饋使用中速度變慢。請分析可能的緣由,並提出
    解決辦法。
    四、請完整給出新系統下各功能的實現流程。涉及數據庫查詢的,請給出 SQL 語句。
    B 卷(共三道大題)
    【請先閱讀卷首的試卷說明,在 A、B 卷選擇一套試卷做答,同時做答試卷無效】
    第一題、算法和程序設計題
    一、請編寫函數 foo(int x, int y, int n) 計算:隨機生成 x 個大小爲[1,y]的正整數,它們的和爲
    n 的機率是多少?語言僅限於 PHP、C/C++、Java 中的一種。
    二、設計函數,輸入爲一個字符串,裏邊包含中文、英文、數字等字符,編碼爲 GBK。中文
    字符的編碼規則假定爲:雙字節組成,高字節大於 0x80,低字節任意。
    a) 用經常使用語言(c/c++/php/java)編寫函數,實現功能爲:按順序提取輸入文本中的中文
    字符,造成新的文本串返回調用者。
    b) 若是調用者有時但願獲得輸入串的全中文內容,有時但願獲得英文內容,那麼該函數
    應如何設計。
    c) 若是調用者但願獲取輸入串中包含中文、英文、數字這三種字符中的一種或多種的需
    求不定時,函數應如何設計。
    三、有一個圖書館系統,含有 Book 和 BookMaster 兩個類。Book 能夠用來設置書的屬性(如
    title),BookMaster 天天作的事情就是根據上級的要求重設設定某些書的 title,以增長借閱
    者的注意力,讓更多的人對書有新的興趣。
    有一天,上級須要 BookMaster 在 setTitle 的操做以前都要在日誌中記錄一條 log。但不幸
    的是因爲一些很特別的緣由,沒有辦法去修改 Book 類,沒法在 Book 類的 setTitle()方法
    中增長記錄 log 的操做。更不幸的是上級不信任 BookMaster 本身的統計結果,使 BookMaster
    不能在作 setTitle()以前本身作 log 記錄。
    請問如何作才能達到目標,請寫出必要的實現代碼。
    相關類定義以下:
    public interface Book {
    public void setTitle(String title);
    public String getTitle();
    }
    public class BookException extends Exception {
    public BookException() {
    }
    }
    public class BookImpl implements Book {
    private String title;
    public void setTitle(String title) {
    this.title = title;
    }
    public String getTitle() {
    return this.title;
    }
    }
    public class BookMaster {
    public static void main(String[] args) {
    Book book = new BookImpl();
    out.println("set a book‟s title today"); // 不能添加這行語句,由於上級不信任
    BookMaster 本身的統計結果
    book.setTitle("I feel good.");
    out.println(book.getTitle());
    }
    }
    注:題目中所提供類的定義爲 Java 實現,但您能夠根據您的喜愛自由選擇其它語言完成題
    目要求。
    第二題、簡答題
    一、網站如何維護用戶的登陸狀態?百度知道、百度貼吧、百度百科三個網站域名不一樣,但
    同在.baidu.com 主域下,它們之間如何共享用戶登陸狀態?若是兩個網站域名也不在一個主
    域下,例如 www.baidu.com 和 www.qiyi.com,那麼要如何共享用戶登陸狀態?
    要求:請儘可能提供多種方案並分析各類方案的優劣。
    二、在炎炎夏日,你十分口渴,想要買一瓶冰汽水,商店中有三瓶汽水供你選擇(如 ABC),
    其中只有一瓶是冰過的。當你選定了其中的某一瓶後(設爲 A),店員摸了下剩餘兩瓶中的
    一瓶(設爲 B),並告訴你 B 不是冰的,此時你會將你的選擇變動爲剩餘的那瓶嘛(C)?
    請詳述你的理由?
    三、TCP 服務器在啓動時,須要通過 socket、bind、listen 和 accept 四個步驟。
    一個單進程的服務器的僞代碼以下:node

  34. listen_fd = socket(TCP);
  35. bind(listen_fd, my_addr);
  36. listen(listen_fd, backlog);
  37. while(true)
  38. {
  39. client_fd = accept(listen_fd);
  40. read(client_fd, request);
  41. response = process(request);
  42. write(client_fd, response);
  43. close(client_fd);
  44. }
    某客戶端的僞代碼以下:
  45. fd = connect(server_addr);
  46. write(fd, request);
  47. read(fd, response);
  48. display(response);
  49. close(fd);
    假設服務器在 04 行執行了 sleep(1000000):
    問題 1:請簡介服務器四個步驟的意義或做用是什麼?
    問題 2:當 1 個客戶端訪問該服務器時,客戶端執行到哪行會失敗?會發生阻塞嗎?爲何?
    問題 3:當 50 個客戶端從 50 臺機器幾乎同時訪問該服務器時,各個客戶端的反應有差異嗎?
    爲何?(注:忽略防火牆因素)
    第三題、系統設計題
    一、假設系統裏有不少模板文件,每一個模板文件都有一個惟一的文件名,其內容是一個長字
    符串,其中包含不少經過$...$方式標記起來的模板變量,如:
    my name is $spname$, i‟m $spage$ years old ...
    其中 spname, spage 就是咱們所謂的模板變量,請設計一個簡單高效的模板解析系統,要求
    上游模塊向該系統提供一個模板文件名和一個模板變量值字典時,
    系統可以返回通過模板變量解析後的文本內容,例如:
    假設模板文件 A.tpl 的內容爲:
    my name is $spname$, i‟m $spage$ years old ...
    提供的模板變量值字典 dict 爲:
    array(‟spname‟ => ‟robin928‟, ‟spage‟ => ‟29‟),
    則解析後的文本內容應該爲:
    my name is robin928, i‟m 29 years old ...
    (訪問字典時能夠經過 dict[‟spname‟]訪問到模板變量 spname 的參數值)
    二、目前最流行的, 被稱爲微革命的互聯網應用Twitter中, 人民能夠在Twitter中互相關注, 被
    關注的人發出的每一條微型博客(通常都在 140 字之內), 都會被關注他的人看到. 而一我的
    可能被幾萬,幾十萬, 甚至上百萬的人關注; 固然, 理論上, 一我的也能夠關注幾萬,幾十萬,
    甚至上百萬的人.
    1) 請設計出這樣的一個系統, 並詳細說明你的設計.
    2) 請指出你設計中的缺點, 並給出改進後的設計.
    3) 請評述你的最終設計的優勢和缺點.
    • 您可先離線完成全部答案,再把整份答案內容剪貼到這裏;全部內容都將以.txt 文件格式保存。
    • 若是您長時間未進行任何操做,答題頁面可能會超時失效;若失效請從新登陸,以防止提交失敗。
    • 請務必在筆試時間結束前提交您的答案,以保證咱們能及時處理。
    • 答案一旦提交成功,則您的筆試結束,您將不能繼續提交答案。
    答題區(請在下邊文本區域填寫答案)
    答案附件: (500K 之內,能夠爲 doc,zip,pdf,jpg 文件)
    提交答案
    B 卷
    第一題、算法和程序設計題
    2(a)讀取中文
    public static String getChinese(String src) throws UnsupportedEncodingException {
    String desc="";
    for (int i = 0; i < src.length(); i++) {
    char ch=src.charAt(i);
    byte[] buf=(ch+"").getBytes("GBK");
    if(buf.length>1){
    desc+=ch;
    }
    }
    return desc;
    }
    2(b)讀取中文或英文
    public class GetPart {
    public static final int CHINESE=1;
    public static final int ENGLISH=2;
    /**
    • @param src
    • @param type 當 type 爲 CHINESE,獲得中文,當 type 爲 ENGLISH 時,獲得英文
    • @return
    • @throws UnsupportedEncodingException
      */
      public static String getPart(String src,int type)throws UnsupportedEncodingException{
      if(type==CHINESE){
      return doGetChinese(src);
      }else if(type==ENGLISH){
      return doGetEnglish(src);
      }else {
      throw new IllegalArgumentException("參數 type 應該爲 1,2,3");
      }
      }
      private static String doGetEnglish(String src) throws UnsupportedEncodingException {
      String desc="";
      for (int i = 0; i < src.length(); i++) {
      char ch=src.charAt(i);
      byte[] buf=(ch+"").getBytes("GBK");
      if(buf.length==1 && Character.isLetter(ch)){
      desc+=ch;
      }
      }
      return desc;
      }
      private static String doGetChinese(String src) throws UnsupportedEncodingException {
      String desc="";
      for (int i = 0; i < src.length(); i++) {
      char ch=src.charAt(i);
      byte[] buf=(ch+"").getBytes("GBK");
      if(buf.length>1){
      desc+=ch;
      }
      }
      return desc;
      }
      public static void main(String[] args) throws UnsupportedEncodingException {
      System.out.println(getPart("123 你好 ok",ENGLISH));
      }
      }
      2(c)能夠同時讀取任意的文本
      public class GetPart {
      public static final int CHINESE=0x1;
      public static final int ENGLISH=0x2;
      public static final int DIGIT=0x4;
      /**
    • @param src
    • @param type 當 type 爲 CHINESE,獲得中文,當 type 爲 ENGLISH 時,獲得英文
    • @return
    • @throws UnsupportedEncodingException
      */
      public static Result getPart(String src,int type)throws UnsupportedEncodingException{
      Result result=new Result();
      if((type & CHINESE) == CHINESE){
      result.setChinese(doGetChinese(src));
      }
      if((type & ENGLISH) == ENGLISH){
      result.setEnglish(doGetEnglish(src));
      }
      if((type & DIGIT) == DIGIT){
      result.setDigit(doGetDigit(src));
      }
      return result;
      }
      private static String doGetDigit(String src) throws UnsupportedEncodingException {
      String desc="";
      for (int i = 0; i < src.length(); i++) {
      char ch=src.charAt(i);
      byte[] buf=(ch+"").getBytes("GBK");
      if(buf.length==1 && Character.isDigit(ch)){
      desc+=ch;
      }
      }
      return desc;
      }
      private static String doGetEnglish(String src) throws UnsupportedEncodingException {
      String desc="";
      for (int i = 0; i < src.length(); i++) {
      char ch=src.charAt(i);
      byte[] buf=(ch+"").getBytes("GBK");
      if(buf.length==1 && Character.isLetter(ch)){
      desc+=ch;
      }
      }
      return desc;
      }
      private static String doGetChinese(String src) throws UnsupportedEncodingException {
      String desc="";
      for (int i = 0; i < src.length(); i++) {
      char ch=src.charAt(i);
      byte[] buf=(ch+"").getBytes("GBK");
      if(buf.length>1){
      desc+=ch;
      }
      }
      return desc;
      }
      public static void main(String[] args) throws UnsupportedEncodingException {
      Result result=getPart("123 你好 ok",CHINESE|ENGLISH|DIGIT);
      System.out.println(result.getChinese());
      System.out.println(result.getEnglish());
      System.out.println(result.getDigit());
      }
      }
      public class Result {
      private String chinese;
      private String english;
      private String digit;
      public Result() {
      }
      public String getChinese() {
      return chinese;
      }
      public void setChinese(String chinese) {
      this.chinese = chinese;
      }
      public String getEnglish() {
      return english;
      }
      public void setEnglish(String english) {
      this.english = english;
      }
      public String getDigit() {
      return digit;
      }
      public void setDigit(String digit) {
      this.digit = digit;
      }
      }
  50. 答:不少方法能解決這個問題.第一:用動態代理爲 Book 生成個代理.
    第二:用設計模式的代理設計模式完成.
    第三:用 spring 的 aop.
    這裏咱們選用設計模式的方式:
    class BookProxy implements Book{
    private Book target;
    public BookProxy(Book target) {
    this.target = target;
    }
    public String getTitle() {
    return target.getTitle();
    }
    public void setTitle(String title) {
    System.out.println("set a book’s title today");//增長的日誌信息
    target.setTitle(title);
    }
    }
    class BookMaster {
    public static void main(String[] args) {
    Book book = new BookImpl();
    book=new BookProxy(book);
    book.setTitle("I feel good.");
    }
    }
    第三題、系統設計題
    1。模板解析
    答:由於模板文件的內容比較長,不能用正則表達式,這樣的效率很低.
    由於模板變量有明確的標誌${}.那麼一遍全文查找就能夠了.遇到${,就開始記錄便利,遇到}
    就讀取了變量 var,那麼查字典 dict['var'],就能獲得其值,而後填充在裏面.
    特別須要說明:字典用散列表創建,這樣效率很高.
    僞代碼:
    public class TemplateUtil {
    /*字典/
    private final static Map<String,String> dict=new HashMap<String, String>();
    static{
    //初始化字典
    }
    /**linux

    • 替換模板變量
    • @param source
    • @return
      /
      public static String replace(String source){
      StringBuffer sb=new StringBuffer();
      for (int i = 0; i < source.length(); i++) {
      char ch=source.charAt(i);
      if(ch=='$'&& (i+1)<source.length() && source.charAt(i+1)=='{'){
      i+=2;
      String var="";
      while(i<source.length()&&source.charAt(i)!='}'){
      var+=source.charAt(i);
      i++;
      }
      sb.append(dict.get(var));
      }else{
      sb.append(ch);
      }
      }
      return sb.toString();
      }
      }
      1912 製做
      試卷說明:
      <!--[if !supportLists]-->1. <!--[endif]-->本試卷共兩套題目,請先用幾分鐘的時間瀏覽一遍,
      選擇一套適合你的試卷進行筆試。
      <!--[if !supportLists]-->2. <!--[endif]-->請在您答案的第一行標註您選擇的是 A 卷仍是 B
      卷。
      <!--[if !supportLists]-->3. <!--[endif]-->兩套試卷的成績不會合並計算,僅計算其中一套的
      分數。請安排好答題時間,不要兩套都作而耽誤時間。
      A 卷(共三道大題)
      【請先閱讀卷首的試卷說明,在 A、B 卷選擇一套試卷做答,同時做答試卷無效】
      第一題、簡答題
      <!--[if !supportLists]-->1. <!--[endif]-->簡要說明樹的深度優先、廣度優先遍歷算法,及非
      遞歸實現的特色。
      <!--[if !supportLists]-->2.<!--[endif]-->在處理磁盤數據時,須要首先將其讀入內存才能進行
      處理。若是要讀取的數據已經在內存中,則能夠直接訪問內存。一般來講內存是有限的,
      所以要讀取新的數據時必須覆蓋內存中一部分原有的數據。假設如今有 n 塊一樣大小的
      數據,內存一共能夠容納 m 塊數據。如今給出一系列對這些數據的讀取請求,要求它們
      必須按照給定的順序被讀取,同時要求讀取磁盤的次數儘量地少。請簡述一個策略滿
      足這樣的要求。
      第二題、算法與程序設計
      1.百度全體員工玩分組遊戲,前面五分鐘你們分頭找隊友,並將每一個人找到的隊友信息匯
      報給主持人,若是 A 和 B 是隊友,B 和 C 是隊友,那麼 A 和 C 也是隊友;接着主持人不斷
      地隨機抽取兩我的,但願判斷兩者是否爲隊友。請設計一個計算機程序輔助主持人判斷兩個
      人是否爲隊友,說明程序的關鍵算法,不須要代碼實現。
      例如:
      <小明,小王>,<小軍,小王>,<小麗,小李>是隊友,那麼小軍和小明是隊友,小軍和小
      麗不是隊友。
      2.給定如下二叉樹:
      struct node_t
      {
      node_t
      left, right;
      int value;
      };
      要求編寫函數 node_t
      foo(node_t *node, unsigned int m, unsigned int k);
      輸出以 node 爲根的二叉樹第 m 層的第 k 個節點值.
      (level, k 均從 0 開始計數)
      注意:
      此樹不是徹底二叉樹;
      所謂的第 K 個節點,是本層中從左到右的第 K 個節點
      第三題、系統設計題
      百度打算開發一個投票系統,它提供建立、查看、參與和管理投票功能。用戶建立一個投票
      時,有以下信息可知:建立者、標題、各選項內容、截止時間、可投票數。另外,該投票是
      否對全部用戶可見繼承於建立者的個性設置。查看一個投票時,除了顯示上述信息外,還需
      要顯示每一個選項的投票數。在截止時間以前,用戶能夠參與投票。管理投票功能爲建立者提
      供刪除一個投票和調整進行中投票截止時間的功能。
      預計該投票系統會很受用戶歡迎,天天可望建立超過 1 萬個投票。天天瀏覽次數達數
      百萬,而且有約一百萬人次參與投票。經驗還代表,用戶更喜歡新近的內容。
      實習生小 A 針對上述需求,打算用數據庫來實現這個投票系統,他給出了數據庫的表
      設計以下:
      user_info:
      uid name … visible
      1 「Alex Wang」 … 1 (all)
      2 「Jeff Li」 … 0 (self)
      vote_info:
      vid u
      id
      title options counts close_time max visible
      1 1 「Do you like
      Lady Gaga?」
      「Yes; No; Who?」 「4; 2; 1」 1339071276 1 1
      2 1 「Who‟s the best
      forward?」
      「Messi; Ronaldo;
      Droba; Millito」
      「912;
      654; 400;
      301」
      1339076234 1 1
      (紅色爲主鍵)
      問題:
      一、小 A 的設計存在什麼問題,如何改善?
      二、若是想增長一個功能,即每一個用戶對每一個投票只能投一次。如何設計?
      三、系統運行了較長一段時間以後,用戶反饋使用中速度變慢。請分析可能的緣由,並提出
      解決辦法。
      四、請完整給出新系統下各功能的實現流程。涉及數據庫查詢的,請給出 SQL 語句。
      B 卷(共三道大題)
      【請先閱讀卷首的試卷說明,在 A、B 卷選擇一套試卷做答,同時做答試卷無效】
      第一題、算法和程序設計題
      一、請編寫函數 foo(int x, int y, int n) 計算:隨機生成 x 個大小爲[1,y]的正整數,它們的和爲
      n 的機率是多少?
      二、設計函數,輸入爲一個字符串,裏邊包含中文、英文、數字等字符,編碼爲 GBK。中文
      字符的編碼規則假定爲:雙字節組成,高字節大於 0x80,低字節任意。
      a) 用經常使用語言(c/c++/php/java)編寫函數,實現功能爲:按順序提取輸入文本中的中文字
      符,造成新的文本串返回調用者。
      b) 若是調用者有時但願獲得輸入串的全中文內容,有時但願獲得英文內容,那麼該函數應
      如何設計。
      c) 若是調用者但願獲取輸入串中包含中文、英文、數字這三種字符中的一種或多種的需求
      不定時,函數應如何設計。
      第二題、簡答題
      一、網站如何維護用戶的登陸狀態?
      百度知道、百度貼吧、百度百科三個網站域名不一樣,但同在.baidu.com 主域下,它們之
      間如何共享用戶登陸狀態?
      若是兩個網站域名也不在一個主域下,例如 www.baidu.com 和 www.qiyi.com,那麼要如
      何共享用戶登陸狀態?
      要求:請儘可能提供多種方案並分析各類方案的優劣。
      (1) 若是在同一域下,能夠用 cookie 共享方式實現.
      在服務器把 cookie 信息寫到 response 時,須要加密.
      當服務器讀取 cookie 時,須要解密.
      (2) 若是在不一樣的域,可用一個服務器羣集來存放用戶的登陸信息.
      當須要 session 信息,直接到服務器羣集去取得.
      注:Cookie:
      Cookie 是由服務器端生成,發送給 User-Agent(通常是瀏覽器),瀏覽器會將 Cookie
      的 key/value 保存到某個目錄下的文本文件內,下次請求同一網站時就發送該 Cookie 給
      服務器(前提是瀏覽器設置爲啓用 cookie)。Cookie 名稱和值能夠由服務器端開發本身
      定義。
      Cookie 記錄着用戶的賬戶 ID、密碼之類的信息,若是在網上傳遞,一般使用的是 MD5
      方法加密。
      Cookie 欺騙:
      截獲 Cookie 的人不須要知道這些字符串的含義,他們只要把別人的 Cookie 向服務器提
      交,而且可以經過驗證,他們就能夠冒充受害人的身份,登錄網站。這種方法叫作 Cookie
      欺騙。
      服務器羣集技術:
      最主要的應用即在於網絡負載平衡的功能。羣集由經過輸入/輸出系統互聯的若干服務
      器構成。
      Session:會話
      在計算機中,尤爲是在網絡應用中,稱爲「會話」。 Session 是指一個終端用戶與交互系
      統進行通訊的時間間隔,一般指從註冊進入系統到註銷退出系統之間所通過的時間。具
      體到 Web 中的 Session 指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經
      過的這段時間,也就是用戶瀏覽這個網站所花費的時間。所以從上述的定義中咱們能夠
      看到,Session 其實是一個特定的時間概念。
      二、在炎炎夏日,你十分口渴,想要買一瓶冰汽水,商店中有三瓶汽水供你選擇(如 ABC),
      其中只有一瓶是冰過的。當你選定了其中的某一瓶後(設爲 A),店員摸了下剩餘兩瓶中的
      一瓶(設爲 B),並告訴你 B 不是冰的,此時你會將你的選擇變動爲剩餘的那瓶嘛(C)?
      請詳述你的理由?
      答:若 A 已是冰的,那就不用選擇 C;若 A 不是冰的,而且店員已經確認 B 不是冰的,所
      以只有 C 是冰的。
      三、TCP 服務器在啓動時,須要通過 socket、bind、listen 和 accept 四個步驟。
      一個單進程的服務器的僞代碼以下:
  51. listen_fd = socket(TCP);
  52. bind(listen_fd, my_addr);
  53. listen(listen_fd, backlog);
  54. while(true)
  55. {
  56. client_fd = accept(listen_fd);
  57. read(client_fd, request);
  58. response = process(request);
  59. write(client_fd, response);
  60. close(client_fd);
  61. }
    某客戶端的僞代碼以下:
  62. fd = connect(server_addr);
  63. write(fd, request);
  64. read(fd, response);
  65. display(response);
  66. close(fd);假設服務器在 04 行執行了 sleep(1000000):問題 1:請簡介服務器四個步驟的意義或做用是什麼?答:socket:是創建套接字.Bind:是讓創建的套接字指定到具體的網絡接口(若是一個機器有多個網絡接口)和端口號.Listen:監聽客戶端的請求Accept:若是有請求到來,accept 返回一個客戶端套接字.此時能夠通訊了.問題 2:當 1 個客戶端訪問該服務器時,客戶端執行到哪行會失敗?會發生阻塞嗎?爲何?問題 3:當 50 個客戶端從 50 臺機器幾乎同時訪問該服務器時,各個客戶端的反應有差異嗎?爲何?(注:忽略防火牆因素)答:有差異,由於沒有用多個線程或者多進程技術,那麼 50 個請求會放在操做系統的隊列裏面.每一次只能處理一個請求,1,2,...,50 等待時間各不相同.也許後面的會由於超時重傳.建議換成多線程技術來處理,也能夠用非阻塞 IO 來處理.那麼用戶的體驗沒有那麼差.二、目前最流行的, 被稱爲微革命的互聯網應用Twitter中, 人民能夠在Twitter中互相關注, 被關注的人發出的每一條微型博客(通常都在 140 字之內), 都會被關注他的人看到. 而一我的可能被幾萬,幾十萬, 甚至上百萬的人關注; 固然, 理論上, 一我的也能夠關注幾萬,幾十萬,甚至上百萬的人.1) 請設計出這樣的一個系統, 並詳細說明你的設計.2) 請指出你設計中的缺點, 並給出改進後的設計.3) 請評述你的最終設計的優勢和缺點.(1) 這個系統中有兩張重要數據庫表:account, attention_accountaccount 是用戶表,而 attention_account 記錄關注用戶的用戶列表.account(id, name, password)attention_account(id, attention_id)--id 爲用戶 id,好比 zhangsan,而 attention_id 爲關注 id 用戶的用戶 id,好比 lisi每一個用戶均可以訂閱本身感興趣的用戶,當某個用戶每發佈一篇文章時,都通知關注他的用戶.這是典型的發佈訂閱模式.(2)缺點:發佈訂閱原本是一種比較好的解決方式,可是用戶必須登陸到 Twitter 系統才能看到本身感興趣的信息.因此若是採起 B/s 模式的話,用戶很難實時的看到本身感興趣的信息.因此若是能夠,建議在提供 B/s 模式的同時,也提供一個可選的 GUI 客戶端,當用戶每次登陸操做系統的時候,自動啓動 GUI 客戶端.這樣實時性更好.(3)評價:這個系統的優勢是採用發佈訂閱方式,可以在用戶發佈信息的時候及時通知對其感興趣的用戶.難點是如何讓用戶實時的讀取本身感興趣的文章.注:GUI:graphical user interface:圖形用戶接口,採用圖形方式顯示的計算機操做用戶界面。即人機交互圖形化用戶界面。B/S 模式:browser/server,瀏覽器/服務器模式,這種方式下,用戶工做界面經過 IE 瀏覽器來實現,最大的優勢是能實現不一樣的人員,從不一樣的地點,以不一樣的接入方式訪問和操做共同的數據。最大的缺點是對外網環境嚴重依賴。發佈訂閱消息模式:註冊用戶成功後發送一個消息給消息管理器,由消息管理器轉發該消息給須要處理的業務。如今,用戶業務只依賴於消息管理器了,它不再會爲了註冊用戶成功後的其餘處理而煩惱。發佈-訂閱消息模式已經呈如今咱們面前,利用它能夠產生更靈活、更鬆散耦合的系統。主要是實現客戶端與服務端的即時數據交互,客戶端經過訂閱事件以待接收數據,服務端經過發佈服務將即時數據發佈至服務,服務通知訂閱了事件的客戶端。三、有一個圖書館系統,含有 Book 和 BookMaster 兩個類。Book 能夠用來設置書的屬性(如title),BookMaster 天天作的事情就是根據上級的要求重設設定某些書的 title,以增長借閱者的注意力,讓更多的人對書有新的興趣。有一天,上級須要 BookMaster 在 setTitle 的操做之前都要在日誌中記錄一條 log。但不幸的是因爲一些很特別的緣由,沒有辦法去修改 Book類,沒法在 Book 類的 setTitle()方法中增長記錄 log 的操做。更不幸的是上級不信任BookMaster 本身的統計結果,使 BookMaster 不能在作 setTitle()以前本身作 log 記錄。 請問如何作才能達到目標,請寫出必要的實現代碼。相關類定義以下:public interface Book { //Book 類能夠設置書的屬性public void setTitle(String title);public String getTitle();}public class BookException extends Exception {public BookException() {}}public class BookImpl implements Book {private String title;public void setTitle(String title) {this.title = title;}public String getTitle() {return this.title;}}public class BookMaster {public static void main(String[] args) {Book book = new BookImpl();out.println("set a book‟s title today"); // 不能添加這行語句,由於上級不信任BookMaster 本身的統計結果book.setTitle("I feel good.");out.println(book.getTitle());}}注:題目中所提供類的定義爲 Java 實現,但您能夠根據您的喜愛自由選擇其它語言完成題目要求。第三題、系統設計題一、假設系統裏有不少模板文件,每一個模板文件都有一個惟一的文件名,其內容是一個長字符串,其中包含不少經過$...$方式標記起來的模板變量,如:my name is $spname$, i‟m $spage$ years old ...其中 spname, spage 就是咱們所謂的模板變量,請設計一個簡單高效的模板解析系統,要求上游模塊向該系統提供一個模板文件名和一個模板變量值字典時,系統可以返回通過模板變量解析後的文本內容,例如:假設模板文件 A.tpl 的內容爲:my name is $spname$, i‟m $spage$ years old ...提供的模板變量值字典 dict 爲:array(‟spname‟ => ‟robin928‟, ‟spage‟ => ‟29‟),則解析後的文本內容應該爲:my name is robin928, i‟m 29 years old ...(訪問字典時能夠經過 dict[‟spname‟]訪問到模板變量 spname 的參數值)
相關文章
相關標籤/搜索