个人情况

我是17年本科毕业,以校招身份进入了鹅厂,在鹅厂工作了小两年,因某些不可描述的原因被裁掉了,目前已经入职字节近1个月的时间了。

被裁掉后的我面试了阿里、京东、字节、拼多多、美团这些一线互联网大厂,面试完后我有个习惯,就是把面试官的问题记下来,方便以后的复盘,这次我就和大家分享一下阿里和字节的面试经验吧(个人感觉面试过程最舒服的)

先说阿里,看看到底问了什么?

先说一个问题,阿里有些部门对于学历的限制没那么死了,也是有大专生的,前提当然是你的技术足够出色!

阿里一面

  • 先自我介绍,包含日常工作
  • 问了父子线程怎么共享数据 interitableThreadLocals
  • lock和sync区别
  • HashMap1.7、1.8区别
  • AQS原理(执行过程源码,入队出队的细节,源码细节)
  • CountDownLatch和CyclicBarrier的区别是什么源码级别
  • volatile从指令重排序,内存屏障,聊到总线风暴
  • mysql索引:聚集索引、非聚集索引、索引结构,顺带会问各种树的特性
  • 举例优化sql
  • MVCC和事务隔离级别的关系
  • 间隙锁、行锁、乐观锁悲观锁等
  • 唯一索引和普通索引的区别
  • 聊到了changeBuffer、页分裂合页合并
  • 可达性分析算法中根节点有哪些
  • cms和G1区别
  • 怎样GC调优
  • 怎样排查CPU彪高、内存彪高
  • redis数据结构、跳跃表
  • redis qps能上多少,怎么知道的
  • sentinel和cluster区别和各自适用场景
  • redis cluster集群同步过程
  • redis单线程为什么快
  • 多大叫大key、热key产生原因和后果以及怎么解决
  • 本地缓存需要高时效性怎么办
  • spring的作用;
  • spring循环依赖怎么解决(说出三级缓存源码细节);
  • spring aop原理(动态代理)、
  • spring bean生命周期(源码细节,以及各个位置的设计思路,有什么可扩展的)
  • dubbo服务暴露和引用过程,负载均衡策略,容错机制在哪里实现的源码
  • 项目中碰到的问题。

第二轮

笔试两道题,第一题写代码,第二题写技术方案,以查询为主,考察锁粒度、时间粒度上的细节点。

第三轮

  • 自我介绍、项目介绍
  • 说到缓存穿透,让我设计一个防止缓存穿透的解决方案,简单的就是存null值,但肯定会深究,可以结合布隆过滤器,设计分布式系统,里面又会问到流量分发到具体过滤器服务的方式,比如一致性hash算法,怎么调用?比如dubbo直连、等等细节会边说边问
  • 有没有做限流,设计一个侵入性最小的限流服务。
  • 项目中碰到的问题,最好说框架本身问题,能提现个人能力,也避免问题太低级被面试官看low,刚好之前有发现一个dubbo的bug,所以这问题应该回答的还可以。
  • 介绍最熟悉的项目,业务上有没有什么优化点;和同行业其他公司的差距和优势
  • dubbo服务调用过程
  • NIO、BIO区别,NIO解决了什么问题,Netty线程模型(源码拷问)。
  • MQ相关

第四轮

  • 项目介绍
  • 听到说做了限流,限流标准(并发数? qps?并发数和qps关系?说出了5种限流方案和对应算法原理)
  • dubbo调用端怎么在jvm中生成对应服务?dubbo服务端和调用端超时时间设置和区别、dubbo长连接。
  • mysql行锁最大并发数?(秒杀项目指出)
  • 设计秒杀系统,我说的异步的方式,会问怎么优化?改为了同步的方式,异步和同步区别?
  • 碰到哪些技术难点?怎么解决?有没有参考其他大厂?其他大厂方案什么样的?有没有关注阿里这边最新的技术?
  • 刚刚的秒杀系统,会涉及到多个库表的更新,分布式事务怎么解决,我说的消息最终一致性,异步?有没有更好的方案?同步TCC方式,TCC方式原理?(三个阶段的具体实现)

字节面试过程

一面(闲聊吹逼,放松方式)

  • 自我介绍
  • 你好像用到了MQ,主流MQ有哪些?
  • 为什么选RMQ?
  • RMQ的主要有哪些组成部分?
  • 讲讲消费模式和刷盘策略吧

基础知识问答

  • Java泛型机制了解吗?
  • 在哪用到了?
  • 集合类源码看过吗?
  • 介绍一下String三个类的区别吧,源码看了吗?
  • 哪个线程安全?怎么实现的?
  • String拼接是咋做到的?
  • 反射了解吗?
  • Spring里哪用到了反射(答动态代理)
  • 静态代理和动态代理的区别?JDK代理的条件?
  • 上面你说看了一些源码,我们聊聊HashMap吧
  • HashMap线程安全吗?
  • 为啥不安全?(我开玩笑回了一个,因为他没锁门,面试官一听也笑了笑,主要是看气氛太紧张了)
  • 怎么实现线程安全?(集合类方法/concurrentHashMap)
  • HashMap内部是咋实现的?(数组+红黑树/链表)
  • 扩容了解吗?为啥因子是0.75不是别的?JavaDoc有看吗?(这个记不太清楚了,印象里是javadoc里有写,是服从一个lambda为0.75的泊松分布)
  • 扩容之后的数据落在哪?为啥容量一定是2的倍数?为啥引入红黑树?红黑树要啥参数?并发的时候咋处理的?

