3年经验面试题汇总+自我解答(每天更新一点)

一.微服务之间是如何独立通讯的?

同步:

1 Rest Http协议

2 RPC TCP协议

异步:

二. 项目中缓存如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?

使用方向:

字典项 、菜单配置、系统参数、登录token、session

要用缓存原因:

高性能

对于一个请求,耗时几百毫秒查出一个结果,然后这个操作员就用了一次,这很浪费。

而同一个不经常改变的结果,从缓存取,只需要几毫秒。

高并发

redis官方测评数据,每秒10W左右的读写,而mysql远远达不到这个数量。

不当的后果?

暂时未想好。

三. 为什么进行分库分表?(涉及到高并发的时候,原来公司在数据库层面使用什么方案)分库分表用过哪些中间件?这些中间件有什么有趣点?你原来公司是怎么进行数据库水平或者垂直拆分的?

为什么进行分库分表?

分表:

单一表的数据量太大,达到几百万的时候,sql执行性能就会变差,这个时候就需要把一个表的数据拆到多个表中。

分库:

以一般经验来看,一个数据库最多支撑2000并发,就需要扩容,这个时候把一个数据库的数据拆分到多个多个库中,承受的并发将提高多倍

分库分表用过哪些中间件?

DDS 华为自研

没有开源,这个就不多说了

Sharding-jdbc

当当网开源的,属于client层方案,支持分库分表,读写分离,分布式ID生成,柔性事务

Mycat

是阿里的Cobar改良而来,属于proxy层方案

他们有什么优缺点?

首先,Mycat和Sharding-jdbc这两种中间件,我并没有用过

根据网上的回答,整理一下

ShardingJdbc:

优点在于不用部署,运维成本低,不需要代理层的二次转发请求,性能高,缺点在于耦合,如果遇到升级,各个系统都需要重新升级再发布,各个系统都耦合Sharding-Jdbc的依赖

Mycat

这种proxy层的缺点在于需要部署,自己运维一套中间件,运维成本高,好处是对于各个项目是透明的,如果遇到升级,自己中间件那里搞就行

我原来公司如何进行水平或者垂直拆分数据库的

水平拆分和垂直拆分同时用。

首先使用垂直拆分,化为两个模块,一个是基本不变的公共资源库,里面存放菜单 字典 系统参数之类的数据

然后把第一次水平拆分称为一级分库,根据新政区划这个字段,把全国的数据划分为几部分,然后放到不同的库里。

但是有的进行一级分库之后,从省份来看,有的省份的数据依然是大的,这个时候就进行二级分库,也就是把省里的数据进行第二次水平拆分。我们制定一个二级分库字段,进行hash一下均匀分散,这样可以平均分配每个库的数据量和请求压力

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章