嵌入式大厂面经 C++设计模式常考面试题(持续更新中!)

这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!

来源:牛客网C++中设计模式常见面试题

设计模式是软件开发中解决特定问题的经典方案,在C++面试中经常会被问到。以下是一些常见的C++设计模式面试题及其解答:

1. 单例模式 (Singleton Pattern)

基本概念

单例模式确保一个类只有一个实例,并提供一个全局访问点。

面试题:如何实现线程安全的单例模式?

// 懒汉式(线程安全,使用双检锁)
class Singleton {
private:
    static Singleton* instance;
    static std::mutex mutex_;
    
    // 私有构造函数
    Singleton() {}
    // 禁止拷贝和赋值
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
    
public:
    static Singleton* getInstance() {
        if (instance == nullptr) {  // 第一次检查
            std::lock_guard<std::mutex> lock(mutex_);
            if (instance == nullptr) {  // 第二次检查
                instance = new Singleton();
            }
        }
        return instance;
    }
};

// 静态成员初始化
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex_;

// 更现代的实现:Meyers' Singleton (C++11)
class Singleton {
private:
    Singleton() {}
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
    
public:
    static Singleton& getInstance() {
        static Singleton instance;  // C++11保证线程安全的初始化
        return instance;
    }
};

相关问题

  1. 单例模式有哪些实现方式?懒汉式:第一次使用时初始化饿汉式:程序启动时初始化Meyers' Singleton:利用C++11的静态局部变量初始化特性
  2. 单例模式的优缺点是什么?优点:控制实例数量,节省资源,提供全局访问点缺点:隐藏依赖关系,违反单一职责原则,不易测试

2. 工厂模式 (Factory Pattern)

基本概念

工厂模式提供一个创建对象的接口,让子类决定实例化哪个类。

面试题:实现一个简单工厂和工厂方法模式

// 产品基类
class Product {
public:
    virtual ~Product() {}
    virtual void operation() = 0;
};

// 具体产品A
class ConcreteProductA : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductA operation" << std::endl;
    }
};

// 具体产品B
class ConcreteProductB : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductB operation" << std::endl;
    }
};

// 简单工厂
class SimpleFactory {
public:
    static Product* createProduct(const std::string& type) {
        if (type == "A") {
            return new ConcreteProductA();
        } else if (type == "B") {
            return new ConcreteProductB();
        }
        return nullptr;
    }
};

// 工厂方法模式 - 工厂基类
class Factory {
public:
    virtual ~Factory() {}
    virtual Product* createProduct() = 0;
};

// 具体工厂A
class ConcreteFactoryA : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductA();
    }
};

// 具体工厂B
class ConcreteFactoryB : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductB();
    }
};

相关问题

  1. 简单工厂、工厂方法和抽象工厂的区别是什么?简单工厂:一个工厂创建不同产品工厂方法:不同工厂创建不同产品,但每个工厂只创建一种产品抽象工厂:不同工厂创建不同产品族
  2. 工厂模式的优缺点是什么?优点:封装创建逻辑,降低耦合,符合开闭原则缺点:增加系统复杂度,需要引入更多类

3. 观察者模式 (Observer Pattern)

基本概念

观察者模式定义了对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知。

面试题:实现一个观察者模式

// 观察者接口
class Observer {
public:
    virtual ~Observer() {}
    virtual void update(const std::string& message) = 0;
};

// 具体观察者
class ConcreteObserver : public Observer {
private:
    std::string name_;
    
public:
    ConcreteObserver(const std::string& name) : name_(name) {}
    
    void update(const std::string& message) override {
        std::cout << name_ << " received: " << message << std::endl;
    }
};

// 主题接口
class Subject {
public:
    virtual ~Subject() {}
    virtual void attach(Observer* observer) = 0;
    virtual void detach(Observer* observer) = 0;
    virtual void notify(const std::string& message) = 0;
};

// 具体主题
class ConcreteSubject : public Subject {
private:
    std::vector<Observer*> observers_;
    
public:
    void attach(Observer* observer) override {
        observers_.push_back(observer);
    }
    
    void detach(Observer* observer) override {
        auto it = std::find(observers_.begin(), observers_.end(), observer);
        if (it != observers_.end()) {
            observers_.erase(it);
        }
    }
    
    void notify(const std::string& message) override {
        for (auto observer : observers_) {
            observer->update(message);
        }
    }
};

相关问题

  1. 观察者模式与发布-订阅模式的区别是什么?观察者模式:观察者直接订阅主题,主题直接通知观察者发布-订阅模式:发布者和订阅者之间有一个中间层(事件通道)
  2. 观察者模式的应用场景有哪些?GUI事件处理消息通知系统数据变化监听

4. 装饰器模式 (Decorator Pattern)

基本概念

装饰器模式动态地给对象添加额外的职责,比继承更灵活。

面试题:实现一个装饰器模式

// 组件接口
class Component {
public:
    virtual ~Component() {}
    virtual void operation() = 0;
};

// 具体组件
class ConcreteComponent : public Component {
public:
    void operation() override {
        std::cout << "ConcreteComponent operation" << std::endl;
    }
};

// 装饰器基类
class Decorator : public Component {
protected:
    Component* component_;
    
public:
    Decorator(Component* component) : component_(component) {}
    
    void operation() override {
        if (component_) {
            component_->operation();
        }
    }
};

// 具体装饰器A
class ConcreteDecoratorA : public Decorator {
public:
    ConcreteDecoratorA(Component* component) : Decorator(component) {}
    
