2017阿里、京东、美团、滴滴Java面试题+参考答案整理
一、阿里巴巴面试
1、开发中Java用了比较多的数据结构有哪些?
从java.util包展开讲数据结构与算法--常用数据结构及其Java实现 - QueenKing - SegmentFault 思否
菜鸟手册Java 数据结构 | 菜鸟教程
2、谈谈你对HashMap的理解,底层原理的基本实现,HashMap怎么解决碰撞问题的?这些数据结构中是线程安全的吗?假如你回答HashMap不是线程安全的,接着问你有没有线程安全的map,接下来问了conurren包。
来自美团点评技术团队Java 8系列之重新认识HashMap
HashMap不是线程安全的、满足线程安全的话 可以使用Collections的synchronizedMap方法使HashMap具有线程安全的能力或者使用ConcurrentHashMap
3、对JVM熟不熟悉?简单说说类加载过程,里面执行的哪些操作?问了GC和内存管理,平时在tomect里面有没有进行过相关的配置
Java虚拟机(JVM)知乎话题 ->Java 虚拟机(JVM)
类的加载过程,感觉刘欣老师的公众号以故事的形式写出来很棒我是一个Java class
当然也有比较经典的解释【深入Java虚拟机】之四:类加载机制 - CSDN博客
GC和内存管理 这里有一个系列Java GC系列(1):Java垃圾回收简介
tomcat开启GC日志采集在Tomcat中开启JVM GC日志收集
4、然后问了http协议,get和post的基本区别,接着tcp/ip协议,三次握手,窗口滑动机制。
get/post杨光:get和post区别?
tcp/ip协议知乎话题TCP/IP
从网络分层的角度看 ip协议属于网络层 tcp/udp属于传输层
5、开发中用了那些数据库?回答mysql,储存引擎有哪些?然后问了我悲观锁和乐观锁问题使用场景、分布式集群实现的原理。
mysql知乎话题MySQL
悲观锁、乐观锁 刘欣老师的公号文章小白科普:悲观锁和乐观锁
分布式集群分布式MySQL集群方案的探索与思考
6、然后问了我springmvc和mybatis的工作原理,有没有看过底层源码?
springMVC 工作原理https://www.zhihu.com/question/38696452/answer/267119037
tuguangquan/mybatismybatis(轻量级的ORM框架) github一个上对源码中文注释的项目
有点久了 但是很不错
-------------------------------------------------------割-------------------------------------------------------
二、京东金融面试
1、Dubbo超时重试;Dubbo超时时间设置
2、如何保障请求执行顺序
3、分布式事物与分布式锁(扣款不要出现负数)
结合阿里巴巴面试第五题
4、分布式session设置
spring-session + redisspring session实现分布式session
5、执行某操作,前50次成功,第51次失败 a全部回滚 b前50次提交第51次抛异常,ab场景分别如何设置Spring(传播性)
6、Zookeeper有哪些用
又是刘欣老师的文章什么是Zookeeper?
知乎话题ZooKeeper
7、JVM内存模型
结合阿里巴巴面试第3题
8、数据库垂直和水平拆分
9、MyBatis如何分页;如何设置缓存;MySQL分页
PageHelperpagehelper/Mybatis-PageHelper
缓存mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache - CSDN博客
10、熟悉IO么?与NIO的区别,阻塞与非阻塞的区别
刘欣老师Java IO 的自述
11、分布式session一致性
分布式系统session一致性的问题 - 明志健致远 - 博客园
(感觉用redis存 脱离web容器 应该就不存在一致性的问题了吧。。 当然这只是我的看法)
12、分布式接口的幂等性设计「不能重复扣款」
-------------------------------------------------------割-------------------------------------------------------
三、美团面试
1、最近做的比较熟悉的项目是哪个?画一下项目技术架构图
我们领导喜欢用PPT画 这个工具不错https://www.gliffy.com/#network-diagrams
2、JVM老年代和新生代的比例?
3、YGC和FGC发生的具体场景
YGC是对新生代中的对象进行回收的操作,FGC是对老年代和永久代进行的操作
4、jstack,jmap,jutil分别的意义?如何线上排查JVM的相关问题?
JVM调优监控工具JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解
JVM调优JVM 优化经验总结
5、线程池的构造类的方法的5个参数的具体意义?
ThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueueworkQueue)
corePoolSize 线程池大小
maximumPoolSize 线程池最大线程数
keepAliveTime 表示线程没有任务执行时最多保持多久时间会终止
unit 时间单位
workQueue 任务缓存队列及排队策略
Java并发编程 之 线程池核心ThreadPoolExecutor
6、单机上一个线程池正在处理服务如果忽然断电该怎么办?(正在处理和阻塞队列里的请求怎么处理)?
重启后通过日志恢复?
7、使用无界阻塞队列会出现什么问题?
ConcurrentLinkedQueue
Java并发编程-并发队列(ConcurrentLinkedQueue)的原理分析 - 记忆力不好的博客 - CSDN博客
8、接口如何处理重复请求?9、具体处理方案是什么?
10、如何保证共享变量修改时的原子性?
Java并发总结(二):同步与原子性 - PSJay Blog
感觉跟单例模式的懒汉式实现有点像 synchronized+volatile
11、设计一个对外服务的接口实现类,在1,2,3这三个主机(对应不同IP)上实现负载均衡和顺序轮询机制(考虑并发)
-------------------------------------------------------割-------------------------------------------------------
四、滴滴面试
1、自我介绍,技术特点
技术人员应该发挥有信心且不毛躁的优势~
2、兴趣是什么,优势是什么
-
3、jvm,jre以及jdk三者之间的关系?
jvm(Java Virtual Machine) Java虚拟机https://zh.wikipedia.org/wiki/Java%E8%99%9A%E6%8B%9F%E6%9C%BA
jre(Java Runtime Environment) Java运行环境https://zh.wikipedia.org/wiki/JRE
jdk(Java Development Kit) Java开发工具包https://zh.wikipedia.org/wiki/JDK
参考这篇文章里边的一张图JDK,JRE,JVM区别与联系 - - ITeye博客
4、Dubbo的底层原理,Zookeeper是什么
刘欣大大的文章小白科普:服务那点事儿
Dubbo与Zookeeper知乎用户:zookeeper在Dubbo中扮演了一个什么角色,起到了什么作用啊?
5、cincurrentMap的机制;TreeMap;Volatil关键字
cincurrentMap 线程安全的mapConcurrentHashMap使用示例 - mononite
TreeMap 有序key的mapJava TreeMap工作原理及实现
Volatil关键字Java并发编程:volatile关键字解析 - 海 子 - 博客园
6、快速排序;广度优先搜索(队列实现)
7、缓存的雪崩以及穿透的理解?
8、HashMap的key可以重复吗?
不可以
9、synchronized和lock的区别?
深入研究 Java Synchronize 和 Lock 的区别与用法
10.开发一个大型网站你会考虑哪些问题?
分预算有限和预算无限的情况 ~ 逃...