阿里外包的一次面试经历分享
weixin_43842467
最近投了阿里外包的岗位(博彦科技) 过了一面 然后晚上7点多阿里面试官打来了2面电话,听声音应该没超过30岁,上来就开始问
这里是阿里巴巴 你是xxx吗
1 你常用哪些集合框架
答:list 和map
2 list说下arraylist和linkedlist的区别
答:说了底层数据结构的区别,还有性能的区别,然后我说常用arraylist,
3 说下arraylist的扩容机制
答:1.5倍的源码实现说了一下
4 你刚刚说了arraylist底层是数组,但是数组长度不可变,我们怎么扩容??
答:arraylsit的扩容方式是Arrays.copyOf()方法把原数组进行了拷贝,然后返回一个新长度的数组
5 讲讲treemap 他是怎么实现自然排序的
答:没看过源码,我说我盲猜一下应该是内部有个比较器实现了自然排序。
面试官:。。。。。
后来百度了下 发现好像蒙对了。
6 hashmap说下
答:底层数据结构,put方法源码逻辑,扩容机制等讲了一遍
7 hashmap为什么链表长度8的时候会转树?
答:看网上言论和源码注释的解释是长度为8的时候,如果再有元素put,那么进入这条链表的概率基本为0,所以我们为了查询更加效率,就把查询时间复杂度为n的链表转成时间复杂度为log(n)的红黑树。
8 那为什么hashmap的初始长度要是16,或者说为什么要是2的n次方呢?
答:我先讲了一下与运算和取模运算的差别,然后说如果两个运算结果要等价,那么长度就必须为2的n次方,之后再举例了一下具体的例子,19%16 =16&15 , 19%15 !=16&14
9 hashmap remove方法在增强for循环中执行有问题吗?
答:我认为没问题,hashmap并没有并发修改异常
面试官:回去自己试下喽
10 我们有时候对象要重写hashcode和equals 方法 这是为了干嘛?
答:。。。。。没答好
hashmap聊的比较长 大概聊了10多分钟左右吧
11 我们来聊下线程池吧 给你一个ThreadPoolExcuter 现在我们给他一些构造参数,核心线程数10 ,最大线程数100,队列长度1024,过期时间5秒,还有拒绝策略。现在我开2000个任务,他会怎么执行
答:当线程数量小于核心线程数量,线程池会创建线程来执行任务,如果超过了核心线程数量,线程池会把任务放入队列,如果队列满了,线程池会继续创建线程直到线程数量=最大线程数量。如果此时还有任务要执行,线程池会执行拒绝策略。
12 那你知道哪些拒绝策略呢
答:大概知道有抛异常,丢弃最新的任务,或者丢弃年龄最大的任务等
13 那我们现在这么多线程数都开了,以后没任务了是不是有点浪费资源?
答:当没任务的时候,线程池的getTask方法会进行判断,while死循环会结束,知道线程数降到核心线程数
14 线程池怎么关闭的呢
答 不知道。。没看过源码
15 那我们聊聊多线程相关的吧 你怎么保证线程安全
答:加锁 synchronized关键字
16 换种方式呢
答 juc包下相关实现类
17 如果让你不加锁也不用juc 不用第三方中间件,你会怎么做?
答:利用线程自己的sleep wait join等方法吧。。。。其实我不知道了
18 你刚刚说了juc 你知道cas是什么意思么
答:背了一遍理论,然后坦白说不知道操作系统层面的,只知道理论性的
面试官:好的。。。。
19 那你谈下redis的分布式锁的场景,怎么实现
答:集群场景下xxxxxxxxx,然后setNx啥的相关伪代码说了下
20 数据库乐观锁你知道吗
答:update xxx set xxxx ,version=version+1 where version=version
21 sql你怎么优化
答 网上那套背了一遍,然后说打开执行计划,看type是all还是index
面试官 其实我还是比较在意rows那行的结果
我内心:rows是那行?????我只知道看type!
22 那如果有一张表我们性别那列只有只有男女两种结果 还要加索引吗
答:b+树层面来说的话 应该也没啥意义 ,反正我不会加
23 那如果有两列电话 身份证 你会建立两个单索引还是一个联合索引呢
答:联合索引 走1边b+树肯定要比走两边b+树快的
24 mysql的事务隔离级别说下
答: 举例了脏读的场景
25 linux相关的你知道吗
答 不是很了解。。。 只知道相关命令还有xshell这个工具怎么用,平时都是测试同学在搞这个
26 那我们谈下jvm吧 说下jvm内存模型
答 5个区域说了下 虚拟机栈还说了栈帧相关的
27 那你知道int i = 1 放在哪么?
答 方法区
28 那你知道Integer 放在哪么
答 堆
好像答错了 要分类讨论
29 那你说下分代收集算法吧
答 理论背了一遍 然后坦白操作系统层面的具体实现我不知道
30 老年代执行的gc是什么?
答 fullgc
31 你知道我们怎么自己手动执行fullgc么
答 我试过jconsole
面试官 liunx环境下试过吗
我 没有。。。
32 最后一道问题 你玩过英雄联盟吧 我们角色右键点击鼠标之后 角色会朝着鼠标直线前进,但是如果前面有一道墙体,角色会绕行,如果是你你会怎么让角色实现这个绕行的操作呢
答:你是不是先让我规划最短有效路径?
面试官:是的说下你的思路
我:。。。。。。。不会
面试官:好的今天面试就到这里 周一你会做个在线笔试 到时候晚上我联系你
我:好的好的 ,今天跟你聊天学到了很多,。。。。。哧溜哧溜的疯狂舔
面试官:呵呵 哈哈哈哈!
挂了
看了下通话记录45分钟
二面结束
其实还有好多题目没有回忆上来,ssm居然一点都没问!也许他也是想早点下班吧