小米软件开发笔试题
第一卷
1.下列關(guān)于設(shè)計(jì)模式說法錯(cuò)誤的是( )
正確答案: B
解析:
1.裝飾器模式(Decorator Pattern) 允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能(ps:是對(duì)象,可以通過構(gòu)造器注入),同時(shí)又不改變其結(jié)構(gòu).
例子: java中的I/O流
2.適配器模式(Adapter Pattern) 是兩個(gè)不兼容接口之間的橋梁.
這種模式涉及一個(gè)單一的類(被適配對(duì)象),該類負(fù)責(zé)加入獨(dú)立的或不兼容的接口.
3.餓漢模式是類加載會(huì)觸發(fā)初始化創(chuàng)造示例,創(chuàng)建的是父類對(duì)象,若繼承的話,創(chuàng)建的依舊是父類對(duì)象.
4.簡單工廠模式可以實(shí)現(xiàn)按照客戶端動(dòng)態(tài)條件創(chuàng)造對(duì)象.
2.從尚未排序的N名學(xué)生的考試分?jǐn)?shù)中挑出排名第K的分?jǐn)?shù),平均時(shí)間復(fù)雜度最優(yōu)可以達(dá)到多少?( )
答案:C
解析:考試成績說明是有限范圍內(nèi)的數(shù),就可以用堆排序或者計(jì)數(shù)排序,復(fù)雜度都是O(n+k), 約等于0(n)
3.在下列序列中,若以最后一個(gè)數(shù)字為基準(zhǔn)進(jìn)行快速排序(升序),第一趟數(shù)字被移動(dòng)次數(shù)最多的是()
正確答案: B
B項(xiàng) 小數(shù)都集中在后面。
4.1,2,3,4,5 五個(gè)數(shù)字,能組成多少種不同的二叉搜索樹的結(jié)構(gòu)?
42種,
5.下面關(guān)于有向無環(huán)圖說法錯(cuò)誤的是?( )
正確答案: D
解析:樹的節(jié)點(diǎn)的父節(jié)點(diǎn)只能是一個(gè),而無環(huán)圖的節(jié)點(diǎn)可以有多個(gè)入度(父節(jié)點(diǎn))
6.以下說法正確的有( )
正確答案: A B D
7.UNIQUE惟一索引的作用是( )
正確答案: C
8.數(shù)據(jù)庫表a主鍵為id,共10行,表b存在關(guān)聯(lián)列aid,共5行,以下查詢
select count(1) from a left join b on a.id = b.aid可能的結(jié)果為( )
正確答案: B
9.在一個(gè)真實(shí)的計(jì)算機(jī)系統(tǒng)中,資源會(huì)損壞或被替換,新的進(jìn)程會(huì)進(jìn)入和離開系統(tǒng),新的資源會(huì)被購買和添加到系統(tǒng)中。如果用銀行家算法控制死鎖,下面哪些變化是安全的(不會(huì)導(dǎo)致可能的死鎖)?( )
正確答案: B C
10.在一個(gè)真實(shí)的計(jì)算機(jī)系統(tǒng)中,可用的資源和進(jìn)程命令對(duì)資源的要求都不會(huì)持續(xù)很久是一致的長期(幾個(gè)月)。資源會(huì)損壞或被替換,新的進(jìn)程會(huì)進(jìn)入和離開系統(tǒng),新的資源會(huì)被購買和添加到系統(tǒng)中。如果用銀行家算法控制死鎖,下面哪 些變化是安全的(不會(huì)導(dǎo)致可能的死鎖)?( )
正確答案: B C
11.在C++中,聲明 int const** const * const x 表示x是什么類型?
正確答案: C
解析:
從最里層往外看,它是一個(gè)const指針
往外走一層,上層指針指向的是一個(gè)const的指針
再往外走一層,挖掉里面兩層的剩下int const * x,這是一個(gè)指針,它指向的一個(gè)不可更改的int數(shù)據(jù)
所以結(jié)合起來,應(yīng)該是是一個(gè)const指針,指向一個(gè)const指針,指向一個(gè)普通指針,指向一個(gè)const int。
12.以下問題錯(cuò)誤的是( )
正確答案: B
13.下面關(guān)于虛函數(shù)的描述中,正確的是( )
正確答案: A B C
14 下面STL容器中,哪些是有序的( )
正確答案: B D
16 Java虛擬機(jī)里提供了哪些調(diào)用字節(jié)指令()
正確答案: A B C
解析:
invokestatic 靜態(tài)方法
invokespecial 構(gòu)造方法,private方法,父類方法.
invokevirtual,invokeinterface 調(diào)用重寫的方法(動(dòng)態(tài)單分派).
invokedynamic 動(dòng)態(tài)類型語言,動(dòng)態(tài)方法調(diào)用(lambda表達(dá)式)
17.在Python 3中,對(duì)于字符編碼敘述正確的是()
正確答案: B
18.編譯程序目標(biāo)代碼生成階段主要任務(wù)是()
正確答案: D 你的答案: B (錯(cuò)誤)
19.在X86平臺(tái)上,C語言函數(shù)調(diào)用時(shí),通過以下哪種方式傳遞參數(shù)?
正確答案: C
20.編譯程序不僅包含詞法分析、語法分析、中間代碼生成、目標(biāo)代碼生成,還包括()
正確答案: A B D
第二卷
1.計(jì)算大于n(n>1)的最小的斐波那契數(shù),以下劃線出應(yīng)填入
function f(n:int){int[] a = new int[2];a[0] = a[1] = 1;int i =1 ;while(true){i = (i + 1)%2a[i] = ______If(a[i] > n){return a[i]}} }正確答案: B
A a[i] + a[i + 1] B a[i % 2] + a[(i+1)%2] C a[i] + a[i -1] D a[i%2] + a[(i-1)%2]解析:
a[]的大小是2,所以只有a[0],a[1],當(dāng)i = 0時(shí)(i為奇數(shù)),a[i - 1]越界,i = 1時(shí),a[i + 1]越界,因此排除ACD
復(fù)雜度()
正確答案: D
3.下面關(guān)于樹的遍歷算法說法錯(cuò)誤的是?()
正確答案: A B
解析:
先序,中序,后序三種應(yīng)該都?xì)w為深度優(yōu)先遍歷算法,只有層次遍歷才算廣度優(yōu)先遍歷算法
說簡單一些,DFS的實(shí)現(xiàn)原理是遞歸棧,表現(xiàn)為遞歸,用棧實(shí)現(xiàn);二叉樹的三種遍歷方式也是同理,表現(xiàn)為遞歸,用棧實(shí)現(xiàn)。所以,二叉樹的三種序列遍歷都屬于DFS。
4.關(guān)于排序算法,以下的哪些敘述是正確的?( )
正確答案: C D
參考《程序員面試寶典》 245頁
5.初始化序列為9,1,10,7,6,5,2,8的一組數(shù)采用堆排序,當(dāng)建大根堆完畢時(shí),堆所對(duì)應(yīng)的二叉樹中序遍歷序列為:()
正確答案: D
6.高度為7的完全二叉樹的節(jié)點(diǎn)總數(shù)不可能是:()
正確答案: D
解析:
當(dāng)為6層的話,最多2^7-1=127個(gè)。
當(dāng)為7層的話,最多2^8-1=255個(gè)。
合法的應(yīng)該是[128,255]之間。
D項(xiàng)不滿足。
7.關(guān)系數(shù)據(jù)庫的事務(wù)具有下列哪些特點(diǎn)()
- 原子性(Atomicity):事務(wù)應(yīng)該當(dāng)作一個(gè)單獨(dú)單元的操作,這意味著整個(gè)序列操作要么是成功,要么是失敗的。 - 一致性(consistency):這表示數(shù)據(jù)庫的引用完整性的一致性,表中唯一的主鍵等。 - 隔離性(Isolation):可能同時(shí)處理很多有相同的數(shù)據(jù)集的事務(wù),每個(gè)事務(wù)應(yīng)該與其他事務(wù)隔離,以防止數(shù)據(jù)損壞。 - 持久性(Durability):一個(gè)事務(wù)一旦完成全部操作后,這個(gè)事務(wù)的結(jié)果必須是永久性的,不能因系統(tǒng)故障而從數(shù)據(jù)庫中刪除。8.下面笛卡爾積的基數(shù)計(jì)算正確的選項(xiàng)有哪些?()
正確答案: A D
基數(shù)直接乘起來,如果是問元素就加起來
9.Linux父進(jìn)程在fork一個(gè)子進(jìn)程時(shí)如下哪些行為在系統(tǒng)層不會(huì)發(fā)生:()
正確答案: D
10下列描述中錯(cuò)誤的是______.
正確答案: A B D
解析:
A. 交換機(jī)可以提供更大的帶寬和數(shù)據(jù)轉(zhuǎn)發(fā)功能。
B. C類IP地址范圍從192.0.0.1-223.255.255.254,所以應(yīng)該是B類地址。
D. Keep-Alive不會(huì)永久保持連接,它有一個(gè)保持時(shí)間,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個(gè)時(shí)間。實(shí)現(xiàn)長連接需要客戶端和服務(wù)端都支持長連接。
11已知:print()是一個(gè)類的常成員函數(shù),無返回值,下列表示中正確的是()
正確答案: A
12下面關(guān)于C++異常處理描述中,錯(cuò)誤的是()
正確答案: A
解析:
棧解旋:當(dāng)發(fā)生異常時(shí),從進(jìn)入try塊后,到異常被拋擲前,這期間在棧上的構(gòu)造的所有對(duì)象都會(huì)被自動(dòng)析構(gòu)。析構(gòu)的順序與構(gòu)造的順序相反,這一過程被稱為棧的解旋。
A項(xiàng)多了堆對(duì)象。
13.下面代碼段存在致命問題的是單選()
正確答案: A
解析:
“寄存器變量通常儲(chǔ)存在計(jì)算機(jī)內(nèi)存中。如果幸運(yùn)的話,寄存器變量儲(chǔ)存在 CPU 的寄存器中,或者概括地說,儲(chǔ)存在最快的可用內(nèi)存中。與普通變量相比,訪問和處理這些變量的速度更快。由于寄存器變量儲(chǔ)存在寄存器而非內(nèi)存中,所以無法獲取寄存器變量的地址。”
摘錄來自: [美]史蒂芬·普拉達(dá)(Stephen Prata). “CPrimer Plus(第6版)中文版。” Apple Books.
14.關(guān)于析構(gòu)函數(shù)和構(gòu)造函數(shù),下列說法正確的是()
正確答案: A B D
解析:
C項(xiàng),返回值不能用來區(qū)分重載。
15.關(guān)于Java下列說法正確的是有幾個(gè)()
1. getDeclaredMethod方法能獲取一個(gè)類的父類方法 2. 在finally語句塊中的return語句不一定可以被執(zhí)行到 3. final關(guān)鍵字修飾的方法內(nèi)局部變量可以被多個(gè)線程共享 4. Java 8中的interface的抽象方法可以用static修飾解析:
1錯(cuò),getdeclaremethod只能拿本類聲明的方法
2對(duì),即使執(zhí)行了try,也不一定執(zhí)行finally,比如:System.exit(0);它表示退出當(dāng)前Java虛擬機(jī),一旦退出Java虛擬機(jī),任何代碼都不會(huì)再執(zhí)行。
3錯(cuò),final修飾的內(nèi)部類的局部變量才可以被共享
4錯(cuò),abstract是抽象類的標(biāo)識(shí),抽象類是為了方便繼承,實(shí)現(xiàn)多態(tài),所以從感性的角度來講,那是絕對(duì)不能與static、final以及private共存的,因?yàn)槌橄箢惐緛砭褪菫榱朔奖憷^承實(shí)現(xiàn)子類研發(fā)的,我們使用了private、final以及static就沒有任何意義了
16.以下哪些操作可能會(huì)導(dǎo)致JDK8方法區(qū)(Metaspace)溢出?
正確答案: C D
17.給定nums=[1,2,3,4,5],以下表達(dá)式的結(jié)果為[3,4]的是哪個(gè)?()
正確答案: B
18.以下說法正確的是?()
正確答案: C
19.以下哪些是最簡DFA的特點(diǎn)()
正確答案: A B
20.關(guān)于溢出說法錯(cuò)誤的是()
正確答案: D
解析:
內(nèi)存溢出指申請的內(nèi)存空間不足
內(nèi)存泄漏指申請內(nèi)存空間后無法釋放造成內(nèi)存堆積
來源:
卷一
卷二
歡迎關(guān)注公眾號(hào),干貨滿滿。
總結(jié)
- 上一篇: 2007年个人回忆与总结
- 下一篇: 软件设计师---软件工程基础