- 相關(guān)推薦
2017年嵌入式軟件面試題
嵌入式系統是當前最熱門(mén)、最具發(fā)展前途的IT應用領(lǐng)域之一。那么關(guān)于嵌入式工程師考試你知道多少呢?下面跟yjbys小編一起來(lái)看看吧!
1、請寫(xiě)出你所知道的C語(yǔ)言關(guān)鍵字。
auto :聲明自動(dòng)變量
switch :用于開(kāi)關(guān)語(yǔ)句
case:開(kāi)關(guān)語(yǔ)句分支
break:跳出當前循環(huán)
default:開(kāi)關(guān)語(yǔ)句中的“其它”分支
continue:結束當前循環(huán),開(kāi)始下一輪循環(huán)
goto:無(wú)條件跳轉語(yǔ)句
do :循環(huán)語(yǔ)句的循環(huán)體
while :循環(huán)語(yǔ)句的循環(huán)條件
if:條件語(yǔ)句
else :條件語(yǔ)句否定分支(與 if 連用)
enum :聲明枚舉類(lèi)型
union:聲明共用數據類(lèi)型
extern:聲明變量是在其它文件中聲明
for:一種循環(huán)語(yǔ)句
register:聲明寄存器變量
return :子程序返回語(yǔ)句(可以帶參數,也可不帶參數)循環(huán)條件
sizeof:計算數據類(lèi)型長(cháng)度
static :聲明靜態(tài)變量
struct:聲明結構體變量或函數
typedef:用以給數據類(lèi)型取別名
unsigned:聲明無(wú)符號類(lèi)型變量或函數
void :聲明函數無(wú)返回值或無(wú)參數,聲明無(wú)類(lèi)型指針
volatile:說(shuō)明變量在程序執行中可被隱含地改變
short :聲明短整型變量或函數
signed:聲明有符號類(lèi)型變量或函數
char :聲明字符型變量或函數
float:聲明浮點(diǎn)型變量或函數
int: 聲明整型變量或函數
long :聲明長(cháng)整型變量或函數
const :聲明只讀變量
double :聲明雙精度變量或函數
2、IPv4把所有的IP地址分為A、B、C、D、E五類(lèi)。請寫(xiě)出B類(lèi)地址和C類(lèi)地址的范圍和掩碼,D類(lèi)地址的用途是什么?
分類(lèi) 前綴碼 開(kāi)始地址 結束地址 對應CIDR修飾 默認子網(wǎng)掩碼
A類(lèi)地址 0 0.0.0.0 127.255.255.255 /8 255.0.0.0
B類(lèi)地址 10 128.0.0.0 191.255.255.255 /16 255.255.0.0
C類(lèi)地址 110 192.0.0.0 223.255.255.255 /24 255.255.255.0
D類(lèi)地址 (群播) 1110 224.0.0.0 239.255.255.255 /4 未定義
E類(lèi)地址 (保留) 1111 240.0.0.0 255.255.255.255 /4 未定義
3、請簡(jiǎn)述在linux中多進(jìn)程程序和多線(xiàn)程程序的區別。
4、列出目前l(fā)inux系統能支持的文件系統,列舉常用的四個(gè)以上。
Ext3 ext4 jffs2 yffs2 ubifs cramfs
5、寫(xiě)一個(gè)“標準”宏MIN,這個(gè)宏輸入兩個(gè)參數并返回較小的一個(gè)?
#define MIN(a, b) ( (a) <= (b) : (a) ? (b) )
6、什么是MMU,MMU的作用?
MMU是Memory Management Unit的縮寫(xiě),負責虛擬地址到物理地址的轉換,提供硬件機制的內存訪(fǎng)問(wèn)授權。
7、關(guān)鍵字volatile有什么含義,并給出幾個(gè)應用場(chǎng)合。
1. 定義的變量應該是異變的,防止編譯器優(yōu)化,使得程序直接存取原始內存地址。
2. 中斷服務(wù)程序中修改的供其它程序檢測的變量需要加volatile。
3. 多任務(wù)環(huán)境下各任務(wù)間共享的標志應該加volatile。
4. 存儲器映射的硬件寄存器通常也要加voliate,因為每次對它的讀寫(xiě)都可能有不同意義。
5. 頻繁地使用volatile很可能會(huì )增加代碼尺寸和降低性能。
8、雙向鏈表操作題:
/*節點(diǎn)定義*/
typedef srruct node
{
struct node *next;
struct node *previous;
}NODE;
/*鏈表定義*/
typedef struct
{
NODE node;
int count;
} LIST;
#define HEAD node.next
#define TALL node.previous
/*初始化一個(gè)鏈表*/
void lstInit (LIST *pList)
{
pPlist->HEAD=NULL;
pPlist->TALL=NULL;
pPlist->count=0;
}
請編寫(xiě)函數把一個(gè)節點(diǎn)(pNode)插入鏈表pList中某個(gè)節點(diǎn)(pPrev)之后。
9、請寫(xiě)出strcpy 和 memcpy 的區別
1、strcpy和memcpy都是標準C庫函數。
2、strcpy提供了字符串的復制。即strcpy只用于字符串復制,并且它不僅復制字符串內容之外,還會(huì )復制字符串的結束符。
3、strcpy函數的原型是:char* strcpy(char* dest, const char* src);
4、memcpy提供了一般內存的復制。即memcpy對于需要復制的內容沒(méi)有限制,因此用途更廣。
5、memcpy函數的原型是:void *memcpy( void *dest, const void *src, size_t count );
strcpy和memcpy主要有以下3方面的區別。
5.1、復制的內容不同。strcpy只能復制字符串,而memcpy可以復制任意內容,例如字符數組、整型、結構體、類(lèi)等。
5.2、復制的方法不同。strcpy不需要指定長(cháng)度,它遇到被復制字符的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個(gè)參數決定復制的長(cháng)度。
5.3、用途不同。通常在復制字符串時(shí)用strcpy,而需要復制其他類(lèi)型數據時(shí)則一般用memcpy。
6、實(shí)現原型:
char *strcpy(char* strDest, const char* strSrc)
{
if((strDest == NULL) || (strSrc == NULL))
return NULL;
char* strDestCopy = strDest;
while( ( *strDest++ = *strSrc++ ) != '/0' );
return strDestCopy;
}
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp++ = *s++;
return dest;
}
【嵌入式軟件面試題】相關(guān)文章:
嵌入式C語(yǔ)言面試題(附答案)03-17
嵌入式軟件開(kāi)發(fā)要學(xué)什么03-05
注釋嵌入式軟件的十大技巧03-19
嵌入式軟件工程師認證03-03
嵌入式系統軟件開(kāi)發(fā)技術(shù)概述03-21
2016最新公司嵌入式考試面試題庫03-04
嵌入式軟件工程師經(jīng)典筆試題03-06