算法:

(1)# 给定一些数组,例如下面的格式,他们都表示一个区间,然后你需要将区间进行合并
[1,2],[2,4],[3,7],[8,11]
# 如上所示, [1,2] 和 [2,4] = [1,4]
# 然后 [1,4] 和 [3,7] = [1,7]
# 最后 [1,7] 和 [8,11] 无法合并,所以最后结果应该返回 [1,7],[8,11]
(2)# 给定一个数组,例如 [1,1,2,2,2,3,3,3,3]这样的,里面的数组不一定连续并且有序,假设我输入 2,这个2表示出现次数最高的两个
# 那么你需要给我返回 2,3

二面

  • 自我介绍
  • 博客已经开源了么,用的什么开源协议,博客的用户多么?
  • 对于Solr或者ES里面用到的一些中文分词器有了解过么?
  • 谈谈那些技术栈,你比较熟悉的是那些,mysql 和redis?
  • 聊聊MySQL的底层索引结构,InnoDB里面的B+Tree?
  • B Tree 和 B+ Tree的区别
  • 聊聊MySQL索引的发展过程?是一来就是B+Tree的么?从 没有索引、hash、二叉排序树、AVL树、B树、B+树 聊。
  • 谈谈MySQL里面的事务,说说什么是事务?
  • MySQL里面有哪些事务级别,并且不同的事务级别会出现什么问题?
  • 谈谈可重复读和幻读的区别?
  • MySQL中如果使用like进行模糊匹配的时候,是否会使用索引?一定不会用么?
  • 谈谈Redis吧,在你项目中的具体使用?
  • 谈谈Redis如何实现分布式锁?
  • 谈谈Redis中缓存穿透的问题,以及解决的方法?
  • 还有其它解决缓存穿透的方法么?布隆过滤器有了解过么?
  • Redis中大面积的缓存失效,然后请求全部打到数据库,有什么解决方法?
  • 如果出现一些热点数据,比如明星之间的新闻,造成大量的吃瓜用户涌入后台,但是服务器还没有缓存对应的数据,这样可能造成数据库宕机,如何避免这样的情况?
  • 聊聊 JVM的组成结构?
  • 谈谈垃圾收集原理?以及垃圾收集算法
  • 复制算法 和 标记整理算法?
  • 为什么不在新生代使用标记整理算法?或者在老年代使用复制算法?
  • 有了解过Volatile么?谈谈你对Volatile的理解
  • Volatile如何保证可见性的?以及如何实现可见性的机制。
  • 如果大量的使用Volatile存在什么问题?
  • 谈谈操作系统的线程,以及它的状态
  • 线程和进程的区别?
  • 为什么提出多线程应用,而不是多进程应用呢?
  • Linux你平时都有用到什么命令呢?
  • 如果我需要查看端口号或者进程号,你会使用什么命令?
  • 谈谈你做的另外一个项目吧?稍微介绍一下
  • 来吧,写个题目试试

# 链表的两两翻转 # 给定链表: 1->2->3->4->5->6->7 # 返回结果: 2->1->4->3->6->5->7

三面

  • 说一下Java垃圾回收机制
  • 64匹马,8个赛道,找最快的4匹马。
  • 64匹马,8个赛道,找最快的8匹马。
  • 给出两个升序数组A、B和长度m、n,求第k个大的数
  • 给出数组A,长度为n,数组中元素的值位于[0, n - 1]之间,求是否有重复元素
  • 讲一下多线程与多进程区别
  • JVM中什么时候会进行垃圾回收?什么样的对象是可以回收的?
  • Spring主要思想是什么?
  • 你未来的发展方向是什么?确定了么?打算一直做Java?有考虑过转吗?
  • 那你平时是怎么学习Java的呢?
  • 场景题目:设计一个短域名服务:短信存不了太长网站,需要弄成短域名,你该如何设计一个服务,可以为全国的网址服务。
  • TCP为什么是三次握手四次挥手?
  • 数据库的隔离级别
  • sql题,写了个连表查询外加模糊查询
  • 算法:镜像二叉树

后话

其实字节和阿里都面上了,我个人比较偏爱字节一点,因此选择了字节跳动,字节真的是很爱问算法了,据我了解,现在大厂面试对于算法这块在逐渐加强,因此我把我复盘后的这些笔记留给大家食用吧,希望大家在明年的金三银四都能拿到自己满意的offer,一起努力!

有想获取面试题文档的朋友,一键三连(点赞+收藏+关注) 后,添加微信:mxm9843 即可免费获取到。