阿里、头条校招分享!!!
陆陆续续收到好几个师弟咨询校招的问题,不由回想自己当初的心路历程,感慨万千,于是写下这些文字。
先说下结果,我是 21 届毕业,当时手上拿了阿里、美团和字节等 offer,大部分都是 sp 以上,这里并不是吹嘘什么,因为当时和我复习的小伙伴基本都拿到这样的结果,刨除学历的因素,我想更多的是关于努力方向和时间点选择。
这篇文章主要记录了本人从面试准备到 offer 选择这一路的历程,希望可以帮助到大家。
在开始前,还是提醒下读者,本文内容较多,全文大概有 1w + 字,最好能有 30 分钟以上的空闲时间阅读。全文干货,童叟无欺,绝对值得!
文章主要分为三个部分展开,大家也可以自取食用:
- 心路历程:简单介绍本人的从春招,到暑期实习 ,到秋招、到offer选择的历程;
- 过关斩将:详细的介绍公司的面试经历,重点梳理面试的核心知识点;
- 文章彩蛋
第 一 部分:心路历程
2020 年的疫情对于毕业找工作还是有很大的影响,我是从 1 月份开始准备,大概花了2个月的样子复习面试的知识点,在 3 月份的时候就开始我的春招——投简历找暑期实习。
面试的第一家是一个不知名的中型企业,主要是借以提前体会下面试氛围,让自己尽快的进入状态。之后就投了阿里,当时恰好本科同学在阿里工作,问我要不要试一试,并强调这次的面试如果没有通过不会影响后面秋招的面试,最重要的是整个面试情况不会记录在公司内部,然后我就心动了,开始面试阿里。需要说明的是阿里是我所有面试公司中对基础知识问的最多的一家公司,同时它也是我所有面试中跨越周期最久,最坎坷的一次面试经历。从春招实习期第一个开始,一直到秋招最后一个才结束。
在面试阿里的过程中,我也陆续投了其他几家公司并参加面试,其中包括美团、滴滴、陌陌,最终都通过了面试并拿到了实习offer。权衡部门和岗位之后,最终选择了美团到店部门的实习。
美团的实习从 3 月底开始一直到 6 月初旬结束,共计3个月。在此期间因为家里出了点事,5月份就回家了,只能远程办公。总的来说,美团是一家十分 nice 的公司, 实习生每人配置了一台高配的 MacBook 笔记本,简直不要太爽,当时正好是疫情高发期,整个美团内部是公司办公一天,远程办公一天,所以我真正在美团呆的时间特别的少。在整个实习期间,美团会给每个实习生安排一个 mentor,主要是让实习生快速的进入公司氛围,融入整个大家庭,了解团队的工作内容和技术栈。这里我还是要感谢下当时带我的 mentor,对我超级棒,基本上我问的问题都特别认真的给予解答。当时我的团队每个月都会有内部的技术分享,对新人的成长帮助很大。
这里还是要吹一下美团的,美团是一家很不错的公司,团队给我最大的感受就是特别的温暖,技术也很 nice,大家的关系特别好。美团内部有"学城",其中有大量的技术指导类文档,对我的技术成长帮助很大。还有一点就是美团对实习生特别的 open,会给予你足够的信任,尽管最后没有选择美团的正式offer,但基于我的实习经历还是给大家推荐美团的,是值得去的一家公司。
7 月份的时候,实验室的同学都陆陆续续的面试了,我才意识到秋招已经开始了,恰好当时实验室的一个同学在头条实习,便找她内推了,至此我的秋招也迷迷糊糊地开始了。头条的面试效率是我面试过的公司中最高的,从开始到结束不到2周时间,至于具体的面试内容我会在后面给大家介绍。在结束头条面试后,美团也因我在实习期间表现不错给我直接转正了,这个时候我手上基本确定有两家 offer了——头条和美团。
8 月份的时候,我又去 Boss 直聘上投了阿里,很快阿里就给我消息,电话简单的聊了一下,面试官觉得不错说可以帮我内推。幸运的是因为我春招时候通过了阿里的面试,尽管拒绝了实习,但秋招可以直接走快速面试通道,也就是只要进行最后一轮的面试,不过结果是面了两轮的 Boss 面。
在接下来的日子,我没有再投其他公司,也没有进行面试,我的秋招就这样结束了。其实现在想想还是有丢丢的后悔的,当时应该去腾讯面试下,今年腾讯福利待遇给的是真的香。
这样的日子一直持续到了 10 底,各个公司开始发正式 offer 了,美团打响了第一炮,给的薪资完完全全超过了我的认知,是的,就一个字,香。阿里和头条也在 11 月发了 offer。最终权衡了平台和部门业务,我选择了阿里的offer。
第 二 部分:过关斩将
关于面试这部分,就不再以时间顺序介绍,主要从公司的角度,讲述下我当时的面试情况,主要涉及面试题和各个公司的面试风格。
阿里
阿里的招聘流程很规范并且严格,招聘的每一位应届生都需要 P9 级别的面试官进行面试,因此阿里是我面试场次最多的一家公司,从开始到结束,大大小小一共经历了6 轮技术面试 + 2 轮 HR面试。
相对其他公司,阿里特别重视基础知识,考察的也比较深,算法的考察相对要弱点,这里我简单叙述下当时的面试情况。
第一轮面试 (60 min)
阿里的第一轮面试主要考察基础知识,没有问到任何项目相关的问题。
开始是简单的自我介绍,大概 5 分钟的样子,然后就是连环炮式的问题。
- 我看你有写到看过 Java 的源码,想问问 String 有什么样的了解 ?
- String 为什么是不可变得的,安全的 ?源码如何实现的 ?这样有什么好处 ?会造成什么问题 ?
- String 和 StringBuffer StringBuild 有什么区别 ?
- StringBuffer 源码如何实现 ?
在回答 String 的问题后,就是关于集合和并发的问题 ?
- List 基本实现有哪些 ?
- LinkedList 和 ArrayList 有什么区别 ?实际过程中如何使用这两种集合 ?
- HashMap 的实现 ?为什么要用红黑树 ?
- ConcurrentHashMap 实现,为什么是安全的,源码有看过吗 ?
- CAS 如何保证的,底层如何实现的?
- 可见性是什么 ?知道如何实现的吗 ?基于底层硬件如何保证可见性 ?(这里主要说了寄存器,高速缓存,写缓存器实现机制)
- 你对 AQS 的理解 ? 它实现原理是什么?如何中断 ?中断后怎么处理 ?
- 说说线程池的工作原理 ?有哪些核心参数 ?如果是你自定义一个线程池,需要考虑哪些因素 ?
因为当时我回答比较快,所有在完成上面的问题之后面试官又问了我数据库和虚拟机的问题
- Mysql 的索引实现有哪些 ?事务的特征 ?
- MVCC 是什么 ?Mysql 调优具体如何操作 ?
- explain 的用法,ref 代表什么意思 ? index 代表什么意思 ?
- JVM 的垃圾回收有哪些 ?年轻代老年代如何回收 ?
- 了解哪些常见的垃圾回收算法 ?
第一轮的面试大致就是上面的问题,因为当时在 Java 基础上问了特别多的问题,后续的框架 Spring 都没有进行提问,估计是时间不够了。
结束的时候手写了代码,一个是单例,另一题是两个栈实现一个队列,主要考察代码风格。
阿里是我面试过程中对基础扣的最细的,每一个问题都会一直深入问下去,直到最后的源码,如果没有理解透彻,很多问题都很难回答的令面试官满意。
第二轮面试 (50 min )
第二轮应该是部门主管,主要问了我所经历过的项目的一些东西。
- 简单介绍了项目,项目有遇到哪些挑战,团队的规模?
- 针对项目具体问了当时怎么实现的?
因为每个人的项目都不一样,这里我就不展开,项目问了有 20 分钟的样子。
然后问了一个技术的问题:淘宝上一个链接从点击到响应要经历哪些步骤 ?越详细越好 ?
因为当时面试官说了,要越详细越好,所以我回答了大概有 15 分样子。由于在我候研一和研二时候,先后给6位考研生进行过考研计算机基础知识的辅导,计算机网络我来来回回讲了6 次,所以对很多基础知识点十分熟悉。
可能面试官也很意外我说了这么多,最后没有再问其他的东西了,聊了聊学校导师让不让实习的话题。
第三轮面试(笔试)
因为今年阿里的政策变了,内推提前批次的也需要笔试,所以第三轮是笔试,总共两道题,是基于场景的算法解决。
具体的题目有点忘记了,一道是关于 BFS ,另一道是动态规划。我最后过了一道半的样子,AC 了大概 170%。一般来讲,笔试都要比面试的算法题难一个档位。
第四轮面试 (50 min)
第四轮是高级别的面试官,是一位做数据库的大神人物,面试主要分为两个阶段:
1:项目经历介绍,大概持续了有 15 分钟的样子,主要就是从项目角度考察表达逻辑和思考深度;
2:数据库知识,整个数据库的考察持续了大概 30 分钟的样子(因为在介绍的过程中,我说自己对数据库了解的比较深,是的,我又给自己挖坑了,碰到还是数据库大牛),主要面试问题如下:
- 事务的个人理解 ?
- 原子性如何保证 ?主要从 undo log 角度回答,一致性如何保证 (双写机制)?
- 持久性的实现,回答了 redo log ,以及数据库宕机后的持久化实现。
- 隔离性的实现 ?回答了锁机制和 MVCC,后面又具体介绍了 Mysql 常见的锁,比如:间隙锁,共享锁,排它锁,意向锁等等,还有 MVCC 在不同隔离级别的实现,版本控制链,ReadView 等。
- BufferPool 内部的数据结构
- InnoDB 的页结构,有哪些常见的压缩算法,行记录通常有包含哪些字段 等等本轮面试结束后,我就被通知拿到了阿里暑期实习的offer,很开心。
第 五 轮面试 (50 min )
第五轮面试其实是秋招时候的提前批次,因为春招通过了面试并且拿到了offer,所以秋招时有个快速面试通道,不需要在再进行基础面了,直接进行最后一轮的面试。
主要问的是项目经历,暑期没有来阿里实习的原因。简历上写了美团经历,所以项目的问题持续了有 20 分钟,问了当时团队主要做啥,大致的挑战,日活有多少 ?具体做了哪块的业务,有哪些收获。
最后做了一道算法题,旋转图像,是 LeetCode 上的原题。
剩下的就是基础问题,大部分都是重复的,我就不再展开了,在后面我会单独梳理出每个科目的核心知识点,
第 六 轮面试 (40 min )
阿里的第六轮是交叉面试,也是一位高P大佬,问的问题其实基本是我前面介绍过的,很大部分时间都是聊聊项目,然后说说自己的发展,对自己有什么样的定位。这一面是我当时在阿里面试最轻松的一次,因为涉及的技术比较少,更多是自己对以后发展的思考。
Hr 面试 (20 min)
Hr 在阿里是有生杀大权的,所以在面试的时候,大家都要重视下。
当时主要就是问了我的个人情况,为什么考研 ?对以后发展有什么看法 ?当时为什么不来阿里实习(这个问题最后基本属于必问题了),对城市有什么要求,Base 北京 or 杭州 ?
阿里的面试大致的就是这样了,给我的感受是特别重视基础,考察的是知识的深度,看看是否真的认真阅读过源码,了解它的原理,而不是简单的背一背题,刷一刷面经。
美团
美团春招找暑期实习的时候,主要面了 2 轮。具体的轮次要看部门,我另外一个同学当时就面了 3 轮。
第一轮面试 (50 min)
主要就是围绕基础 + 项目经历
- 简单的自我介绍,然后问了问项目经历,大概持续了有 15 分钟
- HashMap 的实现 ?ConcurrentedHashMap 实现 ?(这个是真的喜欢问)
- AQS 的理解,还看过哪些并发相关的工具 ? 我主要说了下 CountDownLatch 的用法,并且简单它基于 AQS 实现的原理
- SpringMVC 的实现 ?Spring 有了解哪些 ? 什么是 IOC ,什么是依赖注入 ?
- Http 协议,三次握手,滑动窗口问题 ?
- 说说你自己了解的设计模式,我大概聊了聊策略模式,模板方法模式,具体是结合 Spring 源码回答的。
- Mysql 的事务,为什么使用 B+ 树,有什么好处 ?
- 算法题问了一道和 DFS 相关的,具体的有点忘记了。
- 最后问了 Mysql 的优化,因为我简历有写优化 Sql 的经历,所以这个问题持续了 10 min 样子,主要是基于索引和 explain 来如何定位运行时间过长的原因
美团的面试相对还是比较简单的,不会特别的深入考察,不过涉及的问题比较广,基本各个科目都会被问到。
第二轮面试 (40 min)
这一轮是我后来部门主管面的,问的问题比较随意,主要介绍项目,问问了基础,反正还是那些。
最后给了一个开发设计题,主要是高并发限流的设计,要保证接口的幂等性,可用性,能支持高并发。
美团校招实习的时候面了两个部门,另外一个部门问题也大体类似,感觉还是比较简单的。后面因为实习转正了,直接给了 offer,所以秋招就没有在美团进行面试了。
头条
头条是我在秋招提前批面的,面试的是基础架构部门,总共面了三轮。
第一轮(50 min)
头条应该是所有公司中最注重算法的,自我介绍完后就来了两道算法题热身。
一道题是 LeetCode 原题,通配符的匹配,另一道是关于树的题目,和树路径相关。
2 道题大概持续了 10 - 15 分钟样子,然后进入的正式的面试环节。
- 具体问了当时在美团的实习经历,主要做了哪方面的业务
- 操作系统的知识,虚拟内存,调度算法,银行家算法等等
- 计算机网络相关,主要是三次握手,TCP 如何保证数据不丢失,了解哪些常见的协议
- 协程有了解吗 ?知道哪些分布式概念 (这个是真的不会)
因为头条的主要语言是 go,所以没有具体问和 Java 相关的知识。
第二轮(40 min)
头条的开场还是熟悉的算法题开路,其他问题大致都类似,最后问了两个场景解法方案的设计题。感觉算法对于面试头条来说太重要了,我认识的同学如果算法题表现不好,基本都挂了,所以如果要去面试头条,一定要好好刷刷算法题,问的问题我就不再总结了,真的就那些原题,来来回回问。
第三轮(50 min)
这是我在所有面试表现最差的一次,虽然最后头条也给了我 offer。
当时表现差并不是技术上的问题,而是在回答问题的时候,因为聊嗨了,自信过头了,错误地坚定了自己不确定的知识点,造成对面试官印象不是很好,导致最后在评级不是特别好,真是很深刻的一次教训。所以后面在面试阿里的时候,我都是老老实实,确认再确认之后才回答。
总结下,头条特别重视算法和基础学科,比如计算机网络,操作系统,数据结构,这些属于是必问的。
剩下的几家面试公司的就不再分享了,大致的问题都类似,在最后,我梳理下面试过程中我认为重要的知识点,基本这些知识能掌握 80%,感觉校招基本问题不大了。
Java 基础部分
面向对象相关
- 面向对象的三个特征
- Java 如何实现多态
- 面向对象和面向过程的区别
- 接口和抽象类的意义与区别
- 聊聊你对重载和重写的看法
语言相关
- 静态变量和实例变量的区别
- Java 创建对象的几种方式
- String s = new String("abc") 创建了几个 String 对象
- a=a+b 与 a+=b 有什么区别吗
- String StringBuffer StringBuilder 有什么区别
- 什么是不可变对象,好处是什么
- Java 程序初始化的顺序
- 内部类有什么作用
- Java 中有哪些基本类型,基本类型数据各占多少字节
- Java 中 修饰符的作用域以及可见性
- switch 中能否使用 String 做参数
- 什么是编译期常量? 使用它有什么风险
- 为什么Java 中只有值传递
- Static Nested Class 和 Inner Class 有什么不同
- 构造器 Constructor 是否可被重写
Object 方法相关
- Object 中有哪些常见的公共方法
- Java 中 == 和 eqauls() 的区别
- Object 中的 equals() 和 hashcode() 的联系
- a.hashCode() 有什么用
- final,finalize() 和 finally{} 的区别
- 深拷贝和浅拷贝的区别是什么
异常相关
说说你知道异常体系 ?以及常见的异常类
在异常处理中有什么需要注意的地方
集合相关
- 聊聊你知道的集合
- 说说 HashMap 的原理
- HashMap 1.7与1.8区别
- HashMap 和 Hashtable 的区别
- HashMap 和 1.8 ConcurrentHashMap 的关系
- HashSet 底层是如何实现的
什么是迭代器
- 快速失败 和 安全失败 的区别是什么
- Iterator 和 ListIterator 的区别是什么
IO 相关
- InputStream/OutputStream 和 Reader/Writer 有何区别 ?何为字符,何为字节
- 什么是比特(Bit), 什么是字节(Byte), 什么是字符(Char), 它们长度是多少, 各有什么区别
- 什么是流, 按照传输的单位, 分成哪两种流,并且他们的父类叫什么
- NIO、BIO、 AIO之间有什么区别
- 同步、异步、阻塞、非阻塞的区别
并发核心知识
一、背景
说说你理解的并发?它和并行有什么区别吗?
并发编程会带来什么问题?Java 中又是如何解决的?
二、线程相关
什么是进程,什么是线程,进程和线程有什么区别?
如何在 Java 中实现线程?
说说你知道关于 Thread 的常见方法?
说出线程生命周期,以及它们之间的转化关系?
wait() 和 sleep() 的区别?
线程间是如何通信的
如何停止一个正在运行的线程 ?
三、Java 内存模型
什么是 Java 内存模型 ?内存模型的引入主要解决什么问题? Java 中各个线程是怎么彼此看到对方的变量的?
什么是 Hppends-Before 原则?它解决了并发的什么问题?
请谈谈 volatile 有什么特点,为什么它能保证变量对所有线程的可见性?volatile 适用场景?
既然 volatile 能保证变量在线程间的可见性,是不是就意味着 volatile 修饰的变量的运算是线程安全的?
请说一下 volatile 与 sychronized 的异同
四、锁相关
常见锁的实现方式有哪些 ?
锁会带来哪些问题 ?如何进行优化 ?
synchronized 的底层实现原理 ?
JVM 对 Java的原生锁做了哪些优化 ?
什么是公平锁,什么是非公平锁?有哪些常见的公平锁和非公平锁?为什么说synchronized 是非公平锁?
什么是乐观锁,什么是悲观锁?为什么说 synchronized 是悲观锁?乐观锁的实现原理是什么?乐观锁一定好吗?
什么是 CAS ?
常见的原子类有哪些,它有什么不足 ?如何进行优化 ?
说说你对 AQS 的理解 ?它内部是如何实现的 ?
请尽可能详尽的对比一下 synchronized 和 ReentrantLock 的区别 ?
ReentrantLock 是如何实现可重入的 ?
五、线程池
什么是线程池 ?线程池的作用是什么 ?
创建线程池有哪些核心构造参数 ?
线程池是如何实现的 ?
Java 中默认实现的线程池有哪些?它们的区别 ?
如何在 Java 线程池中提交任务 ?它们有什么不同 ?
常见的线程拒绝策略有哪些 ?
常见的阻塞队列有哪些 ?
为什么建议手动创建线程池 ? Java 提供的线程池有什么缺点 ?
六、其他
ConcurrentHashMap 了解吗?实现原理是怎样的?
请谈谈 ThreadLocal 为什么是并发安全的,一般应用在什么场景下 ?
为什么建议慎用 ThreadLocal,谈谈你的理解?
Condition 接口及其实现原理 ?
什么是 Callable ? 什么是 Future ?
说说你知道的同步工具类?请分别介绍一下 ?
Mysql 核心知识
一、数据库基础
1、数据库三范式是什么?
二、MySQL 体系结构
1、描述一下MySQL体系结构?
三、存储引擎
1、存储引擎的作用是什么?
2、你知道哪些存储引擎?
3、MySQL默认采用的存储引擎是什么?
4、说一下 InnoDB 和 MyISAM 的区别?
5、InnoDB的文件存储结构?
6、介绍下 Mysql 存在的常见日志 ?
四、索引
1、什么是索引?
2、索引常见的实现方式?
3、为什么使用索引?
4、索引有什么缺点?
5、InnoDB 是如何实现索引的?
6、为什么不采用 Hash 索引呢?
7、为什么采用 B+ 树实现索引而不采用B树呢?
8、你知道哪些索引?
9、唯一性索引和主键索引的区别?
10、聚簇索引与非聚簇索引的区别?
11、什么是覆盖索引?
12、什么情况下索引会失效?
13、什么是最左匹配原则?
五、事务
1、什么是事务?
2、事务的特性?
3、InnoDB是如何保证这些特性的?
4、事务并发会产生哪些问题?
5、说一下事务的隔离级别?
6、InnoDB是如何实现事务的隔离性的?
六、锁
1、说一下你知道的 InnoDB 中的锁?
2、说一下意向锁的用处?
3、什么是间隙锁?
4、InnoDB在什么情况下使用行锁?
5、在写数据时一定会加锁吗?那读数据呢?为什么这样做?
6、那你说一下什么是 MVCC 机制?原理是什么?
7、在 MySQL 中怎么给 Select 语句显示加锁呢 ?
8、MVCC 机制能解决幻读问题吗?
9、InnoDB 是怎么解决幻读问题的?
10、说一下 nextkey lock 的原理?
11、既然在可重复读隔离级别下结合nextkey lock可以解决幻读问题,为什么还需要 S 可串行化呢?
七、优化
常见的优化手段,主要针对 SQL 运行时间
Java 虚拟机
内存结构与垃圾回收
- 介绍一下 JVM 运行时数据区
- 哪些区域会发生GC
- 常见的垃圾回收算法有哪些以及它们的优缺点
- 如何判定一个对象是否是垃圾
- 哪些对象可以作为GC Roots
- HotSpot为什么要分为新生代和老年代
- 对象在什么时候会进入老年代
- 什么时候会触发 Full GC
- 你知道哪些垃圾回收器
- 分别介绍一下 CMS 和 G1 的原理
- 对象的创建过程
- Java 中会存在内存泄露吗 ?简单描述
类加载
- 能描述一下类加载的过程
- 什么时候会触发类的初始化
- 知道哪些类加载器
- 什么是双亲委派机制?为什么使用这种机制
- 为什么有时候需要破坏双亲委派模型?了解 Tomcat 的加载机制
- 如何实现自己的类加载器
- 如何判断一个类是无用的类
执行引擎与编译优化
- Java 方法在执行时,对应的栈帧结构是怎样的
- 了解 JVM 方法调用吗 ?它的主要目的是什么
- 重载和重写的区别?对它们的调用在 JVM 层面有什么不同
- 将 Java 代码编译成字节码的过程
- 你知道的在代码编译期间发生的优化
- Java 是解释执行还是编译执行,Java 为什么采用这种执行模式
- 哪些代码属于热点代码
- 谈谈你对分层编译的理解
JVM 调优
- 你知道哪些 JVM 相关参数
- 对 JVM 调优有了解吗
- JVM 常见面试题汇总
计算机网络
- TCP/IP 中常见的协议
- TCP, UDP,IP,以太网报文段格式以及重要字段?在浏览器收入 URL 回车后的过程和相关协议?
- 传输层提供了哪些功能?
- TCP 和 UDP 的区别和应用场景,基于 TCP 的协议有哪些?基于 UDP 的有哪些?
- 为什么应用开发人员宁愿在 UDP 之上构建应用,也不选择 TCP ?
- 在传输层中 UDP 有什么特点?
- 在传输层中 TCP 有什么特点?
- TCP 的连接管理 三次握手
- 为什么采用三次握手?
- 为什么 TCP 建立连接时不能每次选择相同的,固定的初始序号?
- 服务器如何避免 SYN 洪泛攻击?
- TCP 的连接释放 — 四次挥手
- 为什么采用 "4 次挥手" 释放连接,且发送最后一次握手后要等到 2MSL(最长报文段寿命) 的时间?
- TCP 连接管理各个阶段的状态
- TCP 的可靠传输
- TCP 流量控制
- TCP 拥塞控制
- TCP 粘包现象原因和解决方法
- HTTP 1.0 和 HTTP 1.1 和 HTTP 2.0 的主要区别是什么?
- HTTP 请求有哪些,GET 和 POST 的区别?
- HTTP 中状态码
- HTTP 和 HTTPS 区别?
- HTTPS 加密过程
- 说明 SSL/TSL 4 次握手的过程?(HTTPS 加密过程)
- HTTP 格式
- 转发和重定向区别
- Cookie 和 Session 的区别
操作系统
- 进程和线程的区别
- 协程
- 进程间通信方式 IPC
- 用户态和核心态
- 操作系统分配的进程空间是怎样的?线程能共享哪些
- 操作系统内存管理方式,分页分段以及段页式的优缺点
- 页面置换算法有哪些,FIFO 为什么不好?如何改进? LRU 思想,手写 LRU
- 死锁条件,解决方式
- linux 指令知道哪些
- 进程调度算法有哪些
Spring 知识
- 说说你理解的 IOC
- 控制反转有什么作用
- IOC 的优点是什么?
- BeanFactory 和 ApplicationContext 有什么区别?
- IOC 的启动流程
- Spring 有几种配置方式 ?
- Spring 的注入方式?
- 请解释一下 Spring Bean 的生命周期?
- 什么是循环依赖?Spring 是如何解决循环依赖的?
- 什么是 AOP?
- Spring AOP 的实现原理?
- SpringMVC 请求过程
- 说说连接的 SpringBoot
Redis 缓存
- 为什么使用Redis
- redis 的线程模型是什么?
- 为什么 redis 单线程却能支撑高并发?
- redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
- redis 的过期策略都有哪些 ?
- 内存淘汰机制都有哪些?
- 如何保证 redis 的高并发和高可用?
- Redis 主从结构
设计问题
- 100亿黑名单URL,每个64B,判断一个URL是否在黑名单中
- 2GB内存在20亿整数中找到出现次数最多的数
- 40亿个非负整数中找到没有出现的数
- 40亿个非负整数中找到一个没有出现的数,内存限制10MB
- 找到100亿个URL中重复的URL
- 海量搜索词汇,找到最热TOP100词汇的方法
- 40亿个无符号整数,1GB内存,找到所有出现两次的数
- 10MB内存,找到40亿整数的中位数
- 设计短域名系统,将长URL转化成短的URL.(知乎老哥给出了答案,博客有人根据他的总结了一下,很好)
- 让你系统的设计一个高并发的架构,你会从哪几个方面考虑?
- 一个千万级的APP,你要搞定关注和粉丝列表,你用什么来做。要求最后一个关注的在最前面。新增和取关都要比较快的反馈你怎么做?如果一个人关注了之后,服务器宕机了怎么办?
- OOD design:计费停车场
- 假设有这么一个场景,有一条新闻,新闻的评论量可能很大,如何设计评论的读和写
- 显示网站的用户在线数的解决思路
第 三 部分:文章彩蛋
你没有看错,文章到这终于要画上一个句号了。看到这,我想送给每个人一段话,这是我最喜欢的一段话,是乔布斯当年在斯坦福演讲演讲的内容:
我们的人生是由一个个片段组成的,你在向前展望的时候不可能将这些片段串连起来;你只能回顾的时候将这些点点滴滴重新的串连。
所以你必须相信这些片段会在你未来的某一天串连起来,你必须要相信某些东西:你的勇气、目的、生命、因缘。这个过程从来没有令我失望,只是让我的生命更加的与众不同而已。
希望我们每一次的选择,从未来的角度回首它都是最好的,不多不少,不不偏不倚,恰好在那。
**************************
********************************************
如果大家有什么问题,想要整理的答案,免费获取,可以私聊+V : sishao2099 当然希望表达来意,比如 :大三 — 求题库或者研二—求分享等等,最好著标注下自己现在是毕业生大三或者研二校招需要找工作。我怕是乱七八糟的社会人士,可能就不会添加了。
最后希望大家能都有一个满意的 offer,希望我的经历可以帮助到大家。
#面经##offer比较##笔经##Java##后端开发#