百度2010校招面試題_第1頁
百度2010校招面試題_第2頁
百度2010校招面試題_第3頁
百度2010校招面試題_第4頁
百度2010校招面試題_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1、自己寫代碼實現strcpy函數;2、單鏈表轉置代碼實現;3、單鏈表求環代碼實現。4、離線的msn/qq文件傳輸怎么實現?5、考察點可以很多很多,有系統部署、設計,具體策略、算法,以及能否快速抓住關鍵問題6、前n個字母倒置。示例:給定abcdefgh ,前2個字母倒置后為:cdefghab 常規:兩次反轉,ghfedcba-cdefghba-cdefghab 最優:一次到指定位置,abcdefgh-Xbcdefah-Xbcdgfah-Xbedgfah-cb edgfah-cXedgfab-cXedghab-cXefghab-cdef ghab7、大規模日志統計頻次和排序8、Double a=

2、10, printf(d n”,a),打出來是什么值,為什么?基本思路就是考慮printf 的實現方式,如果不知 道可以猜,比如printf 是根據類型來取后面那個 參數的內存地址及長度的。然后就是浮點數的表 示,10在浮點數里表示成什么樣,另外還有小端 大端問題,還有編譯器實現問題。大多數編譯器和平臺下,打出來都是0。9、【算法題】如何識別兩個正則表達式識別的字符 串之間的公共特征,或者說同義的子表達式?1)簡單情況:求兩個正則表達式之 間的最大連續公共子串;進一步可以考察其求連續 公共字串方法。2)復雜情況:化歸為有限自動機, 求兩個圖之間的最大公共子圖;進一步可以考察其 求公共子圖的方法

3、。本題目可用于考察具體應用問題的 分析和解決能力,看其是否可以綜合運用所學來解 決實際問題。10、100個點構成的所有三角形中,求出面積最大 的。解題:樸素算法,NA3次方枚舉。優化:可以證明 面積最大的點一定落在這個點集的凸包上,先求出凸包可以減少枚舉的點。11、足球比賽,勝平負積分3: 1: 0,有一個隊打了 30場比賽,積分是40分,問一共 有多少種勝負組合。解題:三重循環枚舉所有勝負可能或者動態規劃。12、設計題:有一 blog系統,主要數據為用戶、博客文章、博客評論,如何設計存儲架構,能夠方便的通過用戶訪問文章及其評論,同時也便于用戶管理自己的評論?以及當用戶量增長以后如何考慮數據切

4、分?當出現熱區用戶時如何 處理?A:要能夠同時方便的通過文章找到評論,以及通過用戶找到評論,比較簡便的辦法是對于評論數據存兩份,一份跟文章走,一份跟用戶走。數據切分通常走垂直切分比較好擴展,但具體的處理方式要注意。通過定期統 計,然后將熱 區用戶數據獨立出來,可以避免資源占用過高。考察點:系統設計能 力,對存儲系統的了解和應用能力。13、算法題:有一個字符串文件,其中部分字符串存在逆序重疊的關系,如何將這些字符串找到并輸出?重復出現只要輸出一次。最快的方法時間復雜度是多少?加入有 100w字符串,每個字符串最常 1024字節,那么需要占用多少空 間?A:最快的方法是用 hash,通常會進一步問

5、如何解決 hash沖突,結合hash沖突的解決方法問占用時間和空間的 問題。考察點:基本算法知識。對 hash沖突的解決可以考察工程經驗。14、 開放型問題:1)估算一下北京地鐵13號線上有多少輛列車,每 天夜間停靠在哪里?2)估算一下目前北京有多少人在面試?15、估算中文網頁數:已知 baidu收錄量X億,怎 么估算全部中文網頁數?利用baidu、google相同query中的公共與獨有結 果比例,結合X得出。合理的選擇query能提高準確率,query結果隨機 性越好估算越準,例如某相對稀有單term查詢16、信使問題:a b兩人距離為n,相向而行,速度 分別為a bc和a一起出發,速度為

6、coca,cbo c迎面碰到a b的某人后就扭頭往回走。問 k小時 后c在哪個位置?注:此時 ab還未碰面解題思路:c每次和a b中某人碰面花的時間ti 序列和這些時刻ab間距離ni序列是較容易列出 遞推關系的。找到某個i ,使得tik= l2) if (memcmp(s1, s2, l2) = 0) return s1;s1+;l1-;return 0;考察點:1、參數聲明時是否有加const的習慣2、有沒有判斷輸入參數的合法性3、比較時有沒有越界現象讀寫互斥鎖的實現研究及性能分析29、(1)字符串循環右移N位。問題:把字符串abcdefg,右移兩位后變成fgabcde , 盡量少用空間,少

