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