• 嵌入式面试题(1)


    一、选择

    1. 凡在函数中未指明存储类型的变量,其隐含的存储类别为:auto
    2. 如下对static的描述,错误的是:

    A. static修饰全局变量时,存储空间可能发生变化
    B. static修饰全局变量时,作用域发生变化
    C. static修饰局部变量时,作用域不会发生变化
    D. static修饰局部变量时,存储空间发生变化

    1. 已知当前intel X86处理器属于小端字节序,在该平台上有一段代码如下:
    unsigned short ausSrc[2] = {255, 254};
    unsigned char aucDest[sizeof(ausSrc)];
    memcpy(aucDest, ausSrc, sizeof(ausSrc));
    

    已知sizeof(unsigned short) = 2,则aucDest[0]、aucDest[1]、aucDest[2]、aucDest[3]的数值是:255 0 254 0

    1. 对如下程序的正确评论为:D
    void main(){
        int a;
        while(a=1) printf("%d
    ", a++);
    }
    

    A. 变量A没有初始化,取得1的概率极低,所以printf语句通常不会被执行
    B. while语句只被执行一次
    C. 程序输出2
    D. 程序为死循环

    1. 以下程序执行后的sum值是:15
    void main() {
        int i, sum;
        for(i=0; i<6; i++) {
            sum += i;
        }
        printf("%d
    ", sum);
    }
    
    1. 有如下宏定义
    #define MULTI(A, B) A*B
    

    执行unsigned int ulRet = MULTI(1+3, 6),则ulRet = 19

    1. 下面程序输出:6 -6 0 1
    int main () {
    	int a=5, b=-7, c=0, d;
    	d = ++a && ++b || ++c;
    	printf("%d %d %d %d
    ", a, b, c, d);
    	return 0;
    }
    

    &&的优先级高于||,所以原式等价为d =(++a && ++b) || ++c;如果&&前为假,则将不会计算后面的式子,如果||前为假,则将继续计算后面的内容。反过来也一样。

    二、填空

    1. 用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数: int *a[10](int)

    2. 下列代码输出的内容为:10 10

    #include <stdio.h>
    
    int main () {
    	int i=0, j=0;
    	while(i<5, j<10) {
    		i++;
    		j++;
    	}
    	printf("%d %d
    ", i, j);
    }
    
    1. 计算机系统中,一般使用补码存储数据,使用16bit存储时,-5的二进制表示为:0XFD

    十进制5可以用8位二进制表示为0000 0101,取反+1为补码1111 1011。

    1. UART在确定的波特率下有特定的协议,比如:

    三、简答

    1. 请说明C语言的堆、栈、全局数据区的特性和他们各自存放哪些种类的变量。

    答:

    c中的几个存储区:

    1. 栈由编译器自动分配释放。在函数体中定义的变量通常是在栈上。
    2. 堆一般由程序员分配,若程序员不释放,程序结束时可能由操作系统自动回收。用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。
    3. 全局数据区的全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束释放。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区)
    4. 还有一个专门放常量的地方,程序结束释放。函数中的 “adgfdf “这样的字符串存放在常量区。
    1. 试简述常见并行处理器技术及其特点。

    答:并行处理器指可以一次可处理多个运算的处理器。但其本质上还是串行处理器的组合,所以提起并行处理器,一般指经特殊设计的多线程处理器。

    流水处理这可以大大提高处理速度,是并行系统必须具有的特点之一。

    四、编程

    如下C函数用来删除一个单向链表中的所有节点,请实现其功能:

    struct Node {
        struct Node *next;
        int i;
    }
    
    int delete_all(struct Node *head) {
    	struct Node p, q;
    	p = head->next;
    	while(p != 0) {
    		q = p->next;
    		free(p);
    		p = q;
    	}
    	head->next == NULL;
    	return 0;
    }
    
  • 相关阅读:
    阿里云服务器购买后的配置指南
    第一阶段总结
    RDD的checkpoint机制和键值对RDD数据分区
    广播变量与累加器
    Spark的监控
    Spark和MR的区别
    hadoop离线项目处理流程
    Flume(一)
    Sparkcore高级应用3
    SparkCore高级应用2(Spark on yarn)
  • 原文地址:https://www.cnblogs.com/hansenn/p/12729288.html
Copyright © 2020-2023  润新知