红菊直播官方版-红菊直播免费版app下载-红菊直播永久免费版下载

嵌入式題庫最全的,去公司面試都會出現(xiàn)(上) 嵌入式 題庫

更新時間:2024-06-10 21:13作者:小樂

現(xiàn)在嵌入式發(fā)展這么快,很多人都開始走上嵌入式學(xué)習(xí)之路。據(jù)市場統(tǒng)計,一些畢業(yè)或者正在找工作的人在面試企業(yè)的時候會卡在這里,那就是面試題。很多人在面試中都表現(xiàn)得很好,但是在回答面試問題時卻沒有付出足夠的努力,最終被面試問題拒絕了,這使得找工作成為了一個難題,讓他們無路可走。天賦。而且,對于某些人來說也是如此。綜上所述,你可以通過嵌入式訪談向一些空難受害者學(xué)習(xí)。公司面試一般都是可以的。

(1)char * constp char const *p const char *p 以上三者有什么區(qū)別?

回答:

字符*常量p; //常量指針,p的值不能修改

字符常量* p; //指向常量的指針,所指向的常量值不能改變const char *p; //和char const *p

char * const p 是一個char 指針。指針是一個常量,不能修改。也就是說,像p=q 這樣的陳述是錯誤的;

char const * p 和const char * p 是同一類型的char 指針。指針指向的字符被視為常量,不允許修改。也就是說,像*p=q 這樣的語句是錯誤的。

(2)char str1[]='abc'; charstr2[]='abc'; const char str3[]='abc'; const charstr4[]='abc'; const char *str5='abc'; const char *str6='abc'; char *str7='abc'; char *str8='abc';cout (str1==str2) endl; cout ( str3==str4 ) endl; cout ( str5==str6 ) endl; cout ( str7==str8 ) endl;

結(jié)果是: 0 0 1 1 str1,str2,str3,str4是數(shù)組變量,它們有自己的內(nèi)存空間;而str5、str6、str7、str8是指針,它們指向同一個常量區(qū)。

關(guān)于嵌入式物聯(lián)網(wǎng),確實有很多東西需要學(xué)習(xí)。不要學(xué)錯路線和內(nèi)容,導(dǎo)致你的薪資水漲船高!

我免費給大家分享一個數(shù)據(jù)包,差不多150G。學(xué)習(xí)內(nèi)容、面試、項目都比較新、全面!據(jù)估計,在網(wǎng)上購買某種魚至少要花費幾十美元。

點此找助手0元獲?。簰叽a進群獲取資料

(3)什么是預(yù)編譯以及什么時候需要預(yù)編譯:

回答:

1. 始終使用不經(jīng)常更改的大型代碼體。

2. 程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,所有包含文件都可以預(yù)編譯成預(yù)編譯頭。

預(yù)編譯指令表示編譯器在程序正式編譯之前執(zhí)行的操作,可以放置在程序中的任何位置。

(4)下面代碼中的兩個sizeof用法有問題嗎?

[Cyi] void UpperCase( char str[] ) //將str 中的小寫字母轉(zhuǎn)換為大寫字母{ for( size_t i=0; i

(5) 嵌入式系統(tǒng)中經(jīng)常使用無限循環(huán)。 C語言中如何編寫無限循環(huán)?

這個問題有多種解決方案。我的首選解決方案是:

同時(1)

{

}

一些程序員更喜歡以下解決方案:

為了(;)

{

}

這個實現(xiàn)讓我很困惑,因為語法并不能準確表達正在發(fā)生的事情。如果候選人給出

作為解決方案,我將以此為契機來探索他們是如何做到這一點的

基本的。如果他們的基本答案是:“我被教導(dǎo)要這樣做,但從未想過為什么?!?

給我留下不好的印象。

第三種選擇是使用goto

循環(huán):

.

轉(zhuǎn)到循環(huán);

如果候選人給出了上述解決方案,則意味著他要么是一名匯編語言程序員(這可能是一件好事),要么他

我是一名BASIC/FORTRAN 程序員,想要進入一個新領(lǐng)域。

常量

(6)關(guān)鍵字const是什么意思?

當我聽到受訪者說“const 意味著恒定”時,我就知道我正在與一個業(yè)余愛好者打交道。

去年Dan Saks在他的文章中已經(jīng)完整總結(jié)了const的所有用法,所以ESP(譯者:Embedded)

每個系統(tǒng)編程的讀者都應(yīng)該非常熟悉const 能做什么和不能做什么。如果你來自

