1、1. 内核的裁剪怎么裁剪 2. 深入理解 uboot 3.TCP/IP TCP/UDP 原理是什么? 4.项目里你做了些什么?怎么做的?为什么要那样做? 5.指针与数组的用法及计算 6.单链表和双链表的用法 7.虚函数,构造函数,析构函数,复制和赋值函数 8.串口,驱动 9.冒泡排序 10.二极管和三极管的基本应用 11.C 基础知识的加深 12.面试前深入了解该公司的产品及技术 13.原来做的工作怎么与以后的工作联系到一块 14.我们为什么要录用你,你有哪些能力,你是否合适这个岗位 15.你为什么第一份工作选择广达,你为 什么要离开它,你通过培训你有什么收获,你对我们公司有什么了解,你有什么
2、问题要问的 16.sizeof,#define,设置和清零, static 作用 ,strcpy,中断, GPIO, volatile,链表的注意事项,大小端 17.编写一个函数输入一个整数并输出其 2/8/16/进制 1不按顺序 ( 1)编写一个 c语言程序,判断大端模式和小端模式。 ( 2)嵌入式系统的任务状态。 ( 3)编写一个宏,实现判断数组 a元素的个数。 ( 4)堆和栈的区别 ( 5) static的作用 ( 6) conse的作用 ( 7)实时性 linux 系统和非实时性系统的区别 ( 8)传值调用和传址调用 ( 9) sizeof 和 strlen的用法 ( 10)在 arm
3、9模式下,对数值的某一位进行置 1和清 0, ( 11)在 arm9模式下,对一个地址为 0 80000000的寄存器,写入数值 0 78.。 ( 12) char a54, a的地址为 0,问 printf(“%d”, a4+3)值 ( 13)全局变量、局部变量、局部静态变量 (14)char * =”abcdef”; char a=”abcdef”; 编译之前的区别 ( 15) union的长度 ( 16)信号的 种类, ( 17)进程 七、 linux 开发 1、 linux 内核有几种锁 ,它们有什么 不同。 2、字符设备驱动和块设备驱动的区 别。 3、画出你所理解的 linux 系统
4、整体 架构。(从硬件到应用层) 1、 int a=2,b=11,c=a+b+/a+; 则 c值为多少? 【考点】编码规范。 表面上考察你对运算符优先级的掌握程度,但实际上优先级这些玩意很难死记硬背得住?大家的疑惑不就是运算符的结合顺序么?那么如何去避免呢?c=a+(b+)/(a+)不就行了么,其实问题背后考察的是你的编码规范,如何 写清晰易懂的代码,如何在一个团队中让自己的代码狠容易毫无偏差的让新人看懂 2、 Static 用在全局变量定义和函数内部局部变量定义有何区别? 【考点】编码规范及模块化设计。 Static 变量的两个属性涉及存储位置及可见域。在大型的程序设计中 static全局变量
5、可以有效的避免名字空间的重复及无意的变量引用,这样可以有效的提高程序设计的安全性,同时也利用模块化作业 3、 在程序设计中哪些地方需要使用 define?如何用 define 来定义一年内有多少小时的常量? 【考点】可移植性。 嵌入式程序设计的特点就是软硬 件平台可变性,有效利用 define 常量可以提高程序的可移植性,这样改动方便,不易出错 4、 Define 宏语句和 inline 函数有什么区别? 【考点】时空效率及宏的副作用。 嵌入式系统平台通常存储资源有限,但同时又对实时性有一定的要求,二者如何权衡需要考虑。 Define 宏语句相对于函数调用能提高运行时间性能,但消耗了空间,并且
6、不标准的宏语句定义在不标准的编码中更容易出现副作用,因此inline 函数则是 define 语句的完美替代品。小资金干大事正是嵌入式的终极目标! 5、 哪些地方可以用到 const? const 变量和函数输入参数用 const 修饰有哪些作用? 【考点】程序设计可靠性。 Const 只读变量可以有效克服 define 常量的一些弊端,如无类型安全检查。Const 形参可以有效避免程序内部更改无意的更改。人非圣贤孰能无误,所以我们要将这些可能的失误统统交给智能的编译器,这样就可以将错误扼杀在摇篮中 6、 Int, short, char 在 32位平台下各占几个字节?一个结构体含有 int、
7、short、 char 变量各一个,结构体占据的总内存空间多少? 【考点】跨平台移植。 嵌入式并非 x86,其硬件平台具备很大的差异性, 同为 int 在不同的架构体系下可能占据的字节数是不一样的。不同的平台也有不同的编译器,其在变量对齐方面可能有不同的特性。因此在结构体定义时如何设计成员变量的顺序以有效减少占据的内存空间,以及如何填充特定字段保证访问对齐问题,都是嵌入式系统结构体设计时应该考虑的跨平台可移植性问题 7、 如何将 unsigned int 明确定义为一个 32 位类型? define 和 typedef 有何区别? 【考点】跨平台移植。 define 和 typedef 都可以
8、实现变量类型重定义,但是 typedef 类型的指针变量可以有效去除变量定义的二 义性。在嵌入式的工程项目中,通常为了保证数据类型的统一且便于跨平台移植时修改数据类型方便,通常都会单独定义一个数据类型的头文件,把所有用到的数据类型 typedef 成所熟悉的形式 8、 有没有用过 volatile?有哪些典型的适用场合? 【考点】编译优化的副作用。 通常为了提高程序运行的效率,编译器会自动进行一些优化,如将变量放在寄存器中,以减少存储器访问次数,在数据长期未变时不重新读取内存等等。但是优化有时会带来问题,如硬件寄存器、多任务共享变量、中断和主程序共享变量,优化有可能带来数据访问不一致性的问题,
9、 因此对于这些个别变量,我们需要用 volatile 声明告诉编译器取消优化 9、 参数传递有哪些形式?寄存器和堆栈传递各有什么优缺点? 【考点】编译优化、调用性能、接口设计。 每种体系结构及对应的编译器对参数传递都有自己的规定。参数传递并非总是通过堆栈进行的,参数入栈出栈是需要耗费时间的,编译器总是尽量优化利用寄存器来传递参数,因为寄存器的访问效率要高,但当参数过多时,将放弃优化从而用栈传递参数。因此为了提高调用性能,应尽量减少参数个数,太多时可以将所有参数重新定义为一个结构体,利用结构体指针来传递参数。在函数接口设计时应考虑硬件平台和编译器的特性,以灵活定义参数形式 10、 中断服务程序设
10、计应注意的问题?中断触发方式的选择?中断处理太长怎么办?中断处理程序如何与主应用程序交互? 【考点】中断服务程序设计。 嵌入式程序最大的特点是经常需要和硬件打交道,中断是接收外界输入的典型方式,通常都决定了系统运行流程,因此如何高效不丢失的处理中断是每个嵌入式程序员应考虑的问题 11、 TCP/IP 和 OSI 七层模型是如何划分的?各层的功能,这么设计有什么好处? 【考点】层次化软件设计保证可移植性。 分层模型最大的好处就是某一层 变化了,只要其提供上层的接口未变,那么上层就无需做任何改动。因此只需要更改本层的实现即可。嵌入式平台因为软硬件多变性,为了最大限度的利用先前的成果,软件设计一定要
11、遵循这种层次化模型,这样才能保证其可移植性 12、 TCP 和 UDP 的区别?各种网络互连设备都用在哪一层?如何建立链接?如何进行拥塞控制? 【考点】协议设计可靠性及缓冲区设计管理。 TCP 和 UDP 的最大区别在于可靠性, TCP 通过三次握手协议及超时机制安全可靠的建立或者释放连接。协议设计最大的问题就是如何保证效率合可靠性, TCP的设计为我们提供了一个参 考。而滑动窗口机制可以有效的进行拥塞控制,但窗口大小的设计则关系到内存利用率及缓冲效率可靠性等问题。在嵌入式的驱动程序设计中,经常会开辟缓冲区来进行流量控制及防止数据覆盖,缓冲区的大小设计则需要更加具体的应用情况设计才能保证可靠性
12、合灵活性 一 .选择题(共 15 题,每题 3 分) ( 1)下面关于算法说法错误的是 _。 a. 算法最终必须由计算机程序实现 b. 为解决某问题的算法同为该问题编写的程序含义是相同的 c. 算法的可行性是指指令不能有二义性 d. 以上几个都是错误的 ( 2)下面说法错误的是 _. a. 算法原地工作的含义是指不需要任何额外的辅助空间 b. 在相同的规模 n 下,复杂度 O(n)的算法在时间上总是优于复杂度 O(2n)的算法 c. 所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 d. 同一个算法,实现语言的级别越高,执行效率就越低 ( 3)在下面的程序段中,对 x 的赋值语句的频度
13、为 _。 for (int i; iLlink=q; q-Rlink=p; p-Llink-Rlink=q; q-Llink=q; b. p-Llink=q; p-Llink-Rlink=q; q-Rlink=p; q-Llink=p-Llink; c. q-Rlink=p; q-Llink=p-Llink; p-Llink-Rlink=q; p-Llink=q; d. q-Llink=p-Llink; q-Rlink=q; p-Llink=q; p-Llink=q; ( 13)下面说法正确的是 _。 a. 顺序存储结构的主要缺点是不利于插入或删除操作; b. 线性表采用链表存储时,结点和结点
14、内部的存储空间可以是不连续的; c. 顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好; d. 顺序存储方式只能用于存储线性结构。 ( 14)下面说法正确的是 _。 a. 线性表只能用顺序存储结构实现。 b. 为了很方便的插入和删除数据,可以使用双向链表存放数据。 c. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。 d. 链表是采用链式存储结构的线性表 ,进行插入、删除操作时,在 链表中比在顺序存储结构中效率高。 ( 15)下面说法正确的是 _。 a. 数据元素是数据的最小单位。 b. 队列逻辑上是一个下端口和上端能增加又能减少的线性表。 c. 任何一个递归过程都可以转换
15、成非递归过程。 d. 只有那种使用了局部变量的递归过程在转换成非递归过程时才必须使用栈。 二 . 填空题 (共 5 题,每题 5 分 ) ( 1) 下列程序的功能是创建单向链表,请补充完整。 #include #include struct link char name10; int mark; struct link * next; ; void insert(char * name, int mark); struct link * head = NULL; main() char name10; int mark; struct link *t; while (1) scanf(“%s
16、%d”, name, if (strcmp(name, “#”) = 0 ) break; _(1)_; for (t=head; _(2)_) printf(“: %d n”, t-name, t-mark); void insert(char * name, int mark) struct link * p; p = _(3)_ ; strcpy(p-name, name); p-mark = mark; _(4)_; if ( head != NULL ) _(5)_; head = p; ( 2) 用循环链表表示的队列长度为 n, 若只设头指针 ,则出队和入队的时间复杂度分别是 _和
17、 _; 若只设尾指针 ,则出队和入队的时间复杂度分别是 _和 _。 ( 3) 在 n 个记录的有序顺序表中进行折半查找 ,最大的比较次数是_。 ( 4) 仔细阅读下列程序,在空白处填入适当的语句。 函数 match(s,t)完成在字符串 s中寻找与 t匹配的字符,若存在一个匹配,则返回 t在字 符串 s 中的下标;否则,返回 -1。其中,字符指针 *b 始终指向 s的第一元素。 Match(s,t) Char s,t; char *b=s; char *p, *r; for _ for (p=s, r=t; *r!=0 p+, r+); if_ return(s-b); return(-1);
18、 ( 5) 补充下列程序:设一棵二叉 序列树 b,下列算法函数是实现在 b中插入一个结点 s。 函数: void insert( btree *b, btree *s) if( b = NULL) b = s; else if( s-data = b-data) return(); else if(s-data data) ; else ; 三 .简答题(共 3题,每题 10 分) ( 1) 在一个包含 n 个元素的数组 M 中查找一个元素 x。 算法假设 M 已经按升序排列了,请写出二分搜索算法的步骤。 ( 2) 试将一个无序 的线性表 A=(11,16,8,5,14,10,38,23)转换
19、成一个按升序排列的有序线性表(用链表实现)。 ( 3) 何为栈和队列?简述两者的区别和联系。 一 . 选择题(共 15 题,每题 3分。) ( 1)在 C语言中 , char 型数据在内存中的存储形式是 _。 a. 补码 b. 反码 c. 原码 d. ASCII 码 ( 2)设 C语言中 ,一个 int 型数据在内存中占 2个字节 ,则 unsigned int 型数据的取值范围为 _。 a. 0 255 b. 0 32767 c. 0 65535 d. 0 2147483647 ( 3)已知 ch是字符型变量 ,下面不正确的赋值语句是 _。 a. ch=a+b; b. ch= 0; c. c
20、h=7+9; d. ch=5+9; ( 4)已知 ch是字符型变量 ,下面正确的赋值语句是 _。 a. ch= 123; b. ch= xff; c. ch= 08; d. ch=” ”; ( 5)以下选项中不正确的整型常量是 _。 a.12L b. -10 c. 1,900 d. 123U ( 6)假设 int 型变量占两个字节的存储单元,若有定义: int x10=0,2,4; 则数组 x在内存中所占字节数为 _。 a. 3 b. 6 c. 10 d. 20 ( 7) C 语言中能用八进制表示的数据类型为 _。 a. 字符型、整型 b. 整形、实型 c. 字符型、实型、双精度型 d. 字符
21、型、整型、实型、双精度型 ( 8)以下只有 在使用时才为该类型变量分配内存的存储类说明是 _。 a. auto 和 static b. auto 和 register c. register 和 static d. extern 和 register ( 9)下面四个选项中 ,均是合法整型常量的选项是 _。 a. 160 b. 0xcdf c. 01 d. 0x48a 0xffff 01a 986,012 2e5 011 0xe 0668 0x ( 10)下面四个选项中 ,均是不合法的整型常量的选项是 _。 a. 0f1 b. 0Xcdf c. 018 d. 0x48eg 0xffff 017
22、 999 068 0011 12,456 5e2 03f ( 11)下面四个选项中 ,均是不合法的浮点数的选项是 _。 a. 160. b. 123 c. 18 d. e3 0.12 2e4.2 123e4 .234 e3 .e5 0.0 1e3 ( 12)下面四个选项中 ,均是合法浮点数的选项是 _。 a. +le+1 b. 60. c. 123e d. e3 5e-9.4 12e-4 1.2e-.4 .8e4 03e2 8e5 +2e 5.e ( 13)下面四个选项中 ,均是合法转义字符的选项是 _。 a. ” b. c. 018 d. 0 017 f 101 n ” xab xlf (
23、14)下面四个选项中 ,均是不合法的转义字符的选项是 _。 a. ” b. 1011 c. 011 d. abc f 1011 xf a xlf ( 15)下面正确的字符常量是 _。 a. “a” b. ” c. W d. ” 二填空题(每题 6分)。 ( 1)说明下面变量的定义: char (*p)(); _ char *p(); _ char (*p)1010; _ char(*(*p(); _ ( 2)下面共同体的存储空间是 _ union BOOKNUMBER T_S16 age; T_S8 title10; T_S8 post32; ( 3)若整数值范围是 -32768 至 3276
24、7。在执行下面的表达式之后 , i 的结果是什么 ? int i=32766; i=i+1; i = i=i+1; i = ( 4)对于联合类型: union x char ch7; int i2; float f; tom; 那么 , sizeof(tom) = ( 5)有以下程序,程序的输出结果是 _(注意 : ch0在低字节 ,ch1在高字节)。 #include union pw int i; char ch2; a; main() a.ch0 = 13; a.ch1 = 0; printf(“%d n”, a.i); 三 .简单题(共 3题,每题 10 分) ( 1)已知 a为整数,比较下面代码的效率并说明原因: a+; a = a+1;