凉凉的京东一面

相约了4月28日下午4点的面试,面试官因为有事迟到了半小时。

首先上来是自我介绍,大概介绍了一下,因为自己不是科班,是自动化专业,面试的java岗位,面试官也没抱太大希望,上来就问我学的是神经网络的,为什么面java,还有就是自己的规划,确定要走java这条路吗,反正胡扯了一波,然后开始问问题。

1.说一下hashmap吧

大概说了一下hashmap hashtable 线程安全与否

介绍了底层使用数据+链表(红黑树)

2.接着就深入,为什么使用红黑树,自己太菜,没看过,回答不上来

查了一下:

在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。

3.对线程池了解吗 说一下线程池,为什么使用他

线程池实现线程复用,极大的提升了资源的利用率,大概说了一下线程池的工作原理,核心线程、等待队列、最大线程数、拒绝该任务等

4. 接着深入问说一下这个等待队列?

听到这个问题有点懵逼,不知道该说一下什么 查了一下
https://segmentfault.com/a/1190000014417569

5. 线程池的决绝策略

不太了解

说说线程池的拒绝策略

当请求任务不断的过来,而系统此时又处理不过来的时候,我们需要采取的策略是拒绝服务。RejectedExecutionHandler接口提供了拒绝任务处理的自定义方法的机会。在ThreadPoolExecutor中已经包含四种处理策略。

- AbortPolicy策略:该策略会直接抛出异常,阻止系统正常工作。

- CallerRunsPolicy 策略:只要线程池未关闭,该策略直接在调用者线程中,运行当前的被丢弃的任务。

- DiscardOleddestPolicy策略: 该策略将丢弃最老的一个请求,也就是即将被执行的任务,并尝试再次提交当前任务。

- DiscardPolicy策略:该策略默默的丢弃无法处理的任务,不予任何处理。

除了JDK默认提供的四种拒绝策略,我们可以根据自己的业务需求去自定义拒绝策略,自定义的方式很简单,直接实现RejectedExecutionHandler接口即可

6.问了一下mysql索引

只知道使用了B-tree ,没能详细的回答。

7.了解网络不,说一下tcp的三次握手

说了一下 ,没有深问

8.笔试第二道题没有ac,你有没有之后想过。

笔试第二道当时都不太记得了,就说了没有。

总体感觉就是对于非计算机专业的学生,感觉对你能力存在一种质疑。也没具体问啥,果然凉凉,还是自己太菜,哈哈,体验一下,秋招再战。