前言

娱乐圈有“男神收割机”“女神收割机”。同样程序员圈子也有“Offer收割机”。

想必大家都有面试的经历吧,但是你有面一个拿一个offer的经历吗。或许听起来很离谱,但是也确实有这样的事情,毕竟万事皆有可能。之前我在网上认识的一位网友,我们有一天下午聊天的时候聊到面试这块,他跟我说了他的面试经历:他面了饿了么、阿里、京东、拼多多、爱奇艺,听着好像很简单的样子,但是别人背后付出的可能是你的百倍千倍。好了废话不多说。现在我开始写面经,希望能帮助到大家!


首先,他先是去面了阿里

一面

自我介绍后,直接开始问多线程相关问题。大概问题如下:

1.为什么要使用多线程?多线程需要注意的问题。上下文开销、死锁等。

2.java内存模型、导致线程不安全的原因。

3.volatile关键字,缓存一致性、指令重排序概念。

4.synchronize关键字,java对象头、Markword概念、synchronize底层monitorenter和moniterexit指令。

5.lock语句和synchronize对比。

6.原子操作,CAS概念、相关参数。

7.乐观锁、悲观锁概念及使用场景。

8.线程池概念、实现原理等。

9.JVM锁的优化,偏向锁、轻量级锁概念及原理。

10.多线程方面回答得比较好,面试官反馈比较满意。

然后就是数据库相关的:(其实没这么多,有些是我整理的,挑了一些概率大的题目,仅参考)

1.在MySQL中ENUM的用法是什么?

2.CHAR和VARCHAR的区别?

3.为什么事务可以优化数据库?

4.Mysql的数据库引擎,区别特点

5.数据连接池采用了什么设计模式?意义是什么?

6.项目用到什么数据库?隔离级别?每个隔离级别各做了什么

7.数据库的索引?mysql不同引擎索引的区别

8..索引使用的注意事项

9..数据库挂了怎么办?除了热备份还有什么方法?

10..接上面场景题:服务器挂了,优惠券还没发怎么办?

11..数据库挂了怎么办?

12..数据库优化中,有一个关键字可以分析执行过程,知道么(explain关键字)?

13..数据库优化有什么了解?

14..索引的原理说一下吧。

15.联合索引,如果联合索引(a,b),现在查询a>0,b>0可以用到这个联合索引么?(太久没看,生疏了,答错了,答案应该是不能,只能用到a的索引,范围索引只能用到一列)

16.Mysql集群数据是怎么同步的?

17.Select,poll,epoll的区别。

还围绕了项目架构、Java基础、JVM、并发编程、中间件技术和Dubbo服务治理框架等展开。(题目不怎么记得了)

二面(问得比较深入,问题也是格外的令人头疼)

JVM方面

1.java内存模型,五个部分,程序计数器、栈、本地栈、堆、方法区。

2.每个部分的概念、特点、作用。

3.类加载的过程,加载、验证、准备、解析、初始化。每个部分详细描述。

4.加载阶段读入.class文件,class文件时二进制吗,为什么需要使用二进制的方式?

5.验证过程是防止什么问题?验证过程是怎样的?加载和验证的执行顺序?符号引用的含义?

6.准备过程的静态成员变量分配空间和设置初始值问题。

7.解析过程符号引用替代为直接引用细节相关。

8.初始化过程jvm的显式初始化相关。

9.类卸载的过程及触发条件。

10.三种类加载器,如何自定义一个类加载器?

11.双亲委派机制。

12.JVM内存分配策略,优先放于eden区、动态对象年龄判断、分配担保策略等。

13.JVM垃圾回收策略,怎样判对象、类需要被回收?

14.四种垃圾回收算法标记-清除、复制、标记-整理、分代收集。

15.JVM中的垃圾回JVM收器,新生代回收器、老年代回收器、stop-the-world概念及解决方法。

16.四类引用及使用场景?