    void operation() override {
        Decorator::operation();
        addedBehavior();
    }
    
private:
    void addedBehavior() {
        std::cout 

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

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

思特威AI芯片工程师一面面经思特威——面经timeline岗:数字ic目前进度:正式offer除了迪✌🏻的唯一一个offer😭感谢老思。秋招期间在牛客看了很多面经贴,快成老家了,发个面经贴攒攒人品。笔试:8.23常见八股加一道智力题,原来貌似倒计时一个小时但是计时结束也不会强制提交,现在同门反馈是会强制提交了。一面:技术面&nbsp;9.5&nbsp;30min总体来说氛围比较轻松,结合项目询问低功耗处理方法和异步处理方法,让讲了个异步fifo,会询问代码量之类的。二面:部门主管面&nbsp;9.21&nbsp;30-40min探讨了我项目中所负责的模块的实际应用场景(可能相比起技术细节会更偏向于对IP应用的思考)我的项目多是数模结合的模块,因此也追问了数模结合项目对于个人求职中的优势。整体下来更多是在询问在项目中担任的角色和对自己项目模块高层次的掌握程度。反问问了面试官身份,工作内容和项目中的重难点三面:hr面10.11&nbsp;45min(没想到是最久的)谈了下入职之后的培训,公司发展情况和业务情况,以及可能的薪资待遇,照常询问了一下现有的offer和等待的机会。反问环节确认了一下自己的排序情况。第二天oc,过几天收到了offer使用内推码简历优先筛选,有任何问题包括进度查询可以私信我,内推后在评论区留言【姓名缩写+岗位】,方便捞人和确认投递状态思特威电子科技2025春招今日启动【公司介绍】思特威(上海)电子科技股份有限公司是一家从事CMOS图像传感器芯片产品研发、设计和销售的高新技术企业,总部设立于中国上海,在多个城市及国家设有研发中心 【春招岗位】技术(算法、AI工程师、测试、开发等)、销售(芯片销售)、运营(资源工程师、生产管培生)、职能(行政、合规)等 【工作地点】上海、深圳、昆山 【面向人群】25届海内外毕业生【薪酬待遇】丰富的薪酬结构,行业领先的薪酬回报、上海快速落户、丰富的员工福利、完善的应届生培养体系内推链接:https://app.mokahr.com/m/campus_apply/smartsenstech1/56088?recommendCode=DS6Y4M6c&amp;amp;amp;hash=%23%2Fjobs#/jobs内推码:DS6Y4M6c(简历优先筛选,后续有疑问或者流程问题欢迎随时联系) 使用内推码简历优先筛选,有任何问题包括进度查询可以私信我,内推后在评论区留言【姓名缩写+岗位】,方便捞人和确认投递状态 #春招#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#内推#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#内推码#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#秋招#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#思特威#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#简历中的项目经历要怎么写#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
点赞 评论 收藏
分享
思特威AI芯片工程师一面面经思特威——面经timeline岗:数字ic目前进度:正式offer除了迪✌🏻的唯一一个offer😭感谢老思。秋招期间在牛客看了很多面经贴,快成老家了,发个面经贴攒攒人品。笔试:8.23常见八股加一道智力题,原来貌似倒计时一个小时但是计时结束也不会强制提交,现在同门反馈是会强制提交了。一面:技术面&nbsp;9.5&nbsp;30min总体来说氛围比较轻松,结合项目询问低功耗处理方法和异步处理方法,让讲了个异步fifo,会询问代码量之类的。二面:部门主管面&nbsp;9.21&nbsp;30-40min探讨了我项目中所负责的模块的实际应用场景(可能相比起技术细节会更偏向于对IP应用的思考)我的项目多是数模结合的模块,因此也追问了数模结合项目对于个人求职中的优势。整体下来更多是在询问在项目中担任的角色和对自己项目模块高层次的掌握程度。反问问了面试官身份,工作内容和项目中的重难点三面:hr面10.11&nbsp;45min(没想到是最久的)谈了下入职之后的培训,公司发展情况和业务情况,以及可能的薪资待遇,照常询问了一下现有的offer和等待的机会。反问环节确认了一下自己的排序情况。第二天oc,过几天收到了offer使用内推码简历优先筛选,有任何问题包括进度查询可以私信我,内推后在评论区留言【姓名缩写+岗位】,方便捞人和确认投递状态思特威电子科技2025春招今日启动【公司介绍】思特威(上海)电子科技股份有限公司是一家从事CMOS图像传感器芯片产品研发、设计和销售的高新技术企业,总部设立于中国上海,在多个城市及国家设有研发中心 【春招岗位】技术(算法、AI工程师、测试、开发等)、销售(芯片销售)、运营(资源工程师、生产管培生)、职能(行政、合规)等 【工作地点】上海、深圳、昆山 【面向人群】25届海内外毕业生【薪酬待遇】丰富的薪酬结构,行业领先的薪酬回报、上海快速落户、丰富的员工福利、完善的应届生培养体系内推链接:https://app.mokahr.com/m/campus_apply/smartsenstech1/56088?recommendCode=DS6Y4M6c&amp;amp;amp;hash=%23%2Fjobs#/jobs内推码:DS6Y4M6c(简历优先筛选,后续有疑问或者流程问题欢迎随时联系) 使用内推码简历优先筛选,有任何问题包括进度查询可以私信我,内推后在评论区留言【姓名缩写+岗位】,方便捞人和确认投递状态 #春招#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#内推#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#内推码#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#秋招#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#思特威#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#简历中的项目经历要怎么写#&nbsp;&nbsp;&nbsp;
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务