青青久久久久精品亚洲AV中文,国产精品YY9299在线观看,绝顶丰满少妇AV无码,日本WWW一道久久久免费

義烏美潞

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

2024-10-25 23:58:45 來源:

現(xiàn)在嵌入式發(fā)展這么快,嵌入全的去公嵌入很多人都開始走上嵌入式學(xué)習(xí)之路。式題司面試都式題據(jù)市場統(tǒng)計,庫最庫一些畢業(yè)或者正在找工作的現(xiàn)上人在面試企業(yè)的時候會卡在這里,那就是嵌入全的去公嵌入面試題。很多人在面試中都表現(xiàn)得很好,式題司面試都式題但是庫最庫在回答面試問題時卻沒有付出足夠的努力,最終被面試問題拒絕了,現(xiàn)上這使得找工作成為了一個難題,嵌入全的去公嵌入讓他們無路可走。式題司面試都式題天賦。庫最庫而且,現(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)致你的薪資水漲船高!

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

點此找助手0元獲?。簰叽a進(jìn)群獲取資料

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

回答:

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

2. 程序由多個模塊組成,所有模塊都使用一組標(biāo)準(zhǔn)的包含文件和相同的編譯選項。在這種情況下,所有包含文件都可以預(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)讓我很困惑,因為語法并不能準(zhǔn)確表達(dá)正在發(fā)生的事情。如果候選人給出

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

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

給我留下不好的印象。

第三種選擇是使用goto

循環(huán):

.

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

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

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

常量

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

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

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

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

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

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

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

什么意思

常量整型;

int 常量a;

常量int *a;

int * 常量a;

int const * 一個常量;

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

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

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

指向常整數(shù)的常指針(即指針?biāo)赶虻恼麛?shù)不能被修改,指針也不能被修改。

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

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

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

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

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

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

讓其他人清理垃圾。 )

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

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

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

易揮發(fā)的

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

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

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

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

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

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

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

不能回答這個問題的人將不會被錄用。我認(rèn)為這是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)。是的。雖然這種情況并不常見。一個例子是當(dāng)服務(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)總是要求用戶對變量或寄存器進(jìn)行位操作。給定一個整型變量a,寫兩段代碼

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

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

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

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

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

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

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

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

3)。使用#defines 和位掩碼進(jìn)行操作。這是一種非常便攜的方法,應(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)常聲稱這里的一些問題需要翻一本書才能回答,我同意。當(dāng)我

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

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

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

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

準(zhǔn)備這次采訪,那么他可以準(zhǔn)備什么呢?

靜止的

(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ù)和代碼范圍的好處的候選人來說,這是一個嚴(yán)重的缺點

和重要性。

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

只需查看地址總線中的位數(shù)即可確定指針有多少位。 80386以后的機(jī)器都使用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)會認(rèn)為添加一個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]的賦值操作是非法的。

337p日本欧洲亚洲大胆精品| 精品区2区3区4区产品乱码9| 国产亚洲精品自在久久| 少妇被躁爽到高潮无码久久| 好日子在线观看视频大全免费动漫 | 精品人妻系列无码一区二区三区| 中文字幕无码家庭乱欲| 国产日韩av免费无码一区二区 | 无码人妻精品丰满熟妇区| 国产特级毛片aaaaaa毛片| 亚洲av无码一区二区三区不卡| 高h纯肉无码视频在线观看| 国产成人av片免费| 精品无码国产日韩制服丝袜| 在线精品国产一区二区三区| 最新国产av无码专区亚洲| 亚洲av永久无码精品放毛片| 久久夜色精品国产噜噜| 国产三级片在线观看| 国产美女被遭强高潮免费网站| 无码人妻久久久一区二区三区| 97色伦综合在线欧美视频| 欧美大成色www永久网站婷| 国产-第1页-浮力影院| √8天堂资源地址中文在线| 三年片免费观看大全有| 麻豆一区二区三区蜜桃免费| 精品人妻少妇一区二区三区在线 | 亚洲尤码不卡av麻豆| 山东熟女啪啪哦哦叫| yw亚洲av无码乱码在线观看| 亚洲av午夜国产精品无码中文字| 欧美freesex黑人又粗又大 | 国产69精品久久久久9999| 亚洲欧美综合区自拍另类| 亚洲爆乳成av人在线视水卜| 亚洲av无码国产精品色午友在线| 日本按摩高潮a级中文片| 人妻精品久久无码专区涩涩| 亚洲性无码一区二区三区| 人妻精油按摩bd高清中文字幕|