龙旗科技 - 驱动开发工程师 技术面
1. 请简单介绍一下你自己和你的技术背景
参考答案:(开放性问题,候选人应包含:教育背景、工作/项目经验、技术栈、个人优势等。面试官关注:表达能力、技术广度、与岗位匹配度)
2. 指针和引用在底层实现上有什么区别?引用的本质是什么?
参考答案:指针和引用在使用上有明显差异,底层实现也不同:
- 指针: 是一个变量,存储内存地址可以为空(nullptr),可以重新赋值指向其他对象需要解引用操作符(*)访问值占用独立的内存空间(4或8字节)
- 引用: 是对象的别名,必须在声明时初始化不能为空,不能重新绑定到其他对象直接使用,无需解引用底层实现:编译器通常用指针实现,但语义上是别名
- 引用的值可以修改: 引用本身不能重新绑定,但引用的对象内容可以修改int& ref = a; ref = 10; // 修改a的值,而非重新绑定
- 使用场景: 函数参数传递:引用避免拷贝且语法简洁返回值:引用可实现链式调用指针用于可选参数、动态内存、数据结构
3. const关键字有哪些用法?const修饰指针有几种情况?
参考答案:const表示常量,防止数据被修改:
- 基本用法: 修饰变量:const int a = 10; 不可修改修饰函数参数:void func(const int& x) 防止函数内修改修饰成员函数:int getValue() const 承诺不修改成员变量修饰返回值:const int* getPtr() 返回的内容不可修改
- 指针的四种情况:记忆技巧:const在左边修饰数据,在右边修饰指针本身
- 编译期优化:const变量可能被编译器优化为立即数
- 与#define区别:const有类型检查,有作用域,可调试
4. 描述一下你做过的项目,重点说明你负责的模块和技术难点
参考答案:(开放性问题,面试官应关注:项目规模、技术复杂度、个人贡献、问题解决能力、驱动相关经验。候选人应准备:项目背景、技术架构、核心功能、遇到的问题、解决方案、项目成果)
5. 手写快速排序算法,并说明其时间复杂度
参考答案:
#include <iostream>
using namespace std;
void quickSort(int arr[], int left, int right) {
if (left >= right) return;
int pivot = arr[left]; // 选择基准元素
int i = left, j = right;
while (i < j) {
// 从右向左找小于pivot的元素
while (i < j && arr[j] >= pivot) j--;
if (i < j) arr[i++] = arr[j];
// 从左向右找大于pivot的元素
while (i < j && arr[i] <= pivot) i++;
if (i < j) arr[j--] = arr[i];
}
arr[i] = pivot; // 放置基准元素
quickSort(arr, left, i - 1); // 递归排序左半部分
quickSort(arr, i + 1, right); // 递归排序右半部分
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
- 时间复杂度: 平均:O(n log n)最好:O(n log n)最坏:O(n²) - 数组已排序时
- 空间复杂度:O(log n) - 递归栈
- 优化:三数取中选择pivot、小数组用插入排序
6. 二叉树和链表有什么区别?如何实现单链表的反转?
参考答案:二叉树和链表都是链式存储结构,但组织方式不同:
- 链表:线性结构,每个节点最多一个后继
- 二叉树:树形结构,每个节点最多两个子节点
- 应用场景:链表用于顺序访问,二叉树用于层次关系和快速查找
单链表反转实现:
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 迭代法
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr) {
ListNode* nextTemp = curr->ne
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++八股文全集 文章被收录于专栏
本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。
查看10道真题和解析