面试复盘:面完字节、美团、阿里等大厂,今年面试到底问什么?
作者:互联网
个人情况
我是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,一起努力!
有想获取面试题文档的朋友,见下:
标签:缓存,字节,区别,面完,美团,面试,算法,源码,索引 来源: https://blog.csdn.net/bjmsb/article/details/110082402