title: 2021年3月9日 北京快手Java开发–用户增长方向 实习面经(一面)
tags: 面经
2021年3月9日 北京快手Java开发–用户增长方向 实习面经(一面)
自我介绍
你能介绍一下你了解什么集合吗?(当时回答的是 HashMap 和 ConcurrentHashMap)
你能讲一下这两者的区别以及底层原理吗?
那你能讲讲 ConcurentHashMap 是怎么实现线程安全的吗?
那HashMap的查找的时间复杂度是多少呢?为什么查找时间复杂度是O(1)呢?
你能讲讲 ConcurrentHashMap 和 Hashtable 的区别吗?
你能讲讲 HashMap 和 Hashtable有什么区别?
为什么 HashMap 的底层或者说 ConcurentHashMap 的底层为什么需要用到红黑树呢?
你对 hashCode 有什么了解吗?
那你再讲讲红黑树和AVL树之间有什么区别呢?以及红黑树和AVL树一般都是使用在什么样的场景呢?
那你能讲讲红黑树的查找性能的时间复杂度是多少吗?
那接下问问你一些MySQL的内容,先来讲讲MySQL,你了解多少呢?
讲讲 InnoDB 引擎的索引是用的什么呢?
讲讲事务的特性以及他们的隔离级别有哪些?
说一下 读未提交 这个事务隔离级别是怎么的一个过程?以及在该过程当中,可能会遇到什么问题呢?
(这里只要说一下可能会引起脏读、幻读以及不可重复读即可,因为我是这样回答的)
然后再讲讲什么幻读,以及幻读与脏读有什么区别?
然后说一说MySQL的默认的事务隔离级别是什么?
最后问到,你了解Redis吗?还有你了解Spring框架吗?(这两个答的都是不太清楚,然后面试官也没为难我,还说没关系。。。)
手撕代码环节
反问环节。
1.1 HashMap 和 ConcurrentHashMap 的区别以及底层原理
主要的区别:
HashMap 是线程不安全的,而如果要去保证线程安全的话,就要使用ConcurrentHashMap。
HashMap 的底层原理:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ps3GMIuY-1616258683540)(/Users/cdf/Library/Application Support/typora-user-images/image-20210310140412917.png)]
ConcurentHashMap 的底层原理:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9Lgp5VN-1616258683562)(/Users/cdf/Library/Application Support/typora-user-images/image-20210310142039375.png)]
1.2 那你能讲讲 ConcurentHashMap 是怎么实现线程安全的吗?
1.3 那HashMap的查找的时间复杂度是多少呢?为什么查找时间复杂度是O(1)呢?
HashMap 的查找时间复杂为O(1)。
为什么呢?:
1.4 你能讲讲 ConcurrentHashMap 和 Hashtable 的区别吗?
1.5 为什么 HashMap 的底层或者说 ConcurentHashMap 的底层为什么需要用到红黑树呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cA4xYQsf-1616258683571)(/Users/cdf/Library/Application Support/typora-user-images/image-20210310171225726.png)]
hashmap为什么用红黑树不用b树_【181期】HashMap 面试二十一问!
1.6 你对 hashCode 有什么了解吗?
HashCode 的概念:根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。
1.7 那你再讲讲红黑树和AVL树之间有什么区别呢?以及红黑树和AVL树一般都是使用在什么样的场景呢?
参考博客:
应用场景:
–AVL 的应用场景:
Windows NT内核中广泛存在;
–红黑树的应用场景:
1.8 那你能讲讲红黑树的查找性能的时间复杂度是多少吗?
红黑树的查找、插入、删除的时间复杂度最坏为O(log n)。
1.9 讲讲 InnoDB 引擎的索引是用的什么呢?
2.0 讲讲事务的特性以及他们的隔离级别有哪些?
事务是逻辑上的一组操作,要么都执行,要么都不执行。
2.1 说一下 读未提交 这个事务隔离级别是怎么的一个过程?以及在该过程当中,可能会遇到什么问题呢?
2.2 然后再讲讲什么是幻读,以及幻读与脏读有什么区别?
2.3 然后说一说MySQL InnoDB引擎的默认的事务隔离级别是什么?
2.4最后问到,你了解Redis吗?还有你了解Spring框架吗?
这里就直接直接见JavaGuide了。。。
2.5 手撕算法题
算法题:
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
if(left == right || head == null) return head;
ListNode dum = new ListNode(0);
dum.next = head;
ListNode pre = dum;
for(int i = 0; i < left - 1; i++){
pre = pre.next;
}
ListNode cur = pre.next;
ListNode next;
for(int i = 0; i < right - left; i++){
next = cur.next;
cur.next = next.next;
next.next = pre.next;
pre.next = next;
}
return dum.next;
}
}