字节跳动 | C++ 工程师| 面经汇总|2020.11
23103
2020.11.03
2020.11.07
发布于 广东

image.png

语言

  • const 关键字的使用场景
  • static 关键字的使用场景
  • explict 关键字的使用场景
  • volatile 关键字的使用场景
  • 什么是多态
  • 虚函数的实现原理
  • 构造函数可以是虚函数吗
  • 析构函数可以是虚函数吗,应用场景
  • 智能指针有哪些,实现原理以及用法
  • 什么是模板特化
  • new 和 malloc 区别
  • C++ 内存空间布局
  • 如何限制对象只能在堆上创建
  • 如何限制对象只能在栈上创建
  • 如何让类不能被继承
  • 什么是单例模式,工厂模式
  • C++ auto 类型推导的原理
  • 泛型编程如何实现的
  • 指针和引用的区别

计算机网络

  • 三次握手和四次挥手
  • TIME_CLOSE 和 TIME_WAIT 的状态和意义
  • TCP 如何保证可靠传输
  • 流量控制和拥塞控制
  • CRC 循环校验的算法
  • 如何使用 UDP 实现可靠传输
  • 为什么不能是两次握手
  • SYN FLOOD 是什么
  • HTTPs 和 HTTP 的区别
  • HTTPS 的原理,客户端为什么信任第三方证书
  • HTTP 方法了解哪些
  • HTTP 异常状态码知道哪些
  • HTTP 长连接短连接使用场景是什么
  • Arp 攻击
  • NAT 原理
  • DNS 服务器与提供内容的服务器的区别
  • 怎么实现 DNS 劫持
  • 对称加密和非对称的区别,非对称加密有哪些
  • AES 的过程
  • 安全攻击有哪些
  • DDOS 有哪些,如何防范

数据结构

  • vector 底层实现
  • 如何控制 vector 的内存分配
  • map, hashmap 底层实现
  • map 的 key 如果是结构体需要注意什么问题
  • hash冲突如何解决

数据库

  • mysql 索引
  • B 和 B+ 区别
  • Redis 的数据结构
  • Redis持久化
  • AOF 重写
  • 一致性 Hash
  • Redis 集群哈希槽
  • Redis 集群高可用
  • Redis KEY 过期策略
  • 数据库注入的过程,如何防范

操作系统

  • 进程和线程的区别
  • 进程间的通讯方式
  • 进程切换的上下文细节
  • 线程切换的上下文细节
  • CPU 的最小调度单位
  • 多线程同步、多进程通信方式
  • 操作系统的栈和堆的区别
  • 用户态和内核态的区别
  • 用户态和内核态切换的代价
  • fork 的过程
  • 内存置换算法
  • 什么是虚拟内存,作用
  • Select,poll,epoll的区别
  • epoll 的 LT 和 ET 的区别
  • 什么情况下会发生缺页中断,具体流程
  • 如何判断逻辑地址是否已经映射在物理地址上了
  • 页表所在的位置
  • 环形缓冲区的好处
  • 动态链接和静态链接
  • 怎么查看端口号占用情况

算法

其他

  • rebase 和 merge 用法(git)
  • 为了 B 站视频加载更快,可以怎么做
评论 (15)