首先自我介绍然后3选2笔试题,难度适中:第一个是类型与找子数组最大和的贪心算法,不过要求输出子数组;第二个是判断一个链表是否有环;第三个不熟悉就没记
笔试40分钟,我处理不好输出链表的边界值,面试官提醒我两次也做不出,菜是原罪;说了下第二题的思路就直接开始问答:1.ArrayList与LinkedList区别; ArrayList增删元素消耗哪些资源;ArrayList<String>复制数组的话中间变化情况 ArrayList与LinkedList查询操作区别,链表优化你会么 ; LinkedList是单链表还是双链表
2.线程启动方式有哪些,区别是什么; 除了加锁如何实现线程安全 volatile加锁么; 了解线程池不
3.TCP三次握手 第二次握手时服务器发送序列号么 第三次握手有信息传输么
4.进程和线程区别 通信过程中区别 读锁用那个关键字(只进行读没有其他操作)
CPU调度算法
5.熟悉Redis不 MySQL索引了解不 Linux命令 在文档中通过关键字查询内容
大概就这么多,问的还是挺经典的,面试体验不错,可惜太菜了没能及时A出第一题,加上对多线程理解不够,上午面试下午就通知凉了;也不怎么意外,要深入学习下多线程和锁操作了
第一题贴这了
输入{2,1,-3,4,-1,2,1,4,-5} 输出{4,-1,2,1,4}
private static ArrayList<Integer> findMax(int[] arr) { int sum = arr[0]; ArrayList<Integer> list = new ArrayList<>(); for (int i = 1; i < arr.length; i++) { //如果sum加上当前元素大于此元素,那么将此元素前一位元素加入数组 否则清空数组 sum += arr[i]; if (sum > arr[i]){ list.add(arr[i - 1]); }else { list.removeAll(list); sum = arr[i]; } } return list; }
全部评论
(3) 回帖