蔚来 - 嵌入式软件 - 笔试
❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗
本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。
岗位:校招-嵌入式软件工程师
题型:20 道单选题 ,10 道不定项选择题 ,3 道编程题
1、单选题
1.1
下面程序的运行结果为 ==(D)==
#include<stdio.h>
int main()
{
int sum=0,count=0;
do
{
count++;
if(count%2 == 0)
continue;
sum += count;
}while(count<10);
printf("%d\n",sum);
return 0;
}
- A. 45
- B. 30
- C. 55
- D. 25
解答:
1 + 3 + 5 + 7 + 9 = 25
1.2
下面程序的运行结果为 ==(A)==
#include <stdio.h>
#include <string.h>
struct STU
{
char name[20];
int age;
};
int main()
{
struct STU A, B;
A.age = 20;
strcpy(A.name, "张三");
B.age = 19;
strcpy(B.name, "小红\08");
A = B;
printf("%s %d", A.name, A.age);
return 0;
}
- A.
小红 19
- B.
小红\08 19
- C.
语法错误,非法的赋值
- D.
张三 20
解答:
A=B
意味着A.name = "小红\08"
,A.age = 19
通过%s
输出 "小红\08" ,遇到\0
结束符停止,则只会输出 "小红"
1.3
下图是 UML 中的什么图 ==(D)==
- A. 活动图
- B. 时序图
- C. 类图
- D. 用例图
1.4
现有如下 C++ 代码片段,请问 auto 将会被推导为什么类型 ==(B)==
int y = 9;
auto* p1= &y;
- A. int* 类型
- B. int 类型
- C. auto* 类型
- D. auto 类型
解答:
y 为 int 类型
&y 表示取 y 的地址
p1 应该为 int* 类型
auto 被自动推导为 int 类型
1.5
关于面向对象编程以下说法正确的是 ==(B)==
- A. 面向对象编程是无状态的
- B. 多态是指不同事物具有不同表现形式的能力
- C. 数据封装、继承和唯一性是面向对象的三大特点
- D. 面向对象编程不属于命令式编程
解答:
面向对象有状态
封装、继承和多态是 OOP 的三大特点
面向对象属于命令式编程
1.6
下列关于 STL 容器说法正确的是 ==(A)==
- A.
std:vector
可以动态扩容 - B.
std:queue
可以通过下标访问任意其中一个元素 - C.
std:array
可以动态扩容 - D.
std:queue
是双向队列 - E.
std:set
重载了[]
运算符
解答:
向量可以动态扩容
队列不可以通过下标访问任意其中一个元素,而数组可以
数组不可以动态扩容,一旦定义好,长度就固定了
queue
是队列,deque
是双向队列
set
重载了某些运算符(<
,>
和==
),但没有重载+
、-
和[]
运算符
1.7
在 C++ 中,以下程序输出正确的 ==(B)==
#include <iostream>
class Base {
public:
Base() { std::cout << "P"; }
~Base() { std::cout << "p"; }
};
class Sub : public Base {
public:
Sub() { std::cout << "S"; }
~Sub() { std::cout << "s"; }
private:
Base b;
};
int main() {
Sub s;
return 0;
}
- A. SPPpps
- B. PPSspp
- C. SPPspp
- D. PPSpps
解答:
执行 Sub s; 后按顺序发生如下事件
- 调用基类构造函数,输出 P
- 创建成员变量 b,由于其是基类,因此再次调用基类构造函数,输出 P
- 调用派生类构造函数,输出 S
执行 return 0; 程序退出后按顺序发生如下事件
- 调用派生类析构函数,输出 s
- 析构成员变量 b,由于其是基类,因此调用基类析构函数,输出 p
- 调用基类析构函数,输出 p
最终输出结果为 PPSspp
1.8
如下面所示的程序,定义了联合体变量,则该联合体所占用的内存空间为多少字节 ==(D)==
#include <stdio.h>
union MyUnion
{
char c;
short n;
int m;
}u[3];
int main() {
printf("%d\n", sizeof(u));
return 0;
}
- A. 21
- B. 18
- C. 24
- D. 12
解答:
联合体最大成员变量
m
占 4 字节,最大成员变量类型int
占 4 字节
因此联合体占 4 字节
由于定义了包含三个该联合体的数组,因此sizeof(u)
应该等于 12
1.9
C++ 中一个重要的思想就是面向对象,而类就是实现面向对象的媒介,以下哪种情况,C++ 里面的类需要添加一个虚析构函数?==(C)==
- A. 该类仅需要继承其他类
- B. 该类仅是模板类
- C. 该类仅设计被继承
- D. 该类仅是匿名空间里的类
- E. 该类仅需要运算符重载
解答:
模板类、匿名空间和运算符重载与虚析构函数无关
当该类仅设计被继承时,意味着该类为基类,需要添加一个虚析构函数来保证派生类对象被正确释放
1.10
在 C++ 中,类的定义如下,对 Sub 进行 sizeof 计算,得到的结果 ==(C)==
class Base
{
public:
int a;
char b;
};
class Sub : public Base
{
public:
char c;
};
- A. 10
- B. 8
- C. 12
- D. 6
解答:
与结构体计算占内存字节大小类似
基类中变量a
对齐数为 4 ,b
对齐数为 1 ,最大对齐数为 4 ,因此基类内存为 8 字节 派生类中变量c
对齐数为 1 ,最大对齐数继承基类的为 4 ,因此派生类内存为 4 字节sizeof(派生类) = 8 + 4 = 12
1.11
以下 C++ 代码运行,会发生什么?==(D)==
#include<iostream>
using namespace std;
void fun(char* &p)
{
p = (char *)malloc(sizeof(char)*10);
}
int main()
{
for(int i = 0;i < 1000000000; i++)
{
char *p = NULL;
fun(p);
free(p);
}
return 0;
}
- A. 内存泄漏
- B. 野指针异常
- C. 栈溢出
- D. 编译正确,运行正常,运行时间长也不会产生问题
- E. 编译正确,运行直接报错
解答:
不断的从堆中申请 10 字节内存,然后释放,重复 1000000000 次
不会造成内存泄漏,也没有野指针出现,栈更不会溢出,编译也没有问题
可以正常运行,但是运行时间会很长
1.12
下面关于设计模式相关的说法错误的是 ==(C)==
- A. 行为型模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装
- B. 设计模式主要包括三大类:创建型模式、结构型模式、行为型模式
- C. 结构型模式提供了一种在创建对象的同时隐藏创建逻辑的方式
- D. 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结
1.13
分析以下 C++ 代码可能存在什么问题?==(B)==
#include<iostream>
using namespace std;
class Test {
private:
int m_value;
public:
Test(int n){
m_value = n;
}
Test(Test &other){
m_value = other.m_value;
}
void Print() {
std::cout << m_value << std::endl;
}
};
int main()
{
Test a = 1;
Test b = a;
b.Print();
return 0;
}
- A. 编译运行正常,输出 10
- B. 编译错误,
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。