首页 > 秋招cpp面试总结(百度,字节,阿里等)
头像
西天聆雪
编辑于 2021-08-18 16:07
+ 关注

秋招cpp面试总结(百度,字节,阿里等)

秋招快接近尾声了,就剩下个别公司还在流程中,特地把之前参加的面试总结一下跟大家分享。
我的个人项目是一个raft实现,一个照着Muduo写的服务器,一个实验室项目。有一段字节实习。

6-22 tplink 一面

  • 自我介绍
  • 项目相关
    • 实习
    • 实验室项目
      • 简单介绍这个项目原理
      • 项目的难点是什么
    • web服务器
      • 如何实现高性能高并发
      • 从后台架构角度如何实现
  • 如何让三个线程顺序并且循环打印
    • 用到多少个条件变量
  • 析构函数在哪些场景下会被调用
  • strcpy和memcpy的区别
  • memcpy和memmove的区别
  • 介绍一下MAC地址
    • 如何循环打印出一家厂商的所有MAC地址
  • 百万个数找最大的100个
  • 死锁是什么
  • 怎么在编程中避免死锁

7-13 百度 一面

  • 自我介绍
  • 项目相关
    • raft服务器数目选择
    • TCP网络服务器具体的工作
      • 有哪些优化
      • epoll性能好的原因
  • C++11的特性
    • 右值和右值引用的作用
    • nullptr解决什么问题
      • std::nullptr_t类型的(constexpr)变量。 它可以转换成任何指针类型和bool布尔类型
      • 提高类型安全性,解决不明确的情况
    • 智能指针
    • lambda表达式
    • 范围for循环
    • bind
    • auto decltype
  • 实现shared_ptr
  • 介绍reactor模式

7-15 百度二面

  • 项目相关

    • 实习相关
    • 实验室项目
    • tcp服务器
      • 做了什么工作
      • 非阻塞IO和阻塞IO的区别
      • 为什么IO多路复用要配合非阻塞IO
      • 为什么要用多线程(充分利用多核CPU)
      • 如何在多个线程之间分配连接的
      • 一个连接一个线程有什么缺点
      • 有什么后续改进措施
  • 什么是多态

  • 虚函数怎么实现的

  • RTTI是什么

  • C++多线程使用过

  • stl容器使用过哪些

    • 哪些容器内存分配在栈上
    • 容器全是支持动态增长的吗
  • 内部命令外部命令

  • linux如何设置环境变量

  • 终端中启动一个程序发生了什么

    • 怎么创建进程的
    • fork返回值是什么
    • elf执行的具体步骤

7-16 smartX一面

  • 对于存储的理解
  • cat xx.txt命令的底层实现,详细步骤
  • 看过linux kernel io方面的代码
  • CPU如何进行虚实地址转换
  • 虚实地址转换需要访问多少次内存
  • 项目相关
    • 项目里的TCP高性能多线程服务器事做什么的
    • 阻塞和非阻塞IO的区别
    • 最多能建立多少个连接
    • 如何处理线程间同步互斥
    • 条件变量怎么用的
    • 介绍一下raft leader选举
    • 如果raft实现kv数据库,怎么实现一个put操作的
      • 什么时候返回put操作的结果
      • 如果提交状态机执行的时候出错怎么处理
  • 各种不同的锁什么场景使用
    • 互斥锁有什么缺点
    • 互斥锁和自旋锁有什么区别
    • 自旋锁是怎么实现的
      • cpu是如何支持的,CAS还有什么
  • 进程crash怎么调试的
    • gdb什么命令查看堆栈信息
      • bt是怎么实现的
    • 函数调用的时候栈的变化情况
      • 函数返回怎么得到返回地址
  • C++ move干什么的
    • 什么是右值引用
      • 右值的好处是什么
  • lambda表达式什么
  • 代码题:钢琴1-7七个键,手只能按连续的5个键,给定一个按键顺序,求最少需要几次手(手放上去也算一次)。例如 1 3 5 7,需要移动2次。

7-20 smartX二面

  • 有没有一面没有回答好的能重新回答的
  • read读文件的具体步骤
  • 线程切换代价主要来自于哪里
  • 使用锁来互斥会影响cache里面的数据吗
  • cache一致性协议介绍一下
  • 为什么要用虚拟内存
  • 虚拟内存的代价是什么
  • 为什么有些应用禁用磁盘,只使用内存也会用虚拟内存
  • 两个进程使用共享内存来通信时,能够使用锁来互斥吗
  • 如果多个线程请求自旋锁,会不会出现所有cpu都在请求锁而死机
  • 会不会所有的核都在无限循环导致系统崩溃
  • 互斥锁和自旋锁,为什么还需要自旋锁这种代价高的锁
  • 什么场合会用自旋锁,什么场合用普通锁
  • 项目相关
    • 如果两个核一个在读在写,如果保证读取数据的准确
    • 主从Reactor是什么
    • poll epoll的区别

7-22 京东初试

  • 聊项目

