芯原股份 - 嵌入式软件工程师 - 笔试
❗❗如果本文对您有帮助,请不要吝啬您的评论、点赞、收藏与小花,这对我非常重要!谢谢!❗❗
本文所涉及的题目均为基于个人学习和理解重新表述的内容,仅供学习交流之用,不代表任何实际考试题目。如有雷同,纯属巧合。
岗位:嵌入式软件工程师(成都)
题型:2 道企业知识题,5 道智力题,10 道 C/C++ 单选题(英语),10 道计算机科学及应用单选题(英语),总分 100 分,考试时间 60 分钟
1、企业知识题
1.1
芯原商业模式 SiPaaS 中第二个 S 指的是?==(C)==
- Solution
- Silicon
- Service
- Series
1.2
芯原的企业文化是?==(B)==
- 公正、友爱、分享、快乐
- 公正、关爱、分享、快乐
- 诚信、关爱、分享、快乐
- 平等、关爱、分享、快乐
2、智力题
2.1
把下面的六个图形分为两类,使每一类图形都有各自的共同特征或规律,分类正确的一项是:==(A)==
- ①②④,③⑤⑥
- ①②⑤,③④⑥
- ①②⑥,③④⑤
- ①④⑤,②③⑥
2.2
根据规律,括号中的数字应为:3,16,45,96,==(B)==,288
- 145
- 175
- 195
- 105
2.3
左边给定的是纸盒外表面的展开图,右边哪一项能由它折叠而成?==(B)==
- B
- C
- D
- A
2.4
某种品牌的汽车轮胎,如果安装在前轮,那么行驶 300km 后报废;如果安装在后轮,那么行驶 450km后报废。如果行驶一定路程后交换前后轮胎,请问四只新轮胎最多可用来行驶多少km?==(C)==
- 320
- 340
- 360
- 300
2.5
一位酒商有 6 桶葡萄酒和啤酒,容量分别为 30 升、32 升、36 升、38 升、40 升、62 升。其中五桶装着葡萄酒,一桶装着啤酒。第一位顾客买走了两桶葡萄酒;第二位顾客所买葡萄酒则是第一位顾客的两倍。请问,哪一个桶里装着啤酒?==(D)==
- 36 升的桶
- 38 升的桶
- 40 升的桶
- 62 升的桶
- 32 升的桶
- 30 升的桶
3、C/C++(英语)
3.1
Suppose running on Linux, which one is the correct output of following code ==(C)==
#include <stdio.h>
void test1(void) {
char* my_array = "abc";
my_array[1] = '+';
printf("my array is %s ", my_array);
}
void test2(void) {
char my_array[] = "abc";
my_array[1] = '-';
printf("my array is %s ", my_array);
}
int main(int argc, char** argv) {
test2();
test1();
return 0;
}
my array is a+b
my array is a-b
my array is a-b
my array is abc
my array is a-c
Segmentation fault(core dump)
my array is a-b
my array is a+b
解答:
test1()
中定义了一个my_array
指针,且该指针指向了"abc"
字符串常量,当尝试修改字串常量的值时会产生段错误
test2()
中定义了一个my_array
字符数组,可以正常修改数组中某个元素的值,不会产生错误
3.2
Which one is the correct output of following code ==(B)==
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned int a = 100;
signed int b = -100;
signed int c, d;
c = a / b; // 这里会导致未定义行为
d = b / a;
printf("%d, %d\n", c, d);
return 0;
}
- 0, -1
- 0, 42949671
- -1, 42949671
- -1, -1
解答:
a
是无符号整型数,b
是有符号整型数,当尝试a / b
的运算时,b
会产生隐式类型转换,转换为无符号整数(4294967196
),因此c
应该为100/4294967196=0
同理,当尝试b / a
的运算时,b
仍然会产生隐式类型转换,因此d
应该为4294967196/100=42949671
3.3
Which one is the correct output of following code ==(C)==
#include <stdio.h>
static int FIX_HEAD = 6;
int main(int argc, char *argv[]) {
char array[] = "hello verisilicon";
int offset = sizeof(array);
#ifdef FIX_HEAD
offset = FIX_HEAD;
#endif
printf("%s\r\n", array + offset);
return 0;
}
- verisilicon
- hello veris
- messed code
- ello verisilicon
解答:
#ifdef FIX_HEAD
用来判断是否存在FIX_HEAD
宏定义,由于static int FIX_HEAD = 6;
只是定义了一个变量,而非宏定义,因此虽然同名,但仍然不满足#ifdef FIX_HEAD
条件,所以offset
值为sizeof(array)
array
为字符串首地址,sizeof(array)
为字符串在内存中占用的字节数(包括结束符\0
),因此最终输出结果应该为字符串后的值,也即乱码值
3.4
What's the output of following code ==(A)==
#include <iostream>
int f(int);
using namespace std;
int main() {
int a = 2, i;
for (i = 0; i < 3; i++) {
cout << f(a) << " ";
}
cout << endl;
return 0;
}
int f(int a) {
int b = 0;
static int c = 3;
b++;
c++;
return (a + b + c);
}
- 7 8 9
- 7 10 13
- 7 9 11
- 7 7 7
解答:
首先应该明确的是:
a
和b
为普通变量,c
则为静态变量,依次按顺序执行了三次f(2)
第一次执行f(a)
函数执行到return (a + b + c);
语句时:a=2
,b=1
,c=4
,输出7
第二次:a=2
,b=1
,c=5
,输出8
第三次:a=2
,b=1
,c=6
,输出9
3.5
What is the output of the following program on a 64-bits machine? ==(B)==
#include <iostream>
using namespace std;
class A {
public:
int a;
static int b;
char c;
double d;
virtual int add(int x, int y) { return x + y; }
};
int main() {
cout << sizeof(A) << endl;
return 0;
}
- 21
- 24
- 32
- 16
解答:
静态成员变量
b
在类的对象中不占用内存,存在虚函数的类会包含一个虚函数指针,指针在 64 位机器上占用 8 个字节内存
在 64 位机器上默认进行 8 字节对齐,剩下的成员变量a
、c
和d
在内存中分布为:a
(4字节)+c
(1字节)+ 填充(3字节)+d
(8字节)= 16字节,综上共24
字节
3.6
What's the output of following code ==(B)==
#include <stdio.h>
#include <stdint.h>
uint32_t a = 10;
void func(uint32_t **out) {
*out = &a;
a = 20;
}
int main(void) {
uint32_t *out = 0;
func(&out);
printf("%u\r\n", *out);
return 0;
}
- 10
- 20
- 无法运行
- 0
解答:
out
为uint32_t
类型的指针,func
函数将指针out
的地址作为形参传入,在函数体内修改指针指向的值为全局变量a
,同时又修改全局变量a
的值为 20,因此最终输出的是a
的值 20
3.7
Running the follow
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。