贝施美医疗 软件开发-C++ 一面

1. 自我介绍

2. 你在上一段实习待了很久,为什么没有选择转正,后来又为什么离开

3. WebSocket 和 HTTP 有什么区别

答案:HTTP 本质上是一个请求-响应模型,客户端发起请求,服务端返回响应,通信通常是由客户端驱动的。WebSocket 则是在最开始通过一次 HTTP Upgrade 握手之后,把连接升级成一个全双工、长连接的通信通道。建立完成后,客户端和服务端都可以主动发消息,不需要每次都重新建立请求。如果从应用场景看,HTTP 更适合普通接口调用、页面资源获取、REST 风格服务;WebSocket 更适合实时性要求高的场景,比如聊天室、推送、行情、协同编辑、在线对战。如果从性能角度看,WebSocket 在长连接场景下能减少重复握手和头部开销,但它对连接管理、心跳、超时回收、背压控制要求更高。至于 WebSocketpp,它是一个 C++ 的 WebSocket 库,本质上是帮你实现协议处理和连接管理,不是和 HTTP 对立的另一个“协议层级”。

4. 如果要自己写一个 WebSocket 服务端,除了握手之外还要注意什么

真正写 WebSocket 服务端时,除了 Upgrade 握手,后面还要关注连接生命周期管理,比如心跳保活、断线重连、连接超时、半开连接检测、异常关闭处理。另外协议层还要处理帧格式、分片、掩码、ping/pong、关闭帧。再往工程里走,还要考虑消息积压、慢连接、单连接发送队列过长、广播场景下的写扩散、线程模型怎么设计,是 Reactor 单线程还是网络线程加业务线程池。如果服务端是高并发场景,通常不会只关心“能不能收发消息”,而是更关心一台机器能抗多少连接、消息延迟抖动如何、故障时能不能快速摘除异常连接。

5. set 和 map 有什么特点,底层一般是什么

答案:setmap 都是关联式容器,标准实现里底层通常是红黑树。set 只存 key,key 本身就是值,并且元素天然有序且唯一。map 存的是 key-value,按照 key 有序,key 也是唯一的。它们的查找、插入、删除复杂度通常是 O(logn),优势是有序性和比较稳定的复杂度表现。如果要做范围查找、前驱后继、按序遍历,set/map 很方便。如果只是追求平均意义下更快的查找,一般会考虑 unordered_set/unordered_map,底层通常是哈希表。工程里很多人一上来就想用哈希表,但如果需求里带“有序”“区间”“上界下界查找”,树结构容器更合适。

代码:

#include <iostream>
#include <map>
#include <set>
using namespace std;

int main() {
    set<int> s = {3, 1, 2, 2};
    for (auto x : s) cout << x << " ";
    cout << endl;

    map<string, int> mp;
    mp["alice"] = 90;
    mp["bob"] = 95;

    for (auto& [k, v] : mp) {
        cout << k << ": " << v << endl;
    }
    return 0;
}

6. unordered_map 和 map 在使用上怎么选

如果业务只关心根据 key 快速查 value,不关心顺序,也不做范围查询,unordered_map 往往更自然,平均复杂度是 O(1)。如果要按 key 有序遍历、做 lower_bound / upper_bound、维护一个稳定的顺序视图,那就该选 map。另外还要看数据规模和访问模式。unordered_map 虽然平均快,但哈希冲突严重时会退化,而且 rehash 会带来抖动;map 的复杂度更稳定,但节点分配和指针跳转带来的常数开销更高。

7. HTTPS 为什么更安全

HTTPS 可以理解成“HTTP over TLS”。它比 HTTP 更安全,不是因为 HTTP 协议本身变了,而是因为在 HTTP 下面多了一层 TLS,把传输过程中的安全性补上了。TLS 主要解决三类问题:第一是加密,避免明文传输被窃听;第二是完整性校验,避免中间人篡改内容;第三是身份认证,通过证书验证服务端身份,降低被冒充的风险。真正建立连接时,TLS 握手会协商加密套件、完成密钥交换,然后后续数据都用会话密钥加密传输。所以 HTTPS 的关键字不是“加密一下这么简单”,而是“证书 + 密钥协商 + 对称加密传输 + 完整性保护”。

8. TLS 握手大致流程是什么样的

简化来说,客户端先发起握手请求,带上自己支持的协议版本、随机数、密码套件等信息。服务端返回自己的证书、随机数和协商好的加密参数。客户端验证证书是否合法,确认服务端身份没有问题之后,再参与密钥协商,最终双方生成一致的会话密钥。后续真正传输业务数据时,通常用的是效率

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

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

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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