阿里java开发一面凉经
我研究生方向主要是云计算,主要用了java、spark、Hadoop、linux。但是没看清楚,内推了朋友的java开发。阿里云从此分道扬镳= =、
面试官先问了我java用了多久,然后就问了几个简单的问题
1、无序数组,将数据处理成无重复,有序状态,需要什么数据结构
2、Set、Map、List适用场景
3、如何实现一个线程安全的List
后面这几个锁的问题,平时没用过真的不会啊。答得不好。
4、synchronized如何使用
5、加锁的静态方法和普通方法区别
6、有没有用过TreadLocal
7、GC回收年轻代和老年代都用了什么算法,什么垃圾收集器
后面是数据库的问题,我说我研究生没用过。。但还是问了几个
8、mysql查询加行锁怎么写
下面几个问题背过,答出来了
9、数据库事务的隔离级别
10、可重复读解决了什么问题
11、什么是幻读,举个例子
12、聚类索引和非聚类索引的区别,
下面这题没答出来
13、查询表中最后的一条记录,那个索引更快?为什么?
14、设计模式有用过吗?没有。。。。。
15、linux常用命令用过吗?用过,问了如何找出一个日志中,某个关键字出现的次数。
因为写过shell脚本,所以这个答出来了
最后是一个算法。有一个稀疏无序数组,其中有两个数字只出现了一次,其他数字成对出现,问什么样的简单数据结构能找出这两个数。
我刚开始没想法,然后要面试官提示一下,面试官提示只有一个单独出现的数。
这个有想法,直接异或,最后剩的就是单独出现的数。但还是没想出来怎么求两个。直接遍历的话时间复杂度肯定达不到要求。
结束后看了下博客,才想到:
思路:
* 1、两个相同的数字做异或操作,结果是0
* 2、数组中所有的数字做异或操作,最后的结果必然不为0
* 3、找出结果中二进制位中最后一个为1的二进制位n
* 4、按照二进制位n是否为1分类数组为两份,则1个数字在第一组,两一个必在第二组,且两组中其他的也都是出现了两次的数字
* 5、分类后分别进行异或操作
* 1、两个相同的数字做异或操作,结果是0
* 2、数组中所有的数字做异或操作,最后的结果必然不为0
* 3、找出结果中二进制位中最后一个为1的二进制位n
* 4、按照二进制位n是否为1分类数组为两份,则1个数字在第一组,两一个必在第二组,且两组中其他的也都是出现了两次的数字
* 5、分类后分别进行异或操作