后端面试题
经过一个月的准备和接近一个月的面试,终于拿到新公司offer了。这一个月来面试了滴滴、美团、头条、阿里、腾讯、猿辅导、快手,最终拿到了滴滴、美团、猿辅导、快手四家公司的offer。面试让我深刻的体会了自己有多菜,因此决定好好研究源码,日常保持学习,这个行业,不学就会被淘汰,从此我要洗心革面搞技术,矜矜业业做业务,先在此记录下面试题目。本人毕业后刚工作两年,第一次跳槽,题目可供类似经历的人参考。
滴滴一面:
反射常用的方法 ?
nacos常用配置?
线程池的启动和关闭流程?
分布式服务中的各种角色?
mysql如何建索引?
说一说你了解的mysql锁?
redis的跳跃表是如何实现的?
数据库分库如何实现?
说一说分布式锁?redis分布式锁命令?
用过哪些代理模式?
xxl-job怎么实现负载均衡?
guava使用了其哪些功能?
说一说BIO和NIO?
每k个节点反转双链表?
滴滴二面:
- 找出数组的最长有序子数组?(可用滑动窗口解决)
- n个降序数组,找出里面所有的最大的k个元素?(构造大顶堆实现)
- 如果两个进程,指向同一块内存地址,他们的内容一样吗?
- 虚拟内存有了解吗?
- 如何设计一个登陆系统?
- 如果QPS很大,有什么优化手段?
- 了解过nginx和lvs吗?
- tcp怎么保证传输不丢包?(滑动窗口、超时重传等)
滴滴三面:
- 项目中rabbitmq用在哪里?
- redis的原理?(单线程,基于事件驱动,NIO)
- 项目相关其他问题?
- openfeign的底层原理?
- rabbitmq怎么实现并发消费?
- ABA灰度发布方案?
头条一面(挂):
- rabbitmq如何保证消息的可靠性?
- 爬虫中如何保证任务的一致性?
- 如何进行服务链路跟踪?
- 两个贼难的算法题,忘记了。。。
美团一面:
- 读已提交和可重复读的区别?(read view的创建时机不同)
- Exception和ERRO的区别?
- ClassNotFound和NoClassDefFoundError的区别?
- 动态代理有哪几种实现方式?一般用于什么场景?(JDK Proxy和Cglib)
- 项目的QPS?项目难点在哪?
- 项目使用的数据库是什么模式?实现了读写分离吗?使用什么引擎?有用到分布式事务吗?
- 索引为什么快?
- 项目中jvm参数配置?
- 运行时区域?哪些区域会发生OOM?(理论上,除了程序计数器,其他都会发生)
- 项目中有使用过线程池?如何监控线程池的运行状况?
- 线程池核心参数吗?参数如何设置?怎么监控线程池情况?
- 消息堆积如何处理?
- 写一个死锁例子
- mysql集群主备如何同步数据?
- 除了spring cloud知道其他微服务框架吗?
- 怎么监控jvm内存?
- 四道算法题????(我一脸懵)
单链表反转
二叉树的深度
二叉树的最小深度
设计两个矩形,判断他们是否相交(通过中心点判断。。。好难)
美团二面:
- redis集群相关问题?单点故障处理?怎么同步?
- mysql集群问题?
- CAP理论?
- nacos的原理有了解过吗?为什么配置中心使用阿波罗?
- 算法题:二维数组,只能向右向下走,求出最大路径和。(贪心算法)
美团三面:
- 问了下项目相关。
猿辅导一面:
- 线程和进程?如何减少线程的切换?协程的缺点?
- 线程池参数?线程是如何回收线程的?线程池的数据结构?
- 分布式事务协议?如何实现?(raft、paxo)
- mysql索引为什么要用B+树,数据直接存放在非叶子节点不行吗?(减少IO)
- redis分布式锁为什么要双重?如果单点故障怎么办?有了解其他的分布式锁吗?(zk)
- mysql的隔离级别?会产生什么问题?如何实现可重复读?(mvcc)
- mysql的undolog、binlog、relog及其流程?什么时候提交?(两阶段提交)
- Runnable和Callable的区别?Callable是如何通过FutureTask拿到返回结果的?(get阻塞)
- sleuth和skywalking的区别?如何实现的?
sleuth创建span到日志文件中,skywalking一整套采集、分析、存储、展现 - 算法:合并两个有序链表成一个有序链表
猿辅导二面:
- rabbitmq如何保证顺序消费?可靠性保证?
- 项目相关的问题?
- 算法题:
字符串转数字(atoi)
可使用辅助栈,给一个进行排序
猿辅导三面:
- 画一下项目的架构图?
- 项目相关问题?
- 算法题:
二叉树的层次遍历
二维矩阵顺时针旋转90度
快手一面:
- 有用到分布式事务吗?(没有,不会)
- Redis单线程为什么快?单台服务器如何分担高QPS?
- Redis的数据结构?zset实现原理?(5种,跳跃表)
- Redis的key过期策略?(惰性删除 + 定期删除)
- mysql默认的隔离级别?可重复读如何解决幻读问题?(rr、mvcc)
- 说一说mysql的各种log?(binlog、redolog、undolog)
- 写一个安全的单例模式?
- Spring的@Transactional的原理?如果外层函数开了Transaction内层没有,会出现什么问题?
- 有看过gc日志吗?里面有什么内容?用的什么垃圾回收器?(GCPrintDetail)
- 算法题:两个有序数组合成一个有序数组
快手二面:
- 说一下你这边负责的事,讲一下项目?
- 浏览器键入www.baidu.com 后发生了什么?(dns解析、tcp连接、数据传输、浏览器解析等)
- IP和端口的目的?IP是什么IP?到达公司机房后如何找到真正的服务器?(对外IP。NAT、DR)
- 什么时候用到了rabbitmq?延迟队列如何实现的?(死信交换机+死信队列)
- 说一说nacos原理?服务提供者和订阅者是如何维持通讯的?(心跳连接)
- 算法:< I love china > 转换成
快手三面:
- 项目相关的问题?
- 说一说自己的职业规划?
腾讯一面:
- 多线程并发jvm有什么机制处理?CAS的具体使用?
- Spring的事务传播机制?(@Transactional事务传播)
- Spring AOP的使用场景?除了日志还有其他吗?
- 聚簇索引和非聚簇索引的区别?
- mysql的unlog、redolog、binlog?
- zset的数据结构?(跳跃表)
- mybatis的二级缓存?什么时候使用?什么时候触发?
- CAP理论和BASE理论?
- 算法:二叉树的层次遍历、股票合适的买入时机
腾讯二面(挂):
- 说说项目?
- 分布式锁如何实现的?redis set key 如何保证原子性?
- 面试官对我一顿批评
阿里一面:
- 先说一下项目?mysql的分库问题?
- spring的Bean的生命周期?循环引入问题?
- spring @Bean和@Component的区别?
- spring @Resource和@Autowire的区别?
- spring 拦截器和过滤器的区别?
- spring的事务什么时候失效?
- CAS?ABA问题?如何解决?
- rabbitmq选型问题?rabbitmq怎么保证可靠性?
- java日志系统有了解吗?
- 联合索引相关?支持范围查询吗?
- 算法题:统计所有字符串中最大的10个?
阿里二面:
- 介绍下项目?
- jvm分布式锁?
- jvm如何检测死锁?(jstack -l pid)
- jvm如何判断是否发生内存泄露?
- 关于垃圾回收的一些问题?是否每次gc都需要遍历gc roots?(不是,OOPMAP)
- rabbitmq如何保证顺序消费?消息携带顺序?
- 算法题:链表重连,1-2-3-4-5-6-7-8 8-1-7-2-6-3-5-4
总结:八股文纯背无用,必须加以自己理解,否则面试官三言两语就把你问倒了。
- 阿里技术是真的牛,问题非常实际,考察你是否真的使用过,检验你是不是纯背八股文的书呆子。比如spring相关的问题,其他面试官都没有问到过,因此我之前也没准备,自然就没回答上来。一面通过我是很诧异的,二面逮着项目刨根问底,直接把我问懵了,挂了意料之中。
- 腾讯二面面试官现场pua我,直接批评我只是为了高薪资才从事这个职位,没有好好研究原理,没有仔细思考项目,没有上进行心???wtf?谁他妈工作不是为了钱?找工作本就艰难,还碰到这种打击人的面试官,体验感糟糕透了,我没举报他算对得起他了。后续他还加我微信了(本人女),我以为我通过二面了呢,结果加了后一句话不说,于是我把他删了,然后第二天就收到了面挂的通知。。。
- 线程池、mysql、redis必问!!!几乎每一场都问到了。
- mq必问,由于我公司使用的是rabbitmq,每一场都问rabbitmq相关。
- 项目亮点、难点、自己如何解决、自己对项目的思考、项目的优缺点、改进之处等必问。二面三面都会问
- 有时候有些问题没答上来不要紧,但是一定要有自己的见解,面试官很看重个人的思考和理解能力。
- 在leecode上陆陆续续刷了300道题目,面试发现几乎都是里面的,或者变种题目。除了头条算法比较难,其他都比较简单。快手二面那个题目很简单,但是面试官跟我说,我是他最近面的十几个人里面唯一一个写出来的,我震惊了,其他人这么菜吗,其实不是,只是他们不刷而已。算法题刷了就简单,不刷可能做不出来,所以 需要保持日常刷题。
接下里,好好整理面试相关的知识,去你妹的腾讯二面,说我不研究原理,姐现在就研究给你看看!
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!