如果不閱讀那篇文章,只要能夠知道const 意味著“只讀”就可以了。雖然這個答案并不完整

答案,但我接受它作為正確答案。 (如果想知道更詳細的答案,請仔細閱讀Saks

文章。 )如果候選人能夠正確回答這個問題,我會問他一個附加問題:以下所有陳述

什么意思

常量整型;

int 常量a;

常量int *a;

int * 常量a;

int const * 一個常量;

前兩者作用相同,a是常整數(shù)。第三個表示a 是一個指向常量整數(shù)的指針(也

也就是說,整數(shù)不能修改,但指針可以)。第四個含義a 是指向整數(shù)的常量指針(也可以

也就是說,指針指向的整數(shù)可以修改,但指針不能修改)。最后一位表示a是1

指向常整數(shù)的常指針(即指針所指向的整數(shù)不能被修改,指針也不能被修改。

可修改)。如果候選人能夠正確回答這些問題,那么他或她就給我留下了良好的印象。順便一提

總而言之,你可能會問,即使不使用const關(guān)鍵字,仍然很容易寫出功能正確的程序,那么

為什么我還是這么看重const這個關(guān)鍵字呢?我有以下幾個原因:

1)。關(guān)鍵字const的作用是向閱讀你代碼的人傳達非常有用的信息。其實它聲明了一個參數(shù)

它是一個常量,告訴用戶該參數(shù)的應(yīng)用目的。如果您曾經(jīng)花費大量時間清理別人的垃圾

垃圾,你很快就會學(xué)會欣賞這些額外的信息。 (當然,懂得使用const的程序員很少會留下垃圾

讓其他人清理垃圾。 )

2)。使用const 關(guān)鍵字可以通過為優(yōu)化器提供一些附加信息來生成更緊湊的代碼。

3)。合理使用關(guān)鍵字const可以讓編譯器自然地保護那些不想改變的參數(shù),防止它們被改變。

被無意的代碼修改。簡而言之,這減少了錯誤的發(fā)生。

易揮發(fā)的

(7) 關(guān)鍵字volatile 的含義是什么并給出三個不同的例子。

定義為volatile 的變量意味著該變量可能會被意外改變,這樣編譯器就不會

假設(shè)該變量的值。準確地說,優(yōu)化器每次使用該變量時都必須仔細地重新讀取。

獲取該變量的值,而不是使用存儲在寄存器中的備份。以下是易失性變量的一些示例:

1)。并行設(shè)備的硬件寄存器(如狀態(tài)寄存器)

2)。將在中斷服務(wù)程序中訪問的非自動變量(非自動變量)

3)。多線程應(yīng)用程序中多個任務(wù)共享的變量

不能回答這個問題的人將不會被錄用。我認為這是C 程序員與嵌入式系統(tǒng)程序員最大的區(qū)別

基本問題。嵌入式系統(tǒng)程序員經(jīng)常與硬件、中斷、RTOS等打交道,所有這些都需要vo

緯度變量。不了解易失性內(nèi)容可能會導(dǎo)致災(zāi)難。

假設(shè)受訪者正確回答了這個問題(好吧,懷疑情況確實如此),我將深入挖掘一下,看看

讓我們看看這個人是否完全理解volatility 的重要性。

1)。參數(shù)可以同時是const 和volatile 嗎?解釋為什么。

2)。指針可以是易失性的嗎?解釋為什么。

3)。以下函數(shù)有什么問題:

int square(易失性int *ptr)

{

返回*ptr * *ptr;

}

答案如下:

1)。是的。只讀狀態(tài)寄存器就是一個例子。它是不穩(wěn)定的,因為它可能會發(fā)生意外的改變。

它是const,因為程序不應(yīng)該嘗試修改它。

2)。是的。雖然這種情況并不常見。一個例子是當服務(wù)例程修改指向緩沖區(qū)的指針時

指針。

3)。這段代碼中有一個技巧。這段代碼的目的是返回指針*ptr所指向的值的平方。然而,通過

由于*ptr指向一個易失性參數(shù),編譯器將生成類似以下的代碼:

int square(易失性int *ptr)

{

整數(shù)a,b;

a=*ptr;

b=*ptr;

返回a*b;

}

由于*ptr 的值可能會意外更改,因此a 和b 可能會不同。因此,此代碼可能不會返回

是您期望的平方值!正確的代碼如下:

長方形(易失性int *ptr)

{

整數(shù)a;

a=*ptr;

返回a*a;

}

位操作

(8)嵌入式系統(tǒng)總是要求用戶對變量或寄存器進行位操作。給定一個整型變量a,寫兩段代碼

