中科合迅 软件开发-C++ 一面
1、类和 struct 的区别
答案:在 C++ 里,class 和 struct 本质上都可以定义成员变量、成员函数、构造函数、析构函数、继承关系,语法能力基本一致。最核心的区别只有两个:
第一,默认访问权限不同。class 默认是 private,struct 默认是 public。
第二,默认继承权限不同。class 默认私有继承,struct 默认公有继承。
所以从语言能力上说,两者差别不大,更多是代码风格和语义习惯不同。通常把偏数据聚合、对外开放字段较多的类型写成 struct,把需要封装和约束访问控制的类型写成 class。
代码:
#include <iostream>
using namespace std;
struct A {
int x; // 默认 public
void print() {
cout << x << endl;
}
};
class B {
int x; // 默认 private
public:
B(int v) : x(v) {}
void print() {
cout << x << endl;
}
};
int main() {
A a{10};
a.print();
B b(20);
b.print();
}
2、struct 和 union 的区别
答案:struct 的每个成员都有自己独立的存储空间,一个对象里所有成员可以同时存在。union 的所有成员共用同一块内存,同一时刻通常只适合使用其中一个成员,修改一个成员往往会覆盖另一个成员的内容。
所以 struct 更像是把多个字段组合起来描述一个对象,union 更像是同一份内存的多种解释方式。union 常见在协议解析、底层内存布局控制、节省空间的场景里使用,但用的时候要特别注意当前活跃成员到底是谁。
代码:
#include <iostream>
using namespace std;
struct S {
int a;
char b;
};
union U {
int a;
char b;
};
int main() {
cout << sizeof(S) << endl;
cout << sizeof(U) << endl;
U u;
u.a = 0x12345678;
cout << hex << u.b << endl;
}
3、C++11 常用新特性有哪些
答案:C++11 比较常用的内容主要有这些:auto、范围 for、右值引用、移动语义、完美转发、nullptr、lambda 表达式、smart pointer、thread、mutex、原子类型、constexpr、override/final、统一初始化和 unordered_map 等。
如果放到工程里,使用频率最高的一般还是几类:一类是语言层面的 auto、nullptr、范围 for、lambda,能明显改善代码可读性;一类是资源管理相关的 unique_ptr、shared_ptr、移动语义,能减少手写内存管理错误;还有一类是并发编程支持,比如线程库、互斥锁、条件变量、原子操作。
代码:
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
int main() {
vector<int> nums = {1, 2, 3, 4};
for (auto x : nums) {
cout << x << " ";
}
cout << endl;
auto p = make_unique<int>(42);
cout << *p << endl;
auto f = [](int a, int b) { return a + b; };
cout << f(3, 4) << endl;
}
4、介绍一下你做过的项目架构
答案:我做过一个 基于 C++17 / ASIO / protobuf / LevelDB 的分布式配置中心客户端。这个项目的目标是给多个业务模块提供统一的配置拉取、版本管理和本地缓存能力,支持动态更新和故障回退。
整体架构分成四层。最底层是网络通信层,负责和配置服务端保持长连接,接收配置变更事件;上面一层是协议编解码层,负责 protobuf 消息解析和版本校验;再往上是配置管理层,负责
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.
查看9道真题和解析