小米嵌入式軟件工程師筆試題目解析
哈嘍,大家好。我又來分享筆試題目了。今天分享的是小米的嵌入式軟件開發(fā)工程師的筆試題目。這份題目很奇怪,操作系統(tǒng),數(shù)據(jù)結(jié)構,網(wǎng)絡基礎,Java,C++,數(shù)據(jù)庫,正則表達式,Linux都考到了。當時做題的時候,我都懷疑發(fā)錯卷子了。。。還好最后兩道大題都做了出來,否則,筆試很容易就掛了。面試這個公司的時候,一共面了兩輪技術面,一輪HR面。最后也收獲了Offer。但是,已經(jīng)是十月中旬,手上沒有三方協(xié)議了,很可惜,錯過了。面經(jīng)可以參考下這篇文章2020秋招聯(lián)發(fā)科小米等面經(jīng)分享
本文已同步更新在github,點擊跳轉(zhuǎn)。希望大家能給個star支持下!
文章目錄
選擇題
專項選擇題
編程題1(字符串篩選)
編程題2(字符串有效判斷)
選擇題
1.已經(jīng)獲得除CPU以外的所有所需資源的進程處于()狀態(tài)
A 就緒狀態(tài)
B 阻塞狀態(tài)
C 運行狀態(tài)
D 活動狀態(tài)
A
進程的五狀態(tài)模型:
運行態(tài):該進程正在執(zhí)行。
就緒態(tài):進程已經(jīng)做好了準備,只要有機會就開始執(zhí)行。
阻塞態(tài)(等待態(tài)):進程在某些事情發(fā)生前不能執(zhí)行,等待阻塞進程的事件完成。
新建態(tài):剛剛創(chuàng)建的進程,操作系統(tǒng)還沒有把它加入到可執(zhí)行進程組中,通常是進程控制塊已經(jīng)創(chuàng)建但是還沒有加載到內(nèi)存中的進程。
退出態(tài):操作系統(tǒng)從可執(zhí)行進程組中釋放出的進程,或由于自身或某種原因停止運行。
2.某二叉樹的中序遍歷序列為32145,后序遍歷序列為32145,則前序遍歷序列為
A 54123
B 32154
C 32541
D 54321
A
二叉樹的中序遍歷序列為 32145 ,后序遍歷序列為32145 ,可知該樹只有左子樹結(jié)點,沒有右子樹結(jié)點, 5 為根結(jié)點。
中序遍歷序列與后序遍歷序列相同,說明該樹只有左子樹沒有右子樹,因此該樹有 5 層,從頂向下依次為54123 。
具體分析過程也可以參考下北京聯(lián)發(fā)科嵌入式軟件工程師筆試題目解析
3.若已知一個棧的入棧順序是1,2,3…,n,其輸出序列為P1,P2,P3,…Pn,若P1是n,則Pi=()?
A i
B n-i+1
C 不確定
D n-i
B
棧的排列遵循先進后(即后進先出)出的原則
因為P1是n,是出棧的第一個數(shù)字,說明在n之前進棧的數(shù)字都沒有出棧。所以這個順序是確定的。
還可以知道,最后出棧的一定是數(shù)字1,也就是Pn。代入這個式子,是正確的。
4(多選題).下面協(xié)議中屬于應用層協(xié)議的是()
A ICMP、ARP
B FTP、 TELNET
C HTTP、SNMP
D SMTP、POP3
BCD
1、物理層:以太網(wǎng) 、 調(diào)制解調(diào)器 、 電力線通信(PLC) 、SONET/SDH 、 G.709 、 光導纖維 、 同軸電纜、 雙絞線等。
2、數(shù)據(jù)鏈路層:Wi-Fi(IEEE 802.11)、WiMAX(IEEE 802.16) 、ATM 、 DTM 、 令牌環(huán) 、以太網(wǎng)、FDDI、 幀中繼、 GPRS 、 EVDO、HSPA 、HDLC 、 PPP 、 L2TP 、PPTP 、ISDN·STP、CSMA/CD等。
3、網(wǎng)絡層協(xié)議:IP IPv4 、IPv6、 ICMP、ICMPv6·IGMP、IS-IS 、IPsec 、ARP 、RARP 、RIP等。
4、傳輸層協(xié)議:TCP、 UDP、TLS 、 DCCP、 SCTP 、 RSVP 、OSPF 等。
5、應用層協(xié)議:DHCP 、DNS、 FTP 、Gopher 、 HTTP、 IMAP4 、 IRC、 NNTP 、 XMPP、POP3 、SIP、 SMTP、SNMP 、SSH、TELNET 、 RPC 、RTCP 、RTP 、RTSP、SDP 、 SOAP、GTP、STUN 、NTP、SSDP 、 BGP 等。
5.下列程序段的時間復雜度是()
int fact(int n){ if(n<=1){ return 1; } return n*fact(n-1); }
1
2
3
4
5
6
A O(log2n)
B O(nlog2n)
C O(n)
D O(n*n)
C
當n<=1時執(zhí)行return 1這一個語句,每次返回上一層都執(zhí)行n*fact(n-1)這一個語句,共執(zhí)行n-1次。因此共執(zhí)行基本語句n次,時間復雜度為O(n)
6.下列排序算法中最好情況和最壞情況的時間復雜度相同的是?()
A 堆排序
B 快速排序
C 冒泡排序
D 歸并排序
A C D
堆排序在最好和最壞情況下的時間復雜度均為O(nlogn)
快速排序最好和最壞情況下的時間復雜度分別為O(nlogn)和O(n^2 )
冒泡排序排序在最好和最壞情況下的時間復雜度均為O(nlogn)
歸并排序在最好和最壞情況下的時間復雜度均為O(nlogn)
7.將兩個各有n個元素的有序表歸并成一個有序表,最少的比較次數(shù)是?()
A n
B 2n
C n-1
D 2n-1
A
歸并排序是將兩個或兩個以上的有序子表合并成一個新的有序表。在歸并排序中,核心步驟是將相鄰的兩個有序序列歸并為一個有序序列。
題目中告訴我們,有兩個各有n個元素的有序序列,要將這兩個序列歸并成一個有序序列,其方法是依次從小到大取每個序列中的元素進行比較,將較小的放進一個新的序列中,直到取完一個有序序列中的所有元素。再把另一個序列中剩下的元素放進新序列的后面即可。
最好的情況是一個有序序列中的最小元素大于另一個有序序列中的所有元素,這樣只需要比較n次。
8.將遞歸算法轉(zhuǎn)換為非遞歸算法通常需要使用()
A 棧
B 隊列
C 隊列
D 廣義表
A
9.在MySql中, productname regexp '[1-3]xiaomi’的含義是()
A productname 匹配“xiaomi重復1次或5次”的字符串
B productname 匹配“xiaomi字符串前一個字符為1或3“的字符串
C productname 匹配“xiaomi重復1到3次”的字符串
D productname 匹配“xiaomi字符串前一個字符為1到3“的字符串
D
10.同個進程的不同線程以下不能被共享的是?()
A 全局變量
B 堆
C 文件句柄
D 棧
D
線程共享的進程環(huán)境包括:
進程代碼段、進程的公有資源(如全局變量,利用這些共享的數(shù)據(jù),線程很容易的實現(xiàn)相互之間的通信)、進程打開的文件描述符、消息隊列、信號的處理器、進程的當前目錄、進程用戶ID、進程組ID
線程獨占資源:
線程ID、寄存器組的值、用戶棧、內(nèi)核棧(在一個進程的線程共享堆區(qū)(heap))、錯誤返回碼、線程的信號屏蔽碼、線程的優(yōu)先級
專項選擇題
1.下列Java函數(shù)的執(zhí)行結(jié)果是什么()
static boolean foo(charc) { System.out.print(c); return true; } public static void main(string[] args){ int i = 0; for(foo('B');foo('A')&&(i<2);foo('C')) { i++; foo('D'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
A BADCBDCB
B BACDBACD
C BADCADCA
D 運行時拋出異常
C
1.其實foo(‘B’);就是初始化條件,只會執(zhí)行一次,所以第一個打印的肯定是B。
2.因為i=0;循環(huán)條件是i<2 (由此可知,循環(huán)i等于2的時候就會停止循環(huán)),所以0<2滿足條件,接著會輸出A。然后執(zhí)行i++;i就變成1了,在輸出D
,在最后輸出C。一次循環(huán)后的結(jié)果是:BADC。
3.第二次循環(huán)的開始是foo(‘B’);是初始條件,所以不會執(zhí)行。直接從foo(‘A’)開始,輸出A,然后i為1,且小于2,此時循環(huán)體內(nèi)再次執(zhí)行i++;i的值為2了,再次輸出D,最后輸出C。第二次循環(huán)輸出:ADC。
4.然后循環(huán)再次執(zhí)行for(foo(‘B’);foo(‘A’)&&(i<2);foo(‘C’)),直接輸出A。i的值在第二輪循環(huán)后的值變成了2,2<2不成立,終止循環(huán),輸出A。
故輸出結(jié)果是:BADCADCA。
2.下列有關軟鏈接表述正確的是?()
A 不可以對不存在的文件創(chuàng)建軟鏈接
B 不能對目錄創(chuàng)建軟鏈接
C 和普通件沒有什么不同,inode都指向同一個文件在硬量中的區(qū)塊
D 保存了其代表的文件的絕對路徑是另一種文件。在硬盤上有獨立的區(qū)塊,訪問時替代自身路徑
C
A:錯。后半句說的是硬鏈接。硬鏈接是共同擁有同一個inode,不過是每個鏈接名不同,暫時理解成不同的文件名卻指向同一文件。一個文件每加一個硬鏈接linkcount加1。
B:錯。可以對目錄創(chuàng)建軟鏈接。如下圖所示。
D:錯。可以對不存在的文件創(chuàng)建軟鏈接,如下圖所示。
3.選項中那一行代碼可以替換//add code here 而不產(chǎn)生編譯錯誤()
public abstruct class MyClass{ publicint testInt = 5; //addcode here publicvoid method(){ } }
1
2
3
4
5
6
A public abstruct void another Method(){}
B testInt = testInt * 5
C public int method();
D public abstruct void another Method(int a)
D
A:該項方法有abstract修飾,所以是抽象方法,由于抽象方法不能有方法體,所以A項錯誤
B:類體中只能定義變量和方法,不能有其他語句,所以B項錯誤
C:選項中的方法和類中的方法重復,所以會發(fā)生編譯異常,所以C項錯誤
4.有關Java靜態(tài)初始化塊說法不正確的是?()
A 用戶可以控制何時執(zhí)行靜態(tài)初始化塊
B 無法直接詞用靜態(tài)初始化塊
C 在創(chuàng)建第一個實例前,將自動調(diào)用靜態(tài)初始化塊來初始化
D 靜態(tài)初始化塊沒有訪問修飾符和參數(shù)
A
JAVA的初始化順序:
父類的靜態(tài)成員初始化>父類的靜態(tài)代碼塊>子類的靜態(tài)成員初始化>子類的靜態(tài)代碼塊>父類的代碼塊>父類的構造方法>子類的代碼塊>子類的構造方法
5(多選題)以下分別對變量a給出定義,正確的有()
A 一個有10個指針的數(shù)組,該指針指向同一個整型數(shù):int *a[10];
B 一個指向10個整型數(shù)組的指針:int ( *a)[10];
C 一個指向函數(shù)的指針,該函數(shù)有一個整型數(shù)并返回一個整型數(shù):int *a(int);
D 一個有10個指針的數(shù)組,該指針指向一個函數(shù),該函數(shù)有一個整型參數(shù)并返回一個整型數(shù):int ( *a[10])(int);
ABD
C改為:int (*a)(int)
指針數(shù)組:首先是一個數(shù)組,數(shù)組里面的元素都是指針;(存儲指針的數(shù)組)
數(shù)組指針:首先是一個指針,指針指向一個一維數(shù)組;(指向數(shù)組的指針)
函數(shù)指針:一定要理解,回調(diào)中經(jīng)常使用函數(shù)指針;
指針函數(shù):就是一個普通函數(shù),只是返回值是指針形式;
6(多選題)下列敘述正確的是()
A 指針可以為空,引用不能為空。
B 不存在指向空值的引用,但是存在指向空值的指針
C 引用必須被初始化,但是指針不必
D 指針初化后不能被改變,引用可以改變所指對象
ABC
D:引用初始化以后不能被改變,指針可以改變所指的對象
7.下列關于C++容器描述錯誤的是?()
A list類型支持雙向順序訪問,在list中任何位置插入刪除都很快
B deque類型支持快速順序訪間,在頭尾插入/刪除速度很快
C C++標準庫map的底層實現(xiàn)為紅黑樹
D vector類型在每次調(diào)用 pushback時都在棧上開辟新內(nèi)存
B
deque:雙端隊列。支持快速隨機訪問。在頭尾位置插入/刪除速度很快。
8(多選題)C++中,下列數(shù)據(jù)類型的轉(zhuǎn)換,哪個可能會發(fā)生信息丟失?
A int -> double
B int -> long
C long -> float
D int -> char
CD
精度丟失只會發(fā)生在從大范圍到小范圍的轉(zhuǎn)換
32位編譯器:
char short int long float double 指針
1 2 4 4 4 8 4
64位編譯器:
char short int long float double 指針
1 2 4 8 4 8 8
9.在Java中,要使某個類能被同一個包中的其他類訪問,但不能被這個包以外的類訪問,可以()
A 使用 private關鍵字
B 讓該類不使用任何關鍵字
C 使用public關鍵字
D 使用protected關鍵字
B
default和protected的區(qū)別是:
前者只要是外部包,就不允許訪問。
后者只要是子類就允許訪問,即使子類位于外部包。
總結(jié):default拒絕一切包外訪問;protected接受包外的子類訪問
10(多選題)list和vector的區(qū)別有哪些()
A vector擁有一段連續(xù)的內(nèi)存空間,因此支持隨機存取,如果需要高效的隨即存取,而不在乎插入和刪除的效率,使用 vector.
B list擁有一段不連續(xù)的內(nèi)存空間,因此支持隨機存取,如果需要大量的插入和刪除,而不關心隨即存取,則應使用list
C 已知需要存儲的元素時,使用list較好
D 如果需要任意位置插入元素,使用 vector較好
AB
C:已知需要存儲的元素時,vector要好
D:如果需要任意位置插入元素,list要好
編程題1(字符串篩選)
給定一個字符串,需要去除所有之前曾經(jīng)出現(xiàn)過的字符,只保留第一次出現(xiàn)的字符。
樣例輸入:hello,welcome to xiaomi
樣例輸出:helo,wcmtxia
思路
首先需要定義兩個數(shù)組,分別為“輸入的字符串數(shù)組”old[ ] 以及 “輸出的字符串數(shù)組” new[ ];
取old數(shù)組中的第一個字符去和new數(shù)組中的每一個字符串相比較是否相同,若出現(xiàn)相同,則取old數(shù)組的下一個字符再次與new中每一個字符相比較,若都不相同則存入new的數(shù)組中;
最后輸出數(shù)組new;
代碼
#include 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 編程題2(字符串有效判斷) 給定一個只包括’’(’,’)’,’{’,’}’,’[’,’]'的字符串,判斷字符串是否有效 有效字符串需滿足: 1.左括號必須使用相同類型的右括號閉合 2.左括號必須以正確的順序閉合 注意空字符串可被認為是有效字符串 輸入描述:待判斷的字符串,多個字符串需換行輸入 輸出描述:每個字符串的判斷結(jié)果,多個結(jié)果需換行輸出 樣例輸入: () [] {} 樣例輸出: true 樣例輸入: ([)] 樣例輸出: false 樣例輸入: {[]} 樣例輸出: true 思路 棧先入后出特點恰好與本題括號排序特點一致,所以用棧來實現(xiàn)。 當左括號出現(xiàn)的時候入棧,當右括號出現(xiàn)的出棧,如果匹配就繼續(xù),不匹配就錯誤。 當字符串遍歷完成之后,棧內(nèi)仍有字符串就錯誤。 用一個數(shù)組進行和一個記錄棧頂值的int進行了棧的模擬,代碼很簡單,很好理解。 代碼 #include 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 今天的題目就分享到這里,下一篇文章,將會分享大廠的筆試題目解析。 任務調(diào)度 嵌入式 數(shù)據(jù)結(jié)構
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。