虾皮 高性能后端 面经

timeline:

  • 09-02 投递
  • 09-10 笔试
  • 09-27 一面
  • 10-13 二面

一面

1h

  1. 自我介绍
  2. 实习拷打
  3. 项目拷打
  4. 面向对象三大特性
  5. 虚函数,基类和子类的默认参数不同,会发生什么
  6. 菱形继承怎么解决
  7. new 和 malloc 的区别
  8. placement new
  9. 构造函数有什么缺点吗
  10. 异常的性能开销是什么,如果是并发场景呢
  11. 用 memcpy 拷贝对象有什么要注意的吗
  12. 多线程修改同一个指针是安全的吗,修改指针指向的对象呢
  13. 用过 STL 里哪些东西
  14. vector 和 list 一般用在什么场景
  15. 缓存行大小一般是多少
  16. 访存具体过程
  17. 怎么保证缓存一致性,怎么做淘汰
  18. 伪共享场景优化
  19. 了解过哪些解决哈希冲突的方法
  20. mongodb 中怎么做的(打家劫舍)
  21. 常用的 Linux 指令有哪些
  22. 用过 awk 吗
  23. IO 多路复用,多路是指什么(fd),复用的是什么(同一个线程)
  24. 了解 io_uring 吗(减少了系统调用次数)
  25. 用过哪些网络框架
  26. 线程和协程的区别
  27. 多线程同步有哪些方式
  28. mutex 可以拷贝吗(不行)
  29. atomic 可以拷贝吗(不行)
  30. 单线程获取锁会陷入系统调用吗(有 fast path)
  31. 硬链接和软链接的区别
  32. 手撕:LRUCache
    • 多线程优化方案
  33. 无反问

二面

1h

  1. 自我介绍
  2. 实习拷打
  3. 熟悉 C++ 哪个版本
  4. 讲讲 C++20 的特性
  5. C++20 的协程和其他语言的协程有什么区别(无栈协程,切换开销低)
  6. 项目拷打
  7. 设计一个序列化格式,有整数、浮点数、字符串三种字段
    • 顺序存每个字段的类型+数据,注意转换成大端序
  8. 如果字段要支持随机访问呢
    • 包头存每个字段的类型和偏移,解包先解析包头
  9. 设计一个哈希表的序列化方式,要求能直接 mmap 访问哈希表
    • 文件头:存储总的元数据
    • 桶数组:存储每个键值对的元数据
    • 数据区:连续存储所有键值对
  10. 详细的序列化步骤
    • 确定桶数量,填充文件头
    • 按顺序写入每个键值对写到数据区,根据哈希值找到桶(开放寻址处理冲突)
    • 将键值对在数据区的偏移和大小写入对应的桶
    • 注意所有数据按设计对齐
  11. 设计一个分布式 KV 存储方案
    • 请求路由、哈希分片、主从同步、热点缓存
  12. 手撕:合并两个有序链表
  13. 手撕:合并 N 个有序链表
  14. 反问
    • 工作内容:特征存储
    • 技术栈:C++17

强度大概975,但是对应届不太友好,很不稳

全部评论

相关推荐

10-24 01:06
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

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