2023.10.13—9:20-9:40
-
实习项目是如何模拟吞吐量变化的
-
epoll、select 区别,epoll 效率一定比 select 高吗
监听的 socket 比较少或者很多短连接情况下 select 一次扫描效率并不低,另外使用 epoll_wait 之后还需要使用 epoll_ctl,涉及两次系统调用?
参考:
-
C++ 析构函数为什么一般写成虚函数
-
C++ 右值引用了解吗
-
反问:面试流程(两轮线上技术面+一轮线下HR面)、具体业务
2023.11.1 — 10:25-10:45
-
项目或者实习中遇到困难
-
IO 复用如何实现的,如果回调函数参数个数不同应该如何设计
使用可变参模板:
// 定义一个接受可变参数的回调函数 template <typename... Args> void VariableArgsCallback(const std::string& message, Args... args) { std::cout << "Message: " << message << std::endl; std::cout << "Arguments: "; (std::cout << ... << args); // 使用折叠表达式输出参数 std::cout << std::endl; } // 使用 std::bind 绑定可变参数的回调函数 auto callback = std::bind(VariableArgsCallback<int, double, const char*>, "Hello", 42, 3.14, "World"); // 使用 std::function 包装回调 std::function<void()> functionCallback = callback; // 调用回调 functionCallback();
-
CLOSE_WAIT 状态过多如何解决
主要是由于服务端这边代码逻辑出现问题导致的,一般服务器编码逻辑为:
- 创建服务端 socket,bind 绑定端口、listen 监听端口
- 将服务端 socket 注册到 epoll
- epoll_wait 等待连接到来,连接到来时,调用 accpet 获取已连接的 socket
- 将已连接的 socket 注册到 epoll**(如果没有注册时间,导致后续收到 FIN 报文是无法感知的,进而无法调用 close**
- epoll_wait 等待事件发生
- 对方连接关闭时,我方调用 close
-
两个线程同时访问同一个队列:一个读、一个写,如何设计
先写完元素再 end_ptr ++
2023.11.09 9:00-9:30, 加面
-
说一个体现你设计能力的项目
-
protobuf 了解多少
-
做过哪些性能调休的工作:负载均衡、数据缓存
-
如何做到缓存一致性...
读一致性:读一致性是指在缓存中读取数据时,确保获取的是最新的数据,而不是过期的旧数据。为了实现读一致性,可以考虑以下策略:
- 缓存失效策略: 设置合理的缓存失效时间,确保缓存中的数据在一定时间内是最新的。这样可以在缓存过期后重新从数据库中获取最新数据。
- 主动刷新缓存: 定期或在数据库数据发生变化时,主动刷新缓存。可以使用定时任务或在数据变更时触发缓存的更新。
- 使用订阅/发布模式: 利用Redis的订阅/发布功能,当数据库数据发生变化时,发布一个消息通知订阅者更新缓存。
写一致性:写一致性是指在进行数据库写操作时,保证缓存与数据库的数据一致。确保缓存中的数据与数据库同步有助于避免脏数据的产生。
- 更新缓存: 在数据库进行写操作时,及时更新缓存。这可以通过在写操作完成后,立即将相应的数据写入或更新到缓存中。
- 使用事务: 如果写操作涉及多个步骤,可以使用事务来确保这些步骤要么全部成功,要么全部失败。在事务完成后,再更新缓存。
- 失效缓存: 在进行写操作时,使相关缓存失效,以确保下一次读取时从数据库中获取最新数据。
-
项目中使用了哪些设计模式,单例模式需要注意什么
-
工厂模式和抽象工厂区别
- 工厂模式关注单个产品的创建,每个具体工厂类负责创建一类产品
- 抽象工厂模式关注一组相关产品的创建,每个具体工厂类负责创建一组相关产品
-
和别人观点不一致的场景...
-
读过哪些 C++ 书籍
2023.11.13 8:40-9:20 上海线下面试
- 无领导,提升幸福感的措施,12选4,给公司提出三个意见
2023.11.02 — 9:00-9:30
-
其他具体忘了...
-
Lambda 表达式什么时候使用,为什么不自定义函数指针那些
-
二叉树镜像翻转口撕,完全二叉树和普通二叉树影响吗
不影响的,参考 LCR 144. 翻转二叉树
-
未来考虑工作选择?
2023.11.21 线下终面拒了... 太麻烦了
2023.11.15 11:00-11:20
- 半结构面试,自我介绍
- 实习经理细问
- 交易系统了解多少
- 需要实习:两个可选时间段 11.17-12.30 或者 1.3-3.4
3个人半结构面试,每个人大概 10min
2023.11.21 — 14:20-14:40
- 自我介绍
- 实习项目:考虑解码以及丢帧了吗、有多用户分布式的场景吗、预研项目
- C++ 和 Java 区别:
- 内存管理方面:C++ 智能指针、Java JVM 新生代老年代等
- 跨平台方面:C++ API 不同、Java 通过 JVM 翻译字节码
- 网络编程方面:C++ socket bind accept、Java Springboot 框架
2023.11.29 — 14:30-14:50
- 自我介绍,实习项目具体介绍
- 个人职业选择方面
- 手头 offer 情况
一周左右出结果,12.01 电话OC
2023.12.07 — 10:00 - 10:15
- HR:手头那些offer,工作地这块是如何选择的
- 面试官1:虚函数和纯虚函数
- 面试官2:如果 Java 偏多对你的选择有什么影响吗
- 面试官2:多态使用场景,结合自己的实际开发
- 面试官2:二叉树的遍历方式