这是一份来自美团外卖的隔夜烤面筋(Java)
lz 还是从 3 月份投递的美团,早就以为人招满了,没抱希望了,没想到昨天下午突然接到了一个山东的电话,当时正在给手机贴膜,吓得我都贴歪了,暴风哭泣.jpg,然后就约了一个半小时后开始面试,这次面试主要是根据简历来发问的,面试体验也挺好的,面试官会说清楚问题的条件之类的,然后根据你的回答来继续发问(真祸从口出),每当我回答完后,面试官总喜欢说了解了解,跟滴滴的面试官有的一拼,仿佛有种被摸透了的感觉(摊手.jpg),下面是我记录的面经,分享一下。
项目
- 自我介绍
- 介绍下头条资讯网站的数据库表的设计,这个网站一共有几张表?
- image 字段存的是一张图片吗?你这个上传的图片放在另外一个位置?
- comment_count 字段是指对文章评论人数的统计是吗?它是放在评论表里面吗?
- 评论功能是只支持罗列型的评论是吧?比如说用户 A 给某一条新闻评论,然后支持用户 B 能对 A 的评论进行回复吗?
- 比如说 news 表有建索引吗?或者说项目中有用到索引吗?
- 简单说一下对索引的理解,或者说为什么数据库要有索引
- 了解 MySQL 中有哪些常用的索引引擎吗?
- 了解 Innodb 和 MyISAM 的差别吗?
- 除开使用 B+ 树实现的索引,还了解其他数据结构实现的索引吗?
- 详细说一下哈希索引和 B+ 树索引的区别
- 哈希索引不支持范围查询,对吧?
- 项目中封装用户信息的目的是什么?
- 项目中的拦截器是用的 Spring 的一个特性吗?
- 这里是需要认证用户相关的合法性是吗?
- 这个拦截器其实是一个 Spring AOP 思想的应用,简单介绍下 Spring AOP
- Spring 已经用一些 Controller 支持了业务逻辑,为什么还要有 AOP 的存在?
- 为什么用 ThreadLocal 类来封装用户信息,不能用一些简单的类来实现你这个功能吗?
- 项目中有用到多线程吗?
- 简化了后续开发的成本是指通过拦截器简化了后续开发成本吗?
- 具体是什么功能需要异步化?
- 了解其他的消息中间件吗?
- 简单说下 Redis 的底层数据结构
JVM
- 简单说下 JVM 的内存模型
- 说一下 Java 虚拟机的类加载机制
- Java jdk 中会有自己实现的一些类,比如 Integer 类,假设自己开发时也想开发一个同名的类,此时在类的加载过程中,JVM 是如何确定你使用的是哪一个类?
- JVM 中可以管理对象,对象是有生命周期的,那么JVM 是如何确定一个对象是不是有引用的?
- 了解 JVM 的垃圾回收算法吗?
- 了解 JDK 1.8 的垃圾回收机制吗?
其他(从这里开始面试官开始根据简历随机发问了,摊手.jpg)
- 解释下为什么 TCP 创建连接时只需要 3 次握手,而释放连接时需要 4 次挥手?
- 了解跟 MyBatis 类似的一些框架吗?
- MyBatis 中其实是有数据库连接池的,那么为什么要有数据库连接池?为什么不可以来一个我就创建一个 JDBC 连接?
- MyBatis 支持事务吗?
- 看你简历写阅读过部分 JDK 源码,阅读过哪些源码?
- 说一下 ArrayList 和 LinkedList 的区别
- 有看过一些并发的集合吗? 答:ConcurrentHashmap
- 你刚才说到了锁,为什么要在并发的时候使用锁这个东西呢?
- 在 ConcurrentHashmap 里面是如何实现锁这个机制的呢?
- 我们都知道 synchronized 和 cas 都是原生的或者说 jdk 自己支持的锁的机制,那你了解过一些其他实现并发包的机制吗?例如 Lock 框架
- 刚才提到锁,肯定存在一些异常场景,比如说死锁,那么你了解死锁避免的一些方法吗?