嵌入式面试常见问题(六)—各大公司面试题
1、阿里面試
1、Linux系統(tǒng)方面
1)進(jìn)程和線程的區(qū)別(不能太書面化)(需要從內(nèi)存角度,或者其他角度描述)
需要用自己理解的方式去回答這個(gè)問(wèn)題,如果你回答了xxx是基本單位,這樣子是不行的。技術(shù)面試會(huì)追問(wèn)你,需要你用自己的話去理解進(jìn)程和線程。線程和進(jìn)程是否是獨(dú)立的?線程和進(jìn)程的之間內(nèi)存空間是否是共享的?進(jìn)程和進(jìn)程之間是否是共享的?
2)線程之間是如何調(diào)度的
比如說(shuō)有兩個(gè)線程:線程A和線程B,線程B要先于線程A運(yùn)行,或者是線程B運(yùn)行了多次之后在啟動(dòng)線程A,如何進(jìn)行調(diào)度?
3)非實(shí)時(shí)操作系統(tǒng)和實(shí)時(shí)操作系統(tǒng)的區(qū)別和選擇,以及應(yīng)用場(chǎng)景。
2、C語(yǔ)言方面
1)static的作用,函數(shù)中變量使用static的作用,它的生命周期會(huì)如何。
2)extern的作用
3)c語(yǔ)言中有哪些宏定義?
4)#define和#typedef這兩個(gè)的區(qū)別
5)代碼編譯的四個(gè)過(guò)程,預(yù)處理的階段做了哪些事情(深入問(wèn)條件編譯里面做了哪些事情)四個(gè)過(guò)程都
生成哪些文件?
3、數(shù)據(jù)結(jié)構(gòu)
1)何為數(shù)據(jù)結(jié)構(gòu)?
2)問(wèn)了隊(duì)列、棧、鏈表的概念和特征,隊(duì)列和棧在項(xiàng)目中的應(yīng)用場(chǎng)景。什么情況下用棧,什么情況下用隊(duì)列和鏈表。
4、網(wǎng)絡(luò)的概念
總結(jié):
1、簡(jiǎn)歷中有的項(xiàng)目,一定要會(huì),不會(huì)的東西不寫,寫上去的東西保證自己每個(gè)細(xì)節(jié)都懂,也就是確實(shí)是自己做的項(xiàng)目,不是捏造的項(xiàng)目。
2、大廠面試注重基礎(chǔ),因?yàn)榇蠊緯?huì)培養(yǎng)你,只要你基礎(chǔ)扎實(shí)就行,所以基礎(chǔ)很重要,整個(gè)面試一個(gè)多小時(shí),大部分時(shí)間在linux系統(tǒng)、編程能力、數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)網(wǎng)絡(luò)基本概念上。
3、大廠面試喜歡問(wèn)你對(duì)于某個(gè)常見(jiàn)的東西自己的理解,因?yàn)闀系拿~大家都會(huì)說(shuō),但是你自己理解的
肯定是不一樣的。比如富士康的一個(gè)面試官問(wèn)過(guò):你認(rèn)為OSI七層網(wǎng)絡(luò)模型和生活中給的什么很像?
答案:快遞業(yè)務(wù)。
2、CVTE面試
崗位:嵌入式軟件工程師。面試時(shí)間:20分鐘
面試
1、簡(jiǎn)歷中寫了做過(guò)海思音視頻項(xiàng)目,所以問(wèn)了海思項(xiàng)目是怎么學(xué)的?(考察自學(xué)能力)。
2、問(wèn):學(xué)海思項(xiàng)目,是因?yàn)榕d趣,還是為了畢設(shè)?
回答:是因?yàn)榕d趣,因?yàn)樽约寒呍O(shè)是51單片機(jī)。
問(wèn):如果一個(gè)Linux和51單片機(jī)進(jìn)行通訊,讓我怎么設(shè)計(jì)通訊協(xié)議,然后問(wèn)我怎么進(jìn)行檢驗(yàn)。
回答:可以設(shè)計(jì)串口,加奇偶校驗(yàn),并且檢查數(shù)據(jù)包的總字節(jié)數(shù)。
問(wèn):如果字節(jié)總個(gè)數(shù)是對(duì)的,但是有些位錯(cuò)了,那應(yīng)該怎么去檢查?
(不該說(shuō)自己的畢設(shè)是51單片機(jī)的,因?yàn)樽约罕旧聿涣私?1單片機(jī),所以這一塊答得一般)后來(lái)面試官
知道我對(duì)51單片機(jī)沒(méi)怎么學(xué)過(guò),是春招后才準(zhǔn)備現(xiàn)學(xué)現(xiàn)用的,就沒(méi)有繼續(xù)問(wèn)下去了。
3、二叉樹學(xué)過(guò)嗎?
回答:學(xué)過(guò),但是后面沒(méi)怎么用,幾乎忘光了,比較熟悉和常用的是鏈表。
4、如何判斷一個(gè)鏈表有環(huán)?
回答:快慢指針
5、線程和進(jìn)程的區(qū)別?
6、線程和進(jìn)程間的通訊方式有哪些?
7、訪問(wèn)臨界資源時(shí)應(yīng)該怎么辦?
8、線程和進(jìn)程的API,知道哪些?
回答:我把API名字和API的參數(shù)是什么都說(shuō)了,面試官就沒(méi)繼續(xù)往下問(wèn)了
9、工作的意向地點(diǎn)
10、對(duì)于加班的看法(據(jù)說(shuō)CVTE加班很猛,另外兩個(gè)是多益和三七)(廣州)
11、有沒(méi)有轉(zhuǎn)管理層的意向?
12、有什么問(wèn)題想問(wèn)的?
回答:如果有幸入職貴公司,請(qǐng)問(wèn)是否會(huì)有一些培訓(xùn)制度?
總結(jié):除了一開始的那個(gè)怎么設(shè)計(jì)單片機(jī)和Linux通信協(xié)議沒(méi)答好,其他的問(wèn)題答得還可以,HR挺有耐心挺溫柔的,也會(huì)在面試時(shí)一步步引導(dǎo)。從面試過(guò)程可以看出,很多公司,面試官一般都是根據(jù)你的簡(jiǎn)歷和你的回答,來(lái)決定下一個(gè)問(wèn)題。所以千萬(wàn)不要自己給自己挖坑,簡(jiǎn)歷寫的東西,必須要會(huì),自己回答的東西,自己必須要會(huì)。所以面試官比較隨和的情況下,可以通過(guò)自己的回答,把面試官引導(dǎo)到全是自己熟悉的領(lǐng)域。
3、富士康面試
崗位:嵌入式軟件工程師。面試時(shí)間:30分鐘。
薪資:試用期基本工資7200,轉(zhuǎn)正按情況加(0-1000),算月工資8000,加班有加班費(fèi),算上加班費(fèi)
大概9~10K,13薪。
所應(yīng)聘部門是基于高通平臺(tái),做通信模塊的。
1、自我介紹
2、如何理解交叉編譯?
3、OSI七層網(wǎng)絡(luò)和TCPIP網(wǎng)絡(luò)模型區(qū)別?以及每一層名稱。
4、你覺(jué)得網(wǎng)絡(luò)分層協(xié)議和生活中什么比較像?(快遞業(yè)務(wù))
5、什么是上下文切換(我從中斷上下文方面講。然后他問(wèn)為什么響應(yīng)中斷要保護(hù)現(xiàn)場(chǎng),中斷處理流程是
什么)
6、你如何理解異步(我從文件IO中的異步非阻塞回答)
7、你是XXXX專業(yè),是不是和嵌入式不太匹配,都是自學(xué)的嗎?
8、數(shù)據(jù)結(jié)構(gòu)學(xué)的怎么樣?
9、計(jì)算機(jī)操作系統(tǒng)學(xué)的怎么樣?
10、你熟悉哪些數(shù)據(jù)結(jié)構(gòu)?
11、如何理解數(shù)據(jù)結(jié)構(gòu)和算法的關(guān)系?
12、你是XXXX專業(yè),是如何學(xué)習(xí)嵌入式的?(我都是做項(xiàng)目,項(xiàng)目中學(xué)習(xí))
13、C語(yǔ)言和其他編程語(yǔ)言有什么關(guān)系,處于一個(gè)什么地位?(更底層)
14、你如何理解編程語(yǔ)言和日常說(shuō)話語(yǔ)言的關(guān)系?
15、你如何理解指針?(也是一種變量而已,只是存儲(chǔ)的內(nèi)容是地址,所以可以叫指針變量)
16、什么是系統(tǒng)調(diào)用?
17、用戶程序運(yùn)行在usr space還是kernel space?
18、普通調(diào)用和系統(tǒng)調(diào)用的區(qū)別?
19、系統(tǒng)調(diào)用用什么函數(shù)(ioctl等)?
20、數(shù)據(jù)結(jié)構(gòu)學(xué)的怎么樣,學(xué)過(guò)紅黑樹嗎?講一講。
回答:紅黑樹,Red-Black Tree 「RBT」是一個(gè)自平衡(不是絕對(duì)的平衡)的二叉查找樹(BST),樹上的每
個(gè)節(jié)點(diǎn)都遵循下面的規(guī)則:
1)每個(gè)節(jié)點(diǎn)都有紅色或黑色
2)樹的根始終是黑色的 (黑土地孕育黑樹根)
3)沒(méi)有兩個(gè)相鄰的紅色節(jié)點(diǎn)(紅色節(jié)點(diǎn)不能有紅色父節(jié)點(diǎn)或紅色子節(jié)點(diǎn),并沒(méi)有說(shuō)不能出現(xiàn)連續(xù)的黑色
節(jié)點(diǎn))
4)從節(jié)點(diǎn)(包括根)到其任何后代NULL節(jié)點(diǎn)(葉子結(jié)點(diǎn)下方掛的兩個(gè)空節(jié)點(diǎn),并且認(rèn)為他們是黑色的)
的每條路徑都具有相同數(shù)量的黑色節(jié)點(diǎn))
補(bǔ)充:二叉查找樹,Binary Search Tree 「BST」,要想了解二叉查找樹,我們首先看下二叉查找樹有
哪些特性:
1)某節(jié)點(diǎn)的左子樹節(jié)點(diǎn)值僅包含小于該節(jié)點(diǎn)值
2)某節(jié)點(diǎn)的右子樹節(jié)點(diǎn)值僅包含大于該節(jié)點(diǎn)值
3)左右子樹每個(gè)也必須是二叉查找樹
21、講一講馮諾依曼和哈佛體系的區(qū)別
總結(jié):他特別喜歡問(wèn)你是如何理解某個(gè)東西的,這樣的問(wèn)法比單問(wèn)你知識(shí)點(diǎn)牛多了,就是看你到底有沒(méi)有對(duì)底層原理有理解,然后用通俗的話表達(dá)出來(lái)。
4、小米面試
崗位:嵌入式軟件工程師(相機(jī)驅(qū)動(dòng)崗)。面試時(shí)間:40分鐘。
以下問(wèn)題面試者全部答出,已offer,薪資請(qǐng)去小程序offershow上查。
1、請(qǐng)進(jìn)行一個(gè)簡(jiǎn)單的自我介紹(2分鐘)
2、C語(yǔ)言全局變量可否定義在頭文件中?
回答:不能,并且這不是一個(gè)好的習(xí)慣。
3、全局變量和局部變量是否可以重名?
回答:可以重名。只是作用域不同,局部變量在局部生效。
4、extern C 的作用?
回答:extern C 的主要作用就是為了能夠正確實(shí)現(xiàn)C++代碼調(diào)用其他C語(yǔ)言代碼,即在C++代碼中嵌入式C語(yǔ)言代碼。
5、從代碼編譯到可執(zhí)行文件的流程?
回答:一個(gè)源程序到一個(gè)可執(zhí)行程序的過(guò)程:預(yù)編譯、編譯、匯編、鏈接。
6、進(jìn)程和線程的區(qū)別?
回答:進(jìn)程是資源(CPU、內(nèi)存等)分配的基本單位,線程是CPU調(diào)度和分配的基本單位(程序執(zhí)行的最小單位)。同一時(shí)間,如果CPU是單核,只有一個(gè)進(jìn)程在執(zhí)行,所謂的并發(fā)執(zhí)行,也是順序執(zhí)行,只不過(guò)由于切換速度太快,你以為這些進(jìn)程在同步執(zhí)行而已。多核CPU可以同一時(shí)間點(diǎn)有多個(gè)進(jìn)程在執(zhí)行。
7、手撕代碼:寫一個(gè)雙向鏈表的插入。
8、問(wèn)簡(jiǎn)歷上面的項(xiàng)目。
9、IIC協(xié)議說(shuō)一下(因?yàn)槲液?jiǎn)歷里面寫了IIC)
回答:I2C協(xié)議有兩條信號(hào)線,SDA和SCL,分別是數(shù)據(jù)線和時(shí)鐘線,同一總線可以掛載多個(gè)IIC設(shè)備,靠設(shè)備地址區(qū)分。
10、C++有了解嗎,用它做過(guò)什么項(xiàng)目沒(méi)有。
回答:我主要用C語(yǔ)言,C++用的比較少。
11、設(shè)備樹有了解嗎?
在此補(bǔ)充回答:Linus Torvalds在2011年3月17日的ARM Linux郵件列表宣稱“this whole ARM thing is a fucking pain in the ass”,ARM Linux社區(qū)對(duì)此作出了回應(yīng),引入設(shè)備樹。
ARM Device Tree起源于OpenFirmware (OF),在過(guò)去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥著大量的垃圾代碼,相當(dāng)多數(shù)的代碼只是在描述板級(jí)細(xì)節(jié),而這些板級(jí)細(xì)節(jié)對(duì)于內(nèi)核來(lái)講,不過(guò)是垃圾,如板上的platform設(shè)resourcei2c_board_info、spi_board_info以及各種硬件的platform_data。為了改變這種局面,Linux社區(qū)的大牛們參考了PowerPC等體系架構(gòu)中使用Flattened Device Tree(FDT),也采用了Device Tree結(jié)構(gòu),許多硬件的細(xì)節(jié)可以直接透過(guò)它傳遞給Linux,而不再需要在kernel中進(jìn)行大量的冗余編碼。Device Tree是一種描述硬件的數(shù)據(jù)結(jié)構(gòu),它起源于 OpenFirmware (OF)。在Linux 2.6中,ARM架構(gòu)的板極硬件細(xì)節(jié)過(guò)多地被硬編碼在arch/arm/plat-xxx和arch/arm/mach-xxx,采用Device Tree后,許多硬件的細(xì)節(jié)可以直接透過(guò)它傳遞給Linux,而不再需要在kernel中進(jìn)行大量的冗余編碼。
12、內(nèi)存分為哪幾個(gè)部分
回答:內(nèi)存分為四區(qū):堆區(qū)、棧區(qū)、全局區(qū)、代碼區(qū)。13、二分法查找的原理?
回答:類似于快速排序算法。二分法使用的前提是數(shù)組已經(jīng)是有序序列,原理是折半查找,每次把表分成兩半,因?yàn)橐呀?jīng)排序的,所以只需要和中間數(shù)比較就能確定是在哪一半,然后不斷分成兩半,直到匹配,或者沒(méi)有數(shù)字,表示查找失敗。
14、二叉樹了解過(guò)嗎?前序,中序,后序遍歷流程說(shuō)一下。
回答:其實(shí)二叉樹是很重要的數(shù)據(jù)結(jié)構(gòu),更深一點(diǎn)的知識(shí)點(diǎn)有平衡二叉樹,紅黑樹,B樹,B+樹,B-樹
等,可以自行了解。這里只問(wèn)了前中后序遍歷,2021秋招百度筆試也考了這道題。
15、內(nèi)核裁剪說(shuō)一下。
回答:個(gè)人理解,內(nèi)核裁剪的原因主要是Linux內(nèi)核本身很龐大,但客戶有時(shí)候不需要這么多功能,想裁
剪,定制內(nèi)核,定制功能。
簡(jiǎn)單的內(nèi)核的配置有三種方式,在命令行輸入:
1、make config 文本配置方式; 2、make menuconfig 菜單配置方式; 3、make xconfig 圖形界面配置方式(需安裝qt)。補(bǔ)充個(gè)例子:假如客戶需要在手機(jī)固件升級(jí)的時(shí)候,有個(gè)指示燈閃爍,該怎么辦?這個(gè)時(shí)候你單純寫應(yīng)用代碼是沒(méi)用的,因?yàn)槭謾C(jī)固件升級(jí)的時(shí)候,系統(tǒng)都沒(méi)有跑起來(lái),這時(shí)候代碼只能寫在Linux內(nèi)核的bootloader里,因?yàn)閎ootloader起來(lái)了。做嵌入式開發(fā)還是要熟悉Linux內(nèi)核的,沒(méi)學(xué)習(xí)的趕緊學(xué)習(xí),用到是早晚的事。
16、memcpy(), strcpy(), strcmp(), strcat()有什么區(qū)別,如何避免內(nèi)存越界?
回答:這幾個(gè)函數(shù),做嵌入式崗位必須要會(huì),按照學(xué)校老師的話來(lái)講:這道題是這次考試的必考題,15分就放在那里,愛(ài)背不背。這道題,浙江大華也考了,mtk也考了,做嵌入式對(duì)內(nèi)存太敏感,必考。strcpy函數(shù)會(huì)導(dǎo)致內(nèi)存溢出。strcpy拷貝函數(shù)不安全,他不做任何的檢查措施,也不判斷拷貝大小,不判斷目的地址內(nèi)存是否夠用。
char *strcpy(char *strDest,const char *strSrc)strncpy拷貝函數(shù),雖然計(jì)算了復(fù)制的大小,但是也不安全,沒(méi)有檢查目標(biāo)的邊界。
strncpy(dest, src, sizeof(dest))strncpy_s是安全的strcmp(str1,str2),是比較函數(shù),若str1=str2,則返回零;若str1<str2,則返回負(fù)數(shù);若str1>str2,則返回正數(shù)。(比較字符串)strncat()主要功能是在字符串的結(jié)尾追加n個(gè)字符。
char * strncat(char *dest, const char *src, size_t n);strcat()函數(shù)主要用來(lái)將兩個(gè)char類型連接。例如:
char d[20]="Golden"; char s[20]="View"; strcat(d,s); //打印d printf("%s",d);輸出 d 為 GoldenView (中間無(wú)空格)memcpy拷貝函數(shù),它與strcpy的區(qū)別就是memcpy可以拷貝任意類型的數(shù)據(jù),strcpy只能拷貝字符串類型。
memcpy 函數(shù)用于把資源內(nèi)存(src所指向的內(nèi)存區(qū)域)拷貝到目標(biāo)內(nèi)存(dest所指向的內(nèi)存區(qū)域);
有一個(gè)size變量控制拷貝的字節(jié)數(shù);
函數(shù)原型:
17、棧和隊(duì)列的區(qū)別?
回答:這兩種數(shù)據(jù)結(jié)構(gòu)都很重要,棧是先入后出,隊(duì)列是先入先出。
18、memcpy函數(shù)以什么結(jié)尾?
回答:與strcpy相比,memcpy遇到’\0’不結(jié)束,而且一定會(huì)復(fù)制完n個(gè)字節(jié),函數(shù)原型在上面。
19、你最有成就的項(xiàng)目或者經(jīng)歷是什么?
20、你有什么想問(wèn)的嗎?
5、浙江大華面試
崗位:嵌入式軟件工程師。
浙江大華嵌入式軟件筆試一共37道題,35道選擇填空,2道編程,時(shí)間60分鐘,C語(yǔ)言一半,C++一半。
一面是晚上九點(diǎn)半打電話過(guò)來(lái),過(guò)程15分鐘,可能他們還在加班。二面是現(xiàn)場(chǎng)面,過(guò)程20分鐘。現(xiàn)場(chǎng)面
流程很快,二面完畢HR面,當(dāng)天面試完畢。一周內(nèi)發(fā)offer。
一面:
1、簡(jiǎn)單的自我介紹
回答:我主要介紹過(guò)去兩年我做的項(xiàng)目和個(gè)人的知識(shí)框架
2、問(wèn)了一下我主要用的編程語(yǔ)言,我說(shuō)C
3、因?yàn)樗麄円沧鱿鄼C(jī)類產(chǎn)品,所以我把我實(shí)習(xí)的項(xiàng)目講了一遍,包括標(biāo)定sensor,標(biāo)定shading、AWB這些相機(jī)相關(guān)知識(shí)。
4、如何防止編譯器優(yōu)化?
回答:volatile
那就順便解釋一下關(guān)鍵詞static、const、extern的作用(經(jīng)典)。
5、在C++代碼中嵌入C代碼,需要做什么?
回答:extern C
6、進(jìn)程與線程,分配資源的最小單位是什么?
回答:進(jìn)程
7、網(wǎng)絡(luò)編程中長(zhǎng)鏈接和短鏈接?
回答:
什么時(shí)候用長(zhǎng)連接,短連接?
長(zhǎng)連接多用于操作頻繁,點(diǎn)對(duì)點(diǎn)的通訊,而且連接數(shù)不能太多情況。每個(gè)TCP連接都需要三步握手,這需要時(shí)間,如果每個(gè)操作都是先連接,再操作的話那么處理速度會(huì)降低很多,所以每個(gè)操作完后都不斷開,次處理時(shí)直接發(fā)送數(shù)據(jù)包就OK了,不用建立TCP連接。例如:數(shù)據(jù)庫(kù)的連接用長(zhǎng)連接, 如果用短連接頻繁的通信會(huì)造成socket錯(cuò)誤,而且頻繁的socket 創(chuàng)建也是對(duì)資源的浪費(fèi)。而像WEB網(wǎng)站的http服務(wù)一般都用短鏈接,因?yàn)殚L(zhǎng)連接對(duì)于服務(wù)端來(lái)說(shuō)會(huì)耗費(fèi)一定的資源,而像WEB網(wǎng)站這么頻繁的成千上萬(wàn)甚至上億客戶端的連接用短連接會(huì)更省一些資源,如果用長(zhǎng)連接,而且同時(shí)有成千上萬(wàn)的用戶,如果每個(gè)用戶都占用一個(gè)連接的話,那可想而知吧。所以并發(fā)量大,但每個(gè)用戶無(wú)需頻繁操作情況下需用短連好。
8、多線程編程中,寫線程安全的函數(shù)要注意哪些點(diǎn)?
回答:注意的點(diǎn)比較多,這是屬于多線程編程的知識(shí)點(diǎn)。首先需要注意寫的函數(shù)是可重入的:CPU運(yùn)行時(shí)收到信號(hào),于是暫停目前正在執(zhí)行的函數(shù),轉(zhuǎn)到信號(hào)處理函數(shù),而這個(gè)信號(hào)處理函數(shù)的執(zhí)行過(guò)程中,又恰恰也會(huì)進(jìn)入到剛剛執(zhí)行的函數(shù),這樣便發(fā)生了所謂的重入。此時(shí)如果能夠正確的運(yùn)行,而且處理完成后,之前暫停的也能夠正確運(yùn)行,則說(shuō)明它是可重入的, 反復(fù)調(diào)用都得到正確的結(jié)果。其余的點(diǎn)子請(qǐng)大家自行百度。
9、斷言(assert)的用法
回答:assert 不僅僅是個(gè)報(bào)錯(cuò)函數(shù),事實(shí)上,它是個(gè)宏,并且作用并非"報(bào)錯(cuò)"。assert 宏的原型定義在assert.h 中,其作用是如果它的條件返回錯(cuò)誤,則終止程序執(zhí)行。
assert 的作用是現(xiàn)計(jì)算表達(dá)式 expression ,如果其值為假(即為0),那么它先向 stderr 打印一條出錯(cuò)信息,然后通過(guò)調(diào)用 abort 來(lái)終止程序運(yùn)行。
用法:
1)在函數(shù)開始處檢驗(yàn)傳入?yún)?shù)的合法性
2)每個(gè)assert只檢驗(yàn)一個(gè)條件,因?yàn)橥瑫r(shí)檢驗(yàn)多個(gè)條件時(shí),如果斷言失敗,無(wú)法直觀的判斷是哪個(gè)條件失敗
3)不能使用改變環(huán)境的語(yǔ)句,因?yàn)閍ssert只在debug階段生效,如果這么做,會(huì)使用程序在真正運(yùn)行時(shí)遇到問(wèn)題
4)assert和后面的語(yǔ)句應(yīng)空一行,以形成邏輯和視覺(jué)上的一致感
10、內(nèi)存四區(qū)(堆、棧、全局區(qū)、代碼區(qū))
11、了解幾種排序算法,時(shí)間復(fù)雜度是多少?
回答:
十種常見(jiàn)排序算法可以分為兩大類:
非線性時(shí)間比較類排序:通過(guò)比較來(lái)決定元素間的相對(duì)次序,由于其時(shí)間復(fù)雜度不能突破O(nlogn),因此稱為非線性時(shí)間比較類排序。線性時(shí)間非比較類排序:不通過(guò)比較來(lái)決定元素間的相對(duì)次序,它可以突破基于比較排序的時(shí)間下界,以線性時(shí)間運(yùn)行,因此稱為線性時(shí)間非比較類排序
二面:
二面是現(xiàn)場(chǎng)面試,大概20分鐘左右。
1、對(duì)著簡(jiǎn)歷面試,問(wèn)你簡(jiǎn)歷寫的東西。
2、對(duì)著你筆試的時(shí)候的題目,看你做的情況,隨便選一個(gè)你做對(duì)的或者你做錯(cuò)的讓你解釋。(所以筆試完一定要搞懂)
3、問(wèn)進(jìn)程線程,經(jīng)典問(wèn)題。
4、問(wèn)strcpy拷貝函數(shù)安全嗎,如果不安全,用什么去替代。
不安全,strcpy函數(shù)會(huì)導(dǎo)致內(nèi)存溢出,因?yàn)樗蛔鋈魏蔚臋z查措施,也不判斷拷貝大小,不判斷目的地址內(nèi)存是否夠用。
char *strcpy(char *strDest,const char *strSrc)strncpy拷貝函數(shù),雖然計(jì)算了復(fù)制的大小,但是也不安全,沒(méi)有檢查目標(biāo)的邊界。
strncpy(dest, src, sizeof(dest));strncpy_s是安全的memcpy拷貝函數(shù),它與strcpy的區(qū)別就是memcpy可以拷貝任意類型的數(shù)據(jù),strcpy只能拷貝字符串類型。
memcpy 函數(shù)用于把資源內(nèi)存(src所指向的內(nèi)存區(qū)域)拷貝到目標(biāo)內(nèi)存(dest所指向的內(nèi)存區(qū)域);有一個(gè)size變量控制拷貝的字節(jié)數(shù);
5、寫一個(gè)雙向鏈表的插入刪除
6、解釋一下動(dòng)態(tài)內(nèi)存和靜態(tài)內(nèi)存
回答:
a) 靜態(tài)內(nèi)存分配在編譯時(shí)完成,不占用CPU資源; 動(dòng)態(tài)內(nèi)存分配在運(yùn)行時(shí),分配與釋放都占用CPU資源。
b) 靜態(tài)內(nèi)存在棧(stack)上分配; 動(dòng)態(tài)內(nèi)存在堆(heap)上分配。
c) 動(dòng)態(tài)內(nèi)存分配需要指針和引用類型支持,靜態(tài)不需要。
d) 靜態(tài)內(nèi)存分配是按計(jì)劃分配,由編譯器負(fù)責(zé); 動(dòng)態(tài)內(nèi)存分配是按需分配,由程序員負(fù)責(zé)。
總結(jié)
以上是生活随笔為你收集整理的嵌入式面试常见问题(六)—各大公司面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决树莓派4B从USB启动的问题
- 下一篇: 简单易懂的方式去看C语言精华--指针