考试范围:
1. 逻辑推理题(公共)(共2题,每题5分,共10分);
2. 编程语言知识题(公共)(共10题,每题5分,共50分);
3. 数据结构知识题(应用开发方向)(共4题,每题5分,共20分);
4. 编程综合题(应用开发方向)(共4题,每题5分,共20分);
5. 操作系统知识题(LINUX驱动方向)(共4题,每题5分,共20分);
6. 编程综合题(LINUX驱动方向)(共4题,每题5分,共20分);
7. 单片机知识题(MCU驱动方向)(共4题,每题5分,共20分);
8. 编程综合题(MCU驱动方向)(共2题,每题10分,共20分);
考试要求:
1. 考试时间为60分钟,每个人独立完成考试;
2. 请在“技术方向”中勾选【LINUX驱动方向)】或【MCU驱动方向)】或【应用开发方向】,并解答对应试题;
3. 答案写在答题纸上,不允许直接在卷面上答题;
4. 考试完毕,试卷和答题纸一并收回;
一、 逻辑推理(公共)(共2题,每题5分,共10分)
1. 【单选】有四只小老鼠一块出去偷食物(它们都偷食物了),回来时族长问它们都偷了什么食物。
u 老鼠A说:我们每个人都偷了奶酪。
u 老鼠B说:我只偷了一颗樱桃。
u 老鼠C说:我没偷奶酪。
u 老鼠D说:有些人没偷奶酪。
族长仔细观察了一下,发现它们当中只有一只老鼠说了实话。那么下列的评论正确的是:
A. 所有老鼠都偷了奶酪;
B. 所有的老鼠都没有偷奶酪;
C. 有些老鼠没偷奶酪;
D. 老鼠B偷了一颗樱桃。
2. 【单选】有一富翁,为了确保自己的人身安全,雇了双胞胎兄弟两个作保镖。兄弟两个确实尽职尽责,为了保证主人的安全,他们做出如下行事准则:
u 每周一、二、三,哥哥说谎;
u 每逢四、五、六,弟弟说谎;
u 星期天两人都说真话。
一天,富翁的一个朋友急着找富翁,他知道要想找到富翁只能问兄弟俩,并且他也知道兄弟俩个的做事准则,但不知道谁是哥哥,谁是弟弟。另外,如果要知道答案,就必须知道今天是星期几。于是他便问其中的一个人:昨天是谁说谎的日子?结果两人都说:是我说谎的日子。你能猜出今天是星期几吗?
A. 星期一
B. 星期二
C. 星期三
D. 星期四
E. 星期五
F. 星期六
G. 星期天
二、 编程语言(公共)(共10题,每题5分,共50分)
1. 【填空】设有以下说明和定义:
#define M 5
#define N M + M
则 printf("%d", N * N * 5); 的执行结果是 。
2. 【填空】设定a是二维数组,则a[i][j]的指针访问方式为 。
3. 【填空】设有以下说明和定义:
const char str1[] ="abc";
const char str2[] ="abc";
const char* str3 ="abc";
const char* str4 ="abc";
则 printf("%d", str1 == str2); 的执行结果是 。
printf("%d", str3 ==str4); 的执行结果是 。
4. 【填空】设有以下说明和定义:
void func(char* x)
{
x++;
*x = 'a';
}
int main()
{
char str[6] = { 0 };
strcpy(str, "hello");
func(str);
cout << str;
return 0;
}
则count输出是 。
5. 【填空】下面的代码有什么问题?
char* s = "AAA";
s[0] = 'B';
6. 【填空】设有以下说明和定义:
union ONE
{
long i;
int j[5];
char k;
};
struct TWO
{
int A;
ONE B;
double C;
};
则 printf("%d", sizeof(TWO) + sizeof(ONE)); 的执行结果是 。
7. 【填空】设有以下说明和定义:
typedef int (*func)(int, int*);
int xxx(int a, int* p)
{
returna + *p;
}
int dowork(func aaa, int bbb, int*ccc)
{
returnaaa(bbb, ccc);
}
int sss = 4;
则dowork(&xxx, 3, &sss)的执行结果是 。
8. 【填空】设有以下说明和定义:
int func(int x)
{
int count = 0;
while(x)
{
count ++;
x = x & (x - 1);
}
return count;
}
则func(999)的执行结果是 。
9. 【简答】要对绝对地址0x100000赋值,我们可以用(unsignedint*)0x100000 = 1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?
10. 【简答】请简要描述new/delete和malloc/free之间的差异;
三、 数据结构(应用开发方向)(共4题,每题5分,共20分)
1. 【单选】下列数据结构中,按先进后出原则组织数据的是______。
A. 线性链表 B. 栈 C. 循环链表 D. 顺序表
2. 【单选】深度为5的二叉树至多有______个结点。
A. 16 B. 32 C. 31 D. 10
3. 【单选】使用深度优先算法遍历下图,遍历的顺序为______。
A. ABCDEFG
B. ABDCFEG
C. ABDECFG
D. ABCDFEG
4. 【单选】已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是______。
A. 堆排序
B. 直接插入排序
C. 快速排序
D. 直接选择排序
四、 编程综合(应用开发方向)(共4题,每题5分,共20分)
class Graph
{
public:
Graph() { s_gCount++; }
virtual ~Graph() { s_gCount--;}
virtual int drawOut() = 0;
static int getTotalCount() { return s_gCount; }
protected:
int m_x;
int m_y;
static int s_gCount;
};
回答下列问题:
1. 这个类能否生成实例,为什么?
2. 上述代码中是否存在错误,如存在请指出?
3. 如果Rectangle类公共继承该类,那么s_gCount对Rectangle的成员属性是什么?
4. 请画出该类的对象模型示意图(C++对象模型)。
五、 操作系统知识题(LINUX驱动方向)(共4题,每题5分,共20分)
1. 【多选】嵌入式Linux常用的文件系统有下常用的_________。
A. FAT32 B. JFFS2 C. YAFFS2 D. NTFS
2. 【填空】使用gcc编译器生成可执行文件的四个相互关联的步骤是______、_______、_______和_______。
3. 【多选】请从下面选出Linux字符设备驱动开发时需要的几个步骤_________。
A. register_chrdev_region
B. alloc_chrdev_region
C. cdev_add
D. cdev_open
E. cdev_del
F. unregister_chrdev_region
4. 【填空】通过ls -al /dev命令查看主机的一个设备信息如下:
crw-rw---- 1 root root 10, 49 Oct 12 16:35 dymind_test
请问:crw-rw----中的c含义是:__________,10的含义是____________,49的含义是_____________。
六、 编程综合(LINUX驱动方向)(共4题,每题5分,共20分)
1. 用户进程间通信主要哪几种方式,线程间同步主要有哪几种方式?
2. 编写一个SHELL脚本程序,将当前目录及其子目录中所有后缀为.o类型文件的文件名输出到用户指定的文件test.txt中。
3. 浅谈bootloader, kernel, filesystem三者之间的关系。
4. 假定helloworld项目目录如下:
# tree helloworld
helloworld
|– file1.h
|– file1.cpp
|– file2.h
|– file2.cpp
请尝试为其编写一个Makefile文件。
七、 单片机知识题(MCU驱动方向)(共4题,每题5分,共20分)
1. 【填空】十进制4的8位二进制反码是______________,十进制-4的8位二进制码是_______________。
2. 【填空】指令MOV A,#20H中,
源操作数的寻址方式为________________,目的操作数的寻址方式_________________。
3. 【单选】三态缓冲器的输出状态,不包括以下哪种状态_________。
A. 低电平 B. 高阻态 C. 高电平 D. 低阻态
4. 【单选】单片机的晶振为12MHz,主倍频器倍频系数为10,分频系数为5;定时器1的时钟分频器分频系数为2,时钟输入为单片机主频,现在要定时100us,则定时器的初始值为_________。
A. 600 B. 1200 C. 2400 D. 4800
八、 编程综合(MCU驱动方向)(共2题,每题10分,共20分)
1. PWM(脉宽调制)在单片机驱动电路中很常用,如果单片机没有PWM功能,但具有一个以上的定时器外设以及IO口,如何用普通IO口模拟PWM功能?
2. 设定有如下6个8段LED数码管动态显示接口电路,
请问:
1. 图中LED数码管驱动是共阴极还是共阳极?
2. 根据图示,完成下列绝对地址的定义;
#define COM_8155 PBYTE[0x00]
#define PA_8155 PBYTE[ ]
#define PB_8155 PBYTE[ ]
3. 8155命令寄存器如下图所示,
请完成8155初始化函数。
Init_8155()
{
P2_0 = ( );
COM_8155 = 0x03;
}
4. 完成动态显示子函数;
sbit P2_0 = P2^0;
uchar DIR_BUF[6] = { 1, 2, 3, 4, 5, 6};
uchar code BIT_TAB[6] = { 1, 2, 4, 8,________, 0x20};
uchar code SEG_TAB[] = { 0x3f, 0x06,0x4f, 0x66, 0x6d, 0x7d,
0x07, 0x7f, 0x6f,0x77, 0x7c, 0x39,
0x5e, 0x79, 0x71,0x40, 0x73, 0x1c, 0x00};
void LED_Disp(void)
{
uint x = 0;
uchar a = 0;
uchar i = 0;
for (i = 0; i < 6; i++)
{
a = DIR_BUF[i];
P2_0 = ________;
PB_8155 = ________;
PA_8155 = ________;
for (x = 500; x > 0; x--)
{
}
}
}
笔试答题纸
姓名: 出生日期: 性别:
电话: 邮箱地址:
应聘职位:嵌入式软件开发工程师 所学专业:
技术方向:□ LINUX驱动方向 □ MCU驱动方向 □ 应用开发方向
---------------------------------------------------------------------------------------------------------------------------------------
考试要求:
1.考试时间为60分钟,每个人独立完成考试;
2.答案写在答题纸上,不允许直接在卷面上答题;
3.考试完毕,试卷和答题纸一并收回;
题号 | 一 | 二 | 三 | 四 | 总分 |
得分 |
|
|
|
|
|
一、 逻辑推理(公共)(共2题,每题5分,共10分)
序号 | 1 | 2 |
答案 |
|
|
二、 编程语言(公共)(共10题,每题5分,共50分)
序号 | 答案 |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
三、 数据结构(应用开发方向)(共4题,每题5分,共20分)
序号 | 1 | 2 | 3 | 4 |
答案 |
|
|
|
|
四、 编程综合(应用开发方向)(共4题,每题5分,共20分)
1. 这个类能否生成实例,为什么?
2. 上述代码中是否存在错误,如存在请之处?
3. 如果Rectangle类公共继承该类,那么s_gCount对Rectangle的成员属性是什么?
4. 请画出该类的对象模型示意图(C++对象模型)。
五、 操作系统知识题(LINUX驱动方向)(共4题,每题5分,共20分)
序号 | 答案 |
1 |
|
2 |
|
3 |
|
4 |
|
六、 编程综合(LINUX驱动方向)(共4题,每题5分,共20分)
1. 用户进程间通信主要哪几种方式,线程同步的方法主要有哪几种方式?
2. 编写一个SHELL脚本程序,将当前目录及其子目录中所有后缀为.O类型文件的文件名输出到用户指定的文件test.txt中。
3. 浅谈bootloader, kernel, filesystem三者之间的关系。
4. 假定helloworld项目目录如下:
# tree helloworld
helloworld
|– file1.h
|– file1.cpp
|– file2.h
|– file2.cpp
请尝试为其编写一个Makefile文件。
七、 单片机知识题(MCU驱动方向)(共4题,每题5分,共20分)
序号 | 答案 |
1 |
|
2 |
|
3 |
|
4 |
|
八、 编程综合(MCU驱动方向)(共2题,每题10分,共20分)
1. PWM(脉宽调制)在单片机驱动电路中很常用,如果单片机没有PWM功能,但具有一个以上的定时器外设以及IO口,如何用普通IO口模拟PWM功能?
2. 设定有如下6段8位LED数码管动态显示接口电路
序号 | 答案 |
1 |
|
2 |
|
3 |
|
4 |
|
笔试答案
--------------------------------------------------------------------分割线-------------------------------------------------------------------
考试要求:
1. 时间为60分钟;
2. 考试完毕,试卷和答题纸一并收回;
评价标准:
1. 有多个答案的,全部正确满分,部分正确按给定的评分标准给分;
--------------------------------------------------------------------分割线-------------------------------------------------------------------
一、 逻辑推理(公共)(共2题,每题5分,共10分)
序号 | 1 | 2 |
答案 | A | D |
二、 编程语言(公共)(共10题,每题5分,共50分)
序号 | 答案 |
1 | 55 |
2 | *(a + i + j) |
3 | 0 1 |
4 | hallo |
5 | s[0] = 'B'; // 对常量指针进行赋值操作不合法。 |
6 | 52 |
7 | 7 |
8 | 8 |
9 | 1、定义函数指针:typedef void(*)() voidFuncPtr; 2、然后使用0x100000调用它:*((voidFuncPtr)0×100000)(); |
10 | 1、new/delete是操作符,而malloc/free是库函数; 2、mallco/free主要完成内存的分配和回收;new操作符在内存分配后,还会调用构造函数完成对象初始化,delete操作符在内存回收前,还会调用析构函数完成对象清理; |
三、 数据结构(应用开发方向)(共4题,每题5分,共20分)
序号 | 1 | 2 | 3 | 4 |
答案 | B | C | C | B |
四、 编程综合(应用开发方向)(共4题,每题5分,共20分)
1. 这个类能否生成实例,为什么?
不能生成实例,因为该类具备纯虚函数;
2. 上述代码中是否存在错误,如存在请之处?
s_gCount变量没有初始化;
需要在类外部添加初始化语句:int Graph::s_gCount = 0;
3. 如果Rectangle类公共继承该类,那么s_gCount对Rectangle的成员属性是什么?
protected
4. 请画出该类的对象模型示意图(C++对象模型)。
五、 操作系统知识题(LINUX驱动方向)(共4题,每题5分,共20分)
序号 | 1 | 2 | 3 | 4 |
答案 | B、C | 预处理、编译、汇编、链接 | ACEF、BCEF | 字符设备、主设备号、次设备号 |
评分标准 | 2分/个 | 1分/个 | 5分/个 | 1分/个 |
六、 编程综合(LINUX驱动方向)(共4题,每题5分,共20分)
1. 用户进程间通信主要哪几种方式,线程同步的方法主要有哪几种方式?
管道、信号、消息队列、共享内存、信号量、套接字。
2. 编写一个SHELL脚本程序,将当前目录及其子目录中所有后缀为.O类型文件的文件名输出到用户指定的文件test.txt中。
ls -a | *.o > test.txt
3. 浅谈bootloader,kernel,filesystem三者之间的关系。
嵌入式linux启动过程如下:bootloader ->kernel -> filesystem -> application。
1) bootloader,它是linux-kernel移植的基石,Bootloader是在系统启动之后、Kernel运行之前所执行的第一段代码,其任务是为调用Kernel准备必要的软硬件环境。
2) 完成bootlaoder的移植后,就是kernel的移植。主要包括添加特定模块的驱动,针对具体要求对内核进行配置。这里有两点要注意:一是有些参数要与所用的bootloader相对应,如nand的分区参数;二是bootlaoder对特定模块的驱动在进入kernel后便会由kernel接管。
3) filesystem主要是建立根文件和一些系统功能的实现,kernel启动后加载filesystem。
4. 假定helloworld项目目录如下:
# tree helloworld
helloworld
|– file1.h
|– file1.cpp
|– file2.h
|– file2.cpp
请尝试为其编写一个Makefile文件。
helloworld: file1.o file2.o
g++ -o file1.o file2.o
file1.o: file1.cpp file1.h
g++ -c file1.cpp
file2.o: file2.cpp file2.h
g++ -c file2.cpp
clean: rm *.o helloworld
七、 单片机知识题(MCU驱动方向)(共4题,每题5分,共20分)
序号 | 1 | 2 | 3 | 4 |
答案 | 11111011 11111100 | 立即数寻址 寄存器寻址 | D | B |
评分标准 | 2分/个 | 2分/个 | 5分/个 | 5分/个 |
八、 编程综合(MCU驱动方向)(共2题,每题10分,共20分)
1. PWM(脉宽调制)在单片机驱动电路中很常用,如果单片机没有PWM功能,但具有一个以上的定时器外设以及IO口,如何用普通IO口模拟PWM功能?
设置一全局变量代表PWM周期,另一全局变量作为PWM占空比,定时器的初始值设PWM时钟。每次定时器中断中某一全局变量自加一,期间某一IO一直输出高,直到变量达到占空比值,再输出低,直到变量值达到PWM周期,清零,接着循环。
注:此题考查笔试者的MCU编程思想,笔试者的答案中应该包含PWM周期、PWM占空比、PWM时钟关键字。
2. 设定有如下6段8位LED数码管动态显示接口电路
序号 | 1 | 2 | 3 | 4 |
答案 | 共阴极 | 0x01 0x02 | 1 | 0x10 1 SEG_TAB[a] BIT_TAB[i] |
评分标准 | 2分/个 | 2分/个 | 2分/个 | 1分/个 |