秋招快接近尾声了,就剩下个别公司还在流程中,特地把之前参加的面试总结一下跟大家分享。
我的个人项目是一个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是怎么实现的
- 函数调用的时候栈的变化情况
- 函数返回怎么得到返回地址
- gdb什么命令查看堆栈信息
- 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) 回帖