京东&美团研发面经

京东&美团研发面经

本文首发于微信公众号:程序员江湖

京东Java工程师

美团点评 后台开发工程师

1程序员

京东提早批Java开发web

电话面试面试

原本想等面完再发个面经,等了半个月了没等到。算法

一面:设计模式

0 自我介绍,讲一下项目中的多线程实现api

1 Java的线程池的参数,拒绝策略,阻塞队列等实现和使用缓存

2 fixethreadpool使用的是什么阻塞队列,若是使用arrayblockingqueue或者linkedblockingqueue会有什么问题。微信

3 ArrayList和linkedlist有什么区别,扩容呢网络

4 hashmap,hashtable,concurrenthashmap1.7和1.8选一个说一下。多线程

5 jdk1.8针对hashmap使用红黑树优化目的是什么,红黑树的结构说一下。

红黑树的特性:

(1)每一个节点或者是黑色,或者是红色。

(2)根节点是黑色。

(3)每一个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]

(4)若是一个节点是红色的,则它的子节点必须是黑色的。

(5)从一个节点到该节点的子孙节点的全部路径上包含相同数目的黑节点。

6 JVM了解么,说一下内存结构,堆区的分代,垃圾回收以及所用算法。

7 为何要划分年轻代和老年代,方法区是否会垃圾回收,还问了gc时要扫描哪些位置,说了gc root,他问具体呢,虚拟机栈的局部变量,而后说其余忘了。

在Java虚拟机中判断一个对象是否能够被回收,有一种作法叫可达性分析算法,也就是从GC Root到各个对象,若是GC Root到某个对象还有可达的引用链,那么这个对象就还不能被回收,不然就等着被收割吧。

这里既然提到了GC Root,那么哪类对象能够做为GC Root呢,这是一个在面试中常常被问到的问题。

《深刻理解Java虚拟机》一书中是这么说的,一下几种对象能够做为GC Root:

虚拟机栈中的引用对象

方法区中类静态属性引用的对象

方法区中常量引用对象

本地方法栈中JNI引用对象

8 MySQL了解么,说一下创建索引要考量的点,说了索引筛选率,过滤使用的字段,以及explain查看是否使用了索引等。

一、表的主键、外键必须有索引; 

二、数据量超过300的表应该有索引;

三、常常与其余表进行链接的表,在链接字段上应该创建索引; 

四、常常出如今Where子句中的字段,特别是大表的字段,应该创建索引;

五、索引应该建在选择性高的字段上;

六、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

七、频繁进行数据操做的表,不要创建太多的索引;

9 MySQL的隔离级别有哪些,默认级别是什么,他说是可重复读。

10 为何select方法默承认以不加锁呢,明明可能会有并发冲突,我说根据隔离级别判断是否加锁,他说可重复读级别下select是不加锁的,为何。

我说应该是用了乐观锁,也就是MVCC多版本并发控制,适用于读多写少,因此不加锁。

11 Redis提供有哪些数据类型

二面:

1 讲一下两个项目,分别作了什么,以为跟本身作的项目有什么不一样,如何看待这种不一样,应该如何改进。

2 平时怎么学习,你的博客通常写了什么,以为和高质量博客的差距在哪里。

我说我原创的都是比较基础的,进阶一点的博客主要是整理别人的文章。

3 Java虚拟机了解么,讲一下内存分区和gc,如何排查堆内存的问题,说使用jmap转储dump文件分析或者使用jstat等工具检测gc。

4 Java的线程池了解么,看过它的源代码么,怎么修改源码能够实现线程状态的监控呢。

visualvm工具

5 web框架了解什么,讲讲SpringMVC的启动过程,讲了mvc上下文以及dispatcher初始化过程和请求流程。

6 设计模式了解么,单例,工厂,分别出如今什么场景。

Spring,servlet,Spring的工厂方法

7 MySQL的select1和select *有什么区别,为何加索引访问比不加索引要快。

8 负载均衡的几种算法,缓存的几种淘汰策略。

9 计算机网络了解么,http的header有哪些字段,是否包含ip地址。

10 有什么想问,能先来实习么,不能。

