文章目录
2020届暑期实习面试(一,二面)
一面 (时长54分钟)
- 自我介绍
- 说项目,项目问的比较深,我说到算法(正态分布),问到正态分布的细节
- HashMap原理
- Hash碰撞的解决方法
我说了两个:拉链法,开放定址法(需要看看原理)
- StringBuilder和StringBuffer的区别
我说到了String常量,字符串操作中最慢,之后就是StringBuilder和StringBuffer的线程安全性
- StringBuilder和StringBuffer使用单线程执行,有区别吗?
看过Java并发编程艺术应该有提及偏向锁的说法,说到这点面试官就okok了,恭喜答到点子了
- CurrentHashMap原理
CurrentHashMap的原理解析的越清晰越好,双数组+链表的结构
- synchronized静态方法和实例所属方法的区别
静态方法:当前类class对象作为锁 实例方法:当前对象作为锁
- 说说Lock
- 说说ReentrantLock是基于哪个类的?说说队列同步器
基于队列同步器AbstractQueueSychronier ,在说队列同步器时,我提到了两大点:队列同步器维护一个同步队列,是双向链表,同时也维护一个同步状态state;还说到它的方法分类:独占式锁和分享式锁
说说独占式锁的实现:我说到了最重要的一点就是加入同步队列的时结点需要自旋查看它的前一个结点是否获取锁,如果获取的话,它应该尝试获取锁(tryAcquire),面试官OKOK,所以这里的点在于自旋!!!
- 说说list下的ArrayList和LinkedList的区别
主要说ArrayList基于数组,LinkedList基于链表,LinkedList插入删除更快;ArrayList查询更快即可
- 讲讲线程,线程池
我提到了Excutor线程池,着重强调使用过FixedThredPool和ScheduledThreadPool没有提CachedThreadPool因为它的maximumPool是Integer.MAX_VALUE值,创建线程太多会导致cpu飙升和资源耗尽OOM
- 说说线程池创建时的参数
- corePool核心线程数,maximum最大线程数,时间,以及阻塞队列(ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue,DelayQueue等)
- 线程池处理task的流程
提交实现Ru