面经-阿里、腾讯、百度、美团外卖、快手、Zoom、微软
一、腾讯:
【一面 38min】
- Tcp连接过程
- Time Wait原因,如何解决
- HTTP连接过程,涉及到了哪些网络协议(一直说到了链路层)
- IO多路复用原理及底层实现
- Epoll和Select的区别
- 边缘触发和水平触发
- Coding:模式转换,输入2|[A1|[B]] 输出 ABAB
【二面 1h20min】
- 聊项目
- 说说thrift rpc的过程
- thrift网络通信如何实现的
- Socket建立的过程(设计到用户态和核心态的函数切换,以及双向fd的建立)
- protobuf和json的区别,为什么protobuf更快
- Grpc有了解吗,说说其特性(http2.0)
- Coding:给定字符 a b和长度n,输出所有由a b两字符组成的长为n的回文串,输入 a b 3 输出:aaa bbb aba bab
【三面 30min】
- 聊项目
- 讲讲Os的虚拟内存
- Coding:输入任意数组,每次操作都能使n-1个数+1,求使数组所有数变为相等的最少操作,输入 1 2 3 输出 3
【hr面 15min】
- 优点缺点
- 哪里人,多大了
- 大学研究生经历
- 父母职业
- 工作意向城市
- 有女朋友吗
- 反问……
二、阿里:
【一面 58min】
- 自我介绍
- arrayList和LInkList区别,底层实现,性能差别,arraylist扩容机制
- string底层实现
- stringBuffer和stringBuilder区别
- hashtable和hashmap区别
- concurrenthashmap实现原理,transfer具体过程,如何实现并发扩容机制的
- concurrenthashmap并发一定安全吗
- jvm分区,分别存的是什么
- jvm垃圾回收,为什么要使用分代回收,年轻代为什么要分两个s区
- 类加载过程
- 双亲委派模型,如何破坏
- java是如何保证线程安全的
- 说说JMM
- 平时项目中有用过tree结构吗
- 快排的具体过程,最差和最好的时间复杂度,空间复杂度,稳定吗
- mysql的引擎区别
- 数据库是如何实现acid特性的
- 为什么选用b+树
- mysql如何控制索引的大小
- redis和mysql区别
- 反问
【二面 56min】
- 自我介绍
- java的三大特性,具体说说多态
- ava异常有哪些
- 运行时异常和非运行时异常的区别
- 为什么要分运行时异常和非运行时异常
- 了解设计模式吗——说说代理模式
- 为什么要使用代理模式,直接实现接口不行吗
- 具体解耦的体现
- 为什么要使用JDK动态代理
- JDK动态代理的具体实现原理
- CGLIB代理和JDK代理的区别
- JDK代理为什么只能针对接口实现代理
- Volatile的作用,它是如何保证可见性的
- 进一步说一下Volatile底层是如何保证可见性的
- Volatile一定线程安全吗
- synchronized和retreenlock的区别
- synchronized底层实现原理,为什么要设计偏向锁和自旋锁,锁升级的过程
- cas的实现原理,具体到指令
- retreenlock是如何体现cas的
- retreenlock是如何实现公平和非公平锁的
- threadlocal原理
- 项目中有用过线程池吗,线程池的创建方式,具体参数及其作用
- redis的数据结构,zset底层实现
- 如何解决缓存穿透
- 布隆过滤器的原理,为什么布隆过滤器空间利用率更高
- redis如何保证高可用
- 哨兵机制原理
【二面完补了部门笔试,然后系统开了又笔试一次】
【三面 45min】
- 自我介绍
- 聊自动驾驶的项目(ps:貌似面试官很懂自动驾驶)
- 具体工作以及算法优化的具体细节
- 平时如何学java的
- 了解java哪方面的知识
- 说说jvm分区,为什么一定要分元空间和堆空间、栈空间这些
- 线程并发安全问题有遇到过吗,说一说
- 反问
【四面 42min】
- 自我介绍
- 聊项目
- 结合你现在的经验,分析项目架构还有那些值得优化的地方
- MapReduce源码实现的具体过程(自我介绍说自己实现过,所以才问了)
- master宕机怎么处理
- 如何实现MapReduce的高可用
- 谈谈自己对一致性协议的理解
- 如何处理脑裂问题
- java的线程状态有哪些
- 阻塞态和等待态有何区别
- 什么情况下进入等待态
- 分布式限流如何实现的
- 反问
【五面 交叉面(视频) 30min】
- 自我介绍
- 自己的优缺点,具体体现
- os为什么要加缓存,os的缓存和架构的中间件缓存有什么关系
- 看自己写的博客
- thrift和dubbo的区别
- 有看过dubbo的源码吗(没有......然后给他讲了thrift的源码)
- 你希望拥有什么样的工作环境
- 你觉得自己的编码水平在周围同学中怎么样(那肯定得吹,数一数二)
- 是什么驱动你编程的
- 反问
【hr面 31min】
- 家在哪里,大学哪里
- 高中在哪个高中,是市重点吗,成绩如何
- 在你的生活经历中,谁对你的影响最大,具体说说
- 看你数学比较好,那为什么要选计算机这个行业,而不是数学专业
- 项目中遇到的难点
- 个人从大学在到研究生的经历
- 为什么要选择考研究生
- 现在学校和本科学校,有什么区别(同学,环境,教学等等)
- 个人业余爱好
- 为什么喜欢音乐,钢琴考级了吗
- 有女朋友吗(为啥都要问这个,我已经不能承受任何伤害了)
- 个人有没有遇到什么比较困难的时刻
- 反问
三、美团外卖:
【一面 48min】
- 自我介绍
- java基础知识:arrayList、LinkList、HashMap、ConcurrentHashMap(熟读源码,问得很细)
- JVM分区
- GC详细说一下(年轻代为什么要分2个s区)
- gc为什么要stop the world
- cms说一下,快在哪里,缺点
- threadlocal原理及内存泄漏原因
- synchronized原理
- mysql索引原理
- ACID解释
- thrift原理
- thrift服务发布如何自动通知
- redis特点
- 缓存击穿和解决方案
- tcp 3次握手和4次挥手
- coding:给定一字符串,输出出现次数最少的所有字符(例:输入ababccc 输出:a b)
【二面 30min】
- 自我介绍
- 聊项目(说了很久)
- 数据库如何实现事务的
- 反问
【hr面】
- 直接通知过了,确认信息和时间
四、快手
【一面 35min】
- 自我介绍
- java基础知识:arrayList、LinkList、HashMap、ConcurrentHashMap
- java反射用过吗(没用,但提到了spring)
- java的定时任务怎么实现
- jvm分区
- spring mvc原理,请求到controller的具体过程
- coding:sql语句,实现一个类似于除法的语句not exists这种
- coding:二分查找
- 反问
【二面 25min】
- 自我介绍
- 聊项目
- 说说自己对java哪一块比较了解
- java锁的实现(说了很久,synchronized和retreenLock的底层实现,以及AQS)
- 实习时间问题
- 自己想做哪些方面
- 反问
【hr面 10min】
- 对快手的认识
- 如何看待部门业务
- 家在哪里
- 实习时间
- 反问
五、Zoom Vedio
【一面 48min】
- 自我介绍
- 聊项目
- 项目当中遇到的问题,说得很细,会考虑各种case,让你给出解决方案(比如mq的顺序性保障,唯一id等)
- jvm分区
- 类加载机制,java只能从class文件加载吗
- mysql索引原理
- 为什么不建议在sql中写order by
- 对于a=1 or b=2 or c<3 类似的where 语句如何优化
- 反问
【二面 35min】
- 自我介绍
- thrift和protobuf区别
- jwt原理
- jwt的数据格式(还问了具体字段意义......)
- 聊项目
- RateLimiter的实现原理
- 分布式锁的实现原理
- redisson原理
- 反问
【三面 18min】
- 自我介绍
- 聊项目
- redis数据结构
- 集群高可用如何保证
- 宕机的服务器恢复后还能继续作为leader吗
- springboot 自动装配原理
- 反问
【hr面 8min】
- 开学了吗
- 实习时间
- 以后期望的工作方向
- 反问
六、百度(连续2个多小时,3面完)
【一面 36min】
- java基础知识:arrayList、LinkList、HashMap、ConcurrentHashMap
- 线程的创建方式
- 继承thread和实现runnable接口有啥区别
- 这两者在堆栈中区别的体现(有点懵)
- mysql的索引
- 全文索引知道吗
- 倒排索引原理