嵌入式软件常见笔试面试题总结 .
1。中斷與異常區(qū)別:
異常:在產(chǎn)生時(shí)必須考慮與處理器的時(shí)鐘同步,實(shí)際上異常也稱為同步中斷。在處理器執(zhí)行到由于編程失誤而導(dǎo)致的錯(cuò)誤指令時(shí),或者在執(zhí)行期間出現(xiàn)特殊情況(如缺頁(yè)),必須靠?jī)?nèi)核處理的時(shí)候,處理器就會(huì)產(chǎn)生一個(gè)異常。
所謂中斷就是外部硬件產(chǎn)生的一個(gè)電信號(hào),從CPU的中斷引腳進(jìn)入,打斷當(dāng)前CPU的運(yùn)行
所謂異常就是軟件運(yùn)行中發(fā)生了一些必須作出處理的事件,CPU自動(dòng)產(chǎn)生一個(gè)陷入來(lái)打斷當(dāng)前運(yùn)行,轉(zhuǎn)入異常處理流程。
?
2。進(jìn)程與線程的區(qū)別:
a:調(diào)度:線程作為調(diào)度與分配的基本單位,進(jìn)程作為擁有資源的基本單位
b:并發(fā)性:不僅進(jìn)程之間可以并發(fā)執(zhí)行,同一個(gè)進(jìn)程的多個(gè)線程之間也可并發(fā)執(zhí)行
c:擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源,但可以訪問(wèn)隸屬于進(jìn)程的資源
d:系統(tǒng)開(kāi)銷:在創(chuàng)建或撤銷進(jìn)程時(shí),由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的開(kāi)銷明顯大于創(chuàng)建或撤銷線程時(shí)的開(kāi)銷
?
3。volatile關(guān)鍵字有什么含義
volatile說(shuō)明這個(gè)變量可能會(huì)被意想不到的改變,這樣在使用之前都要去內(nèi)存里重新讀取它的值,并告訴編譯器不要隨意對(duì)變量做優(yōu)化
用到場(chǎng)合:并行設(shè)備的硬件寄存器(如狀態(tài)寄存器),一個(gè)中斷服務(wù)子程序會(huì)訪問(wèn)到的非自動(dòng)變量,多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量
?
4。static作用
a:在函數(shù)體中,一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過(guò)程中維持其值不變
b:在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)變量的變量,可以被這個(gè)模塊內(nèi)的所有函數(shù)使用,但不能被模塊外的函數(shù)使用,它是一個(gè)本地的全局變量,
c:在模塊內(nèi),一個(gè)被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,那就是這個(gè)函數(shù)被限制在聲明它模塊的本地范圍內(nèi)使用
后注問(wèn)題:static全局變量與普通的全局變量有何不同?static局部變量和普通局部變量有何區(qū)別?static函數(shù)與普通函數(shù)有什么區(qū)別?
答:static全局變量只初始化一次,防止在其它文件單元中被引用;static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝
?
5。關(guān)鍵字const是什么含義?
答案一:
a:它可以定義const常量
b:const可以修飾函數(shù)的參數(shù),返回值,甚至是函數(shù)的定義體,被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。
答案二:
const意味著只讀
?
如:int const *p? 指向常整型的指針;
int *const p 指向整型的常指針
int *const *p 指向常整型的常指針? 或者等同于const int * const p
?
a:關(guān)鍵字const的作用是為給讀你代碼的人傳達(dá)非常有用的信息,實(shí)際上,聲明一個(gè)參數(shù)為常量是為了告訴用戶這個(gè)參數(shù)的應(yīng)用目的。如果你曾花很多時(shí)間清理其它人留下的垃圾,你就會(huì)很快學(xué)會(huì)感謝這點(diǎn)多于的信息。(當(dāng)然,懂得用const的程序員很少會(huì)留下的垃圾讓別人來(lái)清理的)
b:通過(guò)給優(yōu)化器一些附加的信息,使用關(guān)鍵字const也許能產(chǎn)生更緊湊的代碼
c:合理地使用關(guān)鍵字const可以使編譯器很自然的保護(hù)那些不希望被改變的參數(shù),防止其被無(wú)意的代碼修改。簡(jiǎn)而言之,這樣可以減少bug的出現(xiàn)。
?
6:對(duì)變量或寄存器進(jìn)行位操作,給定一個(gè)整型變量a,寫兩段代碼,第一個(gè)設(shè)置a的bit3,第二個(gè)清除a的bit3。在以上兩個(gè)操作中,要保持其他位不變。
代碼如下:
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void)
{
a|=BIT3;
}
void clear_bit3(void)
{
a&=~BIT3;
}
?
7:用C語(yǔ)言實(shí)現(xiàn)大小端的測(cè)試
void checkcpu()
{
union{
int a;
char b;
}c;
c.a=1;
if(c.b==1)
printf("xiaoduan");
else
printf("daduan");
}
?
8:引用與指針有什么區(qū)別?
a:引用必須初始化,指針不必
b:引用初始化不能改變,指針可以被改變
c:不存在指向空值的引用,但存在指向空值的指針
?
注:用const限定引用的目的是:用這種形式的引用不能通過(guò)引用對(duì)目標(biāo)變量的值進(jìn)行修改
形式為const 類型標(biāo)識(shí)符 &引用名=目標(biāo)變量名
eg:Example(const Example &x)
?
引用的主要目的:當(dāng)參數(shù)傳遞的數(shù)據(jù)量較大時(shí),用引用比用一般變量傳遞參數(shù)的效率和空間占有率較好
?
9:寫出float,int ,bool類型與零的比較,假設(shè)變量為x
float:if(x>0.000001&&x<-0.000001)
int :if(x==0)
bool: if(x==false)
?
10:OSI七層網(wǎng)絡(luò)協(xié)議,TCP/IP協(xié)議
OSI:物理層-數(shù)據(jù)鏈路層-網(wǎng)絡(luò)層-傳輸層-會(huì)話層-表示層-應(yīng)用層
TCP/IP:網(wǎng)絡(luò)接口層-互連網(wǎng)絡(luò)層-傳輸層-應(yīng)用層
?
11:對(duì)于一個(gè)頻繁使用的短小函數(shù),在C語(yǔ)言與C++中分別用什么實(shí)現(xiàn)?
C中用宏定義,C++用inline
注:inline作用:當(dāng)在程序中調(diào)用一個(gè)內(nèi)聯(lián)函數(shù)時(shí),是將該函數(shù)的代碼直接插入到調(diào)用點(diǎn),然后執(zhí)行該段代碼,所以在調(diào)用過(guò)程中不存在程序的跳轉(zhuǎn)與返回問(wèn)題,而對(duì)于普通函數(shù)的調(diào)用,程序是從主調(diào)函數(shù)點(diǎn)轉(zhuǎn)去執(zhí)行被調(diào)函數(shù),待被調(diào)函數(shù)執(zhí)行完畢后,再返回到主調(diào)函數(shù)的調(diào)用點(diǎn)的下一語(yǔ)句繼續(xù)執(zhí)行。從調(diào)用機(jī)理看,內(nèi)聯(lián)函數(shù)可以加快程序代碼的執(zhí)行速度和效率,減少調(diào)用開(kāi)銷。但這是以增加程序代碼為代價(jià)來(lái)求得速度的。
?
12:堆與棧的區(qū)別
Heap是堆,Stack是棧;
Stack的空間由操作系統(tǒng)自動(dòng)分配/釋放,Heap上的空間是手動(dòng)分配/釋放;
C中的malloc函數(shù)分配的內(nèi)存空間在堆上,C++對(duì)應(yīng)的是new操作符;
程序在編譯期間對(duì)變量和函數(shù)分配內(nèi)存都在棧上進(jìn)行,且程序運(yùn)行過(guò)程中函數(shù)調(diào)用時(shí)參數(shù)的傳遞也在棧上進(jìn)行;
?
13:用宏定義寫出swap(x,y);用define聲明一個(gè)常數(shù),用以表明1年中有多少秒;寫出宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)
#define swap(x,y)/
x=x+y;/
y=x-y;/
x=x-y;
?
#define SECOND_PER_YEAR (60*60*24*365)UL
?
#define MIN(A,B) (A<B)?A:B
總結(jié)
以上是生活随笔為你收集整理的嵌入式软件常见笔试面试题总结 .的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C/C++内存分配方式 .
- 下一篇: 程序员人生之路 .