Fork me on GitHub

面经总结

字节跳动-C++后台开发

一面

  • 自我介绍
  • 针对项目提问:
    • rockdb原理,了解哪些
    • LSM Tree的适用于什么场景
    • 解释了一下项目针对rocksdb做了什么研究
    • 问了一下遇到的问题可能是由什么原因引起的
    • redis数据结构
    • redis中有序集合是用什么实现的,讲了跳表
    • 跳表插入或查询的时间复杂度
    • redis为什么这么快
    • 问了mysql内部实现原理
    • 问关系型数据库与KV数据库各自的优缺点
  • 开始问基本知识,操统和网络:
    • TCP滑动窗口
    • TCP四次挥手中有一个timewait,什么时候会进入timewait
    • 进程间通信
    • 类的内存模型,new了一个对象后,内存空间是怎么样的
    • 虚函数如何实现
    • 虚函数表存放在哪里
  • 1道编程题:
    • 反转链表中从m到n的部分

阿里云块存储

阿里云块存储一面

  • 自我介绍
  • 项目相关:
    • 发现了什么问题?打算怎么解决?
    • 有没有关注过数据库其他方面导致的性能问题?
    • 为什么要选这个课题?
    • 使用什么工具?该工具其他功能?
    • CPU cache了解吗
    • 说说缓存一致性
  • 操作系统:
    • 进程线程的区别
    • 进程同步,方法及原理
    • 线程同步
    • 锁,及原理
    • 如何用互斥锁实现读写锁
    • 协程
    • 线程切换开销,具体有哪些
  • C/C++:
    • 关键字
    • static作用,static变量以及static函数的作用
    • 虚函数,作用及原理
    • 队列和栈,如何用队列实现栈
    • 哈希和map
  • 编程题:
    • 一个有序数组从中间分成两段,将后一段移到数组前面,查找某数在数组中的位置。

腾讯TEG 云平台架构

  • 介绍背景和项目
  • 针对项目提问(34min)
  • 基础知识:
    • static
    • C++比较新的特性用过吗
    • 多态,虚函数实现原理
    • 继承关系中的构造析构顺序
    • 什么是IO多路复用
    • 七层模型
  • 算法题:
    • 寻找普通二叉树中的两个节点的最近公共父节点。

腾讯TEG 云平台架构 一面

  • 自我介绍
  • 项目
  • 自定义的一个类如果要在map里面使用需要实现什么函数
    • 为什么不是operator<=
  • 头文件使用尖括号和双引号的区别
  • 继承和模板有什么区别,分别适用于什么场景
  • 内存泄漏,C++如何避免内存泄漏
    • RAII
  • linux 网络抓包命令,查看所有tcp连接的命令
  • 什么是堆,讲一下堆排序,总的时间复杂度,建堆的时间复杂度
  • 快排的时间复杂度,最坏情况复杂度,如何优化最坏情况?(partition的时候有没有什么技巧)
  • 插入排序的时间复杂度,在数组接近有序的时候的时间复杂度
  • B和B+树的区别
  • LSM树
  • send()函数返回成功了数据包一定被发送出去了吗
  • 什么时候TIME_WAIT,有什么意义
  • 哈希冲突,解决方法
  • 缓存淘汰策略
  • redis持久化方式
    • rdb方式如何防止持久化过程阻塞掉网络请求
  • fork函数
  • 编程:
    • 实现一个存放自定义类Student的List
    • 一个字符串数字,删除k个数字得到能表示的最小数字

腾讯TEG 云平台架构 二面

  • 自我介绍
  • redis内存模型 如何存储key?
  • extern C
  • static
    • static成员函数可以通过对象访问吗
  • 虚函数底层原理
  • 构造析构虚函数
  • vector底层
    • 扩容、缩容
  • map、unordered map
  • linux 内核哪个版本
  • 目录 用户目录 etc proc dev
  • 三次握手
    • 第三次ack丢失的时候客户端和服务器怎么处理
  • 慢启动、拥塞避免
  • 浏览器输入url
  • get 和 post的区别
  • 进程线程
  • 进程间通信
  • 协程
    • 为什么切换开销比线程小?