后端面试题

 经过一个月的准备和接近一个月的面试,终于拿到新公司offer了。这一个月来面试了滴滴、美团、头条、阿里、腾讯、猿辅导、快手,最终拿到了滴滴、美团、猿辅导、快手四家公司的offer。面试让我深刻的体会了自己有多菜,因此决定好好研究源码,日常保持学习,这个行业,不学就会被淘汰,从此我要洗心革面搞技术,矜矜业业做业务,先在此记录下面试题目。本人毕业后刚工作两年,第一次跳槽,题目可供类似经历的人参考。


滴滴一面:

  1. 反射常用的方法 ?

  2. nacos常用配置?

  3. 线程池的启动和关闭流程?

  4. 分布式服务中的各种角色?

  5. mysql如何建索引?

  6. 说一说你了解的mysql锁?

  7. redis的跳跃表是如何实现的?

  8. 数据库分库如何实现?

  9. 说一说分布式锁?redis分布式锁命令?

  10. 用过哪些代理模式?

  11. xxl-job怎么实现负载均衡?

  12. guava使用了其哪些功能?

  13. 说一说BIO和NIO?

  14. 每k个节点反转双链表?

滴滴二面:

  1. 找出数组的最长有序子数组?(可用滑动窗口解决)
  2. n个降序数组,找出里面所有的最大的k个元素?(构造大顶堆实现)
  3. 如果两个进程,指向同一块内存地址,他们的内容一样吗?
  4. 虚拟内存有了解吗?
  5. 如何设计一个登陆系统?
  6. 如果QPS很大,有什么优化手段?
  7. 了解过nginx和lvs吗?
  8. tcp怎么保证传输不丢包?(滑动窗口、超时重传等)

滴滴三面:

  1. 项目中rabbitmq用在哪里?
  2. redis的原理?(单线程,基于事件驱动,NIO)
  3. 项目相关其他问题?
  4. openfeign的底层原理?
  5. rabbitmq怎么实现并发消费?
  6. ABA灰度发布方案?

头条一面(挂):

  1. rabbitmq如何保证消息的可靠性?
  2. 爬虫中如何保证任务的一致性?
  3. 如何进行服务链路跟踪?
  4. 两个贼难的算法题,忘记了。。。

美团一面:

  1. 读已提交和可重复读的区别?(read view的创建时机不同)
  2. Exception和ERRO的区别?
  3. ClassNotFound和NoClassDefFoundError的区别?
  4. 动态代理有哪几种实现方式?一般用于什么场景?(JDK Proxy和Cglib)
  5. 项目的QPS?项目难点在哪?
  6. 项目使用的数据库是什么模式?实现了读写分离吗?使用什么引擎?有用到分布式事务吗?
  7. 索引为什么快?
  8. 项目中jvm参数配置?
  9. 运行时区域?哪些区域会发生OOM?(理论上,除了程序计数器,其他都会发生)
  10. 项目中有使用过线程池?如何监控线程池的运行状况?
  11. 线程池核心参数吗?参数如何设置?怎么监控线程池情况?
  12. 消息堆积如何处理?
  13. 写一个死锁例子
  14. mysql集群主备如何同步数据?
  15. 除了spring cloud知道其他微服务框架吗?
  16. 怎么监控jvm内存?
  17. 四道算法题????(我一脸懵)
    单链表反转
    二叉树的深度
    二叉树的最小深度
    设计两个矩形,判断他们是否相交(通过中心点判断。。。好难)

美团二面:

  1. redis集群相关问题?单点故障处理?怎么同步?
  2. mysql集群问题?
  3. CAP理论?
  4. nacos的原理有了解过吗?为什么配置中心使用阿波罗?
  5. 算法题:二维数组,只能向右向下走,求出最大路径和。(贪心算法)

美团三面:

  1. 问了下项目相关。

猿辅导一面:

  1. 线程和进程?如何减少线程的切换?协程的缺点?
  2. 线程池参数?线程是如何回收线程的?线程池的数据结构?
  3. 分布式事务协议?如何实现?(raft、paxo)
  4. mysql索引为什么要用B+树,数据直接存放在非叶子节点不行吗?(减少IO)
  5. redis分布式锁为什么要双重?如果单点故障怎么办?有了解其他的分布式锁吗?(zk)
  6. mysql的隔离级别?会产生什么问题?如何实现可重复读?(mvcc)
  7. mysql的undolog、binlog、relog及其流程?什么时候提交?(两阶段提交)
  8. Runnable和Callable的区别?Callable是如何通过FutureTask拿到返回结果的?(get阻塞)
  9. sleuth和skywalking的区别?如何实现的?
    sleuth创建span到日志文件中,skywalking一整套采集、分析、存储、展现
  10. 算法:合并两个有序链表成一个有序链表

猿辅导二面:

  1. rabbitmq如何保证顺序消费?可靠性保证?
  2. 项目相关的问题?
  3. 算法题:
    字符串转数字(atoi)
    可使用辅助栈,给一个进行排序

猿辅导三面:

  1. 画一下项目的架构图?
  2. 项目相关问题?
  3. 算法题:
    二叉树的层次遍历
    二维矩阵顺时针旋转90度

