中午接面试晚上面,复习了一下午八股,心里非常没底
项目中的难点:没复习也没来得及总结,导致讲得磕磕绊绊,做的时候全是难点,做完了就没了,面试之前一定要系统的总结好这方面的内容。
1、为什么要使用RPC而不是http?
2、netty为什么高性能?
回答了它的线程模型是reactor模型,采用epoll io多路复用技术,并且一个请求只在一个epoll线程中处理,避免了锁的竞争这样的耗时操作。另外应该还有:
3、同步、异步、阻塞、非阻塞的概念
同步异步和阻塞非阻塞的维度不同,同步异步侧重于用户线程功能执行层面,是否需要等待当前任务执行完毕再接着往下执行。而阻塞非阻塞侧重于线程访问数据时,数据未准备好的处理方式,可以选择将当前线程挂起(阻塞),也可以选择直接返回(非阻塞)。
回答的时候没有分清楚,大概只说了阻塞非阻塞是实现同步异步的手段,同步也可以轮询巴拉巴拉,但没有能够系统解释。
4、IO模型有哪些?
前四种io都是同步io,最后一种是异步io
5、spring bean的初始化顺序如何指定?
我以为是spring容器中bean的生成顺序,但问了下面的问题,我觉得我可能理解错了,其实应该是问存在依赖的初始化顺序,没答上来。心里想的是类似@Order这样的注解,但是@Order注解不能指定 bean 的加载顺序,它适用于 AOP 的优先级,以及将多个 Bean 注入到集合时,这些 bean 在集合中的顺序。
6、循环依赖如何解决?
三级缓存,然后讲了三级缓存不能解决的一些情况(原型bean, 有aop的情形)
7、threadLocal的原理?
8、cpu到了100%,如何定位排查?
jps + jstack
9、java文件到生成对象的过程
java文件->字节码文件->类加载器->加载到虚拟机解析->运行时常量池->静态变量初始化->分配空间->初始化->构造函数赋值
10、如何解决数据库幻读
说了一下mvcc,加间隙锁,在事务读期间不去写数据库,升级隔离级别串行化
9、算法 两个有序数组的中位数