后端开发工程师面经
文章目录
【注意】最后更新于 August 7, 2024,文中内容可能已过时,请谨慎使用。
第7次面试回顾
基本信息
时间:2025年7月3日,周三 地点:线上 岗位:分布式存储研发工程师
面试内容
第一题:你是怎么做优化的?
1.1 我的回答
- 元数据:平均 在并发不够,多线程,多线程基于各种缓存方式
- 数据存储;io栈 基于bluestore 和数控分离方式
- 面试 30秒–10秒怎么优化的?ctdb
1.2 面试官反问
- 面试官1:对数控分离感兴趣,我东西,南北桥 专业术语,我心里听说?
- 我:用户态 零拷贝,发起操作,网络改造
ctdb 在多节点出现不问题定位? 我手是:通过定制自己脚本,例如 误判情况。
1.3 后记
- 面试官 内部术语 东西,南北桥优化,我自己不专业术语说的。
- 回答清晰,我混乱
- 大海捞针-不知道如何回答
第二题:你们环境如何,性能如何,相比其他200G 你们不行呀?
1.2 我的回答
- 我全闪环境,混闪环境–没清楚到底哪个
- 60g 面试不高呀,别人200g带宽,你们打榜xxx
- 我说就是60g,因为io栈,锁一致性缘故校验
1.3 面试反问
- 你了解其他gfs,luster 3fs怎么设计的?
- 你了解其他gfs,luster 3fs怎么设计的?
- 你了解其他gfs,luster 3fs怎么设计的?
- 我犹豫一会说不清楚
第三题: 假如重新设计元数据,怎么设计?
- 提示1. 文件树怎么存储,或者缓存存储全部的目录
- 提示2:怎么保证一致性,锁,
我思考:
- 感觉不好会单,有不能不回答,最后回到原来思路,打错特错
我回答:
- 提示1根本不理解啥意思,犹豫1分钟,被面试官pass,
- 提示2:我针对大目录,虚拟目录 目录分配,然后分布式锁,解释不是互斥锁,
- 一致性:存储怎么存储rockdb,一致性协议,一致性解析没有解决,线性一致性
- 锁保证故障情况下一致性。
第四题: 假如数据存储,你怎么设计?
4.1 我思考:
- 感觉有点懵,不怎么回答,我必须快速给出结论,我抓住io栈
4.2 我的回答
- 针对IO栈,最好磁盘,最好网卡,最好sdk基础上,如何这些组件,零拷贝,如何使用。
- 文件传输:senfile,用户态不操作,用户态操作,mmap方式这些基于内核处理的
- spdk不用户态的,线程池不合适,协程
- 感觉回答不好,io栈理解。
第五题、反问环节
5.1 我
- 作为一个PM,在完成原有任务情况下(除去本模块,本系统,当成设计好了,或者很多缺点不敢打修改,不停打补丁方式),还有哪些方式 快速学习技术方式,还有其他平台设计?
5.2 面试官:
不能局限于一个软件,熟悉不同平台架构区别,他们怎么做到的,从看文章,看代码,怎么做到的xxx
- IBM GPFS并行文件系统软件在设计上不存在任何性能瓶颈,因此GPFS并行文件系统可以充分发挥硬件系统的性能。换句话说,GPFS并行文件系统的性能完全取决于硬件配置的好坏,而文件系统软件本身对性能的影响微乎其微。
- Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服
- Lustre支持数万个客户端系统,支持PB级存储容量,单个文件最大支持320TB容量。
- 新一代OceanStor Dorado 融合全闪存存储
行动上难点:
- 关注数据规格,然后看源码怎么做到的,
-
- 但是做起来无从下手,感觉浪费大量时间,不入门。
第二次面试回顾
岗位信息
-
面试时间:2025-6-6
-
面试岗位
问题1: 什么是块存储?
-
我思考 不清楚不理解,面试官非要回答,面试不说卡,我就回答 我回答20分钟
-
内容:IO栈一部分,发起aio,io_uring,底层不清楚,
-
内容:kv存储一部分,元数据。
-
然后反复重复,不怎么回答, 一致性 raid组?
问题3:什么rdma技术
-
我思考:不清楚不理解,面试官非要回答,面试不说卡,我就回答 我回答20分钟
-
我回答:减少拷贝次数,单线拷贝
-
根本不记得回答什么
### 问题4:libaio 和io_uring区别,怎么用的呢?
- 我感觉:之前看过,忘记了,面试官不说卡,我自能停止,面试官等等30分钟
- 我内容:零拷贝,减少系统调用,数据结构,
- 我的内容:纠结 大量返回怎么处理的?我发现文件处理之做一次调用,我多线程判断返回,但线程epoll处理,这个不清楚。自己纠结这个方面上。
- 我思考10分钟,面试官不停止,我自己说,不知道时候什么
> 面试官 说用减少用户层调用
问题4: 什么是系统调用
-
大脑一片空白,不急知道怎么回答
-
函数调用 堆栈,
-
在返回值纠结20分钟
-
面试不喊停,自己不会回答 30分钟。大部分思考 回答混乱
### 问题5 混合部署,缓存怎么处理的?
- 我思考:文件我不清楚page,纠结10分钟
- 我内容:1 lib 层面 清理机制 2 mds 大文件 大目录处理机制 3 存储层面 不清楚纠结10分钟,多线程下 层面
- 自己回答完毕了,还是等着回答,bache我说一下
反复纠结
### 问题6 混合部署 系统怎么优化的,性能多少
1. mds 层面
2. osd层面
3. 性能说不不出来呀
### 问题7 什么是线性一致性 ,分布式协议 怎么理解的
- 我思考 我感觉到了,就是说不出来 ,深入存储系统 看3次
- 我意识没转变过来
- 单节点:多线程 并发 无锁 原子 ,多节点 读写一致性。变量可见性
- 多节点:从一个节点写入,就从另外节点读出来。
—根本没有转变过来呀?
> 这些知识都是工作遇到的,在潜意识中 还是之前面试经典题目,现在看面试官都是项目中实际问题,完全超出我预期,在日常工作和领导汇报 根本不关心这个题目。面试就直接
> 当然 面试层次 第一层 ,调用 等待返回可以了,什么线性一致性。自己想复杂。。别人说思维混乱。—面试官还是简单的理解—自己回答偏了
拼多多-二面-服务端研发实习生
面试问题:
- 自我介绍。
- 介绍一下项目?
- 讲一下项目中某一部分,从前端请求开始到数据库大致过程,数据库表结构大致什么样,响应什么样?
- 写一下建表的 SQL 语句。
- 用户登录后可以进行哪些操作?
- 这些操作可以放到一个接口实现吗?
- Java 的 8 种基本数据类型?
- Java 的集合的继承树大概是什么样的?
- Java 的异常的继承体系大概是什么样的?
- 说一下 Java 的线程池?
- 算法题:一个 9×9 的二维数组,判断是否满足 9 个 3 × 3 的子数组都满足每行、列都不重复,且含1-9所有数字。
- 反问。
腾讯– 后端开发
- kafka的有序性保证,深入到底层
- redis持久化的整个流程
- redis分布式锁的实现,底层
- sycronized如何保证三个特性,底层
- 慢查询优化
- oom定位及解决,cpu过高定位及解决
- raft实现细节,cap,和paxos对比
- 实习项目并发度的考量
- 缓存选型
- 一道medium算法,和面试官讨论了一下输入输出限制和trade off
总计2个多小时
# 快手timeline+面经(C++)
一面(1h10min)
【八股】:
- tcp三次握手和四次挥手
- 三次握手第三次可以没有吗为什么
- 浏览器输入网址到显示的全过程
【反问】:无,面试官说超时了会议室外有人催他就赶紧下了。
二面(1h10min)
- 自我介绍
- STL中关联式容器有哪几个
- map和unordered_map区别(说了底层、时间复杂度、用法)
- unordered_map的时间复杂度一直是o(1)吗
- 为什么最坏O(n),什么情况是O(n)?
- unordered_map底层是怎么实现的(哈希函数、桶+链表)
- 除了链表有没有别的方法(开放地址法,不了解具体)
- 有一亿个string数据应该用map还是unorered_map存为什么
- 说到map底层是红黑树,了解平衡二叉树吗?
- 5个节点的平衡树,最少有多少个节点
- 了解线程和进程吗?为什么Muduo网络库用多线程而不是多进程?
- 存一个数据从内存到到磁盘,经过哪些步骤?
- 手撕:求逆波兰表达式,如string=(101+20)*30-45/5变成101 20 + 30 * 45 5 - /
1. 鼠鼠想了大概五分钟说了思路,用stack做,面试官说思路没问题
2. 然后写了十五分钟,最后输出有点小问题面试官说没关系整体是ok的
19. 反问:业务 2.进来做什么 3.要提高那些方面(多理解怎么应用)
滴滴-后端
一面50min
- 算法题:反转区间链表
- 介绍项目以及工作内容
- 深入redis,sds结构,跳表原理以及数据结构,缓存穿透如何解决,持久化机制,aof重写策略。
- java锁,Synchronized和ReentrantLock区别以及各自的实现原理,java的内存模型,Volatile关键字的作用以及实现原
- 线程切换上下文是的工作流程。
- mysql的引擎分类,事务实现,锁的分类,索引结构以及如何建立索引
- 反问:部门业务以及业务特点
二面50min
- 算法题:和大于等于目标值的最短连续子数组
- 项目介绍, 深挖项目场景,
- 事务如何保证
- 状态机的作用
- 如果重构的话如何考虑。
- 系统设计需要考虑哪些方便,如果需要跟外部合作需要考虑那几点。
- 未来的职业规划
- 反问:部门技术氛围以及工作节奏
hr面30min
- 职业规划,
- 部门介绍,优缺点,
- 项目的难点如何解决,生活和工作冲突了如何合理安排
- 反问:工作节奏以及新人培训
腾讯云智后台开发一面
- 自我介绍
- 有没有想留在现在的公司转正?
3. 介绍一下你简历上这个项目
4. 你说到你使用到短信注册登录,你讲讲你实现发送短信登录的流程
5. 你说你把用户信息存在ThreadLocal中,你讲讲你主要存储了哪些用户信息
6. 那如果你将用户信息存在ThreadLocal中,我现在有多个线程使用你这个产品,你怎么知道哪个线程对应哪个用户呢?(这里有点没太理解,没答上)
7. 你说用到了拦截器,你讲一下你用到的拦截器(后续询问是否用到了AOP)
8. 讲一下SpringBoot启动器 (这里我回答的SprintgBootApplication,不知道是否正确,或者应该回答starter相关?)
9. 讲一下依赖注入
10. Bean对象存储在哪里?
11. 你项目中用到了哪些表(后续问了很多表结构相关的问题,不一一列举了)
12. 如果当前有很多用户在抢购你的秒杀优惠券,你会怎么进行设计能够让用户有个比较好的体验?
13. 讲讲你了解的索引
14. 你讲到B+树,那么为什么要使用B+树作为数据结构呢?它好在哪里?为什么效率高?
15. B树和B+树的区别?既然B+树每次都需要查询到叶子节点,但是B树某些情况下不需要查询到叶子节点,那效率不应该更高吗?(应该是上个问题没答好,进行的追问)
16. 你讲到B+树使用叶子节点存储数据页,这个数据页的含义是什么?是分页的那个数据页吗?
17. 哪些情况下会进行回表
18. 讲一下事务的隔离级别,分别解决了什么问题
19. 可重复读可以解决幻读吗,如果不能,要怎么操作来解决幻读
20. 读提交和可重复读的区别?
21. 你使用到Redis的哪些数据类型?
22. 讲一下Redis集群
23. 详细讲一下哨兵模式,哨兵的作用是什么?
24. 你了解集群分片吗(答:不了解)
25. Redis持久化
26. 讲一下动态代理
27. 具体讲讲JDK动态代理和CGLIB动态代理的实现方式
28. 讲讲类加载过程
29. 讲一下Java 程序编译和解释的过程
30. 讲一下垃圾回收期,有哪些算法?
31. 线程池参数
32. 你讲一下Java中所用到的锁(这里答了乐观锁,悲观锁,读写锁)
33. 讲一下CAS,Java是怎么实现CAS的
34. CAS和乐观锁有什么关系?
35. 讲一下volatile的作用,实现原理是什么?它的使用场景是什么?你举个例子。
36. TCP比UDP的优势
37. 讲一下四次挥手
38. 可不可以不需要第四次挥手?为什么第四次挥手之后要等2MSL?
39. HTTP是基于哪个协议?(答 TCP)
40. HTTP的方法有哪些?(答 GET PUT DELETE)
41. HTTP是明文传输吗?HTTPS用什么方式保证了数据加密?
42. 讲一下怎么进行CA证书校验
43. 你能讲一下红黑树吗(不了解)
44. 讲一下你所知道的排序
45. 具体讲一下插入排序的实现(到这里已经被拷打昏了,应该答得不太好,实现方式应该答错了)
46. 你说插入排序时间复杂度是O(n²),那么这个时间复杂度是怎么算出来的?你具体想想真的会到O(n²)吗