1年后端面经&学习路线,有阿里、微信、快手、虾皮等Offer

笔者背景:

由于个人原因需要更换工作,双非硕,1年Java工作经验(京东),技术栈涉及SSM、Redis(JD自研)、MQ(JD自研)、RPC(JD自研)框架、异步调度框架等,有DDD背景。

面试总共经历3个月左右,1年社招面试难度和3/5年面试难度几乎无差别,唯一有差别的就是3/5年的人,项目经历会丰富点,在项目中碰到的技术难点会多一点,面试中被问到的CS基础就会少一点。

面试过的公司:

  • 面试挂掉的公司:
    天眼查(2面挂)、猿辅导(2面挂)、vivo(广告部门,2面挂)、美团支付(1面挂)、杭州阿里mmc(HR挂)、字节跳动(抖音广告、国际广告等4个BU,全挂)、腾讯看点(2面挂)、腾讯广告(3面过了,部门调整不招人了)
  • 拿Offer的公司:
    滴滴(橙心)、Shoppe(SSC)、招银网络、微众银行(企业贷业务)、微信支付(6面)、快手(大数据团队)、深圳阿里(ICBU)

面试中除了问项目经历之外,还会问CS基础、算法题、简历中写的中间件原理、框架原理、主语言的原理。
面试时间每轮30min-90min不等,主要看你和面试官是否看对了眼,三分实力、七分运气。
也确实存在如果背景好一点(好的教育经历、大厂经历),面试是会简单一些(如算法题可能就出个很简单的)


下面给出一些学习资料,社招和校招均可参考,校招看了认真去学,肯定可增加拿SSP的几率。

CS基础:

刷题:

  1. 剑指Offer,2遍以上
  2. LeetCode高频题,专项刷题

中间件原理:

  1. MySQL:JiKe时间,MySQL45讲,丁奇,讲得贼好
  2. Redis、MQ、RPC:公司内网自学(Rocket MQ、Kafka,Dubbo、Spring Cloud),学习主要组件的作用,和主要特性的实现原理,如如何保证事务、顺序消息? Kafka为什么快?Dubbo注册中心如何实现?分别是AP还是CP?
  3. Redis设计与实现:https://www.w3cschool.cn/hdclil/

设计模式

  • 从Spring源码中学、跟Mentor学(首先要掌握常用的哪些设计模式,单例、工厂、策略、模板方法等)

JAVA & 框架

  1. Spring/Spring Boot: 《Spring源码深度解析》
  2. Java:主要看书(基础我就不说了)《Java并发编程的艺术》、《深入理解JVM虚拟机》

架构设计能力

1.《凤凰架构》
2. 在网上找些架构设计的题目看看思路


下面是我的面试记录

天眼查

  1. Spring Boot相比如Spring提供了哪些特性?
  2. Spring Boot注解自动装配过程是什么样?
  3. BeanFactory和FactoryBean有什么区别?
  4. Bean相关可以进行扩展的接口?
  5. SQL最佳实践都有哪些?
  6. 索引使用有哪些原则和优化点?
  7. 为什么会有左匹配?
  8. Redo log 什么时候刷磁盘?
  9. Redis为什么单线程还快?
  10. Redis什么操作能支持高并发?
  11. 分布式系统,如何保证数据一致性?
  12. 失败的数据,重试时,如何保证撇弃已经操作过的数据?
  13. 两个栈实现队列,并优化

猿辅导

一面

  1. Mysql索引,二叉排序树与B+树的区别?
  2. 假设B+树的高度是4,最大支持多少数据量?
  3. spring boot自动装配实现原理
  4. Spring 解决循环依赖
  5. Redis高级数据结构?布隆过滤器?hyperloglog?
  6. Zset底层数据结构?ziplist + skipList
  7. redis快的原理
  8. 零拷贝原理
  9. Dubbo注册中心,可以使用redis来做吗?
  10. Zk保证了cap中的哪两个?为什么?
  11. Nginx是四层还是七层?
  12. Java锁升级过程?
  13. 并发环境下的hashmap有什么问题?
  14. 为什么要有spring事务传播?
  15. 给定一个链表,找到目标元素target,并翻转之后的包括target的k个元素。
  16. 将一个数组划分为M个非空子数组,找个每个子数组各自和最大值最小。二分

