中科合迅 C++开发 一面(暑期)

1. 自我介绍

2. 你为什么做这个项目, 你跟XX是同学吗? 怎么感觉你俩的项目一样

3. classstruct 的区别

答案:在 C++ 里,classstruct 的核心能力几乎一样,都可以有构造函数、析构函数、继承、模板、虚函数。最常被问到的区别其实只有两个:默认访问权限和默认继承权限。struct 默认是 publicclass 默认是 private。所以如果只是把它们回答成“一个是类一个是结构体”,其实太浅了。更准确一点的说法是:在 C++ 里,struct 更偏数据组织,class 更偏抽象和封装,但这是代码风格上的习惯,不是语法能力差异。

代码:

#include <iostream>
using namespace std;

struct A {
    int x;
};

class B {
    int x;
public:
    B(int v) : x(v) {}
    int get() const { return x; }
};

int main() {
    A a{10};
    B b(20);
    cout << a.x << endl;
    cout << b.get() << endl;
    return 0;
}

4. 浅拷贝和深拷贝的区别

答案:浅拷贝只是把对象里的成员值原样复制一份,如果成员里有指针,那复制过去的还是同一块地址。这样两个对象就会共享同一块资源,析构时很容易重复释放。深拷贝则会重新申请资源,把原对象持有的数据真正复制过去,让两个对象彼此独立。这个问题本质上是在考资源所有权。如果类里管理了堆内存、文件句柄、socket 之类的资源,那么你就不能只依赖编译器默认生成的拷贝行为,要自己实现拷贝控制,或者直接禁掉拷贝、只支持移动。

代码:

#include <iostream>
#include <cstring>
using namespace std;

class Buffer {
public:
    Buffer(const char* s) {
        data = new char[strlen(s) + 1];
        strcpy(data, s);
    }

    Buffer(const Buffer& other) {
        data = new char[strlen(other.data) + 1];
        strcpy(data, other.data);
    }

    ~Buffer() {
        delete[] data;
    }

private:
    char* data;
};

5. const 的作用

答案:const 的本质是告诉编译器“这个对象或接口不应该被修改”,它既是语义约束,也是编译期检查手段。它可以修饰变量、指针、引用、成员函数、函数参数等。比如修饰成员函数时,表示这个函数不会修改对象的逻辑状态;修饰引用参数时,可以避免不必要的拷贝,同时约束函数内部不能修改传入对象。实际开发里,const 用得好不好,能直接反映出一个人的接口设计能力,因为它关系到可读性、可维护性和错误边界。

6. const 和引用的区别

答案:这两个东西经常一起出现,但含义完全不同。引用本质上是一个别名,它解决的是“怎么绑定一个已有对象”;const 解决的是“这个对象或接口能不能被修改”。所以 const int& 这种写法其实是两个概念叠在一起,一方面它是引用,避免拷贝;另一方面它是常量引用,承诺不修改绑定对象。另外,常量引用还能绑定右值,这也是很多函数参数喜欢写成 const T& 的原因之一。

代码:

#include <iostream>
using namespace std;

void func(const int& x) {
    cout << x << endl;
}

int main() {
    int a = 10;
    func(a);
    func(20);
    return 0;
}

7. Qt 了解多少,信号槽底层你怎么理解

答案:如果只是说“会写界面”,那这题基本没答到点上。Qt 更重要的地方在于它自己的对象模型、元对象系统、事件机制和跨平台封装。信号槽底层依赖 MOC 生成的元对象代码,类里声明了 Q_OBJECT 之后,Qt 能在运行时根据元信息完成信号和槽函数之间的连接。直接连接时,信号发出后槽函数会在当前线程同步调用;队列连接时,本质上是把调用包装成事件投递到目标线程事件循环里。所以信号槽不是简单的“回调语法糖”,它背后其实是对象系统、事件分发和线程模型一起工作的结果。

8. Redis 掌握到什么程度,为什么快

答案:如果面试官问这个,一般不是想听“我会 set/get”。比较合适的回答是:常用数据结构和典型使用场景比较熟,知道字符串、哈希、列表、集合、有序集合在底层的大致实现,也了解过过期删除、持久化、主从复制、哨兵和缓存穿透击穿雪崩这些问题。Redis 快

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

C++ 常考面试题总结 文章被收录于专栏

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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