博世-智能座舱-软件开发工程师-xc一面
全程中文问答。
一小时,四五个没答出来,所以应该挂了。#牛客AI配图神器#
提问包括但不限于:
1. new/malloc区别? 答,**但是new重载这一块模糊**。
2. 说说智能指针? 共享指针引用计数、独占指针删除copy 构造/赋值运算符,weak_ptr 解决循环引用。常规的答的还行。
3. vector,删除指定值的元素(例如5和6)。 考这个原因是迭代器失效?
4. 问了gdb的指令,比如准备用gdb,gcc加什么选项,-O3和-g可以一起使用吗? 如何查看线程?如何判断xx文件可以用gdb调试呢?大部分没答出来。
5. 实现单例,但是被问懵了,问我析构函数为什么是私有? 于是我又把它改成公有,本质还是不知所以然。查了一下gpt,回答
"
在 get() 方法中,使用了静态局部变量(static Singleton instance;),
C++ 规定:
• 静态局部变量在程序退出时会自动析构,因此不需要显式释放。
• C++11 以后,静态局部变量的初始化是线程安全的,不会引起并发问题。
所以,我们不需要提供手动的析构方式。
"
6. 深拷贝/浅拷贝。
7. 你认为拿得出手的模块实现?然后扣细节,最后也被扣懵了。
```
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 5, 6, 5, 7, 6};
int pos = 0;
int n = vec.size();
for (; pos < n;) {
if (vec[pos] == 5 || vec[pos] == 6) {
vec.erase(vec.begin() + pos);
n = vec.size();
}
else {
pos ++;
}
}
for (auto value : vec) {
cout << value << ' ';
}
}
```
```
class Singleton {
public:
static Singleton& get() {
static Singleton instance;
return instance;
}
int getValue() {
return value;
}
void setValue(int value_) {
value = value_;
}
private:
Singleton() = default;
~Singleton() = default;
int value;
};
int main() {
Singleton::get().setValue(42);
std::println("value={}", Singleton::get().getValue());
}
```
参考
1. https://en.wikipedia.org/wiki/Singleton_pattern
2. https://en.cppreference.com/w/cpp/language/storage_duration
3. https://stackoverflow.com/questions/15235526/the-static-keyword-and-its-various-uses-in-c
一小时,四五个没答出来,所以应该挂了。#牛客AI配图神器#
提问包括但不限于:
1. new/malloc区别? 答,**但是new重载这一块模糊**。
2. 说说智能指针? 共享指针引用计数、独占指针删除copy 构造/赋值运算符,weak_ptr 解决循环引用。常规的答的还行。
3. vector,删除指定值的元素(例如5和6)。 考这个原因是迭代器失效?
4. 问了gdb的指令,比如准备用gdb,gcc加什么选项,-O3和-g可以一起使用吗? 如何查看线程?如何判断xx文件可以用gdb调试呢?大部分没答出来。
5. 实现单例,但是被问懵了,问我析构函数为什么是私有? 于是我又把它改成公有,本质还是不知所以然。查了一下gpt,回答
"
在 get() 方法中,使用了静态局部变量(static Singleton instance;),
C++ 规定:
• 静态局部变量在程序退出时会自动析构,因此不需要显式释放。
• C++11 以后,静态局部变量的初始化是线程安全的,不会引起并发问题。
所以,我们不需要提供手动的析构方式。
"
6. 深拷贝/浅拷贝。
7. 你认为拿得出手的模块实现?然后扣细节,最后也被扣懵了。
```
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 5, 6, 5, 7, 6};
int pos = 0;
int n = vec.size();
for (; pos < n;) {
if (vec[pos] == 5 || vec[pos] == 6) {
vec.erase(vec.begin() + pos);
n = vec.size();
}
else {
pos ++;
}
}
for (auto value : vec) {
cout << value << ' ';
}
}
```
```
class Singleton {
public:
static Singleton& get() {
static Singleton instance;
return instance;
}
int getValue() {
return value;
}
void setValue(int value_) {
value = value_;
}
private:
Singleton() = default;
~Singleton() = default;
int value;
};
int main() {
Singleton::get().setValue(42);
std::println("value={}", Singleton::get().getValue());
}
```
参考
1. https://en.wikipedia.org/wiki/Singleton_pattern
2. https://en.cppreference.com/w/cpp/language/storage_duration
3. https://stackoverflow.com/questions/15235526/the-static-keyword-and-its-various-uses-in-c
全部评论
我也是这个岗位,也是最近面的
mark了感觉问的还行没有特别拷打的感觉
查了一下,vector删除那个最优雅的方式是用 erase + remove_if: " vec.erase(remove_if(vec.begin(), vec.end(), [](int x) {
return x == 5 || x == 6;
}), vec.end());
"
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
点赞 评论 收藏
分享