2020年春招秋招各个大厂面试题总结(答案持续更新中)
一、阿里巴巴
1. 絮叨(可跳过)
下面是阿里集团中有笔试的岗位:
考试时间很灵活,一般就固定在一周中的某几天。根据自己的时间安排,到某一天笔试时间了自行去考试就可以了,没有准备好就等下一场考试时间就好了。
整个阿里集团都是共享这一次笔试机会,面试如果挂了可以联系其他部门(如果有部门还有HC),不必再进行笔试了,所以笔试成绩也是有记录的。
2. 面经
今年阿里面试基本都是采用电话面,所以只要选择一个安静的地方接听就好,挺方便的。春季实习时候忘记整理了,回忆不起来了,所以这里讲的是正式秋招的。1. 开场自我介绍
2. 你最熟悉的一种排序算法,讲讲如何实现的,分析时间复杂度?
3. 数据结构熟不熟,讲解HashMap如何解决hash冲突的,是线程安全的吗?
4. 讲讲TCP三次握手,为什么要三次握手?
补充:我回答两次握手会出现丢包、延迟等情况,面试官说三次也会有这种情况出现,小伙伴们可以再思考思考,越是这类常见的面试题,面试官可能问的会越深透。
5. TCP如何保证可靠性的?
6. 进程和线程之间的区别?
7. 列举下进程之间的通信方式有哪些?
8. 线程有哪几种状态?
9. 知道几种Java锁,什么是悲观锁和乐观锁?
10. JVM中如何判断对象是否存活?我回答可达性分析算法的时候,又问了哪些可以作为root对象?
11. 有几种GC算法,选择自己熟悉的一个详细讲讲
12. G1收集器是采用的哪种算法?
3. 总结
通话时间68分钟,回头看看这些面试题会发现,面试官很想知道你熟悉哪些知识,对这些知识掌握多深。问题设置的也很全面,围绕数据结构、计算机网络、操作系统和JVM这些计算机基础知识问的。可惜的是空空参加笔试参加晚了,再加上秋招HC并不多,所以面试的时候HC没有了,在空空请求下,给了面试机会,后来也没再联系转部门。
所以接下来的学弟学妹们,如果想进阿里,一定要把握住春季的暑期实习机会!!!
二、字节跳动(大数据开发)
一面:
1. 自我介绍
2. 分别介绍下Hadoop的几个组成框架?
3. HDFS如何进行写操作的?
4. 详细介绍下MapReduce的工作机制?我重点回答了切片原理和Shuffle机制
5. MapReduce有哪些优化方法?
6. Redis熟不熟,介绍下它有几种数据类型?我回答了8种,面试官说只有5种,后来在网上搜了搜,版本也很多。
7. 介绍下布隆过滤器的原理?
8. TCP三次握手和四次挥手,什么时候进入Time_Wait阶段的?
9. 手撕代码第一道是力扣原题:[169. 多数元素](https://blog.csdn.net/weixin_43958974/article/details/108813786)
10. 手撕代码第二道如何实现最小栈(也是力扣原题[155. 最小栈](https://blog.csdn.net/weixin_43958974/article/details/108813957)),可能时间有限,没有让手写,说一下思路。
11. 反问环节,有没有什么想问面试官的?
二面:
1. 自我介绍之后,就全程几乎都是项目面,简历里有两个项目,被问到了很多细节上的。小伙伴们的简历上的项目一定要知根知底,辐射出的一些知识点也要掌握,比如我项目里有涉及到数据热点问题了,就会问到缓存雪崩、穿透之类的问题。
2. 反问环节
三面:
1. 没有自我介绍,上来就手撕代码。用MapReduce手写一个wordcount
2. 谈一谈mapreduce如何实现topK的
3. 聊一聊在学习中遇到的困难,然后如何解决的?
4. 技术栈是怎么学习的?
5. 反问环节,我问了工作中主要在用哪些技术栈?
1. 自我介绍
2. Java中的Object类有哪些方法?介绍下final关键字
3. 重载和重写的区别是什么?
4. HashMap和CurrentHashMap的区别,以及用到的锁?
5. 给100万个数据,如何查找前10大个的数据?
6. JVM启动时需要启动哪些线程?
7. GC算法以及垃圾回收器有哪些,CMS的优缺点
8. 介绍下Java锁,并发关键字CountDownLatch、Semaphore
9. ZooKeeper原理、选举机制讲一下,在项目中怎么用到的?
10. 手撕代码:给了一组的数字,把指定的数字移动到前面,其他数字的顺序不变。和力扣中的[283. 移动零](https://blog.csdn.net/weixin_43958974/article/details/108793422)类似。
11. 手撕代码:无序数组中找中位数。
二面:
1. 自我介绍,聊聊项目
2. mysql熟悉吗,介绍下索引,b+数,为什么不用avl树;
3. 讲讲mysql的隔离级别,mvc机制;
4. 分布式锁有了解吗?不熟,然后接下来又问了下Java锁
5. Synchronized锁和ReentrantLock锁的区别?
6. volatile作用和底层如何实现的?
7. 讲讲进程调度算法有哪些?
8. 什么是CAS,如何解决ABA问题的?
9. 手撕代码:手写归并排序,并分析时间复杂度和空间复杂度
三面:
1. 项目介绍,问了很多涉及到的技术栈
2. 如何实现负载均衡的?Nginx作用介绍下
3. 问到了毕设方向,以及如何学习技术栈的
1. 自我介绍
2. 项目介绍,问了一致性哈希
3. Reids作用是干嘛的,持久化机制
4. http常见的几个状态码,http与https的区别介绍下
5. tcp如何实现可靠性的,拥塞控制、流量控制
6. 进程和线程的区别,线程的创建方式,有几个状态,wait和sleep方法?
7. 线程池的增长策略和拒绝策略
8. 愿不愿意转C ++,愿不愿意去深圳工作?不愿意
1. 自我介绍
2. 项目介绍,数据是怎么来的,处理后如何进行存储?哪些是离线和实时处理的数据?
3. 看过相关技术栈的论文吗?
4. linux熟悉吗?介绍下常用的指令,查看内存,磁盘,进程,端口
5. HashMap的底层原理?1.7和1.8的区别有哪些,与ConcurrentHashMap的区别
6. 数据库的隔离性问题,脏读、不可重复度、幻读
7. 介绍下Redis中RDB和AOF的区别,如何重写AOF文件?
8. Hadoop集群需要启动哪些进程?
9. 介绍下HBase的存储结构
10. 反问
二面:
1. 自我介绍
2. 手写代码:给一个字符串,找出里面最长的回文串;
3. 手写代码: 给一张表,用sql语句查找工资最高的前10名员工的信息;
4. 介绍下进程间通信有哪些,最快的是哪个?
5. 信号量和互斥锁的区别?
6. 讲一下AQS框架的原理
7. JVM的类加载机制,为什么是双亲委派,不是的话有什么后果?
8. 线程池有哪些,以及有哪些核心参数?
9. Kafka如何保证数据安全的
10. 介绍一下零拷贝模式
11. HBase的rowkey设计需要注意什么?
三面:
1. 自我介绍
2. JVM中哪些对象进入老年代?
3. GC算法有哪些?自己用过哪些GC收集器?
4. HashMap的1.8中在扩容方面做了哪些优化?
5. Hbase的读写流程介绍下,以及和HDFS的读写流程的区别?
6. 怎么处理大量的小文件?如何优化,提高mr的shuffle效率
7. 介绍下spark RDD,说几个常见的算子,分别是哪种依赖?
8. 手撕代码:统计一个文本中单词出现的频率,输出前10个
9. 如果来美团工作,有什么规划?
10. 反问
1. 自我介绍
2. 手撕代码:层序遍历二叉树,返回一个数组
3. ArrayList和LinkedList的区别,底层怎么实现的?
4. Java中的OOM问题,怎么避免
5. IO内存管理,IO模型
6. Java锁了解哪些,挑一个熟悉的介绍下
7. Synchronized的实现原理?与CAS的区别
8. 如何解决数据倾斜,从哪些方面可以解决?
9. 介绍下mysql中的索引引擎?怎么学习的mysql
二面:
1. 自我介绍
2. 手撕代码:给一个字符数组,输出出现频率最高的前K个字符;
3. 手撕代码: 力扣原题 [53. 最大子序和](https://blog.csdn.net/weixin_43958974/article/details/108814329)
4. 输入一个网址,会发生哪些过程?
5. TCP和UDP的区别是什么,有哪些应用?
6. TCP的4次挥手,time_wait的作用是什么?
7. 介绍下IO模型,select,poll,epoll的区别?
8. Redis的持久化机制了解吗?介绍下两种方式的区别
对以上常见的这些面试题目,包括其他小厂的,我会把答案按照专题系列的形式整理下来,比如【线程池系列】、【JVM系列】,每个专题尽可能地把所有常见考题的答案都整理出来,目前正在推出[【Redis系列】](https://blog.csdn.net/weixin_43958974)
2. 分别介绍下Hadoop的几个组成框架?
3. HDFS如何进行写操作的?
4. 详细介绍下MapReduce的工作机制?我重点回答了切片原理和Shuffle机制
5. MapReduce有哪些优化方法?
6. Redis熟不熟,介绍下它有几种数据类型?我回答了8种,面试官说只有5种,后来在网上搜了搜,版本也很多。
7. 介绍下布隆过滤器的原理?
8. TCP三次握手和四次挥手,什么时候进入Time_Wait阶段的?
9. 手撕代码第一道是力扣原题:[169. 多数元素](https://blog.csdn.net/weixin_43958974/article/details/108813786)
10. 手撕代码第二道如何实现最小栈(也是力扣原题[155. 最小栈](https://blog.csdn.net/weixin_43958974/article/details/108813957)),可能时间有限,没有让手写,说一下思路。
11. 反问环节,有没有什么想问面试官的?
二面:
1. 自我介绍之后,就全程几乎都是项目面,简历里有两个项目,被问到了很多细节上的。小伙伴们的简历上的项目一定要知根知底,辐射出的一些知识点也要掌握,比如我项目里有涉及到数据热点问题了,就会问到缓存雪崩、穿透之类的问题。
2. 反问环节
三面:
1. 没有自我介绍,上来就手撕代码。用MapReduce手写一个wordcount
2. 谈一谈mapreduce如何实现topK的
3. 聊一聊在学习中遇到的困难,然后如何解决的?
4. 技术栈是怎么学习的?
5. 反问环节,我问了工作中主要在用哪些技术栈?
三、拼多多
一面:1. 自我介绍
2. Java中的Object类有哪些方法?介绍下final关键字
3. 重载和重写的区别是什么?
4. HashMap和CurrentHashMap的区别,以及用到的锁?
5. 给100万个数据,如何查找前10大个的数据?
6. JVM启动时需要启动哪些线程?
7. GC算法以及垃圾回收器有哪些,CMS的优缺点
8. 介绍下Java锁,并发关键字CountDownLatch、Semaphore
9. ZooKeeper原理、选举机制讲一下,在项目中怎么用到的?
10. 手撕代码:给了一组的数字,把指定的数字移动到前面,其他数字的顺序不变。和力扣中的[283. 移动零](https://blog.csdn.net/weixin_43958974/article/details/108793422)类似。
11. 手撕代码:无序数组中找中位数。
二面:
1. 自我介绍,聊聊项目
2. mysql熟悉吗,介绍下索引,b+数,为什么不用avl树;
3. 讲讲mysql的隔离级别,mvc机制;
4. 分布式锁有了解吗?不熟,然后接下来又问了下Java锁
5. Synchronized锁和ReentrantLock锁的区别?
6. volatile作用和底层如何实现的?
7. 讲讲进程调度算法有哪些?
8. 什么是CAS,如何解决ABA问题的?
9. 手撕代码:手写归并排序,并分析时间复杂度和空间复杂度
三面:
1. 项目介绍,问了很多涉及到的技术栈
2. 如何实现负载均衡的?Nginx作用介绍下
3. 问到了毕设方向,以及如何学习技术栈的
四、腾讯
一面:腾讯音乐1. 自我介绍
2. 项目介绍,问了一致性哈希
3. Reids作用是干嘛的,持久化机制
4. http常见的几个状态码,http与https的区别介绍下
5. tcp如何实现可靠性的,拥塞控制、流量控制
6. 进程和线程的区别,线程的创建方式,有几个状态,wait和sleep方法?
7. 线程池的增长策略和拒绝策略
8. 愿不愿意转C ++,愿不愿意去深圳工作?不愿意
五、美团(大数据开发)
一面1. 自我介绍
2. 项目介绍,数据是怎么来的,处理后如何进行存储?哪些是离线和实时处理的数据?
3. 看过相关技术栈的论文吗?
4. linux熟悉吗?介绍下常用的指令,查看内存,磁盘,进程,端口
5. HashMap的底层原理?1.7和1.8的区别有哪些,与ConcurrentHashMap的区别
6. 数据库的隔离性问题,脏读、不可重复度、幻读
7. 介绍下Redis中RDB和AOF的区别,如何重写AOF文件?
8. Hadoop集群需要启动哪些进程?
9. 介绍下HBase的存储结构
10. 反问
二面:
1. 自我介绍
2. 手写代码:给一个字符串,找出里面最长的回文串;
3. 手写代码: 给一张表,用sql语句查找工资最高的前10名员工的信息;
4. 介绍下进程间通信有哪些,最快的是哪个?
5. 信号量和互斥锁的区别?
6. 讲一下AQS框架的原理
7. JVM的类加载机制,为什么是双亲委派,不是的话有什么后果?
8. 线程池有哪些,以及有哪些核心参数?
9. Kafka如何保证数据安全的
10. 介绍一下零拷贝模式
11. HBase的rowkey设计需要注意什么?
三面:
1. 自我介绍
2. JVM中哪些对象进入老年代?
3. GC算法有哪些?自己用过哪些GC收集器?
4. HashMap的1.8中在扩容方面做了哪些优化?
5. Hbase的读写流程介绍下,以及和HDFS的读写流程的区别?
6. 怎么处理大量的小文件?如何优化,提高mr的shuffle效率
7. 介绍下spark RDD,说几个常见的算子,分别是哪种依赖?
8. 手撕代码:统计一个文本中单词出现的频率,输出前10个
9. 如果来美团工作,有什么规划?
10. 反问
六、百度
一面:1. 自我介绍
2. 手撕代码:层序遍历二叉树,返回一个数组
3. ArrayList和LinkedList的区别,底层怎么实现的?
4. Java中的OOM问题,怎么避免
5. IO内存管理,IO模型
6. Java锁了解哪些,挑一个熟悉的介绍下
7. Synchronized的实现原理?与CAS的区别
8. 如何解决数据倾斜,从哪些方面可以解决?
9. 介绍下mysql中的索引引擎?怎么学习的mysql
二面:
1. 自我介绍
2. 手撕代码:给一个字符数组,输出出现频率最高的前K个字符;
3. 手撕代码: 力扣原题 [53. 最大子序和](https://blog.csdn.net/weixin_43958974/article/details/108814329)
4. 输入一个网址,会发生哪些过程?
5. TCP和UDP的区别是什么,有哪些应用?
6. TCP的4次挥手,time_wait的作用是什么?
7. 介绍下IO模型,select,poll,epoll的区别?
8. Redis的持久化机制了解吗?介绍下两种方式的区别
七、总结
主要罗列了一下今年大厂的面试情况,可以看出来出了项目之外,考察的计算机基础主要设计计算机网络,操作系统,JVM,以及数据库,分布式缓存等。而手撕代码,几乎都是来源于力扣原题,希望小伙伴们重视下力扣刷题,不必追求刷的数量和难度系数,把力扣【Hot100】和【剑指offer】多刷几遍,应该没问题。像排序算法,LRU常见的也要多练习练习。对以上常见的这些面试题目,包括其他小厂的,我会把答案按照专题系列的形式整理下来,比如【线程池系列】、【JVM系列】,每个专题尽可能地把所有常见考题的答案都整理出来,目前正在推出[【Redis系列】](https://blog.csdn.net/weixin_43958974)
欢迎大家关注,前来批评指正!