猛玛 - MCU软件工程师 - 笔试

❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗

alt

本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。

岗位:MCU软件工程师

题型:14 道选择题,1 道填空题,1 道编程题

1、选择题

1.1

将命令的标准输出和错误输出都重定向到同一个文件"all_output.txt",应该使用以下哪个命令? ==(D)==

  1. A. command 2> all_output.txt
  2. B. command > all_output.txt
  3. C. command &> all output.txt
  4. D. command > all_output.txt 2>&1

1.2

在 vi 中,删除一行的命令是 ==(B)==

  1. A. u
  2. B. dd
  3. C. x
  4. D. yy

解答:

u :撤销上一次操作
dd:剪切当前光标所在的行
x:删除当前光标所在处的字符
yy:复制当前行

1.3

已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为如下:

struct Node { 
	int data; //存储数据 
	struct Node* next; //指向下一个节点的指针 
}; 

p 是指向最后一个元素的尾指针,q 是一个临时指针。现要删除该链表的第一个元素,正确的语句序列是 ==(A)==

  1. A. q=h->next; h->next=q->next; if(p==q) p=h; free(q);
  2. B. q=h->next; h->next=q->next; if(p!=q) p=h; free(q);
  3. C. h->next=h->next->next; q=h->next; free(q);
  4. D. q=h->next; h->next=h->next->next; free(q);

1.4

有以下程序,求输出结果 ==(A)==

#include <stdio.h>

int fun(int num) {
    int cnt = 0;
    while (num) {
        cnt++;
        num = num & (num - 1);
    }
    return cnt;
}

int main() {
    printf("%d\n\r", fun(2022));
    return 0;
}
  1. A. 8
  2. B. 2022
  3. C. 10
  4. D. 6

解答:

函数 fun 的功能为计算一个整数的二进制表示中有多少个 12022 的二进制表示为 0111 1110 0110,一共有 8 个

1.5

以下代码的运行结果是:==(B)==

#include <stdio.h>

int main() {
    int flag = 2;
    flag ^= ~2; 
    printf("%d", flag);
    return 0;
}
  1. A. -2
  2. B. -1
  3. C. 2
  4. D. 4

解答:

flag 为 2,假设为 32 位,则用二进制表示为 0000 0000 0000 0000 0000 0000 0000 0010
~2 表示对 2 进行按位取反,结果为 1111 1111 1111 1111 1111 1111 1111 1101
flag~2 进行异或处理,结果为 1111 1111 1111 1111 1111 1111 1111 1111,在补码中等于 -1,选项 B 正确

1.6

【多选】请指出以下代码的问题,并选择描述正确的选项 ==(AD)==

//全局变量 
int gFlag = 0;

//线程1
void func1() { 
	// ...
	while(!gFlag); 
	// ...
} 

//线程2
void func2() { 
	// ...
	gFlag=1; 
	// ...
} 
  1. A. int gFlag=0 应该修改:volatile int gFlag=0;
  2. B. int gFlag=0 应该修改:volatile int gFlag=1;
  3. C. volatile 关键字告诉编译器,不要使用寄存器中的备份变量用于计算
  4. D. 这段代码有时候能正确运行,有时候不能正确的运行

解答:

由于全局变量 gFlag 在两个线程中同时被使用,为防止编译器优化造成错误,应该给变量增加 volatile 关键词修饰,必须在每次访问时从内存读取,但仅用一个全局变量作为两个线程间同步的机制,可能会出现问题

1.7

以下代码运行结果正确的是:==(A)==

#include <stdio.h>

int main() {
    int condition = 0;
    if (condition) {
        printf("苹果");
    } 
    if (!condition) {
        printf("香蕉");
    

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论

相关推荐

评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务