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