当前位置: 首页 > article >正文

【3】阿里面试题整理

[1]. ES架构,如何进行路由以及选主

路由:在Elasticsearch(ES)中,默认的路由算法是基于文档的_id。具体来说,Elasticsearch会对文档的_id进行哈希计算,然后对分片数量取模,以确定该文档应存储在哪个分片上。这个过程可以确保同一个文档始终路由到相同的分片上,除非分片数量发生变化。

选主:Elasticsearch使用Zen Discovery模块进行选主(Leader Election)。这个过程类似于一个Leader Election算法。每个节点都会参与投票,选举出一个合适的master节点。master节点负责管理集群的状态,例如分片的分配和元数据的维护。

[2]. 组合索引的使用及需要注意的问题。

组合索引是为了优化多条件查询而创建的,它会将多个列组合在一起作为索引。

只有当查询条件中包含了索引中最左边的列或最左边的几个列时,这个索引才能被使用。

为了让索引更高效,应该将选择性比较高的列放在前面,这样才能更快地筛选出数据。

组合索引有一定的维护成本,每次插入、更新或者删除数据的时候都需要更新索引,创建过多的索引会增加数据库的负担。

[3]. 主键索引与唯一索引的区别。

主键索引要求列值不能为NULL,而唯一索引允许存在NULL值。

一张表只能有一个主键索引,但可以有多个唯一索引。

主键索引通常是聚集索引,直接影响数据在磁盘上的存储方式,而唯一索引一般是非聚集的。

主键索引主要用于唯一标识表中的每一行数据,而唯一索引主要是用来确保特定列的数据唯一性。

[4]. 数据库与Redis的缓存一致性问题。

数据库和Redis的缓存一致性问题,主要是因为缓存和数据库之间的数据存在时间差,并且有多个并发操作可能会导致数据不一致。

为了解决这个问题,需要考虑两方面:缓存更新策略和一致性维护策略。

缓存更新策略方面,最常用的是旁路缓存模式,即先查缓存,缓存没有再查数据库,并且把数据写入缓存,更新数据的时候,先更新数据库,然后删除缓存。

这种策略的好处是简单易用,缺点是首次查询会慢一些。

一致性维护策略方面,最基本的是先更新数据库再删除缓存,但这种方式在并发时可能导致不一致,所以可以使用延时双删策略或者利用消息队列来实现最终一致性。

[5]. HashMap的扩容机制。

HashMap在初始化的时候会分配一个初始的容量,当HashMap的元素数量达到一个阈值(容量乘以负载因子)的时候,就会触发扩容。

扩容的时候,HashMap会创建一个新的数组,容量是原数组的2倍,然后把原数组中的元素重新计算hash值,并根据新的数组容量重新分配到新的数组中。因此,这是一个比较耗时的操作,会导致HashMap的性能下降,所以,如果在预知存储的数据量比较大的情况下,最好在初始化的时候设置一个合理的容量,避免频繁的扩容。


http://www.kler.cn/a/528633.html

相关文章:

  • 29.Word:公司本财年的年度报告【13】
  • neo4j入门
  • SSH代理實用指南
  • C++ 中的类(class)和对象(object)
  • 项目测试之MockMvc
  • HTML(快速入门)
  • http 请求类型及其使用场景
  • python学习——函数的返回值
  • 【python】tkinter实现音乐播放器(源码+音频文件)【独一无二】
  • error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
  • C#面向对象(封装)
  • C语言:整型提升
  • 前端知识速记:节流与防抖
  • Vue2.x简介
  • MongoDB快速上手(包会用)
  • 浅析DDOS攻击及防御策略
  • Linux系统部署Python项目持续运行配置
  • 数据结构【单链表操作大全详解】【c语言版】(只有输入输出为了方便用的c++)
  • LightM-UNet(2024 CVPR)
  • 面试之SolrElasticsearch
  • DRM系列五:注册DRM设备--drm_dev_register
  • C++11新特性之lambda表达式
  • 类和对象(中)---默认函数
  • Linux命令入门
  • Python 模块导入问题终极解决指南
  • 土地覆盖产品批量下载(GLC_FCS30 、Esri_GLC10、 ESA_GLC10 、FROM_GLC10)