面经-招商银行
面试时长 28分钟 。 有一些内容没记起来,大致是如下几块
主要内容如下
- 自我介绍
- 项目介绍
- 分布式
- 多线程
- JVM
- 一道编程题
自我介绍
学校,项目,研究方向。。。
项目介绍
首先我在项目介绍的时候,项目介绍的并不流畅。只是简单地介绍了一下,这一块还需要重新整理,比如面试官让你简单介绍一下项目。可以从项目是什么,架构为什么这么设计,过程中遇到什么问题,怎么解决的。讲怎么解决的时候只需要讲用了什么工具解决就可以了,不需要深入讲,这样之后面试官就可以从这里面进行切入询问。总的来说,遇到的问题需要你自己提出来,有些面试官可能会问你遇到了什么问题,怎么解决的。但我这次他就没有问题,他针对问了一下比较宽泛的问题比如如何保证数据一致性。
如何保证数据一致性:不知道他问的是数据库和缓存的一致性,还是服务之间的数据一致性,还是说分布式服务的数据一致性问题。第一想到的是缓存和数据库的一致性问题,balabla讲,讲着讲着感觉面试官没认真听,想他可能是要问服务之间的数据一致性,balabala又转回来讲分布式一致性,数据访问redis上锁,模块之间分布式事务,2P,3P,BASE,Paxos。但总感觉没有回答到点上。
总之,首要引导面试官问针对性的问题,比如刚刚说的说你用了什么东西解决了什么问题,那他肯定会问你怎么用的。这就很有针对性了。然后遇到问题之后先想清楚要问什么,将问题架构梳理清楚之后再回答,如果面试官问了一个比较笼统的问题,你能够条例清晰的描述出来,笔面试官一个个问题细扣效果更好。
分布式
如此设计架构的原因,为什么要分成这几个模块
redis用在了那些地方
redis的zset底层用了什么结构
如何处理事务一致性问题
多线程
线程安全问题
如何保证线程安全问题
JMV对锁进行优化之后,上不上锁是不是性能是不是没有影响了
这里应该涉及到Synchonized的锁的一个锁升级过程:无锁->偏向锁->轻量级锁->重量级锁 。 然后我把Synchonized的锁升级说成了锁粗化。。。。。
线程池运行原理
如果阻塞队列长度变为无限长,那是不是MaxinumPoolSize就没有用了
那这样会出现什么问题
这里我回答了可能会出现OOM异常,然后他就开始问OOM了
JVM
OOM是什么
我回答: 就是outOfMemoryError 。 然后面试官没有反应,大概是让我继续说吧。然后就从JVM内存管理,堆的垃圾回收,full GC稍微讲了一些。感觉讲的有点紧张,逻辑不是很连贯。
算法题
大概意思是有一个数组a, 记录b[i]为a[0]到a[i]中,值比a[i]小的所有数据和,然后计算。
例如a = [3,2,5,4] 那 b[0] = 0, b[1] = 0, b[2] = 3+2 = 5, b[3] = 3+2 = 5 ; 所以输出 10 。
要求在O(logN)复杂度内实现。10分钟内完成,敲代码。
O(n)复杂度的我写了,但是没跑,然后在想如何优化。最后面试官问会问有什么优化思路。