嵌入式大厂面经 C++中STL常见面试题(持续更新中!)

这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!

C++中STL常见面试题

STL (Standard Template Library) 是C++标准库的重要组成部分,在面试中经常会被问到。以下是一些常见的STL相关面试题及其解答:

1. STL的基本组成部分

STL主要由六大组件组成:

  • 容器(Containers):存储数据的数据结构
  • 算法(Algorithms):操作容器中数据的方法
  • 迭代器(Iterators):连接算法和容器的桥梁
  • 函数对象(Functors):可以像函数一样被调用的对象
  • 适配器(Adapters):修改其他组件接口的组件
  • 分配器(Allocators):负责空间配置与管理

2. 常见容器及其特点

顺序容器

  • vector:动态数组,支持随机访问,在尾部插入/删除元素效率高
  • list:双向链表,支持双向顺序访问,在任何位置插入/删除效率都很高
  • deque:双端队列,支持随机访问,在两端插入/删除效率高

关联容器

  • set/multiset:基于红黑树实现的有序集合,set中元素唯一,multiset允许重复
  • map/multimap:基于红黑树实现的键值对集合,map中键唯一,multimap允许重复键

无序容器(C++11)

  • unordered_set/unordered_multiset:基于哈希表实现的无序集合
  • unordered_map/unordered_multimap:基于哈希表实现的无序键值对集合

3. vector与list的区别

内存布局

连续存储

非连续存储(节点)

随机访问

支持O(1)

不支持

插入/删除

尾部O(1),中间O(n)

任何位置都是O(1)

迭代器失效

插入可能导致所有迭代器失效

只有被删除的元素的迭代器失效

4. map与unordered_map的区别

实现方式

红黑树

哈希表

元素顺序

按键排序

无序

查找复杂度

O(log n)

平均O(1),最坏O(n)

插入复杂度

O(log n)

平均O(1),最坏O(n)

内存消耗

较少

较多

5. STL迭代器种类

  • 输入迭代器:只读,单向,一次性遍历
  • 输出迭代器:只写,单向,一次性遍历
  • 前向迭代器:可读写,单向,多次遍历
  • 双向迭代器:可读写,双向,多次遍历
  • 随机访问迭代器:可读写,双向,多次遍历,支持随机访问

6. vector的内存管理

// vector扩容机制示例
vector<int> v;
cout << "初始容量: " << v.capacity() << endl;
for(int i = 0; i < 10; 

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

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

03-21 20:25
门头沟学院 Java
#腾讯求职进展汇总# 二面项目占了一大半手撕LRU,我没写完被叫停了,我是写的力扣那一版的答案,面试官说太复杂了,用一个哈希表保存时间戳,每一个去对比一下就可以了。那我只能说好的好的。1、拷打项目2、怎么保存缓存一致性(延迟双删)3、如果删除失败了呢(投入到消息队列里保证删除,缓存本身还可以设置过期时间)&nbsp;&nbsp;&nbsp;&nbsp;考虑两个问题:&nbsp;&nbsp;&nbsp;&nbsp;一.如果第一次删除了的同时有大量线程进来读该数据怎么办?会不会打到数据库?(加分布式锁,面完了才发现这好像是个缓存穿透的场景,所以方法应该还有挺多的)&nbsp;&nbsp;&nbsp;&nbsp;二,如果第一次删除失败了,大量请求来读,那是不是读到的是脏数据,如果是应该怎么解决?(是,但是我不知道怎&nbsp;&nbsp;&nbsp;么解决,删除失败可以投入消息队列保证成功。追问:那你读到的还是脏数据?)说白了就是问我强一致性怎么实现,但是我确实不会,后来我查了一下,感觉旁路缓存下好像很难做到强一致性,要用到分布式事务?或者raft?或者双写?甚至读写锁?&nbsp;&nbsp;&nbsp;&nbsp;上面这个问题拉扯了几分钟,最后我投降了。4、MySQL用的什么引擎?和其他引擎有什么区别?5、你怎么在SQL中实现乐观锁的(CAS版本号的方法)6、为什么要把分布式锁改成消息队列?改了为什么还要保留旧版本?(消息队列可以实现解耦,但比redis分布式锁复杂,简单对比了一下)7、你觉得你的技术水平怎么样?你学习能力怎么样?(开吹,技术虽然依托,但是学习能力还可以)反问:你觉得我的项目还可以怎么改?(活用LUA,虽然没说具体怎么解决问题,但是抛了个LUA给我)体验:别看问得少,搞了40多分钟,最后面试官看不出来什么心情好不好的,只能说从周一泡到周五周五早上起来如厕的时候突然收到三面,我一看,当天下午,当时就虚了。
查看9道真题和解析 腾讯求职进展汇总
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务