技术面试题_分类篇

Kafka

1.Kafka为什么高吞吐率?

答:①kafka消息存放在文件系统上(磁盘中),采用顺序读写磁盘。(消息持久化)

②kafka是pull模型,批量提交/批量拉取,以减少I/O开销。

2.Kafka的存储设计?

答:根据topic和partition命名创建文件夹,文件夹里面成对存放数据文件(.log)和索引文件(.index)。

这个.log和.index称之为Segment file。 Segment 是 Kafka 文件存储的最小单位。

offset表示消息在该parition当中的偏移量Id,从0开始递增,而Segment file的命名为上一个 Segment 最后一条消息的 offsetId(19位数字,用0补全),这样的命名规范可以通过二分法快速定位,

过程简述:拿到offsetId先定位到具体索引文件.index,然后根据索引文件内容对应找到数据文件.log,根据物理存放地址拿到message内容。

3.为什么要有消费组(Consumer Group)?

答:当生产者写入速度大于消费速度时,我们需要水平扩展消费者,这时需要引入消费组的概念来统一管理一批消费者。(事实上,生产者写入速度往往大于消费速度)

4.消费组与分区重平衡(rebalance)?

答:当消费组内有消费者的数量变动时,消费者与分区之间的对应关系也会发生改变,这个称之为重平衡;所以在重平衡期间消费组会出现短暂的不可用。

5.kafka的顺序性?

答:kafka只保证partition内的消息顺序性,而topic下无法确保全局顺序性。

6.kafka关于消息?

答:kafka一个很重要的特性,就是消息只需一次写入,支持任意多个应用多次消费。消息的删除与否不取决于是否被消费,而取决于是否设置了过期时间。

7. Partition 如何知道一个 Consumer Group 当前消费的位置呢?

答:Partition上存储着各个消费组当前消费的位置,也存储着生产者即将要写入消费的位置。

8.为什么kafka采用pull模型?

答:首先push 模式和 pull 模式各有优劣;

push模型:由服务端设定发送速率主动推送给消费者。

pull模型:根据 Consumer 的消费能力以适当的速率消费消息。

对于kafka而言,pull模型更适合。可以适应消费速率不同的消费者

9.kafka如何保证可靠性的?

答:①当消息写入所有在线副本后,消息才算已提交,消费者才能读取到;这样能保证只要有副本存活消息就不会丢。

②用partition分区来保证消息的顺序性。

10.kafka和zookeeper如何配合工作的?

答:所有broker启动时都需要往zookeeper进行注册,第一注册成功的就是controller(主节点),其余都是从节点。

主节点会监听zookeeper中的目录,当发现新注册了节点,会生成集群元数据信息并分发到其他服务器上告知大家它是新来的)。

 


Rabbitmq

Exchange交换机类型

1、单播模式Direct

2、广播模式Fanout

3、匹配模式Topic


Redis

官网:https://redis.io

1.Redis全称?版本号?

答:Remote Dictionary.Server。使用的是3.0版本,目前已经更新到了3.2、4.0版本了。

2.Redis是什么?优势/缺点?

答:Key-Value 类型的内存数据库。

三大优势:

①因为纯内存操作,读写速度性能出色读操作:10万次/秒。写操作:8万次/秒。

②支持保存5种数据结构;String、List、Set、SortedSet、hashes(字符串、列表、集合、有序集合、散列表)

③可持久化,定期异步从内存中写到硬盘里。

缺点:受到物理内存限制,不能用作海量数据高性能读写。

因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上

3.对Redis集群的了解?

答:Redis集群引入了哈希槽的概念,共有214(16384)个哈希槽;每个key会通过校验后对16384取模来决定放置哪个槽中。(16K)

哈希槽是会分配到节点中进行管理,所以集群中至多有16384个节点。(通常集群内节点数不会超过1000个)

所以服务端已经很好得实现了分布式。

4.通常我们使用key类型是string,那么什么情况适合使用List、set、hash?

答:List 类型是双向链表,很适合用于消息队列;

使用 set 类型的交集很容易就可以知道两个用户的共同好友;

hash类型是散列表,优点就是使用内存少,比如你要存一个用户的所有信息,不要为用户的姓名、邮箱、密码分别设置key,而是将所有信息存储到一张散列表中。

(无论哪种类型,都是通过redisObject对象进行存储)

5.数据淘汰策略?

