阿里菜鸟一面-6.9(过)
这次是有实习之后第一次面试,幸好八股文和算法都没有忘记,但是深度还有所欠缺,感谢菜鸟过的机会!
- 笔试题:链表相加(秒)
- 自我介绍
- 实习经历介绍
- 提到网易的实习经历,介绍了转码服务和直播(这里介绍了差不多10分钟,这波自我介绍还是有点长,感觉面试官也没听,之后要总结一下怎么说好,有想法的老哥评论区告诉一下)、
- 说说线程池那几个参数的意义
https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
- 5个核心线程数,10个最大线程数,100个容量的阻塞队列,说说任务进来的时候,线程池是怎么变化的
- 简单介绍一下你熟悉的设计模式
- 单例模式有几种实现方式,简单说一下
- volatile关键字
- 1.7跟1.8HashMap最主要的变化
- 为什么链表长度是8的时候就转成红黑树
因为链表是取一个数需要遍历链表,复杂度为O(N),而红黑树为O(logN)呗
为什么不直接使用红黑树,而是要先使用链表实在不行再转红黑树呢?
“因为树节点的大小是链表节点大小的两倍,所以只有在容器中包含足够的节点保证使用才用它”,显然尽管转为树使得查找的速度更快,但是在节点数比较小的时候,此时对于红黑树来说内存上的劣势会
超过查找等操作的优势,自然使用链表更加好,但是在节点数比较多的时候,综合考虑,红黑树比链表要好。
- 那红黑树退化成链表的过程是怎么样的
这个在网上没找到什么比较好的答案,有想法的老哥欢迎评论区留言
- HashMap负载因子是多少,为什么是0.75、
负载因子是0.75的时候,空间利用率比较高,而且避免了相当多的Hash冲突,使得底层的链表或者是红黑树的高度比较低,提升了空间效率。(这里可以从为什么不能是0.5和1来说说)
- HashMap 1.8的扩容
扩容的本质是对新的len求模,因为hashmap的长度总是2的n次幂,所以元素的位置要么是在原位置,要么是在原位置再移动2次幂的位置
所以,jdk1.8扩容:
只要看对应的key对应扩容后的高位是否都为1,如果都为1,索引变成“原索引+oldCap”,如果原来的高位为0,那就在原位置!
- StringBuilder 拼接字符串底层是怎么实现的
把字符串添加到已有序列的末尾或者指定位置 底层用数组实现
value[count++] = (byte)c;
可修改的(char,JDK 9 以后是 byte)数组
- 讲讲Spirng中你比较常用的注解
- @Autowrited和@Resource的区别
- 聚集索引和非聚集索引
- 联合索引(a,b),where a > 5 and b = 7 有用到联合索引的有序的特性吗
- 事务的特性
- count(*)、count(1)、count(某个列)
原来这里要分情况讨论
- MyIsam引擎,因为不支持事务,所以会特意把表的行数存起来
- Innodb引擎,支持事务
- count(*)=并不会把全部字段取出来,而是专门做了优化,不取值。count(*) 肯定不是 null,按行累加。
- count(1)=InnoDB 引擎遍历整张表,但不取值。server 层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。
- count(主键)=InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加。从引擎返回的 主键id 会涉及到解析数据行,以及拷贝字段值的操作。
- count(字段)怎么计数?
1. 如果这个“字段”是定义为 not null 的话,一行行地从记录里面读出这个字段,判断不能为 null,按行累加;
2. 如果这个“字段”定义允许为 null,那么执行的时候,判断到有可能是 null,还要把值取出来再判断一下,不是 null 才累加。
- 了解锁吗,简单介绍一下可重入锁和普通锁的区别
- 什么是死锁
- maven版本冲突怎么解决
- maven的依赖传递性
- git常用的命令
- git rebase
反问环节:
他说过了,等通知(昨晚11点的电话没接到,呜呜呜,许愿今天还会再打回来!!!)
可以接受加班吗?双休,加班到晚上10点
#菜鸟网络##面经#好久没发面经了,发一波面经,许愿二面赶紧来!!