快手一面:

  1. 有用到分布式事务吗?(没有,不会)
  2. Redis单线程为什么快?单台服务器如何分担高QPS?
  3. Redis的数据结构?zset实现原理?(5种,跳跃表)
  4. Redis的key过期策略?(惰性删除 + 定期删除)
  5. mysql默认的隔离级别?可重复读如何解决幻读问题?(rr、mvcc)
  6. 说一说mysql的各种log?(binlog、redolog、undolog)
  7. 写一个安全的单例模式?
  8. Spring的@Transactional的原理?如果外层函数开了Transaction内层没有,会出现什么问题?
  9. 有看过gc日志吗?里面有什么内容?用的什么垃圾回收器?(GCPrintDetail)
  10. 算法题:两个有序数组合成一个有序数组

快手二面:

  1. 说一下你这边负责的事,讲一下项目?
  2. 浏览器键入www.baidu.com 后发生了什么?(dns解析、tcp连接、数据传输、浏览器解析等)
  3. IP和端口的目的?IP是什么IP?到达公司机房后如何找到真正的服务器?(对外IP。NAT、DR)
  4. 什么时候用到了rabbitmq?延迟队列如何实现的?(死信交换机+死信队列)
  5. 说一说nacos原理?服务提供者和订阅者是如何维持通讯的?(心跳连接)
  6. 算法:< I love china > 转换成

快手三面:

  1. 项目相关的问题?
  2. 说一说自己的职业规划?

腾讯一面:

  1. 多线程并发jvm有什么机制处理?CAS的具体使用?
  2. Spring的事务传播机制?(@Transactional事务传播)
  3. Spring AOP的使用场景?除了日志还有其他吗?
  4. 聚簇索引和非聚簇索引的区别?
  5. mysql的unlog、redolog、binlog?
  6. zset的数据结构?(跳跃表)
  7. mybatis的二级缓存?什么时候使用?什么时候触发?
  8. CAP理论和BASE理论?
  9. 算法:二叉树的层次遍历、股票合适的买入时机

腾讯二面(挂):

  1. 说说项目?
  2. 分布式锁如何实现的?redis set key 如何保证原子性?
  3. 面试官对我一顿批评

阿里一面:

  1. 先说一下项目?mysql的分库问题?
  2. spring的Bean的生命周期?循环引入问题?
  3. spring @Bean和@Component的区别?
  4. spring @Resource和@Autowire的区别?
  5. spring 拦截器和过滤器的区别?
  6. spring的事务什么时候失效?
  7. CAS?ABA问题?如何解决?
  8. rabbitmq选型问题?rabbitmq怎么保证可靠性?
  9. java日志系统有了解吗?
  10. 联合索引相关?支持范围查询吗?
  11. 算法题:统计所有字符串中最大的10个?

阿里二面:

  1. 介绍下项目?
  2. jvm分布式锁?
  3. jvm如何检测死锁?(jstack -l pid)
  4. jvm如何判断是否发生内存泄露?
  5. 关于垃圾回收的一些问题?是否每次gc都需要遍历gc roots?(不是,OOPMAP)
  6. rabbitmq如何保证顺序消费?消息携带顺序?
  7. 算法题:链表重连,1-2-3-4-5-6-7-8 8-1-7-2-6-3-5-4

总结:八股文纯背无用,必须加以自己理解,否则面试官三言两语就把你问倒了。

  1. 阿里技术是真的牛,问题非常实际,考察你是否真的使用过,检验你是不是纯背八股文的书呆子。比如spring相关的问题,其他面试官都没有问到过,因此我之前也没准备,自然就没回答上来。一面通过我是很诧异的,二面逮着项目刨根问底,直接把我问懵了,挂了意料之中。
  2. 腾讯二面面试官现场pua我,直接批评我只是为了高薪资才从事这个职位,没有好好研究原理,没有仔细思考项目,没有上进行心???wtf?谁他妈工作不是为了钱?找工作本就艰难,还碰到这种打击人的面试官,体验感糟糕透了,我没举报他算对得起他了。后续他还加我微信了(本人女),我以为我通过二面了呢,结果加了后一句话不说,于是我把他删了,然后第二天就收到了面挂的通知。。。
  3. 线程池、mysql、redis必问!!!几乎每一场都问到了。
  4. mq必问,由于我公司使用的是rabbitmq,每一场都问rabbitmq相关
  5. 项目亮点、难点、自己如何解决、自己对项目的思考、项目的优缺点、改进之处等必问。二面三面都会问
  6. 有时候有些问题没答上来不要紧,但是一定要有自己的见解,面试官很看重个人的思考和理解能力。
  7. 在leecode上陆陆续续刷了300道题目,面试发现几乎都是里面的,或者变种题目。除了头条算法比较难,其他都比较简单。快手二面那个题目很简单,但是面试官跟我说,我是他最近面的十几个人里面唯一一个写出来的,我震惊了,其他人这么菜吗,其实不是,只是他们不刷而已。算法题刷了就简单,不刷可能做不出来,所以 需要保持日常刷题

 接下里,好好整理面试相关的知识,去你妹的腾讯二面,说我不研究原理,姐现在就研究给你看看!


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!