答:①自行设置过期时间,根据业务等。

②设置内存最大使用量下,目前共6中淘汰策略。使用最多的是最近使用最少的数据淘汰策略。

6.为什么redis是单线程的?为什么还这么快?

答:redis是基于内存的操作,所以cpu不是瓶颈,所以使用单线程,多线程还更麻烦;
速度快是因为基于内存,数据类似于HashMap存入,所以查找和操作的时间复杂度都是O(1)。

7.redis如何实现分布式锁?

答:

(一)基于 SETNX
使用SETNX(set if not exist)命令插入一个键值对时,如果Key已经存在,那么会返回False,否则插入成功并返回 True。因此客户端在尝试获得锁时,先使用SETNX向Redis中插入一个记录,如果返回 True 表示获得锁,返回False表示已经有客户端占用锁。
EXPIRE 可以为一个键值对设置一个过期时间,从而避免了死锁的发生。

(二)RedLock算法
RedLock算法使用了多个Redis实例来实现分布式锁,这是为了保证在发生单点故障时还可用。
尝试从 N 个相互独立 Redis 实例获取锁,如果一个实例不可用,应该尽快尝试下一个。
计算获取锁消耗的时间,只有当这个时间小于锁的过期时间,并且从大多数(N/2+1)实例上获取了锁,那么就认为锁获取成功了。
如果锁获取失败,会到每个实例上释放锁。

8.redis事务

命令:multi+exec  ,没有rollback回滚功能

但可以使用watch命令来简单达到事务监听性,在multi前watch某个key,若此key发生变化,则整个事务都不执行。

9.redis持久化

RDB=快照持久化(默认开启),可定期、手动、关闭时写入磁盘持久化

AOF=追加文件持久化(默认关闭),将所有指令进行文件追加保存

10.redis主从-哨兵

问:为什么redis高可用?高可用方案?

答:redis主从同步+sentinel哨兵机制(哨兵是一个server服务,独立启动)

哨兵任务:

1.配置机器(配置多台自动选举一台主,其余为从)

2.监听机器(心跳,与redis-server实时监听,端口号另开)

3.故障转移(master死掉自动将slave升级)

4.通知

 


ElasticSearch

1.term查询和match查询区别?

答:最大区别是match会对查询值进行分词,而term不会。

term/terms:用于精确匹配【包含,而不是相等】

match:对查询字段类型和查询值进行分析分词,然后匹配文档,最后给文档打分。

2.keyword和text区别?

答:最大区别是text类型会分词,而keyword类型不会。

keyword用于索引结构化的数据,比如:邮箱、状态、性别、标签等

text用于索引全文字段,比如:邮件正文、文章、评价等

3.ES版本?

答:1.3.4版本、2.x版本、5.2.2版本

4.ES数据读写在哪里?

答:写入ES实际上都存放在磁盘中,读操作会将数据缓存到内存(Filesystem Cache)中。所以服务器的内存越大搜索性能越好。

【要搜索的字段才索引在ES中,否则放在数据库中就好】

5.谈一下ES的分片(shard)?

答:数据是存放在分片(shard)中,分片是分配到各节点中,分片被分为主从分片,主从分片分配到不同的节点中以达到集群高可用。

索引是分片的逻辑集合我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。

6.文档是如何路由到分片上的?

答:shard = hash(routing) % number_of_primary_shards        算出哈希值,然后按分片总数取模定位到具体分片上)

routing默认是_id,也可以自定义。(前者就是随机分配到分片上,后者可以分配到指定的分片上,达到冷热分离等效果)

7.query和filter的本质区别?
答:
query:匹配度多少
filter:是否匹配

query细节?
答:1.是否包含 2.相关度打分 3.得分越高相关度越高

filter细节?
答:1.是否包含 2.不打分 3.针对结构化数据,完全精确匹配 4.更快,因为会自动缓存


数据库

1.数据库使用主从策略,读写分离,为什么能改善性能问题?什么问题不能解决?

答:写操作是在主数据库,读操作时在从数据库,通常会部署一主多从,而且往往搜索/查询操作远大于写入操作所以性能可以提高不少;But若某个业务就是写操作特别多,那么这种读写分离的策略并不能解决此问题。

 

2

发表评论

电子邮件地址不会被公开。 必填项已用*标注

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

技术面试题_分类篇
嘿!有什么能帮到您的吗?
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close