7-23 字节一面

  • 自我介绍
  • 项目相关
    • 介绍raft leader选举的原理
    • candidate平票会发生什么情况
    • raft应用在什么场景
  • 实习相关
    • 有些模块性能不高,如何判断并解决
    • 用到了cache吗,为什么要用cache
  • 三个盒子的问题
  • 智能指针
  • 介绍一下进程和线程的区别
  • linux如何查看进程和线程占用的cpu
  • 线程间同步互斥的方法
  • linux下锁的实现
  • 共享内存是什么
  • 为什么说共享内存高效
  • shared_ptr和unique_ptr的区别
  • unique_ptr如何将所有权转移
  • 虚函数如何实现的
  • 虚函数表的内容具体是什么
  • dynamic_cast和static_cast的区别
  • map和unorder_map的区别
    • hash解决冲突的方法
  • 用过线程池吗,如何管理线程池
    • 线程用完了之后会发生什么情况
  • 如何设计一个不重复id的生成方法
  • 代码题
    • 输出数字序列的全排列
    • 输出数字序列的第k个排列,复杂度要尽量低

7-23 字节二面

  • 自我介绍
  • 有什么个人爱好
  • raft
    • 简短介绍raft的核心
    • 介绍一下日志处理的过程
    • 如何保证各个节点的日志与leader相同
    • leader如何判断一个日志可以提交
    • 如何避免孤岛现象的
    • 如果向leader提交大量请求,如何保证处理高效
  • 阻塞IO/非阻塞IO
  • 如果有虚函数的基类和派生类的应用里,把基类虚函数的参数类型不小心改了,应用运行的时候会发生什么事情
  • 如何避免这种情况发生
  • 一个骰子摇到1就停止,没有摇到1就把摇到的数字改为1,继续摇,求摇到1的期望
  • 代码题
    • 柱状图的最大矩形面积
    • 包含0或1的矩形中最大的只含有1的矩形面积
    • 二叉树层次遍历,第一层从左往右输出,第二层从左往右,第三层从右往左。
  • 系统设计
    • 设计一个框架,业务方需要提供一个id和配置文件,这个框架需要负责解析配置文件,根据配置文件中的op的依赖关系,调用不同的op来通过Id计算出最后的信息。

7-24 阿里一面

  • 项目介绍
    • 介绍下实验室的方向和项目
    • 高性能服务器
      • 和传统的io复用这些有什么创新吗
      • 参考了现成的库吗
      • 跟现成库的效率有比较吗
      • 依赖一些线程的库吗
      • 介绍一下实现细节
      • 如果处理过程中有子reactor挂掉怎么办
      • 了解TCP的一些内核参数吗
      • 文件描述符有上限了解
      • 半连接全连接队列了解吗
      • DDos攻击的行为是什么样的
    • raft
      • 分布式一致性的意义在哪里
      • 一致性的等级
      • 为什么一致性和可用性无法同时保证
      • 介绍一下raft原理,leader选举的原理
      • 会不会出现孤岛现象
  • 面试官介绍自己在的团队
  • 代码题
    • 输入一个整数(0-32),输出对应的ip掩码字符串,例如输入24输出255.255.255.0
    • 括号的分数,leetcode856

7-27 京东复试

  • 说一下reactor模式
  • 如果线程池同时有长任务和短任务,长任务把线程池占满了怎么办
  • 应用层日志客户端发送了数据,服务端应用层没有收到数据,分析原因可能是什么
  • 说一下raft的leader选举过程
  • 如果随机时间不合适一直选不出leader如何优化
  • 如果有5个节点的集群,两个节点与另外三个节点网络隔离,旧领导在两个节点之中,会发生什么情况,如果网络恢复呢。
  • 进程间通信方式有哪些
  • 通过什么方式提升自己的技术实力

7-27 百度三面

  • 聊天
  • 反问

7-28 smartX三面

  • 项目相关
  • 你认为体系结构之后会如何发展,对于硬件的设计有什么影响
  • lambda表达式的实现,和函数指针,函数对象有什么区别,能相互转化吗
  • 你认为操作系统的作用是什么

7-29 京东hr面

  • 项目简介
  • 反问

7-29 字节一面

  • 项目相关
  • 代码题
    • 给定一个数组和一个整数K,输出这个数组中每个数和其左右k个相邻数据的和(没有k个则认为是0)
    • 输出数组中任意一个局部最大值,数组的左右两端认为是两个极小值,复杂度尽量低

7-30 拼多多一面

  • 代码题
    • 二叉树中两个节点的最近公共祖先节点
    • n个桃子,每天可以吃1个,n/2个(如果n能被2整除),2n/3个(如果n能被3整除),求最早哪天能吃完
      • 时间复杂度是多少
  • 项目/实习相关

8-3 字节二面

  • 给出一个文档,介绍了一种int数组的编码方法
  • 阅读并实现该编码方法

8-3 华为一面

  • 实习
  • 项目
  • 一副扑克中随机抽5张牌,判断是否是顺子,大小王可以看作任意牌

8-4 华为二面

  • 实习
  • 操作系统的理解
  • 数据库索引的理解
  • redis的理解
  • 实现快速幂

8-9 字节三面

  • 实验室项目
  • 个人项目
  • 实现一个线程安全的有界队列,吞吐尽量高

更多模拟面试

全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