虎牙C++ 一面

1、自我介绍

介绍了一下我自己啥情况,之前在哪个公司实习过,主要参与 C++ 后端相关开发工作。 实习期间我做过消息处理/服务端模块开发,参与了功能迭代、问题排查和一部分性能优化工作。 技术栈方面,我主要掌握 C/C++,熟悉 STL、Linux 开发环境、网络编程(TCP/IP)、多线程与并发编程,了解常用的数据结构与算法,也用过 MySQL、Redis 这类常见组件。 整体上我偏工程实践,比较关注代码质量、稳定性和性能,想在 C++ 后端方向继续深入。

2、单例模式和工厂模式的作用

单例模式:保证一个类全局只有一个实例,适合日志、配置中心、线程池这种“全局只要一个”的对象。 工厂模式:把对象创建过程封装起来,调用方不用关心具体创建哪个类,便于解耦和扩展。

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

class Product {
public:
    virtual ~Product() = default;
    virtual void run() = 0;
};

class ProductA : public Product {
public:
    void run() override { cout << "ProductA running\n"; }
};

class ProductB : public Product {
public:
    void run() override { cout << "ProductB running\n"; }
};

class Factory {
public:
    static unique_ptr<Product> create(int type) {
        if (type == 1) return make_unique<ProductA>();
        return make_unique<ProductB>();
    }
};

3、懒汉模式的实例化细节(C++98 和 C++11)

懒汉模式是第一次使用时才创建实例。 C++98 中局部静态变量初始化不是线程安全的,需要手动加锁。 C++11 开始函数内局部静态变量初始化是线程安全的,推荐这种写法。

C++98 写法(加锁版):

#include <pthread.h>

class Singleton98 {
private:
    Singleton98() {}
    Singleton98(const Singleton98&);
    Singleton98& operator=(const Singleton98&);
    static Singleton98* instance_;
    static pthread_mutex_t mutex_;

public:
    static Singleton98* getInstance() {
        pthread_mutex_lock(&mutex_);
        if (instance_ == 0) {
            instance_ = new Singleton98();
        }
        pthread_mutex_unlock(&mutex_);
        return instance_;
    }
};

Singleton98* Singleton98::instance_ = 0;
pthread_mutex_t Singleton98::mutex_ = PTHREAD_MUTEX_INITIALIZER;

C++11 推荐写法:

class Sing

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

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

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

全部评论

相关推荐

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

创作者周榜

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