阿里菜鸟一面 30min
对方迟到了, 道歉中...
1. 自我介绍...
2. AQS源码看过吗? 看过...
3.我们来聊聊算法吧:
算法1:第k大的数. 我的方案: 堆排, 然后返回nums[nums.length - k]. 不满意. 答案: 快速选择排序
算法2: 给你1亿行int类型数据, 找出其中重复3次的数存起来. 我的答案: 使用Hashmap, key存元素, value存出现次数. 面试官:存的下吗?大写的不满意. 猜测答案: 使用bitmap思想. 两个数组+偏移量
手写版bitmap算法, 希望对大家有帮助
public class MyBitMap { /** * 每一个word是一个long类型元素, 对应一个64位二进制数据 */ private long[] words; /** * BitMap的位数大小 */ private int size; private MyBitMap(int size) { this.size = size; this.words = new long[getWordIndex(size - 1) + 1]; } /** * 判断BitMap某一位的状态 * @param bitIndex 位图的第bitIndex位 */ public boolean getBit(int bitIndex) { if (bitIndex < 0 || bitIndex > size - 1) { throw new IndexOutOfBoundsException("超出BitMap有效范围"); } int wordIndex = getWordIndex(bitIndex); return (words[wordIndex] & (1L << bitIndex)) != 0; } /** * 把BitMap某一位设置为true * @param bitIndex 位图的第bitIndex位 */ public void setBit(int bitIndex) { if (bitIndex < 0 || bitIndex > size - 1) { throw new IndexOutOfBoundsException("超出BitMap有效范围"); } int wordIndex = getWordIndex(bitIndex); words[wordIndex] |= (1L << bitIndex); } /** * 定位BitMap某一位所对应的word * @param bitIndex 位图的第bitIndex位 */ public int getWordIndex(int bitIndex) { // 右移6位, 相当于除以64 return bitIndex >> 6; } public static void main(String[] args) { MyBitMap bitMap = new MyBitMap(128); bitMap.setBit(126); bitMap.setBit(75); System.out.println(bitMap.getBit(126)); System.out.println(bitMap.getBit(78)); } }
4. 常见的查找算法有哪些? 顺序查找, 二分查找,插值查找, 斐波那契查找, 分块查找, 哈希查找, 树表查找
5. 垃圾收集算法有哪些...倒背如流
6. 介绍一下redis吧...
7. Redisson为什么可以做分布式锁? JVM锁只能锁住线程, 但是不能锁住节点之间...还有呢??? 开始语无伦次. 扯Redisson的优点, 看门狗... 大写的不满意
今天面试就至此为止吧! 被面试官怼的哑口无言...
4月7号 今天竟然打电话约了二面, 意料之外!
#阿里面试##阿里巴巴#