中科合迅 软件开发-C++ 一面

1、类和 struct 的区别

答案:在 C++ 里,classstruct 本质上都可以定义成员变量、成员函数、构造函数、析构函数、继承关系,语法能力基本一致。最核心的区别只有两个:

第一,默认访问权限不同。class 默认是 privatestruct 默认是 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、structunion 的区别

答案: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、右值引用、移动语义、完美转发、nullptrlambda 表达式、smart pointerthreadmutex、原子类型、constexproverride/final、统一初始化和 unordered_map 等。

如果放到工程里,使用频率最高的一般还是几类:一类是语言层面的 autonullptr、范围 forlambda,能明显改善代码可读性;一类是资源管理相关的 unique_ptrshared_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++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

牛客44320985...:你的当务之急是把这个糖的要死的沟槽ide主题改了
点赞 评论 收藏
分享
03-11 20:19
已编辑
门头沟学院 Java
太压力了,面了2个多小时,本菜比已经被拷打的瑟瑟发抖面完两个小时后通知过了1.算法题三道(1)leetcode124&nbsp;二叉树中最大路径和hard题&nbsp;因为不久前才刷过撕出来了,又来了一道(2)leetcode&nbsp;300&nbsp;最长递增子序列变种除了递增之外还加了一个权重因素,但是思路没变,dp就行(3)寻找词汇库里符合固定长度前缀的匹配单词应该是他们自己题库的题。给了一串单词列表,然后又给了一个单词,一个下标,根据这个下标的前缀去单词列表里面找到所有匹配的单词再返回思路是创建一个单词前缀树,然后根据树找,但是可能是构件树数有问题没撕出来2.全方位项目拷打基本没有问八股,全部都是项目企业场景题,哎哟我操,完全不会。我就纯八股战士,结果没想到一道八股都没问反正尽可能把企业场景往八股上引吧。。1.&nbsp;微服务多点部署其中一个宕机了怎么办2.&nbsp;要是mq占据大量CPU该怎么排查?MySQL占据大量CPU该怎么排查?3.&nbsp;假如说让你实现视频点赞功能,你打算怎么设计?讲讲思路(我知道多级缓存,但是碰巧没背……寄)4.&nbsp;Redis延迟双删是什么,分布式锁,哨兵模式5.&nbsp;MySQL到es同步的延迟该怎么优化6.&nbsp;Rabbit&nbsp;mq的队列是怎么实现的?(这个完全没整明白,可能是队列的底层结构?&nbsp;反正我硬扯的讲了一下rabbit&nbsp;mq的架构)还扯了很多,但是往后完全就慌了),记住的是这些
不知道怎么取名字_:2小时确实有压力,持续性的脑力劳动啊
查看9道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务