一面:(约五十分钟)
1 自我介绍,讲一下项目中的多线程实现
2 Java的线程池的参数,拒绝策略,阻塞队列等实现和使用
3 fixethreadpool使用的是什么阻塞队列,如果使用arrayblockingqueue或者linkedblockingqueue会有什么问题。
4 ArrayList和linkedlist有什么区别,扩容呢
5 hashmap,hashtable,concurrenthashmap1.7和1.8选一个说一下。
6 jdk1.8针对hashmap使用红黑树优化目的是什么,红黑树的结构说一下。
红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
7 JVM了解么,说一下内存结构,堆区的分代,垃圾回收以及所用算法。
8 为什么要划分年轻代和老年代,方法区是否会垃圾回收,gc时要扫描哪些位置,gc root,虚拟机栈的局部变量。
在Java虚拟机中判断一个对象是否可以被回收,有一种做法叫可达性分析算法,也就是从GC Root到各个对象,如果GC Root到某个对象还有可达的引用链,那么这个对象就还不能被回收,否则就等着被收割吧。
这里既然提到了GC Root,那么哪类对象可以作为GC Root呢,这是一个在面试中经常被问到的问题。
《深入理解Java虚拟机》一书中是这么说的,一下几种对象可以作为GC Root:
1、虚拟机栈中的引用对象
2、方法区中类静态属性引用的对象
3、方法区中常量引用对象
4、本地方法栈中JNI引用对象
9 MySQL了解么,说一下建立索引要考量的点,说了索引筛选率,过滤使用的字段,以及explain查看是否使用了索引等。
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、频繁进行数据操作的表,不要建立太多的索引;
10 MySQL的隔离级别有哪些,默认级别是什么。
11 为什么select方法默认可以不加锁呢,明明可能会有并发冲突,我说根据隔离级别判断是否加锁,他说可重复读级别下select是不加锁的,为什么。
我说应该是用了乐观锁,也就是MVCC多版本并发控制,适用于读多写少,所以不加锁。
12 Redis提供有哪些数据类型
二面(约五十分钟)
1 自我介绍。
2 Java虚拟机了解么,讲一下内存分区和gc,如何排查堆内存的问题,说使用jmap转储dump文件分析或者使用jstat等工具检测gc。
3 Java的线程池了解么,看过它的源代码么,怎么修改源码可以实现线程状态的监控呢。
visualvm工具
4 web框架了解什么,讲讲SpringMVC的启动过程,讲了mvc上下文以及dispatcher初始化过程和请求流程。
5 设计模式了解么,单例,工厂,分别出现在什么场景。
Spring,servlet,Spring的工厂方法
6 MySQL的select1和select *有什么区别,为什么加索引访问比不加索引要快。
7 负载均衡的几种算法,缓存的几种淘汰策略。
8 计算机网络了解么,http的header有哪些字段,是否包含ip地址
三面(约五十分钟)
- 自我介绍。
- ConcurrentHashMap 在Java7和Java8中的区别?为什么Java8并发效率更好?什么情况下用HashMap,什么情况用ConcurrentHashMap?
- 加锁有什么机制?
- ThreadLocal?应用场景?
- 数据库水平切分,垂直切分的设计思路和切分顺序
- Redis如何解决key冲突
- soa和微服务的区别?
- 单机系统演变为分布式系统,会涉及到哪些技术的调整?请从前面负载到后端详细描述。
- 设计一个秒杀系统?
最后HR面试环节
1.你自己最大优势和劣势是什么
2.平时遇见过什么样的挑战,怎么去克服的
3.工作中遇见了技术解决不了的问题,你的应对思路?
4.你的兴趣爱好?
5.未来的职业规划是什么?
以上就是京东java研发4面题目
关注+转发后,私信关键词 【面试】即可获得更多面试问题及答案!