,第一個設(shè)置a 的位3,第二個清除a 的位3。上述兩個操作中,其他位保持不變。

對于這個問題有三個基本的回答

1)。不知道如何開始。受訪者從未做過任何嵌入式系統(tǒng)工作。

2)。使用位域。位域是被扔進C語言死胡同的東西。它確保您的代碼可以在不同的編譯器中運行。

它們之間不可移植,并且還確保您的代碼不可重用。我最近很不幸地見到了英飛凌

為其更復(fù)雜的通信芯片編寫的驅(qū)動程序使用位字段,因此對我來說完全沒用,因為我的程序員

翻譯器以其他方式實現(xiàn)位字段。道德上:永遠不要讓一個非嵌入式人員留下來

國際硬件優(yōu)勢。

3)。使用#defines 和位掩碼進行操作。這是一種非常便攜的方法,應(yīng)該使用

方法。最佳解決方案如下:

#定義BIT3 (0x1 3)

靜態(tài)整型;

無效set_bit3(無效)

{

一個|=位3;

}

無效清除_bit3(無效)

{

a=~BIT3;

}

有些人喜歡定義一個用于設(shè)置和清除值的掩碼并定義一些描述性常量,這也是可以接受的。

我想看的幾個要點: 常量、|=和=~ 操作的解釋。

數(shù)據(jù)聲明

(9) 利用變量a給出如下定義

a) 一個整數(shù)

b) 指向整數(shù)的指針

c) 指向指針的指針,它指向的指針是一個整數(shù)(Apointertoapointer

為整數(shù))

d) 10 個整數(shù)的數(shù)組

e) 一個由10 個整數(shù)指針組成的數(shù)組

整數(shù))

f) 指向10 個整數(shù)的數(shù)組的指針

g) 指向一個函數(shù)的指針,該函數(shù)接受一個整數(shù)參數(shù)并返回一個整數(shù)(Apointertoafu

以整數(shù)作為參數(shù)并返回整數(shù)的函數(shù))

h) 一個由10 個指針組成的數(shù)組,指向一個采用整數(shù)參數(shù)并返回整數(shù)的函數(shù)

一個由十個指針組成的數(shù)組,指向采用整數(shù)參數(shù)和r 的函數(shù)

返回一個整數(shù))

答案是:

a)整數(shù)a; //一個整數(shù)

b)整數(shù)*a; //指向整數(shù)的指針

c) int **a; //指向整數(shù)的指針

d) int a[10]; //10 個整數(shù)的數(shù)組

e) int *a[10]; //10 個整數(shù)指針的數(shù)組

f) int (*a)[10]; //指向10 個整數(shù)的數(shù)組的指針

g) int (*a)(int); //指向帶有整數(shù)參數(shù)的函數(shù)a 的指針

并返回一個整數(shù)

h) int (*a[10])(int); //一個由10 個指向采用int 的函數(shù)的指針組成的數(shù)組

eger 參數(shù)并返回一個整數(shù)

人們經(jīng)常聲稱這里的一些問題需要翻一本書才能回答,我同意。當我

在寫這篇文章時,我確實檢查了書以確保語法正確。

但當我接受采訪時,我希望被問到這個問題(或類似的問題)。因為在接受采訪時

有一段時間,我確信我知道這個問題的答案。如果候選人不知道

所有的答案(或者至少是大部分的答案),那么就沒有為這次面試做準備。如果面試官沒有

準備這次采訪,那么他可以準備什么呢?

靜止的

(10)關(guān)鍵字static的作用是什么

這個簡單的問題很少得到完整的回答。在C語言中,關(guān)鍵字static有三個明顯的作用:

1)。在函數(shù)體中,聲明為static 的變量在調(diào)用函數(shù)時保持其值。

2)。在模塊內(nèi)部(但在函數(shù)體外部),聲明為static 的變量可以被模塊中使用的函數(shù)訪問,

但不能被模塊外的其他函數(shù)訪問。它是一個局部全局變量。

3)。在模塊內(nèi),聲明為靜態(tài)的函數(shù)只能由該模塊中的其他函數(shù)調(diào)用。也就是說,這個

函數(shù)僅限于聲明它的模塊的本地范圍。

大多數(shù)考生能正確回答第一部分,有些人能正確回答第二部分,很少有人能理解第二部分。

三個部分。對于顯然不了解本地化數(shù)據(jù)和代碼范圍的好處的候選人來說,這是一個嚴重的缺點

和重要性。