这里给大家分享一个JVM知识图谱,可以分享给大家。

JVM知识图谱展示

通信协议

接下来是对通信协议的了解,大概问了下列问题:

1.TCP三次握手、四次挥手。

2.http请求报文结构、响应报文,状态码。

3.http2.0相比于http1.0的新特性,推送、多路复用、消息头压缩等。

数组面试问题

1.如何在给定的1到100的整数数组中找到缺失的数字?
2.如何在给定的整数数组上找到重复的数字?
3.如何在未排序的整数数组中找到最大和最小的数字?

链表面试问题

1.如何在没有递归的情况下反转单链表?

2.如何在未排序的链表中删除重复节点?

3.你如何找到单链表的长度?

4.如何在单链表中找到最后的第三个节点?

5.如何使用Stack找到两个链表的总和?

二叉树、字符串面试问题

1.你如何计算给定字符串中的元音和辅音?

2.如何计算字符串中给定字符的出现次数?

3.如何找到字符串的所有排列?

4.如何在不使用任何库方法的情况下反转给定句子中的单词?

5.如何使用递归来反转给定的字符串?

6.如何检查字符串是否只包含数字?

7.如何在字符串中找到重复的字符?

8.如何在没有递归的情况下按预先遍历给定的二叉树?

9.如何在给定的二叉树中执行有序遍历?

10.如何在没有递归的情况下使用inorder遍历打印给定二叉树的所有节点?

11.你如何实现一个后序遍历算法?

12.如何在没有递归的情况下遍历后序遍历中的二叉树?

13.如何打印二叉搜索树的所有叶子?

14.如何计算给定二叉树中的多个叶节点?

这里整理了关于数据结构相关资料文档,需要的小伙伴请查看文末获取方式。


三面

1.Spring Boot有哪些优点?

2.什么是 Spring Framework?

3.Spring Framework有哪些不同的功能?

4.Spring Framework中有多少个模块,它们分别是什么?

5.什么是 Spring配置文件?

6.什么是Spring IOC容器?

7.BeanFactory–BeanFactory实现举例

8.解释AOP模块

9.解释JDBC抽象和DAO模块

10.解释对象/关系映射集成模块

11.哪种依赖注入方式你建议使用,构造器注入,还是Setter方法注入?

12.对MySQL的锁了解吗

13.隔离级别与锁的关系

14.按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法

15.从锁的类别上分MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了

16.MySQL中InnoDB引擎的行锁是怎么实现的?

17.什么是死锁?怎么解决?

这里给大伙儿分享一张Spring知识总结图(不知道怎么学习的可以收藏)



京东(四面)

一面

1.Elasticsearch是怎么使用的,有接触过大数据的应用吗?

2.项目里的数据处理是怎么做的?

3.当前要存入elasticsearch的数量过大,会在存储时造成等待,存储速度很慢,如何解决这个问题?

4.Jvm里如何判断对象死亡?

5.Jvm里如何判断类死亡?

6.Hashmap在jdk7和8里的区别。

7.多线程,synchronized和lock的区别。

8.Concurrenthashmap的数据结构讲一下,如何做到线程安全的?

9.Concurrenthashmap新插入一个对象会Hash几次?

10.讲一个简历上的项目,技术难点在哪?

11.Jvm内存分区,为什么要有新生代和老年代?

12.有做个VM内存优化吗?

13.数据库索引主键和唯一索引有什么区别?

14.聚集索引和非聚集索引的区别?

15.MySQL存储引擎innoDB和MylSAM的区别?

16.InnoDB的B+树索引叶子节点的Data域存储的是什么?MylSAM的B+树索引叶子节点的Data域存储的是主键还是物理地址?

二面

1.Hashmap说下吧。

2.线程池有哪些参数,如果满了新的线程会怎么处理?

3.你们网关有配jvm参数吗,都有哪些?

4.高并发的时候你们网关高可用怎么做的?