二面

  1. 项目里为什么要使用MQ?而不是直接调用?考虑点在哪里?
  2. 如何利用MQ(分布式)实现顺序消费?
  3. Redis缓存过期key删除策略?惰性和定时
  4. 只有惰性行不行?定时有什么用?
  5. 远程调用,服务是busy状态时,会怎么办?fail over的机制?
  6. Fail over策略,以及适用场景?(不是路由策略)
  7. 接口升级是通过方式进行?dubbo 版本号机制?具体操作的过程?考量点,怎么做的?
  8. 可重复读的mvcc是如何做的?不可重复读和幻读有什么区别?
  9. 多线程参数,以及工作过程?多线程中的线程与普通线程的有什么区别?运行完毕之后,前者为阻塞状态,后者为死亡状态
  10. 判断镜像二叉树

ViVo

一面

  1. 未来规划?具体是怎么执行?
  2. 平时看哪些书?
  3. 所做业务的技术难点?
  4. new 一个对象都有哪些过程?(类加载过程,都验证哪些内容)
  5. 如何做的给对象分配多少内存?
  6. 对象的对象头都有哪些信息?
  7. Eden区间如何分配的内存?随机分配?还是按照什么规则?
  8. Redis 底层数据结构类型都有哪些?比如list底层?(双向链表+压缩链表)
  9. 一条sql语句被服务器接收,执行,返回的过程?
  10. sql中where、having区别?having必须和group by一起使用吗?
  11. Mysql innodb叶子节点存储一条数据还是多条?
  12. Lock底层原理?
  13. cas是如何实现的?
  14. cms和g1有什么区别?cms有什么缺点?
  15. sql调优都有哪些实践?
  16. 线程参数意义,丢弃策略有哪些?队列如何产生作用的?
  17. 系统性的学习:书籍

二面

  1. Innodb数据结构只有b+树吗?
  2. b+树的优势?
  3. 为什么走主键索引效率会比较高?
  4. 测试环境走索引,但是线上不走索引?怎么解决?
  5. Sql的执行计划优化器是如何进行优化的?
  6. Mysql遇到了锁表的情况或者死锁的情况吗?
  7. Mysql相关的锁?乐观锁、悲观锁、间隙锁?
  8. 什么时候会用间隙锁?

美团支付

  1. Java原生线程池的种类?fixed、single、cached、schedule
  2. 几种线程池的区别?
  3. 核心线程数个数如何确定?cpu/io
  4. 这几种线程池分别使用的什么队列?阻塞队列有哪些?使用场景?
  5. 线程池分配任务顺序(执行过程)?LinkedBlockQueue有什么缺点?
  6. ThreadLocal原理,使用场景,以及缺点?给每个线程分配一块内存空间,占用多余的空间。
  7. JMM模型,不是JVM内存结构?volatile原理?重排序;缓存数据失效、总线加锁、线程将变量从主内存拷贝到线程所属的内存区域中
  8. JVM内存结构?
  9. 内存分配,指针碰撞原理?会有什么问题?
  10. 项目使用什么垃圾收集器?G1,为什么使用G1,与CMS的区别?CMS的内存碎片对项目有影响吗?如果通过其他参数对内存进行压缩是否也能整理内存碎片?
  11. G1的优势?
  12. 其他JVM参数?-Xss、-Xmx、-Xms,mx和ms如何设置的?为什么要配置为一致?避免每次垃圾回收完成后JVM重新分配内存
  13. Mysql事务隔离级别?各个级别解决了什么问题?
  14. 幻读是什么意思?RR级别下会出现幻读吗?如何解决幻读问题的?如何解决不可重复读问题?
  15. b+树的数据结构,聚集与非聚集索引区别?
  16. 非聚集索引查询数据的过程?
  17. 联合索引的数据结构是什么样的?
  18. Abc联合索引,在where中使用的c、b、a还会使用到索引吗?
  19. Mysql主从复制原理?具体过程?
  20. 堆排序?
  21. MVCC原理?基于undo log的回滚链实现的。

字节跳动(抖音广告)

