首先还是自我介绍, 介绍了项目和实习
你们这个实习数据量多大? 只负责的离线计算吗? 有没有做实时计算?
说一下HashMap和Hashtable区别?
介绍下java里优先队列的实现?
说一下使用线程池的好处?
在你的项目里怎么确定的线程池的参数?
你的项目里提到爬虫, 爬取的过程中怎么避免爬取重复的URL的问题呢? 用集合来存储
如果是定时爬取的话, 怎样设置集合中URL的过期时间呢?
了解redis删除过期的key的原理吗? 不了解, 蒙了一个不知道对不对
降价通知功能中每个股票对应的list是遍历一遍来扫描的吗?
为什么订阅后只发布一次通知, 如果用户想自定义发送通知的次数和步长, 和过期时间, 你应该怎么设计? (这个太难了, 不得不说阿里的面试官水平是真的高, 几分钟的交流就已经了解我做的项目的原理了, 并且发现了不足的地方 )
jvm有了解吗? 讲讲类加载的机制吧
说一下java进程的几个状态?
说一下java多线程的关键字?
说一下synchronized原理?
写个题吧
这个题是真的简单, 感觉和three sum一样, 甚至还更简单一些
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 有序数组n,输入k,找出满足两个数相加=k的所有序列对 List<List<Integer>> sumK(int [] n, int k){ List<List<Integer>> ans = new ArrayList<>(); if (n == null || n.length < 2 ){ return ans; } int left = 0 ; int right = n.length - 1 ; while (left < right){ while (left > 0 && left < n.length && n[left] == n[left-1 ]){ ++left; } while (right >= 0 && right < n.length - 1 && n[right] == n[right+1 ]){ --right; } if (left >= right){ break ; } int tmp = n[left] + n[right]; if (tmp == k){ ans.add(Arrays.toList(new int [2 ]{n[left], n[right]})); ++left; --right; } else if (tmp > k){ --right; } else { ++left; } } return ans; }