(11) 對于32位機器,該機器的指針是多少位?回答:

只需查看地址總線中的位數(shù)即可確定指針有多少位。 80386以后的機器都使用32條數(shù)據(jù)總線。所以指針的位數(shù)是4個字節(jié)。

(12) 主函數(shù)()

{

inta[5]={1,2,3,4,5};

int *ptr=(int*)(a+1);

printf('%d,%d',*(a+1),*(ptr-1));

}

答案:2. 5 *(a+1)是a[1],*(ptr-1)是a[4],執(zhí)行結(jié)果是2,5 a+1不是首地址+1,系統(tǒng)會認為添加一個a 數(shù)組的偏移量就是數(shù)組大小的偏移量(本例中為5 個int) int *ptr=(int *)(a+1);那么ptr其實就是(a[5]),也就是a+5 原因如下:a是一個數(shù)組指針,它的類型是int(*)[5];而給指針加1則需要根據(jù)指針類型加上一定的值。不同類型的指針加1后大小增加的方式不同。 a的長度為5個int數(shù)組指針,所以需要加上5*sizeof(int),所以ptr實際上是a[5],但是prt和(a+1)不是同一類型(這一點很重要) ,所以prt-1只會減去sizeof (int*) a,a的地址是相同的,但含義不同。 a是數(shù)組首地址,即a[0]的地址,a是對象(數(shù)組)的首地址,a+1是數(shù)組的下一個元素。的地址,即a[1],a+1是下一個對象的地址,即a[5]。

(13)下面的代碼有什么問題:

int main() { 字符;字符*str=a; strcpy(str,'你好'); printf(str);返回0; }

答:沒有為str分配內(nèi)存空間,會出現(xiàn)異常。問題在于將字符串復(fù)制到字符變量指針指向的地址中。雖然可以正確輸出結(jié)果,但由于固有讀寫越界,導(dǎo)致程序崩潰。

(14)char* s='AAA'; printf('%s',s); s[0]='B'; printf('%s',s);怎么了?

答案:“AAA”是一個字符串常量。 s是一個指針,指向這個字符串常量,所以聲明s的時候有問題。成本char*s='AAA';并且由于它是一個常量,所以對s[0]的賦值操作是非法的。

為您推薦

2018雅思口語題庫備考練習(xí),雅思口語2020年5-8月題庫

2018雅思考試還在進行中,口語一直是一大難點,丘爾教育為各位考生整理口語題庫,希望對大家有所幫助。一、句式Having a friend like him is _______二、例句Having a friend like him is

2024-06-10 21:12

2021考研:魯子問英語教學(xué)論英文版考研課后習(xí)題和答案

關(guān)注我!課后習(xí)題詳解Chapter 1?Concepts for English Teaching in SchoolsSection 11. Based on the theories in this unit, what are the

2024-06-10 21:12

5月雅思口語新題題庫來啦,烤鴨們快來補充雅思口語換題季小知識

5月第一場雅思考試的口語考試結(jié)束啦,最近有好多烤鴨一直問關(guān)于換題季的一些問題,比如換題季會不會很難,會不會有很多新題出現(xiàn)?為了更好的幫助大家備考,小迪整理了最新口語新題題庫一共6個Part1+9個Part2并將一些常識性的東西總結(jié)如下,以供

2024-06-10 21:11

考博英語模擬試題——勤篤學(xué)習(xí)網(wǎng),考博英語真題試卷

?Passage Two??(1) Perhaps all criminals should be required to carry cards which read: Fragile: Handle with Care. It will

2024-06-10 21:11

2019中國農(nóng)業(yè)銀行校園招聘筆試題庫—英語九(中國農(nóng)業(yè)銀行2024春季校園招聘筆試時間)

鄭州:大學(xué)生畢業(yè)照秀美腿,玩各種被虐 2019中國農(nóng)業(yè)銀行校園招聘工作現(xiàn)已開啟,農(nóng)業(yè)銀行校園招聘筆試在即,同學(xué)們一定開始了緊張的備考,那么農(nóng)業(yè)銀行校園招聘筆試都會考哪些內(nèi)容呢?中公金融人為各位考生發(fā)布中國農(nóng)業(yè)銀行校園招聘模擬試題,助力各位考

2024-06-10 21:10

2021高考英語真題和各地模擬試題分類匯編(專題02 名詞)

專題02 名詞2021年高考真題(2021·全國甲卷·語法填空·T9)Supposedly you can do it in two hours, but we stopped at the different gates and ___9

2024-06-10 21:10

加載中...