一面

  1. java与python的区别?
  2. Python的弱类型是如何实现的?
  3. 线程与进程的区别?
  4. 一个需要做并行的任务,多进程和多线程如何选择?
  5. 进程和线程,它们都有上下文切换,进程耗时的点在哪里?
  6. 进度是如何调度的?具体的调度算法?
  7. 什么时候会出现线程安全问题?如何避免?
  8. 堆和栈的区别?只用堆或者只用栈可不可以?
  9. 堆内存和栈内存使用性能有差异吗?
  10. 操作系统的中断是如何实现的?作用是什么?(硬件中断和软件中断)
  11. 有很多中中断,操作系统是如何处理中断,如何区分不同的中断?以键盘中断为例
  12. Tcp链接断开的过程?为什么需要2MSL?
  13. Tcp拥塞控制是如何做的?如何知道有没有发生拥塞?
  14. 遇到网络拥塞之后,是如何做的?网络恢复后,是怎么做的?
  15. 快重传是如何做的?
  16. varchar(20)和char(20)有什么区别?varchar额外存储字符长度.
  17. int(20)和int(10)的区别?
  18. Sql优化过程
  19. 10亿数据,需要翻页查询,每页显示10条,如何优化?(id,name,age)
  20. 先拿id,再查数据,会有什么好处?除了避免回表还有什么优势吗?
  21. 给定一个数组,找到一些三元组,使组合和为0,且三元组不能重复。

二面

  1. Sql优化是怎么做的?
  2. Mybatis为什么反射慢?因为找寻找字段,使用jdbc优化,额外采用hashMap去建立映射关系
  3. 4个表join的sql,且数据量很大,如何优化?可额外采用mapreduce
  4. UDP报文的格式是什么?一个UDP消息包含哪些部分
  5. redis为什么比mysql快?
  6. Redis数据结构是什么?使用的是什么模型?epoll、poll、select的区别?
  7. Epoll在操作系统层面上的理解
  8. Zset的使用场景?允许重复吗?
  9. JVM的组成?栈帧里面有什么?
  10. Class文件存在哪里?
  11. 一个方法的参数存在哪里?(栈帧里面?)
  12. HashMap的数据结构?通过hashcode如何定位到数据?
  13. t1、t2线程交替打印ab、打印三次
  14. 说道用uuid来防重,那uuid用什么生成?雪花ID组成部分
  15. 线程安全的linklist
  16. 其他实现同步的工具?syn和reentrantlock的使用场景?低并发和高并发时、该怎么选?
  17. 反问:云计算方向、java、springboot、大数据(大数据会多一点)
  18. 算法题忘了

Shopee

一面

  1. 虚拟内存的作用?原理?
  2. Redo log 作用?如何保证事务?
  3. DDD中,实体和值对象的区别?
  4. DDD中,Service和Repository的分层?
  5. Redis中String的底层?
  6. 跨域的原因,如何解决?
  7. https过程
  8. 大数相加

二面

  1. 慢sql是如何优化的
  2. Tcp拥塞控制,是怎么做的?滑动窗口,慢启动,快恢复,快重传?
  3. TCP三次挥手和握手机制
  4. Innodb如何保证数据一致性?
  5. Innodb有哪几种锁?Innodb同时操作两张表,是如何进行加锁的?
  6. Innodb索引结构?和B树区别?
  7. 最长不重复子串长度
  8. JMM结构是什么样?(不是jvm内存结构)
  9. 一个对象从创建到回收的过程
  10. Young gc、minor gc、full gc的区别?
  11. 说说对Redis的理解?redis单线程为什么会快?Redis的zset数据结构?跳跃表?红黑树?
  12. Zk是如何保证一致性的,选举过程?
  13. 线程之间的通信方式
  14. synchronized和reentrantlock区别

阿里ICBU (offer)

一面:

  1. redis缓存穿透?
  2. a 调 b,b调c,如何保证事务一致性?
  3. Mybatis,一级缓存和二级缓存的区别?默认是什么?
  4. 1.7和1.8中cchashmap的区别?
  5. 设计一个用户提现操作,从哪些角度去考虑?前端到后端如何设计?风险把控。
  6. Dubbo注册中心,如何保证高可用和可考虑?
  7. 工厂模式和策略模式的区别?
  8. 栈内存泄漏和堆内容泄漏场景?
  9. 业务:sbu,跨境出口贸易,资金流结算,ToB,事务、安全、严谨的。
  10. 沟通氛围比较好。

