版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 2022年百度公司 C語言開發(fā)工程師面試題第1題: 用 C 語言寫一個函數(shù)來執(zhí)行一串任務(wù)。任務(wù)是相互依靠的。比如 B 任務(wù)依靠 A 任 務(wù),則 A 完成 B 才能執(zhí)行。不考慮并發(fā)限制,假設(shè)全部的任務(wù)都能一次執(zhí)行勝利, 全部的任務(wù)執(zhí)行時間都相等。任務(wù)數(shù)據(jù)結(jié)構(gòu)原型為: typedef struct /該任務(wù)的 ID int id; /該任務(wù)依靠的任務(wù)的 ID int *child; /該任務(wù)依靠的任務(wù)個數(shù) int child_num; task; / 函數(shù)原型: bool doschedule(task*pask,inttask_num); /以下函數(shù)可以直接調(diào)用: void dotask(in
2、t id); /執(zhí)行一個進程 /等待 timeout 時間,并返回一個執(zhí)行勝利的任務(wù)的 id,假如沒有任務(wù)在時間片內(nèi)完成,則返回-1 int waittask(int timeout); bool killtask(int id); /殺掉一個進程 第2題: 闡述棧和堆在生命周期、速度、內(nèi)存性能等方面的不同點。假如現(xiàn)在有一個緩沖 區(qū)域絕大多數(shù)只需要 1KB 空間,極少數(shù)極端狀況下需要 100MB,怎么樣合理安排內(nèi) 存? 棧:棧存在于RAM中。棧是動態(tài)的,它的存儲速度是其次快的。stack 堆:堆位于RAM中,是一個通用的內(nèi)存池。全部的對象都存儲在堆中。heap 2 申請方式 stack【?!?
3、由系統(tǒng)自動安排。例如,聲明在函數(shù)中一個局部變量 int b; 系統(tǒng)自動在棧中為b開拓空間。 heap【堆】:需要程序員自己申請,并指明大小,在c中malloc函數(shù) 如p1 = (char *)malloc(10);在C+中用new運算符 如p2 = (char *)malloc(10); 但是留意:p1、p2本身是在棧中的。 3 申請后系統(tǒng)的響應(yīng) ?!緎tack】:只要棧的剩余空間大于所申請空間,系統(tǒng)將為程序供應(yīng)內(nèi)存,否則將報特別提示棧溢出。 堆【heap】:首先應(yīng)當(dāng)知道操作系統(tǒng)有一個記錄空閑內(nèi)存地址的鏈表,當(dāng)系統(tǒng)收到程序的申請時,會遍歷該鏈表,查找第一個空間大于所申請空間的堆結(jié)點,然后將該結(jié)
4、點從空閑結(jié)點鏈表中刪除,并將該結(jié)點的空間安排給程序;另外,對于大多數(shù)系統(tǒng),會在這塊內(nèi)存空間中的首地址處記錄本次安排的大小,這樣,代碼中的delete語句才能正確的釋放本內(nèi)存空間。另外,由于找到的堆結(jié)點的大小不肯定正好等于申請的大小,系統(tǒng)會自動的將多余的那部分重新放入空閑鏈表中。 4 申請大小的限制 ?!緎tack】:在Windows下,棧是向低地址擴展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數(shù)),假如申請的空間超過棧的剩余空間時,將提示overflow。因此,能從
5、棧獲得的空間較小。 堆【heap】:堆是向高地址擴展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是用鏈表來存儲的空閑內(nèi)存地址的,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計算機系統(tǒng)中有效的虛擬內(nèi)存。由此可見,堆獲得的空間比較敏捷,也比較大。 5 申請效率的比較 ?!緎tack】:由系統(tǒng)自動安排,速度較快。但程序員是無法掌握的。 堆【heap】:是由new安排的內(nèi)存,一般速度比較慢,而且簡單產(chǎn)生內(nèi)存碎片,不過用起來最便利. 另外,在WINDOWS下,最好的方式是用VirtualAlloc安排內(nèi)存,他不是在堆,也不是在棧是直接在進程的地址空間中保留一快內(nèi)存,雖然用起來最不便
6、利。但是速度快,也最敏捷。 6 堆和棧中的存儲內(nèi)容 ?!緎tack】:在函數(shù)調(diào)用時,第一個進棧的是主函數(shù)中后的下一條指令(函數(shù)調(diào)用語句的下一條可執(zhí)行語句)的地址,然后是函數(shù)的各個參數(shù),在大多數(shù)的C編譯器中,參數(shù)是由右往左入棧的,然后是函數(shù)中的局部變量。留意靜態(tài)變量是不入棧的。 當(dāng)本次函數(shù)調(diào)用結(jié)束后,局部變量先出棧,然后是參數(shù),最終棧頂指針指向最開頭存的地址,也就是主函數(shù)中的下一條指令,程序由該點連續(xù)運行。 堆【heap】:一般是在堆的頭部用一個字節(jié)存放堆的大小。堆中的詳細(xì)內(nèi)容有程序員支配。 7 存取效率的比較 char s1 = aaaaaaaaaaaaaaa; char *s2 = bbbb
7、bbbbbbbbbbbbb; aaaaaaaaaaa是在運行時刻賦值的;而bbbbbbbbbbb是在編譯時就確定的;但是,在以后的存取中,在棧上的數(shù)組比指針?biāo)赶虻淖址?例如堆)快。 第3題: 說明以下包含 const 修飾符的語句的意義 a). double * ptr=value; b). const double * ptr=value; c). double *constptr =value; d).const double *const ptr=value; const在前內(nèi)容不能變,const在指針后則指針不能變 第4題: 請問 c 語言中怎么去除 const 修飾? 比如: c
8、onst double value=0.2f; double *ptr;ptr 怎么樣獵取 value 的值? Ptr=(int*)value; 第5題: 在一維坐標(biāo)軸上存在很多條線段, 用最簡潔的算法找出重合長度最長得兩條線段。 比如線段 A(1,5)、B(2,8)、C(3,9),則 B 和 C 的重合長度最長,為 5。 這個問題可以轉(zhuǎn)換成一個動態(tài)規(guī)劃問題: 比如我們想求Sn(Sn表示從求從第一個segment開頭,總共有n個元素的子問題,求這個子問題的最大重合線段。),首先我們要證明這是一個動態(tài)規(guī)劃問題:我們要求Sn問題的最大重合線段,那么它只有可能有兩種來源:(1)Sn-1問題的最大重合
9、線段,即Sn的最大重合線段出自前n-1個線段;(2)第n個線段Segmentn-1(留意:我是從0開頭計數(shù)的,所以下標(biāo)為n-1的就是第n個線段)和前n-1個線段的重合線段中最長的那一個。所以,問題的解法如下:(1)首先根據(jù)全部線段的end值對全部線段進行排序;(2)遞歸的從后往前求解,比如求Sn的最大重合線段,先通過遞歸求出Sn-1的最大重合線段(tmpMaxSeg),再求出Segmentn-1和前n-1個線段的重合線段中最長的那一個(currMaxSeg),比較tmpMaxSeg和currMaxSeg的長度,選出最長的作為Sn的返回值。(3)留意:遞歸出口:size=2時,只有兩個線段,通過
10、簡潔比較就可以得出最大掩蓋線段;至于這塊兒:是為了應(yīng)對原本傳入的線段數(shù)組的大小小于等于1的狀況,算是邊界條件處理了,不是遞歸的出口。假如傳入數(shù)組大小為3,遞歸執(zhí)行到數(shù)組大小為2時就可以返回了。 #include iostream #include cstdlib #include algorithm const int LEN = 3; using namespace std; struct segment int start; int end; ; / assume a.end b.end segment commonSeg(const segment a, const segment b)
11、 segment CommonSeg; if(a.end b.start) CommonSeg.end = 0; CommonSeg.start = 0; else CommonSeg.end = a.end; CommonSeg.start = b.start; return CommonSeg; int findMaxSegment(int size, segment * Segment, segment maxSeg) if(NULL = Segment) cerr the segment array is NULL endl; return -1; else if(1 = size)
12、maxSeg = Segment0; return maxSeg.end-maxSeg.start; else if(2 = size) if(Segment0.end = Segment1.start) maxSeg.start = 0; maxSeg.end = 0; return maxSeg.end-maxSeg.start; else maxSeg.end = Segment0.end; maxSeg.start = Segment1.start; return maxSeg.end-maxSeg.start; else segment tmpMaxSeg, tmpSeg,currM
13、axSeg; int currMaxLen = 0; findMaxSegment(size-1, Segment, tmpMaxSeg); for(int i=0; isize-1; i+) tmpSeg=commonSeg(Segmenti, Segmentsize-1); if(tmpSeg.end - tmpSeg.start currMaxLen) currMaxLen = tmpSeg.end - tmpSeg.start; currMaxSeg = tmpSeg; if(tmpMaxSeg.end - tmpMaxSeg.start currMaxLen ) maxSeg = t
14、mpMaxSeg; else maxSeg = currMaxSeg; return maxSeg.end - maxSeg.start; bool isShorter(const segment s1, const segment s2) return s1.end s2.end; int main() segment * Segment = new segmentLEN; Segment0.start = 1; Segment0.end = 5; Segment1.start = 2; Segment1.end = 8; Segment2.start = 3; Segment2.end =
15、 9; sort(Segment, Segment + LEN, isShorter); segment maxSeg; findMaxSegment(LEN, Segment, maxSeg); cout maxSeg.start endl; cout maxSeg.end endl; delete Segment; return 0; 第6題: 百度的某服務(wù)機制類似于 CS(customer-server),有時候大量用戶訪問服務(wù)器 S, 導(dǎo)致 S 運行效率緩慢。 為了提升效率, 擬在 C 上利用一些空余的結(jié)果空間作為緩存。 已知在 C 的一臺客戶機上,每天接收 1000w query,其中 500w uniq query,每個 query 5KB,客戶機內(nèi)存 3GB,硬盤 500GB。做出一個方案,說明系統(tǒng)結(jié)構(gòu)、存儲結(jié) 構(gòu)、性能優(yōu)化等方面的設(shè)計。 1.全部的query結(jié)果都放在硬盤 2.全部query到query結(jié)果的映射存儲在內(nèi)存 3.多余內(nèi)存作為緩存,緩存淘汰機制為查詢次數(shù)和LRU 第7題: 推斷一個括號字符串是否匹配正確,假如括號有多種,怎么做?如()正確,()錯誤。 用棧來消失,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度跨境電商進口稅收優(yōu)惠政策合同4篇
- 二零二五年度綜合保稅區(qū)農(nóng)民工就業(yè)服務(wù)協(xié)議4篇
- 2025年安全事故賠償合同
- 2025年增資融資合同
- 2025年度門體維修及施工安裝服務(wù)合同4篇
- 2025年度購物中心珠寶首飾店鋪租賃合同范本
- 2025年魯人版九年級生物上冊月考試卷
- 2025年貴州習(xí)水林旅投資有限公司招聘筆試參考題庫含答案解析
- 臨時建筑項目2024年施工合作合同版
- 2025年湖南衡陽弘山投資有限公司招聘筆試參考題庫含答案解析
- 2025年上半年江蘇連云港灌云縣招聘“鄉(xiāng)村振興專干”16人易考易錯模擬試題(共500題)試卷后附參考答案
- DB3301T 0382-2022 公共資源交易開評標(biāo)數(shù)字見證服務(wù)規(guī)范
- 人教版2024-2025學(xué)年八年級上學(xué)期數(shù)學(xué)期末壓軸題練習(xí)
- 江蘇省無錫市2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)試題(原卷版)
- 俄語版:中國文化概論之中國的傳統(tǒng)節(jié)日
- 2022年湖南省公務(wù)員錄用考試《申論》真題(縣鄉(xiāng)卷)及答案解析
- 婦科一病一品護理匯報
- 哪吒之魔童降世
- 2022年上海市各區(qū)中考一模語文試卷及答案
- 2024年全國統(tǒng)一高考數(shù)學(xué)試卷(新高考Ⅱ)含答案
- 我國無菌包裝行業(yè)消費量已超千億包-下游需求仍存擴容潛力
評論
0/150
提交評論