帆软一面(90min)
严刑拷打开始!
- 介绍项目
- 如果卖票就剩一张了,或者余票已经是0或者负数,你是怎么处理的
- 超卖问题是怎么解决的
- 你单机项目为什么用微服务
- 你的MQ起到什么作用了
- 数据库连接池了解吗,是为了解决什么问题的。
- 你觉得数据库连接池在带来连接复用的优点后,会带来什么问题(拒绝策略会带来额外开销、每一个客户端和连接池之间会存在一些空闲连接(最小连接数)来保证快速连接)
- 这些空闲连接会造成什么问题(空闲连接的存在会占用连接池的连接数量,因为连接池的总连接数是固定的,真正用来访问数据库的连接就会变少)
- 你会怎么解决这个问题(直接将这些空闲连接删掉,因为链接池对于这些空闲连接是不感知的,空闲连接只是为了保证客户端和连接池是保持连接的)
- 如果空闲连接被干掉了,怎么保证连接池返回给用户的连接是一个正确的连接呢,如果你是连接池的开发者,你该怎么解决这个问题(用一个简单查询,例如select 1,看返回值是否正确,以此来判断连接是否正确)
- 项目中遇到的困难
- 死锁是怎么产生的
- 需要几把锁才能实现死锁
- 一把锁能实现吗
- 如果锁是不允许重入的话,一把锁能实现吗
- 你跟前端的同学在项目过程中是怎么交流的。会有意见不一致的情况吗
- SSL协议了解吗
- 你用的令牌机制介绍一下
- 设计模式有了解过吗
- 单例模式的双检查锁,第一个if判断是否能够去掉,那第二个呢。
- 100万个数,内存只有40个字节,怎么找到最大的三个元素
- hash表结构介绍下
- 此时有一个自己实现的数组+链表的hash结构。在单线程下的添加,查找,扩容等一系列操作都没有问题。此时放到多线程下,你觉得可能会有什么问题出现,结合hash表的结构进行回答。(触发扩容的情况下会出现找不到值的情况)
- 如果不加锁的情况下,能否解决上面这个问题(参考redis的hashtable的渐进式扩容,两个table,如果table[0]查不到的话,就去table[1]中查找)
- 如果此时没有发生扩容,此时有A,B,C,D四个元素在我们自己定义的hash表中,我们并没有删除或者修改C,但是C却查不到了,请说一下可能的原因(B,C在同一条链上,删除B的时候,B的next指针会有一段时间是空的,也就是说指向C的指针有一段时间是找不到的。)
- 遇到情绪化的同学,你是怎么处理的,你有帮助过他吗。你自己情绪沮丧的时候是怎么解决的。
- 井底之蛙这个故事,结合自己的自身经历,谈一下你的感悟。
- 反问
总结:全都是场景题,面的我汗流浃背的。全程脑子里都是:“我是谁?我在哪?他这个问题是中文问的,但是为啥我听不懂?”。在我疯狂地挠了一个半小时地头后,结束了这次面试,感觉面试过程流的汗能让我瘦个几两了。也挺好,面向面试减肥。
今年不能毕业即失业吧,别吧。
#秋招##Java##面经##帆软##后端#