7、用時間。答案:-1-先對字符串按照移動位數分成兩部分。abcde+fg2-分別對字符串反轉。edcba+gf3-統一反轉后完成。fgabcde可以考察面試者的代碼能力,寫的代碼,如果能把反轉的代碼單獨寫出,可以看出模塊化的編程方法,看出代碼重用的考慮,可以加分。類似的演化題,把一個英語句子反轉。how are you-you are how1-先把句子中的每個單詞反轉2-然后把句子整個反轉。(2)經典的bitmap問題:10億個32bit的無序整數集合,找出重復出現的整數。答案:使用bitmap , 32bit的整數最大是2A32 - 1.申請8bit*512M即可。占用內存512M 遍歷整數

8、,把整數 N對應到bitmap的第N個位置上,如果發現是1,則為重復出現的整數。如果是0 ,則設置為1,表示已出現。線性時間即可得出。30、兩個集合求差集A、如果說熟悉腳本語言,那么用腳本寫B、給出第一個算法后,可以增加難度:兩個集合超級大問其在使用搜索引擎時的體驗,覺得有什么問題, 針對他發現的問題,可以提問如何解決31、題目:使用加減乘除算一個數的平方根。解答:二分逼近,要考慮實數比較問題。32、針對有Linux相關經驗的:linux下開發一個程序,現有要求希望該程序不能 有多個進程一起跑,同一時刻僅能有一個在運行(類 似windows下掉任務管理器),請列舉實現方案? 考察點:1、問題分

9、解和抽象能力;2、對linux系統的了解程度;首先要能分析出該問題的實質,即需要利用系統提 供的資源實現進程的互斥。并且能夠進一步分析出,系統提供的資源必須具有 如下特點:1、支持原子性操作(test_and_set ),否則可能 導致多個進程同時起來;2、資源生命期必須是進程級的,否則一旦進程異 常退出,可能未能釋放資源,導致程序無法再次 運行;接著根據以上分析,尋找linux中具有上述特性的 資源,例如:1、監聽特定端口;2、使用文件鎖;3、 mutex;等等33、語言:C+與C的區別是什么? STL 了 解么? STL中string 的實現方式? map的實現方式? vector 的實現

10、方式? 使用 string 、 map vector 時 候需要注意的地方?C+中什么時候使用const ?與 在C中使用const有什么異同?什么時候使用引用? 引用和指針的區別?Class和struct的區別?繼承、多態在c+中是如何實現的?模板元編程對程序編譯期、執行期的影響有哪些?系統:Vim使用;打印出一個非常大的文件的第 n行;3種方法;定時啟動某一個程序如何做到?Linux 內存調度策略? virtual,swap,memory 的區別;如何查看一個程序 使用的網絡、內存、硬盤、cpu等性能指標? 編程:鏈表、樹、圖的常用操作;常用 排序算法;相關編程問題;多線程編程、網絡編程基

11、礎知識 問題;字符串匹配、分析算法考察; 常用腳本的一些基礎知識; 其他:項目問題;負責模塊;技術難點; 解決問題的思路和方法;如何思考的,為什么采取 這樣的方案;團隊合作方面;其他方面 34、說明:可以用來考察面試者的思維能力,和寫 代碼的風格,能力等。我用過很多次,能做得很好 的不多。而且,能夠發散的地方也很多,比如遞歸 與非遞歸實現?能夠還原出樹的條件? 題目:二叉樹遍歷問題二叉樹的遍歷,有前序遍歷,中序遍歷和后續遍歷 三種:用遞歸的方式描述如下:前序遍歷:先訪問根節點,然后前序遍歷左子樹,再前序遍歷右子樹;中序遍歷:先中序遍歷左子樹,然后訪問根節點,再中序訪問右子樹;后續遍歷:先后續訪

12、問左子樹,然后后續訪問右子 樹,最后訪問根節點。1/ 23/ 4 56這棵樹的三種遍歷結果為:前序:1 2 4 5 3 6中序:4 2 5 1 3 6后續:4 5 2 6 3 1現給出一顆二叉樹的中序和后序訪問結果,請還原 該二叉樹,給出前序遍歷結果,并考慮編程實現。中序:d b e h a f c i g j后序:d h e b f i j g c a答案:前序結果為:a b d e h c f g i j35、面試小題庫c,c+經典問題及面試筆試題1編程基礎基本概念const char*, char const*, char*const的理解:const char*, char const

13、*, char*const 的區 別問題幾乎是 C+湎試中每次都會有的題目。事實上這個概念誰都有只是三種聲明方式非常相似 很容易記混。Bjarne在他的The C+Programming Language里面給出過一個助記的方法:把一個聲明從右向左讀。char * const cp; ( *讀成 pointer to )cp is a const pointer to charconst char * p;p is a pointer to const char;char const * p;同上因為C+理面沒有const*的運算符,所以const 只能屬于前面的類型。.指針cint *pn;