5.数据库用过吗,如果现在有十亿的数据给你怎么存?

6.你们的熔断降级怎么做的?

7.项目的线程池怎么配的?

8.字符串的类说一下。

9.两个字符串都是y,用equals返回什么?

10.Hashcode和equals的关系。

11.两个线程一起输出100个数怎么做?

12.SpringBoot的AOP是什么?

三面

1.分布式下redis如何保证线程安全?

2.redis持久化的方式以及区别;

3.zookeeper如何实现分布式锁、其他分布式锁怎么实现?

4.kafka的架构,如何用kafka保证消息的有序性?

5.数据库的优化包含哪些?MySQL的优化,谈两个你优化的例子。

6.最有技术难度的项目,介绍下相关核心设计流程。

7.工作中,遇见了技术瓶颈无法解决,你的解决思路?

8.未来你的职业规划是怎么样?

HR面

  1. 你觉得自己的优点是什么,有哪些缺点呢?(灵魂拷问)

  2. 你之前公司给的薪水是怎么样的?如果阿里给你offer,你是怎么考量这两个offer的?

  3. 为什么没有在之前的公司留下来?之前公司的主管是怎么评价你的?

  4. 除了今天这个面试,还安排了其他公司的吗?(这不是无聊吧)


饿了么

1.HashMap和hashtable的区别有哪些?

2.Mysql有哪些索引方式

3.一个Java文件有3个类,编译后有几个class文件?

4.局部变量使用前需要显式地赋值,否则编译通过不了,为什么这么设计?

5.ReadWriteLock读写之间互斥吗?

6.Semaphore拿到执行权的线程之间是否互斥?

7.写一个你认为最好的单例模式。

8.B树和B+树是解决什么样的问题的?怎样演化过来,之间的区别?

9.写一个生产者消费者模式。

10.写一个死锁。

11.CPU 100%怎样定位?

12.Synchronized底层实现原理。

13.volatile作用,指令重排相关。

14.Spring怎样解决循环依赖的问题?

15.说说InheritableThreadLocal 的实现原理?

16.InheritableThreadLocal 是如何弥补 ThreadLocal 不支持继承的特性?

17.CyclicBarrier内部的实现与 CountDownLatch 有何不同?

二面

1.多线程先入队出队操作的线程安全?

2.为什么不使用一把锁,使用两把为何能提高并发度?

3.基于数组的阻塞队列 ArrayBlockingQueue原理。

4.讲讲对JUC 中回环屏障 CyclicBarrier 的使用?

5.CyclicBarrier内部的实现与 CountDownLatch 有何不同?

6.Semaphore 的内部实现是怎样的?

7.简单对比同步器实现,谈谈你的看法?

8.什么是Java指令重排序?

9.Java中Synchronized关键字的内存语义是什么?

10.Java中Volatile关键字的内存语义是什么?

11.什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁?

三面

1.说说分库与分表设计

2.分库与分表带来的分布式困境与应对之策

3.说说 SQL 优化之道

4.MySQL 遇到的死锁问题

5.存储引擎的 InnoDB 与 MyISAM

6.数据库索引的原理

7.为什么要用 B-tree

8.聚集索引与非聚集索引的区别

9.limit 20000 加载很慢怎么解决

10.选择合适的分布式主键方案

11.选择合适的数据存储方案

12.ObjectId规则是什么?

13.聊聊 MongoDB使用场景吧。

14.pring MVC运行流程是什么?

15.Spring MVC启动流程说一下吧。

16.Spring 的单例实现原理是什么?

17.Spring 框架中用到了哪些设计模式?


拼多多

一面

1.自我介绍。

2.部门组织结构是怎样的?

3.给我一张纸,画了一个九方格,都填了数字,给一个MN矩阵,从1开始逆时针打印这MN个数,要求时间复杂度尽可能低。

