投的阿里广州JAVA开发岗
一面:
打开邮箱的连接,使用阿里的伯乐面试平台进行视频面试:
- 上来先自我介绍
- 手写快排算法(有点紧张,排序逻辑写出来了,最后递归时入参写错了)
public class TestMain {
public static void main(String[] args){
int[] input = {4, 7, 6, 5, 3, 2, 8, 1};
quickSort(input);
printInt(input);
}
public static void quickSort(int[] input) {
quickSort(input, 0, input.length - 1);
}
public static void printInt(int[] input){
for(int i=0; i< input.length;i++){
System.out.print(input[i]);
}
System.out.println();
}
public static void quickSort(int[] input, int start, int end) {
int mark_index = start;
int mark = input[mark_index];
boolean isForward = false;
int i = start;
int j = end;
while (i != j) {
printInt(input);
if (isForward) {
if (input[i] > mark) {
input[mark_index] = input[i];
mark_index = i;
isForward = false;
j--;
} else {
i++;
}
} else {
if (input[j] < mark) {
input[mark_index] = input[j];
mark_index = j;
isForward = true;
i++;
} else {
j--;
}
}
}
input[mark_index] = mark;
printInt(input);
if(mark_index - start > 0){
quickSort(input, start, mark_index);
}
if(end - (mark_index + 1) > 0){
quickSort(input, mark_index + 1, end);
}
}
}
- 讲一下工作中遇到的最大的难题?最终用的什么技术方案实现的?
- JAVA基础知识:
a. 讲一下所知道的JAVA集合类型,简单介绍一下所知道的东西
b. 引申问题a,讲一下HashMap的原理,java1.7 1.8有啥区别之类的?
c. 讲一下JAVA异常处理?运行时异常和检出异常有啥区别?讲一下经常碰到的运行时异常和检出异常?
d. JVM相关知识讲一下?有没有相关的JVM调优经验?
e. redis缓存相关(缓存击穿、缓存穿透、缓存雪崩)
f. redis分布式锁怎么实现?要注意啥?(我的项目跟redis相关,这一块问的比较多)
g.redis持久化策略?淘汰策略?
还有一些关于微服务的问题忘了。。。感觉问题都比较开放,不会说是那种一问一答类型的。 - 最近有没有看啥书?或者其他资源?简单讲一下?
- 英语自我介绍?交流一下?
二面:
二面是由项目负责人直接联系,电话面试;面试官给人感觉很好,知识面很广,且深入。面试交接很详细,二面面试官直接上来就问一面没有问过的问题,都是开放式的场景题,很好的一次面试体验。
- 如果给你一个字符串类型的数字,怎么转化为整型?(这个问题一上来没啥头绪,给我问懵了。我回答:a. 脑海中首先想到的方法是直接调用Integer.parseInt方法;b. 遍历String的char数组,根据char的ASICC码,把char转换成数字,根据个十百千十进制转换成整型;c. 或许可以利用一些位运算的方法,提高转换效率,具体的方法没想出来,实际是可以用位运算代替除法运算,提高除法效率)
- 类似脑筋急转弯题目:1000瓶水,其中一瓶有毒药,怎么使用最少的试纸找出来?
- 现在有多个任务,任务之间没有互相依赖,没有顺序,怎么能最快的执行完这多个任务呢?(聊到了线程池,展开了一大段,底层实现细节说错了)
10.怎么收集多个任务的结果?(我回答了用Future阻塞获取,或者使用CoutDownLatch之类的工具类?) - 设计一下微信群聊天里面已读信息?
这个问题没回答好,感觉扣了不少分,脑袋卡机;仔细想了一下应该要考虑以下几点:a. 群聊天已读信息数据庞大,记录已读信息的结构必须是轻量化的,占用内存少——只有已读和未读两种状态,使用bit存储;b.群成员可能发生变动,存储结构对于增删场景是灵活的——使用链表结构?;c. 有用户已读时修改状态效率高——树结构?红黑树?;d.方便统计已读人数、未读人数——使用额外的内存存储已读人数? - 英语水平咋样?飙了一段英语紧张得很
- 最后聊了一下人生规划,然后就结束了
三面:
三面是交叉面,由隔壁部门的大佬来面试,总时长大概20分钟左右。
- 自我介绍,讲一下最近做过比较有挑战性的项目
- 如何理解并发?多线程?Java里面多线程相关的知识讲一下?
- 怎么理解微服务?为何要使用微服务架构?微服务架构的优势和挑战?
- 为何要换工作?职业规划?
- 讲一下自己的几个缺点和优点?
HR面:
- 自我介绍
- 目前所在团队的结构是怎样的?你在里面处于啥位置?如果排序你是排第几?
- 讲一下最深刻的项目?遇到啥挑战? 怎么克服的?是否享受这个过程?为什么?
- 对面试部门有啥了解?以后职业规划?
- 为何要换工作?
总结
hr面试后一周左右通知我通过了,然后就是定薪谈offer~~阿里的面试官都很nice,问的问题都是比较开放性的问题,大部分都是给你个主题或者场景,让你讲自己的想法,然后根据你讲的内容再逐步深入,直到你说不出来为止,总的来说是一个很不错的的面试体验。