虎牙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++工程能力.
查看11道真题和解析