携程一面
首先是一段自我介绍
提问阶段
了解HashMap吗?说一下对它的理解。(常见八股)
1.1补充问题: 为什么要在数组长度大于64之后,链表才会进化为红黑树
在数组比较小时如果出现红黑树结构,反而会降低效率,而红黑树需要进行左旋右旋,变色,这些操作来保持平衡,同时数组长度小于64时,搜索时间相对要快些,总之是为了加快搜索速度,提高性能
JDK1.8以前HashMap的实现是数组+链表,即使哈希函数取得再好,也很难达到元素百分百均匀分布。当HashMap中有大量的元素都存放在同一个桶中时,这个桶下有一条长长的链表,此时HashMap就相当于单链表,假如单链表有n个元素,遍历的时间复杂度就从O(1)退化成O(n),完全失去了它的优势,为了解决此种情况,JDK1.8中引入了红黑树(查找的时间复杂度为O(logn))来优化这种问题
数组去重有几种方法
了解过BitMap吗
如何线程池的优势,结合jvm聊一下
结合jvm聊一下
这个点没有理解,问了一下面试官,面试官本意是让我聊一下NIO.对排序算法了解吗,让我写一个排序(写了快排)
面试官好像对归并很热衷,主动问了我归并,我说了一下思路
10亿个随机数,如何排序
聊了一下思路,先保存拆分成小文件,分别排序,然后合并文件。面试官说思路是对的。
对栈和队列了解吗?
回答的时候结合了一下自己的博客在Java中应该什么来实现栈?Deque or Stack? – Ray的小破站 (raygetoffer.xyz)
static double的使用在多线程中应该如何考虑
我答的时候从线程安全性的角度(悲观锁 synchronized、Reentranlock,乐观锁 cas),以及jmm可见性(volatile)的角度答的
Redis和MySQL如何保证数据一致性
如何提高数据库的查询效率?
对MySQL的事务了解多少。(常见八股)
ACID,并且答了一下ACID在MySQL是如何实现的。
对分布式了解吗?
实话实说,没有做过分布式的项目,了解一些皮毛,然后把自己了解的说了一下,这个是之后要补齐的短板。
做了这些项目,项目中遇到最大的困难是啥。
考察对项目的了解程度。介绍了一下自己的项目,然后巴拉巴拉,面试之前要熟悉一下自己的项目。
反问阶段
您平时在公司的业务是什么?
"我们做的火车票订购的业务"。
您期望实习生在实习中能扮演一个什么的角色,能完成什么样的工作,并且具备什么样的技能?
"我面过的大部分实习生在学校中学习的都是基础知识,实际业务能力也是有限的,业务能力的培养还是需要结合工作场景。我更看重实习生的业务成长性,希望带出来的实习生在实习结束能够独立完成需求。我们部门是面向业务需求的,对底层源码可能没有了解的那么深入,虽然理解源码对个人成长很重要,但是我们更希望是能够利用好各自工具完成好需求,当然有的部门是深耕底层架构,他们就更看重底层源码,当然这个也要看不同的部门。"