后端开发工程师面经
文章目录
拼多多-二面-服务端研发实习生
面试问题:
- 自我介绍。
- 介绍一下项目?
- 讲一下项目中某一部分,从前端请求开始到数据库大致过程,数据库表结构大致什么样,响应什么样?
- 写一下建表的 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²)吗