2016年百度校園招聘筆試題精選
下面YJBYS小編為大家搜集的一篇“2016年百度校園招聘筆試題精選”,供大家參考借鑒,希望可以幫助到有需要的朋友!
一、簡(jiǎn)答題
1. 動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的優(yōu)缺點(diǎn)
2. 輪詢?nèi)蝿?wù)調(diào)度和可搶占式調(diào)度有什么區(qū)別?
3. 列出數(shù)據(jù)庫(kù)中常用的鎖及其應(yīng)用場(chǎng)景
二、算法設(shè)計(jì)題
1. 給定N是一個(gè)正整數(shù),求比N大的最小“不重復(fù)數(shù)”,這里的不重復(fù)是指沒有兩個(gè)相等的相鄰位,如1102中的11是相等的兩個(gè)相鄰位故不是不重復(fù)數(shù),而12301是不重復(fù)數(shù)。
2. 設(shè)N是一個(gè)大整數(shù),求長(zhǎng)度為N的字符串的最長(zhǎng)回文子串。
3. 坐標(biāo)軸上從左到右依次的點(diǎn)為a[0]、a[1]、a[2]……a[n-1],設(shè)一根木棒的長(zhǎng)度為L(zhǎng),求L最多能覆蓋坐標(biāo)軸的幾個(gè)點(diǎn)?
三、系統(tǒng)設(shè)計(jì)題
1. 在現(xiàn)代系統(tǒng)的設(shè)計(jì)過程中,為了減輕請(qǐng)求的壓力,通常采用緩存技術(shù),為了進(jìn)一步提升緩存的命中率,同常采用分布是緩存方案。調(diào)度模塊針對(duì)不同內(nèi)容的用戶請(qǐng)求分配給不同的緩存服務(wù)器向用戶提供服務(wù)。請(qǐng)給出一個(gè)分布式緩存方案,滿足如下要求:
1) 單臺(tái)緩存服務(wù)器故障,整個(gè)分布式緩存集群,可以繼續(xù)提供服務(wù)。
2)通過一定得分配策略,可以保證充分利用每個(gè)緩存服務(wù)的存儲(chǔ)空間,及負(fù)載均衡。當(dāng)部分服務(wù)器故障或系統(tǒng)擴(kuò)容時(shí),改分配策略可以保證較小的緩存文件重分配開銷。
3)當(dāng)不同緩存服務(wù)器的存儲(chǔ)空間存在差異時(shí),分配策略可以滿足比例分配。
下面給出我自己的一些解答,不保證100%正確,歡迎批評(píng)指正。
一、簡(jiǎn)答題1. 動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的優(yōu)缺點(diǎn)
解答:(1)動(dòng)態(tài)鏈接庫(kù)(Dynamic Linked Library):Windows為應(yīng)用程序提供了豐富的函數(shù)調(diào)用,這些函數(shù)調(diào)用都包含在動(dòng)態(tài)鏈接庫(kù)中。其中有3個(gè)最重要的DLL,Kernel32.dll、User32.dll和GDI32.dll。有兩種使用方式:一種是靜態(tài)加載,即在應(yīng)用程序啟動(dòng)時(shí)被加載;一種是動(dòng)態(tài)加載,即是該動(dòng)態(tài)鏈接庫(kù)在被使用時(shí)才被應(yīng)用程序加載。優(yōu)點(diǎn)如下:
a. 共享:多個(gè)應(yīng)用程序可以使用同一個(gè)動(dòng)態(tài)庫(kù),啟動(dòng)多個(gè)應(yīng)用程序的時(shí)候,只需要將動(dòng)態(tài)庫(kù)加載到內(nèi)存一次即可;
b. 開發(fā)模塊好:要求設(shè)計(jì)者對(duì)功能劃分的比較好。
缺點(diǎn)是不能解決引用計(jì)數(shù)等問題。
(2)靜態(tài)庫(kù)(Static Library):函數(shù)和數(shù)據(jù)被編譯進(jìn)一個(gè)二進(jìn)制文件(通常擴(kuò)展名為.LIB)。在使用靜態(tài)庫(kù)的情況下,在編譯鏈接可執(zhí)行文件時(shí),鏈接器從庫(kù)中復(fù)制這些函數(shù)和數(shù)據(jù)并把它們和應(yīng)用程序的其它模塊組合起來創(chuàng)建最終的可執(zhí)行文件(.EXE文件)。靜態(tài)鏈接庫(kù)作為代碼的一部分,在編譯時(shí)被鏈接。優(yōu)缺點(diǎn)如下:
代碼的裝載速度快,執(zhí)行速度也比較快,因?yàn)榫幾g時(shí)它只會(huì)把你需要的那部分鏈接進(jìn)去,應(yīng)用程序相對(duì)比較大。但是如果多個(gè)應(yīng)用程序使用的話,會(huì)被裝載多次,浪費(fèi)內(nèi)存。
2. 輪詢?nèi)蝿?wù)調(diào)度和可搶占式調(diào)度有什么區(qū)別?
解答:(1)輪詢調(diào)度的原理是每一次把來自用戶的請(qǐng)求輪流分配給內(nèi)部中的服務(wù)器,從1開始,直到N(內(nèi)部服務(wù)器個(gè)數(shù)),然后重新開始循環(huán)。只有在當(dāng)前任務(wù)主動(dòng)放棄CPU控制權(quán)的情況下(比如任務(wù)掛起),才允許其他任務(wù)(包括高優(yōu)先級(jí)的任務(wù))控制CPU。其優(yōu)點(diǎn)是其簡(jiǎn)潔性,它無需記錄當(dāng)前所有連接的狀態(tài),所以它是一種無狀態(tài)調(diào)度。但不利于后面的請(qǐng)求及時(shí)得到響應(yīng)。
(2)搶占式調(diào)度允許高優(yōu)先級(jí)的任務(wù)打斷當(dāng)前執(zhí)行的任務(wù),搶占CPU的控制權(quán)。這有利于后面的高優(yōu)先級(jí)的任務(wù)也能及時(shí)得到響應(yīng)。但實(shí)現(xiàn)相對(duì)較復(fù)雜且可能出現(xiàn)低優(yōu)先級(jí)的任務(wù)長(zhǎng)期得不到調(diào)度。
3. 列出數(shù)據(jù)庫(kù)中常用的鎖及其應(yīng)用場(chǎng)景
解答:數(shù)據(jù)庫(kù)中的鎖是網(wǎng)絡(luò)數(shù)據(jù)庫(kù)中的一個(gè)非常重要的概念,它主要用于多用戶環(huán)境下保證數(shù)據(jù)庫(kù)完整性和一致性。各種大型數(shù)據(jù)庫(kù)所采用的鎖的基本理論是一致的,但在具體實(shí)現(xiàn)上各有差別。目前,大多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)都或多或少具有自我調(diào)節(jié)、自我管理的功能,因此很多用戶實(shí)際上不 清楚鎖的理論和所用數(shù)據(jù)庫(kù)中鎖的具體實(shí)現(xiàn)。在數(shù)據(jù)庫(kù)中加鎖時(shí),除了可以對(duì)不同的`資源加鎖,還可以使用不同程度的加鎖方式,即鎖有多種模式,SQL Server中鎖模式包括:
1)共享鎖
SQL Server中,共享鎖用于所有的只讀數(shù)據(jù)操作。共享鎖是非獨(dú)占的,允許多個(gè)并發(fā)事務(wù)讀取其鎖定的資源。默認(rèn)情況下,數(shù)據(jù)被讀取后,SQL Server立即釋放共享鎖。例如,執(zhí)行查詢“SELECT * FROM my_table”時(shí),首先鎖定第一頁(yè),讀取之后,釋放對(duì)第一頁(yè)的鎖定,然后鎖定第二頁(yè)。這樣,就允許在讀操作過程中,修改未被鎖定的第一頁(yè)。但是,事務(wù) 隔離級(jí)別連接選項(xiàng)設(shè)置和SELECT語句中的鎖定設(shè)置都可以改變SQL Server的這種默認(rèn)設(shè)置。例如,“ SELECT * FROM my_table HOLDLOCK”就要求在整個(gè)查詢過程中,保持對(duì)表的鎖定,直到查詢完成才釋放鎖定。
2)修改鎖
修 改鎖在修改操作的初始化階段用來鎖定可能要被修改的資源,這樣可以避免使用共享鎖造成的死鎖現(xiàn)象。因?yàn)槭褂霉蚕礞i時(shí),修改數(shù)據(jù)的操作分為兩步,首先獲得一 個(gè)共享鎖,讀取數(shù)據(jù),然后將共享鎖升級(jí)為獨(dú)占鎖,然后再執(zhí)行修改操作。這樣如果同時(shí)有兩個(gè)或多個(gè)事務(wù)同時(shí)對(duì)一個(gè)事務(wù)申請(qǐng)了共享鎖,在修改數(shù)據(jù)的時(shí)候,這些 事務(wù)都要將共享鎖升級(jí)為獨(dú)占鎖。這時(shí),這些事務(wù)都不會(huì)釋放共享鎖而是一直等待對(duì)方釋放,這樣就造成了死鎖。如果一個(gè)數(shù)據(jù)在修改前直接申請(qǐng)修改鎖,在數(shù)據(jù)修 改的時(shí)候再升級(jí)為獨(dú)占鎖,就可以避免死鎖。修改鎖與共享鎖是兼容的,也就是說一個(gè)資源用共享鎖鎖定后,允許再用修改鎖鎖定。
3)獨(dú)占鎖
獨(dú)占鎖是為修改數(shù)據(jù)而保留的。它所鎖定的資源,其他事務(wù)不能讀取也不能修改。獨(dú)占鎖不能和其他鎖兼容。
4)結(jié)構(gòu)鎖
結(jié)構(gòu)鎖分為結(jié)構(gòu)修改鎖(Sch-M)和結(jié)構(gòu)穩(wěn)定鎖(Sch-S)。執(zhí)行表定義語言操作時(shí),SQL Server采用Sch-M鎖,編譯查詢時(shí),SQL Server采用Sch-S鎖。
5)意向鎖
意 向鎖說明SQL Server有在資源的低層獲得共享鎖或獨(dú)占鎖的意向。例如,表級(jí)的共享意向鎖說明事務(wù)意圖將獨(dú)占鎖釋放到表中的頁(yè)或者行。意向鎖又可以分為共享意向鎖、 獨(dú)占意向鎖和共享式獨(dú)占意向鎖。共享意向鎖說明事務(wù)意圖在共享意向鎖所鎖定的低層資源上放置共享鎖來讀取數(shù)據(jù)。獨(dú)占意向鎖說明事務(wù)意圖在共享意向鎖所鎖定 的低層資源上放置獨(dú)占鎖來修改數(shù)據(jù)。共享式獨(dú)占鎖說明事務(wù)允許其他事務(wù)使用共享鎖來讀取頂層資源,并意圖在該資源低層上放置獨(dú)占鎖。
6)批量修改鎖
批量復(fù)制數(shù)據(jù)時(shí)使用批量修改鎖?梢酝ㄟ^表的TabLock提示或者使用系統(tǒng)存儲(chǔ)過程sp_tableoption的“table lock on bulk load”選項(xiàng)設(shè)定批量修改鎖。
二、算法設(shè)計(jì)題1. 給定N是一個(gè)正整數(shù),求比N大的最小“不重復(fù)數(shù)”,這里的不重復(fù)是指沒有兩個(gè)相等的相鄰位,如1102中的11是相等的兩個(gè)相鄰位故不是不重復(fù)數(shù),而12301是不重復(fù)數(shù)。
算法思想:當(dāng)然最直接的方法是采用暴力法,從N+1開始逐步加1判斷是否是不重復(fù)數(shù),是就退出循環(huán)輸出,這種方法一般是不可取的,例如N=11000000,你要一個(gè)個(gè)的加1要加到12010101,一共循環(huán)百萬次,每次都要重復(fù)判斷是否是不重復(fù)數(shù),效率極其低下,因此是不可取的。這里我采用的方法是:從N+1的最高位往右開始判斷與其次高位是否相等,如果發(fā)現(xiàn)相等的(即為重復(fù)數(shù))則將次高位加1,注意這里可能進(jìn)位,如8921―>9021,后面的直接置為010101...形式,如1121―>1201,此時(shí)便完成“不重復(fù)數(shù)”的初步構(gòu)造,但此時(shí)的“不重復(fù)數(shù)”不一定是真正的不重復(fù)的數(shù),因?yàn)榭赡苓M(jìn)位后的次高位變?yōu)?或進(jìn)位后變成00,如9921―>10001,此時(shí)需要再次循環(huán)判斷重新構(gòu)造直至滿足條件即可,這種方法循環(huán)的次數(shù)非常少,我認(rèn)為不超過3次就能滿足條件。
【2016年百度校園招聘筆試題精選】相關(guān)文章:
2017百度校園招聘筆試題目12-04
南方報(bào)業(yè)校園招聘筆試題07-26
淘寶校園招聘會(huì)筆試題10-25
騰訊校園招聘軟件測(cè)試部分筆試題07-26
完美世界校園招聘筆試題目分享12-08
騰訊技術(shù)類校園招聘筆試試題11-22
百度JavaScript筆試題11-16
阿里校園招聘研發(fā)工程師筆試題07-26