东软 C++开发
1. 自我介绍
2. 实习经历介绍
3. 上一段实习离开的原因
4. 能接受英文技术文档或者跨语言协作吗
答案:可以。真正开发里不一定每天都要口语沟通很多,但看英文文档、接口说明、issue、标准库资料、系统调用手册这件事是绕不开的。如果团队里有跨语言协作需求,我更关注的是技术信息能不能准确传递,比如接口约定、错误码、日志定位方式、部署说明这些。技术沟通很多时候不靠“说得多流利”,而是靠表达是否准确、结构是否清楚。如果遇到不熟悉的术语,我会优先查官方文档和上下文,而不是只靠机械翻译。
5. 介绍下校园经历 有没有竞赛
6. 如何实现一个在线平台的整体架构
7. 如介绍一下这个在线平台的数据流转过程
答案:我会从一条设备状态上报开始讲。数据先进入接入服务,经过协议校验和字段标准化后放进内部消息队列,规则计算模块会根据设备类型和规则模板做实时判断,如果触发异常就进入告警链路,同时原始事件会异步写入日志存储和时序数据存储。上层页面查实时状态时优先走缓存和聚合结果,查历史轨迹或者异常记录时再走落盘数据。这样设计的核心是把“实时展示”“告警触发”“历史追溯”三条路径拆开,不让其中一个慢路径把另两个拖死。
8. 你的日志项目里用到了什么设计模式
答案:日志系统里比较常见的几个设计模式我都能落到具体实现上。比如单例模式常用于全局日志管理器,工厂模式常用于根据配置创建不同 sink,策略模式适合切换同步写、异步写、按大小切分、按时间切分等策略,观察者模式适合把日志事件同步给监控或告警模块。如果继续往工程里讲,真正重要的不是背模式定义,而是知道什么时候该抽象、什么时候不该过度设计。日志系统如果为了套模式把简单链路搞得太重,反而会影响性能和可维护性。
9. 工厂模式在你的项目里是怎么用的
答案:工厂模式最适合用在“创建逻辑复杂,且对象种类会扩展”的地方。比如日志系统里,不同环境可能对应控制台输出、文件输出、网络投递、按模块分文件这些不同的 sink,如果业务代码里到处 new,不仅依赖散,而且切换配置很麻烦。更合理的方式是由工厂根据配置项统一创建具体对象,外部只依赖抽象接口。这样后面新增一种输出方式,不需要把调用方全改一遍。
代码:
#include <memory>
#include <string>
using namespace std;
class LogSink {
public:
virtual void write(const string& msg) = 0;
virtual ~LogSink() = default;
};
class FileSink : public LogSink {
public:
void write(const string& msg) override {
// 写文件
}
};
class ConsoleSink : public LogSink {
public:
void write(const string& msg) override {
// 输出控制台
}
};
class SinkFactory {
public:
static unique_ptr<LogSink> create(const string& type) {
if (type == "file") return make_unique<FileSink>();
if (type == "console") return make_unique<ConsoleSink>();
ret
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.
