嵌入式软件工程师笔试题(共11篇)由网友“李承协和医院”投稿提供,下面是小编为大家整理后的嵌入式软件工程师笔试题,仅供参考,大家一起来看看吧。
篇1:嵌入式软件工程师笔试题
嵌入式软件工程师笔试题
1、将一个字符串逆序
2、将一个链表逆序
3、计算一个字节里(byte)里面有多少bit被置1
4、搜索给定的字节(byte)
5、在一个字符串中找到可能的最长的子字符串
6、字符串转换为整数
7、整数转换为字符串
/*
* 题目:将一个字符串逆序
* 完成时间:.9.30深圳极讯网吧
* 版权归刘志强所有
* 描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!
*/
#include
using namespace std;
//#define NULL ((void *)0)
char * mystrrev(char * const dest,const char * const src)
{
if (dest==NULL && src==NULL)
return NULL;
char *addr = dest;
int val_len = strlen(src);
dest[val_len] = '\0';
int i;
for (i=0; i
{
*(dest+i) = *(src+val_len-i-1);
}
return addr;
}
main
{
char *str=“asdfa”;
char *str1=NULL;
str1 = (char *)malloc(20);
if (str1 == NULL)
cout<<“malloc failed”;
cout<
free(str1);
str1=NULL;//杜绝野指针
}
p=head;
q=p->next;
while(q!=NULL)
{
temp=q->next;
q->next=p;
p=q;
q=temp;
}
这样增加个辅助的指针就行乐,
ok 通过编译的代码:
#include
#include
#include
typedef struct List{
int data;
struct List *next;
}List;
List *list_create(void)
{
struct List *head,*tail,*p;
int e;
head=(List *)malloc(sizeof(List));
tail=head;
printf(“\nList Create,input numbers(end of 0):”);
scanf(“%d”,&e);
while(e){
p=(List *)malloc(sizeof(List));
p->data=e;
tail->next=p;
tail=p;
scanf(“%d”,&e);}
tail->next=NULL;
return head;
}
List *list_reverse(List *head)
{
List *p,*q,*r;
p=head;
q=p->next;
while(q!=NULL)
{
r=q->next;
q->next=p;
p=q;
q=r;
}
head->next=NULL;
head=p;
return head;
}
void main(void)
{
struct List *head,*p;
int d;
head=list_create();
printf(“\n”);
for(p=head->next;p;p=p->next)
printf(“--%d--”,p->data);
head=list_reverse(head);
printf(“\n”);
for(p=head;p->next;p=p->next)
printf(“--%d--”,p->data);
}
编写函数数N个BYTE的数据中有多少位是1。
解:此题按步骤解:先定位到某一个BYTE数据;再计算其中有多少个1。叠加得解。
#incluede
#define N 10
//定义BYTE类型别名
#ifndef BYTE
typedef unsigned char BYTE;
#endif
int comb(BYTE b[],int n)
{
int count=0;
int bi,bj;
BYTE cc=1,tt;
//历遍到第bi个BYTE数据
for(bi=0;bi
{
//计算该BYTE的8个bit中有多少个1
tt=b[bi];
for(bj=0;bj<8;bj++)
{
//与1相与或模2结果是否是1?测试当前bit是否为1
//if(tt%2==1)
if((tt&cc)==1)
{
count++;
}
//右移一位或除以2,效果相同
//tt=tt>>1;
tt=tt/2;
}
}
return count;
}
//测试
int main()
{
BYTE b[10]={3,3,3,11,1,1,1,1,1,1};
cout<
return 0;
}
1,
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的'。
char * search(char *cpSource, char ch)
{
char *cpTemp=NULL, *cpDest=NULL;
int iTemp, iCount=0;
while(*cpSource)
{
if(*cpSource == ch)
{
iTemp = 0;
cpTemp = cpSource;
while(*cpSource == ch)
++iTemp, ++cpSource;
if(iTemp >iCount)
iCount = iTemp, cpDest = cpTemp;
if(!*cpSource)
break;
}
++cpSource;
}
return cpDest;
}
#include
#include
//
// 自定义函数MyAtoI
// 实现整数字符串转换为证书输出
// 程序不检查字符串的正确性,请用户在调用前检查
//
int MyAtoI(char str[])
{
int i;
int weight = 1; // 权重
int rtn = 0; // 用作返回
for(i = strlen(str) - 1; i >= 0; i--)
{
rtn += (str[i] - '0')* weight; //
weight *= 10; // 增重
}
return rtn;
}
void main()
{
char str[32];
printf(“Input a string :”);
gets(str);
printf(“%d\n”, MyAtoI(str));
}
#include
#include
void reverse(char s[])
{ //字符串反转
int c, i=0, j;
for(j=strlen(s)-1;i
{ c=s[i];
s[i]=s[j];
s[j]=c;
i++;
}
}
void IntegerToString(char s[],int n)
{ int i=0,sign;
if((sign=n)<0)//如果是负数,先转成正数
n=-n;
do //从个位开始变成字符,直到最高位,最后应该反转
{ s[i++]=n%10+'0';
}while((n=n/10)>0);
//如果是负数,补上负号
if(sign<0)
s[i++]='-';
s[i]='\0';//字符串结束
reverse(s);
}
void main()
{ int m;
char c[100];
printf(“请输入整数m: ”);
scanf(“%d”,&m);
IntegerToString(c,m);
printf(“integer = %d string = %s\n”, m, c);
}
嵌入式软件工程师应知道的0x10个基本问题(经典收藏版)
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。
从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上。如果上述任何问题的答案是“是”的话,那么我知道我得认真考虑我是否应该去做这份工作。
从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。
有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮助。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。
这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。
预处理器(Preprocessor)
篇2:软件工程师笔试题
考察虚继承内存体系
class A
{
public:
A { cout<<“Construct A”<
~A { cout<<“Destruct A”<
void speak { cout<<“A is speaking!”<
};
class B:public virtual A
{
public:
B { cout<<“Construct B”<
~B { cout<<“Destruct B”<
};
class C:public virtual A
{
public:
C { cout<<“Constuct C”<
~C { cout<<“Destruct C”<
};
class D:public B, public C
{
public:
D{ cout<<“Constsruct D”<
~D{ cout<<“Destruct D”<
};
int main
{
D *p = new D;
p->speak;
delete p;
}
输出:
Construct A
Construct B
Constuct C
Constsruct D
A is speaking!
Destruct D
Destruct C
Destruct B
Destruct A
篇3:软件工程师笔试题
考察非虚析构函数
1、class Parent
{
public:
Parent{cout<<“Parent construct”<
~Parent{ cout<<“Parent destruct ”<
};
class Child : public Parent
{
public:
Child { cout<<“Child construct ”<
~Child {cout<<“child destruct”<
};
int main
{
Parent *p;
Child *c = new Child;
p = c;
delete p; 因为析构函数是非virtual的,故析构的时候按照指针的类型进行析构
}
输出:
Parent construct
Child Construct
Parent destruct
2、考察初始化列表的写法
class A
{
public:
A(int x, int y, int z):a=x,b=y,c=z (1)
A(int x, int y, int z):a(x),b(y),c(z) (2)
private:
int a;
int b;
int c;
};
int main
{
A a(1,2,3);
}
篇4:软件工程师笔试题
1、考察拷贝构造函数和赋值的区别。
class A
{
public:
A { cout<<“Construct A by default”<
A(const A& a) { cout<<“consttuct A by copy”<
A& operator =(const A& a) { cout<<“cosnt A by operator =”<
~A { cout<<“Destruct A”<
};
int main
{
A a;
A b=a; //调用拷贝构造函数
A c(a); //调用拷贝构造
A d;
d=a; //赋值
}
输出:
Construct A by default //构造对象a
consttuct A by copy //拷贝构造b
consttuct A by copy //拷贝构造c
Construct A by default //构造a
cosnt A by operator = //赋值d=a
Destruct A
Destruct A
Destruct A
Destruct A
2、考察函数指针
void func(char* a)
{
cout<
}
int main
{
void (*fp)(char*); //填空处
fp = func; //函数名func相当于函数的地址,将其赋给函数指针fp
char* s=“helloc”;
fp(s);
}
篇5:软件工程师笔试题
软件工程师笔试题
1.什么是软件需求,在项目中你将如何获取需求并正确传递该需求,
2.在oracle中,表student只有一个字段,名为stuname,请使用SQL语句将表中的重复记录筛选出来。
3.某天领导给你一项工作,规定在3天内完成。但是当你在执行该工作前,发现出现如下情况:
A、发现不加班就无法完成工作;
B、发现完成该工作所需要的技能,你目前还不具备,
4.请使用JAVA代码,给一个对象“继承”的案例。
5.你的'角色是一个软件实施工程师,负责将已经开发好的系统部署上线并向客户提供使用培训。某天一名重要客户向你强烈抱怨软件的质量出了问题,作为在现场的唯一公司人员,你会做哪几件事?
篇6:嵌入式Linux工程师笔试题
一、填空题:
1. 一些Linux命令,显示文件,拷贝,删除
Ls cp rm
2. do……while和while……do有什么区别?
3. Linux系统下.ko文件是什么文件?.so文件是什么文件?
4. 二维数组AA [ 3 ][ 7 ]的另外一种表示方法:
5. 请写出下列代码的输出内容
#include “stdio.h”
main
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf(“b,c,d:%d,%d,%d”,b,c,d);
return 0;
}
二、编程题:
1. 写出两个排序算法,并说明哪个好?
2. 打开一个文件,并读取从第100字节开始的50字节数据,
嵌入式Linux工程师笔试题
,
3. 编写一个函数,输入一个的整型数字,可以选择按照8/10/16进制输出字符串。
4. 如果有一个简单的helloworld项目目录如下:
# tree helloworld
helloworld
|– file2.h
|– file1.cpp
|– file2.cpp
请编写一个Makefile文件。
三、简答题:
ARM-linux启动分几部分,简述流程:
篇7:嵌入式笔试题
1:用C语言实现大小端的测试
Int CheckCpu
{
union
{
int a;
char b;
}c;
c.a=1;
if(c.b==1)
printf(“小端”);
else printf(“大端”);
}
2:volatile的作用有哪些?
Volatile第一变量相当于告诉编译器这个变量的值会随时发生变化,每次使用之前都要去内存里从新读取它的值,并不要随意针对它做优化,主要用在:
1:一个中断子程序中会访问到的非自动变量;
2:多线程应用中被几个线程共享的变量;
3:并行设备的硬件寄存器。
3:C语言中static关键字的作用有哪些?
1:在函数体中,一个被声明为静态的变量在这个变量在调用过程中维持其值不变;
2:在模块内(但在函数体外),一个被声明为静态的变量,可以被这个模块内的所用函数使用,但不能被模块外的函数使用,它是一个本地的全局变量;
3:在模块内,一个被声明为静态变量的函数,智能被这个模块内的函数调用;
4:static全局变量与局部变量的区别:static全局变量只能被初始化一次,防止其他单元文件中被引用;
5:static局部变量与局部变量的区别:static局部变量只能被初始化一次,下一次依据上一次结果的值;
6:static函数与普通函数的区别:static在内存中只用一份,普通函数在每一次调用中维持一份拷贝。
4:请问下面三种变量的区别:
Int const *p : 指向常整型的指针;
Int *const p; 指向整型的常指针;
Int *const *p: 指向常整型的常指针;
5:在ARM系统中,在函数调用的时候,参数是通过哪种方式传递的。
当参数小于等于4的时候是通过r0~r3来进行传递的,当参数大于4的时候是通过压栈的方式进行传递。
6:中断与异常有何区别.
异常在处理的时候必须考虑与处理器的时钟同步,实际上异常也称为同步中断,在处理器执行到因编译错误而导致的错误指令时,或者在执行期间出现特殊错误,必须靠内核处理的时候,处理器就会产生一个异常;所谓中断是指外部硬件产生的一个电信号从CPU的中断引脚进入,打断CPU的运行。所谓异常是指软件运行过程中发生了一些必须作出处理的事件,CPU自动产生一个陷入来打断CPU的运行。
7:用预处理指令#define表示一年中有多少秒
#define SECONDS_PER_YEAR (60*60*24*365)UL
注意后面必须加UL,表示计算的结构是常整型。
8:简述SPI,UART,I2C三种传输方式。
SPI:高速同步串行口,首发独立,可同步进行
SPI接口主要应用在EEPROM,Flash,实时时钟,A/D转化器,数字信号处理,是一种全双工同步通讯总线,该接口一般使用四条线:串行时钟线(sck),主出从入线,主入从出线,低电平有效地的从机选择线。
I2C协议:是单片机与其他芯片进行通讯的协议:1:只要求两条总线线路,一条是串行时钟线,一条是串行数据线; 2:通过软件设定地址 3:是一个多主机总线,如果两个或更多主机同时初始化数据传送可通过冲突检测和仲裁防止数据破坏; 4:I2C总线传输的是数据的总高位
UART:主要是由一个modem(调制解调器),可以将模拟信号量转化成数字信号量。
9:中断不能返回一个值,中断不能传递参数。
10:嵌入式系统总要求用户对变量或者寄存器进行位操作,给定一个整型变量a:
define BIT3 (oxo1<<3)
static int a ;
void set_bit3(void)
{
a|=BIT3;
}
void clear_bit3(void)
{
a&=~BIT3;
}
作为一个嵌入式程序员,这种程序是小菜一碟,至所以给出这个程序,是想规范大家写程序方法,这里主要是用到了一个宏定义:BIT3 这样的话就可以增加程序的可读性
同时移植性也增强。
篇8:嵌入式笔试题
1:嵌入式系统中经常要求程序去访问某特定内存的特点,在某工程中,要求设定一个绝对地址0x6799的整型变量的值为0xaa66.
Int *ptr;
ptr=(int*)0x67a9;
*ptr=aa66
2:引用和指针有什么区别?
1:应用必须初始化,指针不必;
2:引用处画化后不能改变,指针可以被改变;
3:不存在指向空值的引用,但存在指向空值的指针;
3:全局变量与局部变量在内存中是否有区别,是什么区别?
全局变量存储在静态数据库,局部变量存储在堆栈;
4:写出float,bool,int类型与零的比较,假设变量为X:
Int : if(x==0)
Float: if(x>0.0000001&&x<0.0000001)
Bool: if(x==false)
5:Intertnet采用哪种网络协议,该协议的主要层次结构?
TCP/IP协议
应用层/传输层/网络层/数字链路层/物理层。
6:IP地址有两部分组成:网络号和主机号
7:程序的局部变量存储在(栈)中,全局变量存储于(静态存储区),动态申请数据存储于(堆中);
8:编写一个字符串复制函数:strcpy(const char *str,const char *str1)
void strcpy(const *char str,const chat *str1)
{
if(*str1==’\0’) return;
char *sp1,*sp2;
sp1= str;
sp2=str1;
while(*sp2!=’\0’)
{
*sp1=sp2;
sp1++;
sp2++;
}
}
9:编写一个函数实现字符串翻转 void rechange(char *str)
void rechange(char *str)
{
Int len;
char t;
len=strlen(str);
for(int i=0;len/2;i++)
{
t=str[i];
str[i]=str[len-i-1];
str[len-i-1]=t;
}
}
10:编写一个函数实现字符串比较 int strcmp(char *str1,char *str2),相等返回1,不相等返回0:
int strcmp(char *str1,char *str2)
{
if(*str1==‘\0’||*str2==’\0’) return;
while(*str1!=’\0’&&*str2!=’\0’&&*str1==*str2)
{
str1++;
str2++;
}
if(*str1==*str2)
return 1;
else return 0;
}
}
篇9:嵌入式笔试题
进程和线程的区别:
1:调度:线程作为调度和分配的基本单元,进程作为拥有资源的基本单位;
2:并发性:不仅进程可以并发执行,同一进程内的线程也可以并发执行。
3:拥有资源:进程是拥有资源的基本独立单元,线程不拥有资源,但可以访问进程内的资源;
4:在创建或撤销线程时,由于系统都要为之分配和回收内存资源,导致系统的开销明显大于创建或撤销线程时的开销。
篇10:VC软件工程师笔试题
VC软件工程师笔试题
VC笔试题:
1、如何打开注册表?用什么命令注册ocx控件以及用什么命令查看IP设置情况?
2、static在C++中的作用
3、数据库表格stu中存在字段ID表示编号,写SQL语句查询编号前10的记录
4、数据库在写存储过程通常使用set nocount on来实现什么功能?
5、UpdateData(TRUE)和UpdateData(FALSE)的区别
6、解释MFC的数据类型COLORREF
7、采用哪些函数可启动其它应用程序
8、解释GetClientRect和GetWindowRect()的区别
9、解释MFC中SendMessage与PostMessage的'区别
10、名词解释
MFC SDK DDX DLL TCP
11、解释下面VC调试宏的意义
TRACE
ASSERT
VERIFY
12、编一函数判断点CPoint ptx 是否在点CPoint pta 和 ptb的连线上
13、请说明数组CArray
14、编程实现将8进制字符串转换为2进制字符串的函数
15、编程实现整数的阶乘
16、解释语句virtual void X()=0;的作用
17、解释C++中struct和class的区别
答案:
1 regedit regsvr32 ipconfig
2 用来定义静态的变量或函数
3 select ID top 10 from stu
4 当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数),当 SET NOCOUNT 为 OFF 时,返回计数
5 UpdateData(TRUE)刷新控件的值到对应的变量 UpdateData(FALSE) 拷贝变量值到控件显示
6 COLORREF类型用来描绘一个RGB颜色COLORREF类型用来描绘一个RGB颜色。其定义如下: typedef DWORD COLORREF; typedef DWORD *LPCOLORREF; COLORREF类型变量值描绘一个颜色时对应于下面16进制的格式: 0x00bbggrr 可以用这样一个结构体来描述。 RGB_value struct { byte unused ; byte blue ; byte green ; byte red; };
7 WinExec CreateProcess ShellExecute
8 GetWindowRect()取的是整个窗口的矩形;
GetClientRect()取的仅是客户区的矩形,也就是说不包括标题栏,外框等;
9 发送消息后返回的时间.前者直到窗口执行完消息后才返回,后者向线程发送
消息后没有等消息执行完就立即返回;返回值的不同.前者返回的是消息的执行结果,因消息的不同而不同,后者返回值表示该函数执行的成功与否
10 微软基础类库 软件开发工具包 设备开发包 动态链接库 传输控制协议
11 TRACE宏对于VC下程序调试来说,有着类似printf的功能,Assert - 断言 就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式
VERIFY一个判断的宏
12 BOOL OnLine(CPoint pt, CPoint start, CPoint end)
{
long MAXDIF = 5;
//if(long(m_edgeWidth/2+0.5)>MAXDIF)
// MAXDIF = long(m_edgeWidth/2 + 0.5);
//else
// MAXDIF = 5;
//如果点击不在区域中,则返回FALSE
CRect rc(start,end);
rc.NormalizeRect();
rc.InflateRect(MAXDIF,MAXDIF);
if(!PtInRect(rc,pt))
return FALSE;
//计算距离
int x=pt.x,y=pt.y;
int x1=start.x,y1=start.y;
int x2=end.x,y2=end.y;
//水平,垂直情况
if((x1 == x2)&&(abs(x-x1)<=MAXDIF))
return TRUE;
if((y1 == y2)&&(abs(y-y1)<=MAXDIF))
return TRUE;
int A = y1-y2;
int B = x2-x1;
int C = -A*x1-B*y1;
double d;
double sq = sqrt((double)(A*A+B*B));
if(sq==0)
{
return FALSE;
}
else
d = fabs((double)(A*x+B*y+C)/sq);
//误差容忍范围
if(d<=MAXDIF)
return TRUE;
else
return FALSE;
return TRUE;
}
其他笔试题目推荐:
广东发展银行笔试题目 南京顺丰笔试题目 申银万国校园招聘笔试题目
篇11:软件工程师笔试题集
软件工程师笔试题集
用友笔试题目NET面试题专栏 (部分)
用友, 笔试, NET, 专栏, 题目
1、面向对象的语言具有___封装__性、___继承__性、___多态_性,
2、能用foreach遍历访问的对象需要实现 __ IEnumerable __接口或声明__GetEnumerator __方法的类型。
3、以下叙述正确的是:
A. 接口中可以有虚方法。 B. 一个类可以实现多个接口。
C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。
4、简述 private、protected、public、internal 修饰符的访问权限。
Private 私有成员:只有本类内部可以访问
Protected 受保护成员:只有本类和本类的子类可以访问
Public 公有成员:完全公开,没有访问限制
Internal :在同一命名空间下可以访问
5、写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。)
select top 10 * from A where id not in (select top 30 id from A)
5、DataReader与DataSet有什么区别?
(1)、dataset表示一个数据集,是数据在内存中的缓存。 可以包括多个表;
(2)、dataset连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接
(3)、datareader 连接数据库时是面向连接的'。读表时,只能向前读取,读完数据后有用户决定是否断开连接。
6、简述什么是装箱?
把一个值类型的数据转换为引用类型的数据的过程叫装箱。
7、下列选项中,(c)是引用类型。
a) enum类型 b) struct类型
c) string类型 d) int类型
8、一个数据库中的一个表中有 year 、salary这两个字段,原表中数据如原表,请用SQL查询出结果显示的数据:
原表中数据:
year salary
—————————————–
2000 1000
2001 2000
2002 3000
2003 4000
结果表中数据:
year salary
——————————————
2000 1000
2001 3000
2002 6000
2003 10000
写出SQL语句如下:
create table test([year] int ,salary int)
insert test(year,salary) values(2000,1000)
insert test(year,salary) values(2001,2000)
insert test(year,salary) values(2002,3000)
insert test(year,salary) values(2003,4000)
select t1.year, (select sum(salary) from test as t2 where t2.year
其他求职笔试题推荐:
华为笔试系统程序题 中国银行计算机方向笔试题目 广东发展银行笔试题目
★ 开发人员年度总结
★ 金智科技实习报告
★ 系统分析师论文
★ 财务招聘笔试题
【嵌入式软件工程师笔试题(共11篇)】相关文章:
intel笔试题(技术类)2022-05-06
西门子笔试经验实习2023-01-26
微软公司笔试面试题经验2023-06-22
关于会计笔试题的答案2024-02-06
西门子商务培训笔试经验2022-10-25
Intel招聘的笔试题2022-04-30
计算机毕业设计开题报告2023-12-29
南京嘉环笔试题2023-09-17
C笔试题及答案2024-01-12
富士康集团技术类招聘笔试题2023-08-21