14、指針數組,每個元素均為指向整型數據的指針。int (*)pn;p為指向一維數組的指針,這個一維數組有n個整型數據。int *p(); 函數帶回指針,指針指向返回的值。int (*)p();int (*)p();p為指向函數的指針.數組越界問題下面這個程序執行后會有什么錯誤或者效果:#define MAX 255 int main() (unsigned char AMAX,i;for (i=0;i=MAX;i+) Ai=i;解答:MAX=255數組A的下標范圍為:0.MAX-1,這 是其一,其二 當i循環到255時,循環內執行: A255=255;這句本身沒有問題,但是返回for(i=0;i=

15、MAX;i+) 語句時,由于 unsigned char 的取 值范圍在(0.255),i+ 以后i又為0 了.無限循環 下去.注:char類型為一個字節,取值范圍是-128 , 127, unsigned char 0 ,255. C+:memset ,memcpy 和 strcpy , strncpy , snprintf 的根本區別?#include memory.hmemset用來對一段內存空間全部設置為某個字符, 一般用在對定義的字符串進行初始化為或0;例:char a100;memset(a, 0, sizeof(a);memcpyffl來做內存拷貝,你可以拿它拷貝任何數據類型的對

16、象,可以指定拷貝的數據長度;例: char a100,b50; memcpy(b, a, sizeof(b);注意如用sizeof(a),會造成b的內存地址溢出。strcpy就只能拷貝字符串了,它遇到0就結束拷貝;例:char a100,b50;strcpy(a,b); 如用 strcpy(b,a),要注意a中的字符串長度(第一個0之前)是否超過50位,如超過,則會造成 b 的內存地址溢出。strcpy原型:extern char *strcpy(char *dest,char *src);用法:#include功能:把src所指由NULLi吉束的字符串復制到dest 所指的數組中。說明:sr

17、c和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。返回指向dest的指針。memcpy原型:extern void *memcpy(void *dest, void *src, unsigned int count);用法:#include功能:由src所指內存區域復制count個字節到dest所指內存區域。說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針。Memset原型:extern void *memset(void *buffer, char c, int count);用法:#include功能:把buffer所指內存區域的前co

18、unt個字節設 置成字符Co說明:返回指向buffer的指針。. ASSERT()是干什么用的?ASSERT(是一個調試程序時經常使用的宏,在程序 運行時它計算括號內的表達式,如果表達式為 FALSR0),程序將報告錯誤,并終止執行。如果表 達式不為0,則繼續執行后面的語句。這個宏通常 原來判斷程序中是否出現了明顯非法的數據,如果 出現了終止程序以免導致嚴重后果,同時也便于查 找錯誤。例如,變量 n在程序中不應該為0,如果 為0可能導致錯誤,你可以這樣寫程序:ASSERT( n != 0); k = 10/ n;ASSERT只有在Debug版本中才有效,如果編譯為Release版本則被忽略。a

19、ssert()的功能類似,它是ANSI C標準中規定的函 數,它與ASSERT的一個重要區別是可以用在 Release版本中。. system (pause);系統的暫停程序,按任意鍵 繼續,屏幕會打印,按任意鍵繼續。OOOO 省去了 使用 getchar ();.請問C+勺類和C里面的struct有什么區別? C+中的類具有成員保護功能,并且具有繼承,多態 這類oo特點,而c里的struct沒有.請講一講析構函數和虛函數的用法和作用? 析構函數也是特殊的類成員函數, 它沒有返回類型, 沒有參數,不能隨意調用,也沒有重載。知識在類 對象生命期結束的時候,由系統自動調用釋放在構 造函數中分配的資

20、源。這種在運行時,能依據其類 型確認調用那個函數的能力稱為多態性,或稱遲后 聯編。另:析構函數一般在對象撤消前做收尾工作, 比如回收內存等工作,虛擬函數的功能是使子類可 以用同名的函數對父類函數進行重載,并且在調用 時自動調用子類重載函數,如果是純虛函數,則純 粹是為了在子類重載時有個統一的命名而已。.全局變量和局部變量有什么區別?實怎么實現 的?操作系統和編譯器是怎么知道的?全局變量的生命周期是整個程序運行的時間,而局 部變量的生命周期則是局部函數或過程調用的時間 段。其實現是由編譯器在編譯時采用不同內存分配方法。全局變量在 main函數調用后,就開始分配,如果是靜態變量則是在main函數前

21、就已經初始化了。而局部變量則是在用戶棧中動態分配的(還是 建議看編譯原理中的活動記錄這一塊). 8086是多少位的系統?在數據總線上是怎么實 現的? 8086系統是16位系統,其數據總線是 20 位。1.2程序設計.編寫用C語言實現的求n階階乘問題的遞歸算法:long int fact(int n)(int x;long int y;if(nhigh) return -1;mid=(low+high)/2;if(x=amid) return mid;if(xamid)return(BSearch(a,x,low,mid-1);else return(BSearch(a,x,mid+1,high);2)非遞歸方

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論