4.链路追踪的信息是怎么传递的?(RpcContext的attachment,说了Span的结构:parentSpanId + curSpanId)

5.SpanId怎么保证唯一性?(UUID,说了下内部的定制改动)

6.RpcContext是在什么维度传递的?(线程)

7.Dubbo的远程调用怎么实现的?(讲了读取配置、拼装url、创建Invoker、服务导出、服务注册以及消费者通过动态代理、filter、获取Invoker列表、负载均衡等过程(哗啦啦讲了10多分钟),我可以喝口水么)

8.Spring的单例是怎么实现的?(单例注册表)

9.为什么要单独实现一个服务治理框架?(说了下内部刚搞微服务不久,主要对服务进行一些监控和性能优化)

10.谁主导的?内部还在使用么?

11.逆向有想过怎么做成通用么?

12.Java中的HashMap、TreeMap解释下?(TreeMap红黑树,有序,HashMap无序,数组+链表)

13.TreeMap查询写入的时间复杂度多少?

14.HashMap多线程有什么问题?

二面

1.CAS和synchronize有什么区别?

2.都用synchronize不行么?

3.如果要保证线程安全怎么办?(ConcurrentHashMap)

4.ConcurrentHashMap怎么实现线程安全的?(分段锁)

5.get需要加锁么,为什么?(不用,volatile关键字)

6.Volatile的作用是什么?(保证内存可见性)

7.底层怎么实现的?(说了主内存和工作内存,读写内存屏障,happen-before,并在纸上画了线程交互图)

8.在多核CPU下,可见性怎么保证?(思考了一会)

9.聊项目,系统之间是怎么交互的?

10.系统并发多少,怎么优化?

11.Linux进程间通信的方式?

三面

1.TCP连接的特点大概说一下吧。

2.TCP连接如何保证安全可靠的?

3.为什么TCP连接需要三次握手,两次不可以吗,为什么?

4.动态代理与cglib实现的区别是什么?

5.那么你说说代理的实现原理吧。

6.看过Spring源码没,说说Ioc容器的加载过程吧。

7.了解过字节码的编译过程吗(这个回答的有一些含糊,就跳过了)

8.Hadoop里面由哪些组件,你用过哪些?

9.Spring Bean 的生命周期大概说说。

10.nat是什么?属于哪一层?

11.介绍一下网络分层的模型

12.链路层有什么协议?

13.数据库范式是什么?

14.面向对象三大特点。


爱奇艺

一面

1.手撕代码。牛客的原题,可以去练练:NC22合并两个有序的数组。

2.TCP/IP协议。

3.长连接与短连接。

4.mapreduce过程。

5.多路归并的时间复杂度。

6.海量url去重类问题。

7.Java NIO使用。

8.倒排索引的原理说一下吧。

9.对分词技术的了解。

10.HTTP协议是哪一层的?其报文结构如何?七层网络结构是?

11.HTTP 请求/响应的步骤有哪一些?(大概说说就可以,没有讲得很详细)

二面

1.算法方面了解哪些?简述动态规划、贪心算法。

2.缓存问题,缓存与内存的区别。以及数据库连接池。

3.volatile关键字介绍一下。

4.多线程实现方式,三种。

5,JVM介绍一下,从他的编译之类,加载(忘记回答父类,子类,以及静态代码块,普通代码块的加载过程)

6.Map,Collection的关系。

7.ArrayList扩充问题。add()方法的底层实现。

8.spring 的核心如:IOC AOP等,注入一个UserDaoImpl时,UserDaoImpl有几个实例,一个还是多个。

9.介绍一下同步,安全与不安全。

10.Thread中,ThreadLocal,Lock等。

11,.数据库索引的底层实现。B二叉树

12.线程池,线程池有多少种,每种的特点。

总结

最后针对于上面的面试问到的知识点我总结出了互联网公司Java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家。

希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。

资料获取方式:点击传送门 即可获取上述资料~