立芯研发工程师(R&D)笔试 9-20
《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj
《嵌入式软件笔试-2023年真题汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm
综合知识单选题(2分)
1.下面文于“单例模式”错误的是()
A对于一些需要频繁创建和销的对象,单例模式可以提高系统的性能。
B它可以保证某个类在程序运行过程中最多只有一个实例,也就是对象实例只占用一份内存资源。
C使用单例,可以确保其它类只获取类的一份数据。
D由于单例模式中没有抽象层,因此单例很难进行类的扩展。
2.在 Linux中,使用什么命令来创建一个新的压缩归档文件()
A compress -tf
B gzip-t
C tar -cfz
D bzip2 -tbz
3.在支持多线程的系统中,隶属于同一个进程的多个线程不能共享的是()
A进程所打开的文件
B进程的代码段
C进程的全局变量
D保存函数参数、返回地址等信息的堆栈
4.进程从运行状态进入就绪状态的原因可能是()
A等待的事件已发生
B被选中占有处理机
C等待某一事件
D时间片用完
5.在Linux系统中,以下哪两个命令可以显示系统中运行的进程状态()
A ps和df
B ls和df
C ps和top
D df和top
6.耦合是影响软件复杂程度的一个非常重要的因素。进行软件程序设计时,耦合有一些基本原则需要遵循,遵循这些原则能够有助于设计出更加优秀的软件系统,下列选项中,关于这些原则描述错误的是()
A耦合是无法彻底避免的,在实际使用中,应该尽量使用数据耦合
B在实际使用中,要尽量多使用内容耦合,原因是内容耦合是较低程度的耦合
C尽量少使用控制合和特征耦合
D要尽量限制公共环境耦合的范围
C++基础2分
1.STL中的unordered_map和priority_queue使用的底层数据结构分别是什么()
A rbtree,heap
B rbtree,queue
C hashtable,heap
D hashtable,queue
2.C++11中有一个非常大的变化就是引入了三种智能指针,下列选项中,属于这三种智能指针正确组合的是()
A std::shared ptr、std:weak_ptr和std:unique ptr
B std:shared_ptr、std:stick_ptr和std::unique ptr
C std:shared_ptr、std:weak_ptr和std::future ptr
D std:set_ptr、std:weak_ptr和std::unique_ptr
3.下列哪个查找最快()
A二分查找
B 哈希表法(散列表)
C 顺序查找
D二叉排序树查找
4.下面C++程序的运行结果为()
#include <iostream> using namespace std; int solve(int x) { if (x == 0 || x == 1) { return x; } if (x % 2 == 0) { return 1 + solve(x / 2); } else { return 1 + solve((x + 1) / 2); } } int main() { int n = 100; int ans = solve(n); cout << ans << endl; return 0; }
A 8
B 6
C 7
D 9
5.归并排序相对于快速排序的优点不包括()
A空间复杂度低
B是稳定的
C最坏的情况更高效
D不会退化
6.栈的特点是先进后出。栈底至栈顶依次存放元素ABCD,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是()
A DBCEA
B DCBEA
C DEBCA
D DCAEB
7.在具有2n个结点的完全二叉树中,叶子结点个数为()
A n-1
B n
C n+1
D n/2
8.抽象基类是指()
A含有纯虚函数
B嵌套类
C派生类
D多继承类
9.有关广度优先搜索 (Breadth-first Search)和深度优先搜索 (Depth-first Search),以下说法中正确的是:()
A 在解决最短路径问顾时,Dikstra算法 (Dikstra's algorithm)本质上是一种考虑了边(Edge)的权重的深度优先搜索。
B广度优先搜索和深度优先搜索都可以用于遍历一棵树。
C在解决迷宫问题时,深度优先搜索总会比广度优先搜索更快地找到迷宫出口。
D广度优先搜索需要在搜索的每一层保存该层的所有结点,这一操作只能用队列这种数据结构来完成。
10.求一个数x的n次方最朴素的方式是在1的基础上乘n次x,如果用递归,显然会执行n次递归函数,时间复杂度为O(N)。不过可以通过对n的奇偶性判断来加大递归步长,每次可将范围减半,即如果n是偶数,那么x^n =x^(n/2)*x^(n/2),下面的函数是实现了这个过程的完整代码,它的时间复杂度为()
int pow(int x, unsigned int n) { if (n == e) return 1; if (n & 1) return pow(x, n/2)* pow(x,n / 2)*x; else return pow(x, n/ 2)* pow(x, n / 2); }
A O(N*log(N))
B O(logN)
C O(N)
D O(N^2)
11.已N有向图G=(VE).其V={a,b,e,d,e,r,g},
E={<a,b>,<a,c>,<a,d>,<b,e>,<c,e>,<c,f>,<d,f>,<e,g>,<f,g>}则图G的拓扑序列是()
A a,c,d,e,b,f,g
B a,c,d,t,b,e,g
C a,c,b,6,d,e,g
D a,b,e,c,d,f,g
12.C++中static类型的变量,默认的初始化值是()
A 1
B 0
C空格符
D随机变量
13.数组与链表的区别是()
A两者长度均固定
B前者长度固定,后者长度可变
C后者长度固定,前者长度可变
D两者长度均可变
14.
char a; int b; float c; double d;
则表达式a*b+d-c值的类型为()
A char
B float
C int
D double
简答10分
1.vevtor push_back的时间复杂度是多少?在已知 vector容量前提下,如何避免额外的开销,提升 vector push_back 性能?
通常情况下,push_back 的操作是常数时间复杂度(O(1))。这是因为 std::vector 通常预留一定的空间来存储额外的元素,所以大多数 push_back 操作只涉及将新元素放置在这个预留空间中。
当 vector 的容量已满时,进行 push_back 操作需要扩容,这涉及到分配新的更大的内存空间,并将所有现有元素复制(或移动)到新的内存地址。这个操作的时间复杂度是线性的(O(n)),因为它依赖于 vector 当前的元素数量。
使用 std::vector::reserve() 方法。这个方法允许你指定 vector 的容量,这
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。