快手 1 2 面面经
快手一面
一个小时,14.00开始的;
1、自我介绍;
2、介绍一下集合;
3、hashmap怎么实现的;
4、hashCode如何计算?为什么要取余?
5、我有100个相同的hash值的节点,hashmap会怎么做(扩容,转红黑树等等);
6、代码题,写一个懒加载的单例(懒汉式的单例,写了双重校验锁的,面试官说有问题吗,我又加了volatile关键字,面试官让解释了一下,又让我改成lock锁的写法);
7、代码题,生产者消费者;
8、代码题,反转单链表;
9、反问环节;
然后面试官让我别走开,等二面,10分钟后就二面了;
快手二面
说好45分钟左右,由于我写代码比较慢,多占了10分钟,二面55分钟左右;
1、解释一下final的用法,解释了final修饰类、方法、变量(基本类型好引用类型的区别)之后,问我有没有看到过IDE编译器让你强制添加final的情况(匿名内部类的时候,传入局部变量的时候),为什么(解释了可能出现并发安全的问题,面试官就没再问了);
2、synchronized了解吗,解释一下,底层怎么实现的?synchronized使用过程中达到一个条件之后怎么释放锁?(当时没回答出来,可能应该是wait方法,不然真想不出让synchronized中途释放锁的情况了);
3、代码题,给你一个数组,例如[100,234,543,23,102,..432],代表桌子上有 n 摞盘子,每一摞有 array[i] 个盘子,你该怎么移动让每螺盘子的个数趋于平均;然后,说了方法,写了代码,代码写到还剩几行的时候叫停了(最后几行在面试官的提醒下修改的),因为超时好多了;
4、反问环节;
通过阿里、京东、快手的面试,我发现,面经没什么用啊!!!区别可真大