二面:

  • 考察软素质

三面:

  1. 项目中的难点,(超卖)有哪些解决方案,优缺点?
  2. 常用设计模式,在实际工作中是如何使用的
  3. 常用设计原则,在实际工作中是如何体现的
  4. CAP理论,在项目中是如何应用的
  5. 线上问题定位:
    1. java 服务端 对外提供很多服务
    2. 并发增大,请求变慢,无响应,但cpu利用率很低
      可能的原因有哪些,以及进一步定位如何做?

腾讯看点(2面挂)

  1. volatile关键字作用?double-check的单例模式?volatile在其中的作用?
  2. cms的四个阶段?
  3. JIT的作用?
  4. Zookeeper原理?什么时候用zk?Dubbo注册中心是如何使用zk的?服务上线与下线zk是如何感知的?
  5. 布隆过滤器作用?(判断是否不在内存中)误判什么时候会出现?(hash key冲突、过滤器长度太短)
  6. Redis,zset的数据结构(ziplist(元素个数128个以下,长度小于64,字典(存放key和分值)+跳表))
  7. redis集群?hash槽,等
  8. 异步框架原理?
  9. Innodb如何解决幻读?next-key lock(record lock + gap lock)?快照读是mvcc解决。什么是当前读(select for update、 insert、update、delete)与快照读(普通select)?
  10. 二级索引叶子节点是什么?索引覆盖是什么?mysql利用什么排序更快?索引
  11. HTTP协议与RPC协议的区别(文本与二进制,无连接的)?HTTP1.1与HTTP2.0的区别(io多路复用、二进制(分帧、速度快))?HTTP2.0的缺点?HTTP3.0?
  12. 虚拟内存(基于内存分页、局部假设)?缺页中断过程?(内存足够、内存不够LRU进行页面置换、页表寻找物理地址)?
  13. 多级页表作用?(解决页被频繁置换的问题)
  14. 找出所有三个数相加为0的组合,去掉重复

微信PCG广告(3面之后没下文了)

一面:

  1. Java基础,就哪些常见的八股文
  2. SSM框架原理、中间件技术原理。
  3. 算法题,不难,树相关的,具体忘了

二面(周六,滨海大厦现场面的):

  1. 上来让写到算法题
  2. 讲所做业务的框架,主要流程,业务拓扑图

三面:

  1. 问了写软素质,以及项目难点之类的。
  2. 面试通过后,短信告知待安排HR面,等了2个星期,我主动打电话询问情况时,告知简历已被释放,部门调整,不招人了。

微信支付(offer)

一面:

  1. 项目介绍
  2. 项目中用到Redis的实现原理(复制同步原理、高可用实现、key删除原理、常用数据结构实现原理等)
  3. MQ如何保证事务、顺序、不丢失等等
  4. RPC框架负载均衡如何做,注册中心原理、寻址服务原理、一个请求到达到请求返回整个过程,以及高并发请求的背景下,整个请求响应过程。
  5. 算法题,忘了是啥,不难。

二面:

  1. 40min,让做两到算法题(mid难度)。
  2. 项目介绍
  3. 项目技术难点,以及解决方案
    面试结束后,布置了个大作业,一周完成

三面:

  1. 项目介绍,项目技术难点,以及解决方案

四面:

  1. 项目介绍,项目技术难点,以及解决方案

五面:

  1. 项目介绍,项目技术难点,以及解决方案
  2. 大作业实现方案、优化提升思路

六面:

  1. 项目介绍,项目技术难点,以及解决方案,软实力较多
#校招社招##秋招##社招##阿里巴巴##腾讯##字节跳动##快手##Java工程师#
全部评论
微信面委难嘛
点赞 回复
分享
发布于 2021-08-11 15:23
联易融
校招火热招聘中
官网直投
感谢楼主分享,我勉强也算一年经验~不过只有一个多月的准备和面试时间~问下楼主最后去了哪
点赞 回复
分享
发布于 2021-12-21 14:18

相关推荐

20 167 评论
分享
牛客网
牛客企业服务