我说了不能先实习,而后就没有而后了,emmm,等了2周没有动静,估计凉凉。

美团一面

后台开发工程师

电话面试

1 实习经历

2 object类有哪些方法,hashcode,equals,clone,notify,wait。问我hashcode用在哪,说了hashmap

3 hashmap的结构,1.7和1.8有哪些区别,除了红黑树优化之外还有哪些改进,说了扩容时头插法改尾插法。

4 开始问我头插法和尾插法的区别,头插法在多线程时会出现什么问题,我说的是扩容时的死链,后来引导我说了并发插入的数据丢失问题。

5 concurrenthashmap的实现原理,1.7和1.8有什么区别,分段锁,synchronized和cas操做。

6 cas操做是怎么实现的,为何是原子性的。wait和notify方法用在哪里,wait和sleep的区别,notify后面的代码会不会运行。

7 synchronized和lock的区别在哪里,使用方式上有什么区别。lock的trylock方法作了什么,我说了cas操做和加入阻塞队列,以及公平锁和非公平锁的区别。

8 你的项目用到countdownlatch,为何要用,有什么问题,如何监控这个问题。

9 线程池用过哪些,线程池有哪些参数,而后问我几个经常使用线程池的用法和实际场景问题。

10 cas操做是哪一个包里的,volatile变量用过么,有什么做用,原理是什么。i++是否是原子操做,为何。

11 ArrayList和linkedlist有什么区别,如何遍历,使用for循环遍历linkedlist为何不行,linkedlist能使用索引访问么,使用迭代器呢。

这里我打错了。linkedlist也可使用for循环遍历。由于jdk提供了api。

12 JVM内存模型介绍一下,堆区怎么分代,分代垃圾回收算法说一下,老年代使用标记清除有什么问题。

13 说几个垃圾回收器,cms回收器有哪几个过程,停顿几回,会不会产生内存碎片。老年代产生内存碎片会有什么问题。问我有没有作过JVM优化。

14 jvm场景问题, 标记清除屡次后老年代产生内存碎片,引发full gc,接下来可能发生什么问题。我说分配大对象可能引发full gc。

15 哪些状况会触发full gc,full gc是否包括young gc和major gc,若是只包括这两个,为何要特意作full gc,我回答的是full gc还会回收方法区和堆外内存。

16 Java中有哪些引用,分别有什么用。

17 Spring的ioc和aop说一下。

aop记录日志,什么方法须要记录日志呢,增删改查都要么,我说前三个要把。他说那么若是有多级调用的rpc查找操做是否是也要记录日志,我说那是的。

18 分布式用过哪些技术,我说本身跑过一些demo,问我zookeeper有什么用,而后问我dubbo里的zookeeper是作什么的,我说服务注册中心。

19 服务注册中心实现什么功能,消费者的本地缓存若是失效了怎么办,我刚开始说屡次失败从新拉取,他说这样不行吧,我就说让生产者和注册中心维持心跳,失效时删除该节点而且更新消费者缓存便可。

20 MySQL用的挺多,问你一下,innodb的b+树索引,主键索引,聚簇索引有什么区别。

21 MySQL里有哪些锁,行锁表锁,乐观锁呢,我说了版本号和MVVC,开始问我MVVC。

22 事务的实际场景问题,两个事务,一个查一个新增,问可否查到新增的,我问他隔离级别,他说RR。MySQL的RR避免幻读,因此读不到新增数据。

23 MySQL的死锁怎么产生的,举了两个例子。

24 三个事务,两个加读锁,另外一事务尝试删除,应该是不行的。

25 两个事务,一个写提交,另外一个能不能读到,能够读到。

26 大概就是这些了。

美团貌似凉凉,此次确实答得不是很好。

▼更多精彩内容

腾讯研发面经

阿里中间件研发面经

蚂蚁金服研发面经

百度研发面经整合版

拼多多&快手研发面经

更多校招干货请关注公众号:程序员江湖

喜欢记得来一个

更多校招干货请关注公众号:程序员江湖。

--------------------- 本文来自 How_2_Play_Life 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/a724888...

相关文章
相关标签/搜索