【VIPKid面经】面试体验好到爆 java岗
在咖啡馆面得,中途hr小姐姐看我等的比较久还买了杯咖啡给我
一面:(60min)
简历上的项目介绍问了一下。
Q:介绍一下你知道的多线程相关的知识。 A:介绍了线程池的参数(最大线程数,核心线程数,阻塞队列,创建线程的工厂,饱和策略)
Q:这个线程池有什么用 A:(我以为问的threadpoolexecutor有什么用)3种类型线程池都是这个类创建。
Q:饱和策略有哪些 A:4种饱和策略介绍了一下
Q:核心线程数5最大线程数10,线程提交的策略 A:小于5先创建线程执行,再阻塞队列,再创建线程执行,再饱和策略
Q:介绍一下netty,应用就不用讲了,底层知道什么说什么 A:讲了一下server的bootsrtap流程,又讲了reactor模型,又讲了netty的4种零拷贝(主要讲了directbuffer如何减少拷贝次数和user space、kernel space间的切换,然后讲了用文件描述符实现更高效的文件传输零拷贝),然后讲了netty如何避免NIO空轮询的bug。
Q:介绍一下多线程锁 A:说了一下sychronized和可重入锁。一个基于JVM实现,要获取对象的monitor,markworld里面记录了偏向锁轻量级锁和重量级锁状态,一个基于AQS实现,主要靠修改volatile修饰的state参数实现,修改是CAS。然后说了几个区别(可重入锁lockinterruptibly()方法可中断地获取锁,可重入锁可以公平获取锁)
Q:什么是公平什么是非公平 A:非公平加入AQS的同步队列前先尝试获取锁,公平是直接加到队尾
Q:ThreadLocal知道吗 A:知道,基于AQS实现的读写锁就是用ThreadLocal记录线程获取锁的次数。但是threadlocal保存对象的entry里面的key是一个指向threadlocal的弱引用,可能会造成内存泄漏,用完了要remove一下
Q:BIO NIO AIO 区别 A:BIO是阻塞IO NIO是selector轮询,AIO是回调函数。然后说了netty尝试使用AIO但是没有效率明显提升,就没有使用AIO(哪里看到的不记得了,不保证正确😂)
Q:BIO还有使用的价值吗 A:有吧,具体场景不记得了(有一些采用阻塞方式的库需要使用BIO)
Q:数据库隔离级别,默认隔离级别,怎么防止幻读 A:4种隔离级别,默认可重复读,锁定记录上的索引和之间的间隙(next-key lock)
Q:介绍一下索引 A:innodb使用B+树索引,mongodb使用b树索引,然后讲了一下b+树(数据结构,减少了磁盘io,主索引是聚簇索引,推荐采用自增ID做索引)
Q:两个数据库场景题 第一题:联合索引ABCD,什么查询用到索引; A:最左匹配原则 第二题超出我的认知范围不记得了😅,是一个limit的优化问题
Q:redis了解吗(了解)介绍一下基本数据结构,有优先级数据场景用那种 A:答了5种基本结构,用有序列表保存
Q:持久化方式 A:一个快照的方式,是基于cow实现的,一个增量备份(我都不记得叫什么了。。面试官超级nice,提醒了我叫什么)
Q:跳表了解吗 A:知道结构,但具体实现不深入
二面;(20min都不到)
还是介绍项目
Q;(估计是看了一面面试官写的总结)看你知道的还挺多的,jvm了解吗 A:内存结构和gc肯定了解,然后说了7种gc,没让详细介绍。
Q:MQ知道么 A:知道是什么,具体框架不太了解
Q:spring呢 A:ioc aop知道,但是底层没看过。
然后面试官就说学习能力挺强(整个秋招我收到最好评价了!!!),可以针对一个框架比如spring底层了解下。
三面HR:(20min不到)
1最大挫折
2对各个企业文化有什么了解
#VIPKID##Java工程师##校招##面经#