止步阿里一面。。。

news2025/1/15 8:39:15

时间过的真快,转眼间国庆已经过去一周了,又到了新的一周,继续分享最新的面经。

今天分享的是粉丝在阿里巴巴的一面,考察了数据库、redis、kafka、ES和项目,数据库和redis不用多说,项目必用面试必考,其他内容也都挺常见的,感兴趣的朋友可以接着往下看。

可惜这位粉丝面试完后,面试流程上就已经显示挂了,挂了是小事,但是挂了之后不去复习和查漏补缺才是大事。

数据库

1. 分别介绍一下MySQL、ES、Mongo数据库各自的特点以及适合的使用场景是什么?
  • MySQL :是一种成熟的关系型数据库管理系统,支持SQL查询和复杂的事务处理,具有良好的数据一致性和安全性。它适合需要执行复杂查询、对数据一致性要求高的应用,例如企业级系统(如CRM、ERP)、财务软件以及任何需要严格ACID特性的场景。

  • Elasticsearch (ES) :是一个基于Lucene的分布式搜索和分析引擎,支持近实时的数据检索和全文搜索。它能够轻松处理大规模数据集,并提供强大的聚合和分析功能。适用于日志分析、网站或应用内搜索、实时数据分析、商业智能报告生成等场景,尤其在需要快速响应和高可扩展性的情况下表现优异。

  • MongoDB :是一种文档型NoSQL数据库,使用灵活的JSON风格文档存储数据,不需要固定的表结构,非常适合数据模型多变或不确定的应用。它提供了丰富的查询表达能力和内置的水平扩展机制,适用于内容管理系统(如博客、新闻站点)、社交网络平台、移动端后端服务、游戏开发以及物联网数据管理等领域。

ES

2. 倒排索引了解吗?

倒排索引是Elasticsearch中非常核心的概念,它使得全文搜索变得高效。

  • 定义:倒排索引是一种数据结构,用于存储文档集合中的单词到文档映射关系。简单来说,就是将每个词和包含这个词的所有文档关联起来。
  • 工作原理
    • 在正向索引中,系统会记录每篇文档的内容及其位置信息。
    • 而在倒排索引中,系统则会创建一个词汇表,并为每个词建立一个列表,列出所有包含该词的文档ID以及词在文档中的位置信息。
3. ES的分页功能有什么特性?

在Elasticsearch中,处理大量搜索结果时有几种常见的分页方法,每种方法都有其特点和适用场景:

  1. fromsize 分页

这是最基本的分页方式,类似于传统的SQL分页。你通过设置from参数来指定从哪条记录开始,用size参数来指定返回多少条记录。这种方式简单直观,但不适合大数据集的深分页。随着from值的增大,性能会显著下降,而且默认情况下最多只能返回10000条记录(可以通过配置调整这个限制)。

  1. scroll API

当你需要处理非常大的数据集时,可以使用scroll API。它创建一个快照,并允许你逐步滚动浏览所有数据。这种方式非常适合批量导出或数据分析,因为它不受10000条记录的限制。不过,scroll的数据不是实时更新的,且长时间保持打开的scroll可能会占用较多资源。

  1. search_after

search_after是一种高效的分页方式,特别适合需要高性能和实时数据更新的应用。它利用前一页的结果中的排序值作为下一次查询的起点,从而实现连续翻页。这种方式避免了from + size带来的性能问题,但不能直接跳到任意页,必须按顺序逐页翻阅。

4. ES的分词检索?

简单来说分词检索就是将文本拆分成一个个词汇(或称为“词项”),然后基于这些词汇进行搜索的过程:

  1. 文本输入:用户输入一段文本进行搜索。
  2. 分词:Elasticsearch使用分析器将这段文本分解成单独的词汇。例如,句子 “The quick brown fox” 会被分解成 [“The”, “quick”, “brown”, “fox”]。
  3. 匹配:Elasticsearch在索引中查找包含这些词汇的文档。如果某个文档中的内容包含了这些词汇,那么这个文档就会被作为搜索结果返回。

通过这种方式,Elasticsearch能够快速找到与查询相关的文档,实现高效的全文搜索。

kafka

5. Kafka与Zookeeper是什么关系?

简单来说,Zookeeper就像是Kafka的协调员和管理员,帮助Kafka管理集群的状态和配置信息。

在Kafka集群中,每个Broker启动时都会在Zookeeper中注册自己的信息。这样一来,其他组件就可以通过Zookeeper找到这些Broker,从而进行消息的发送和接收。Zookeeper还负责管理和协调整个Kafka集群的状态。例如,当某个Broker宕机时,Zookeeper会帮助选举一个新的Controller节点来接管管理工作,确保集群的正常运行。

还有就是Kafka会将一些重要的元数据信息,比如主题的分区、副本等,存储在Zookeeper中。这些信息对于Kafka集群的正常运行至关重要。Zookeeper还帮助Kafka管理消费者组的状态,包括成员管理和偏移量提交。当消费者组发生变化时,Zookeeper会帮助实现再平衡,确保负载均衡。

6. 多个同样的消息被发送到Kafka如何控制他们只消费一个?

可以通过以下几种方法来确保即使有多个相同的消息被发送,也只消费其中一个:

  1. 幂等性生产者
    Kafka 0.11.0.0 版本引入了幂等性生产者。通过设置 enable.idempotence=true,生产者可以确保每条消息的唯一性。即使消息被多次发送,Kafka 也会保证每个分区中每条消息只会被写入一次。这样可以避免重复消息的产生。

  2. 事务性生产者
    如果你需要更复杂的逻辑,比如在多个主题或分区之间保持一致性和原子性,可以使用事务性生产者。事务性生产者允许你将一组消息作为一个事务提交,确保这些消息要么全部成功,要么全部失败。这可以在一定程度上防止重复消息的产生。

  3. 消费者端去重
    在消费者端,你可以实现一些逻辑来去重。常见的方法包括:

    • 使用外部存储:例如,可以使用Redis、数据库或其他存储系统来记录已经处理过的消息ID或内容。每次消费消息时,先检查这条消息是否已经被处理过。
    • 基于状态的去重:如果你的应用程序有某种状态管理机制,可以在状态中记录已处理的消息,并在处理新消息时进行检查。
  4. 业务逻辑去重
    在某些情况下,可以通过业务逻辑来确保消息的唯一性。例如,如果你的消息包含一个唯一的标识符(如订单ID),可以在消费消息时检查这个标识符是否已经存在。如果存在,则跳过该消息的处理。

7. 什么是Kafka的羊群效应?

Kafka的羊群效应是指在使用ZooKeeper作为协调服务时,当ZooKeeper中的某个被监控的znode(节点)发生变化时,所有监听该节点的客户端都会收到通知,并且可能会同时采取行动。这种现象可能导致短时间内大量的客户端请求涌向系统,从而引起网络拥塞、服务器负载激增,甚至导致服务不可用。

在Kafka中,消费者组通常会通过ZooKeeper来管理成员关系和分区分配。如果一个消费者加入或离开消费者组,或者某个Topic的分区重新分配,ZooKeeper上的相关znode会发生变化,这将触发所有相关的消费者去更新它们的状态以保持一致性。如果这个过程中有大量的消费者同时尝试重新平衡,那么就可能出现羊群效应。

redis

8. Redis相比Memcached有哪些优势?

Redis 和 Memcached 都是内存数据库,但 Redis 在功能和灵活性上要强大得多:

Redis 支持多种数据结构,比如字符串、列表、集合、哈希表等,而 Memcached 主要只支持简单的键值对存储。这就意味着在 Redis 里,你可以用更丰富的数据结构来处理复杂的数据操作,而在 Memcached 里就相对单一一些。

Redis 可以把数据持久化到磁盘上,这样即使服务器重启了,数据也不会丢失。这对于需要长期保存数据的应用来说非常重要。相比之下,Memcached 的数据只存储在内存中,一旦重启,数据就会消失。

Redis 支持主从复制,也就是说你可以配置多个从节点来提高读取性能和实现高可用性。这在大规模分布式系统中非常有用。而 Memcached 没有内置的主从复制功能,需要通过外部工具或应用层来实现。

Redis 支持发布/订阅模式,可以方便地进行消息传递。这对于实时通信或者事件驱动的应用来说非常方便。Memcached 就没有这个功能。

Redis 还支持事务,可以在一个命令序列中执行多个操作,并保证这些操作的原子性。这对于需要保证数据一致性的场景非常有用。Memcached 则不支持事务。

Redis 支持在服务器端执行 Lua 脚本,可以处理复杂的业务逻辑。这样可以减少网络开销,提高效率。Memcached 就没有这样的脚本支持。

9. 阐述缓存穿透?怎么解决?

缓存穿透其实是一个常见的问题,特别是在使用缓存系统时。简单来说,缓存穿透是指当用户请求一个不存在的数据时,缓存中没有这个数据,于是请求会直接打到后端数据库。如果这种请求频繁发生,就会导致大量的无效请求直接到达数据库,增加数据库的负载,甚至可能导致数据库崩溃。

举个例子,假设有一个电商网站,用户在搜索一个根本不存在的商品时,缓存里没有这个商品的信息,所以每次搜索都会直接去查数据库。如果有人恶意地大量请求这些不存在的商品,数据库就会承受很大的压力。

有几种常用的方法可以解决这个问题

  1. 布隆过滤器(Bloom Filter)

    • 你可以使用布隆过滤器来预先判断某个请求的数据是否可能存在于数据库中。布隆过滤器是一种高效的空间节省型概率数据结构,它可以告诉你某个元素“肯定不在集合中”或“可能在集合中”。如果布隆过滤器判断某个请求的数据肯定不在数据库中,那么就可以直接返回空结果,而不需要再去查询数据库。
  2. 缓存空值

    • 当你从数据库中查询到一个不存在的数据时,可以把这个空结果也缓存起来,并设置一个较短的过期时间(比如几分钟)。这样,下次再有相同的请求时,可以直接从缓存中返回空结果,而不是每次都去查询数据库。
  3. 接口层限流

    • 你可以在应用层或API网关上设置一些限流策略,限制对某些特定接口的访问频率。这样即使有恶意请求,也不会对数据库造成太大的影响。
  4. 业务逻辑优化

    • 有时候可以通过业务逻辑来避免一些不必要的查询。例如,在前端输入验证时,可以提前过滤掉一些明显无效的请求。
10. 什么是bigkey?会有什么影响?

BigKey其实是指在Redis或其他键值存储系统中,那些占用大量内存空间的键。比如说,一个键关联了一个非常大的字符串、列表、集合或哈希表等数据结构。这些键因为数据量大,所以被称为BigKey。

BigKey的影响:

BigKey可能会带来一些问题,主要有以下几点:

  1. 性能下降

    • 当你操作BigKey时,比如读取或写入,Redis需要处理大量的数据,这会导致单次操作的时间变长。如果这些操作频繁发生,整个系统的响应时间就会变慢,用户体验也会受到影响。
  2. 阻塞其他请求

    • Redis是单线程的,这意味着在同一时间只能处理一个请求。如果有一个BigKey的操作正在进行,那么其他所有的请求都得排队等待。这样一来,一个小的操作就可能阻塞整个系统,导致其他请求被延迟。
  3. 内存碎片

    • 大型的数据结构可能会导致内存碎片化,尤其是在数据频繁更新的情况下。内存碎片多了,Redis的整体性能和内存利用率都会受到影响。
  4. 持久化和复制问题

    • 如果你在使用Redis的持久化功能(如RDB快照或AOF日志),BigKey会增加持久化文件的大小,延长持久化的时间。同样,在主从复制过程中,BigKey也会增加网络传输的负担,影响复制的速度和效率。

欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以私信我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2214952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【隐私计算篇】替换半同态使用全同态加速计算联邦机器学习算法的实证分析

1. 背景介绍 联邦学习(Federated Learning,FL)是隐私计算中常见的一种技术范式,其本质是一种面向可信数据流通的分布式机器学习框架,允许多个参与方在不共享其本地数据的前提下,协同训练机器学习模型。与传…

Python | Leetcode Python题解之第479题最大回文数乘积

题目: 题解: class Solution:def largestPalindrome(self, n: int) -> int:if n 1:return 9upper 10 ** n - 1for left in range(upper, upper // 10, -1): # 枚举回文数的左半部分p, x left, leftwhile x:p p * 10 x % 10 # 翻转左半部分到其…

【C语言刷力扣】1748.唯一元素的和

题目: 法一 解题思路: 由于 nums.length 小于100,新建数组 num[101],用来遍历存放 nums[i]出现的次数。 int sumOfUnique(int* nums, int numsSize) {int result 0;int num[101] {0}; // memset(num, 0, sizof(num));for (int…

写一个菜谱网站,数据库应该怎么设计?AI回答我动手!

大部分问题使用chatglm4-9b进行回答,总体效果不错,大家可以来试试。关于如何使用ChatGLM4-9b模型,可以参考:在启智AI平台实践ChatGLM4-9B聊天机器人MindSpore-CSDN博客 设计数据库 问题 写一个菜谱网站,数据库应该怎…

mongodb-7.0.14分片副本集超详细部署

mongodb介绍: 是最常用的nosql数据库,在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb(分片副本)集群。 环境准备 系统系统 BC 21.10 三台服务器:192.168.123.247/248/249 安装包&#xff1a…

STM32L010F4 最小系统设计

画一个 STM32L010F4 的测试板子...... by 矜辰所致前言 最近需要用到一个新的 MCU: STM32L010F4 ,上次测试的 VL53L0X 需要移植到这个芯片上,网上一搜 STM32L010F4,都是介绍资料,没有最小系统,使用说明等。…

element plus的el-select分页

摘要&#xff1a; el-select的数据比较多的时候&#xff0c;必须要分页&#xff0c;处理方案有全部数据回来&#xff0c;或者添加搜索功能&#xff0c;但是就有个问题就是编辑的时候回显问题&#xff0c;必须要保证select的数据有对应的id与name匹配回显&#xff01; <el-fo…

Pytest基于fixture的参数化及解决乱码问题

我们知道&#xff0c;Pytest是Python技术栈下进行自动化测试的主流测试框架。支持灵活的测试发现、执行策略&#xff0c;强大的Fixture夹具和丰富的插件支持。 除了通过pytest的parametrize标签进行参数化外&#xff0c;我们通过fixture的param参数也可以比较方便地实现参数化…

Android从上帝视角来看PackageManagerService

戳蓝字“牛晓伟”关注我哦&#xff01; 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章&#xff0c;技术文章也可以有温度。 前言 阅读该篇之前&#xff0c;建议先阅读下面的系列文章&#xff1a; Android深入理解包管理–PackageManagerService和它的“小伙伴…

SPI

Flash-W25Q64 -- 这一章的重点是重点是知道标准SPI通信&#xff0c;地址会算&#xff0c;FLASH时序要会看 目录 Flash-W25Q64 回顾 FLASH SPI简介 单片机&#xff08;32&#xff09;上的SPI W25Q64 模块之间应该怎么通信呢&#xff1f;-- 看时序图 代码编写 更改代码…

Vue Data UI——Vue 3 数据可视化组件库

文章目录 1、Vue Data UI2、核心特点2.1.Vue 3 的深度集成2.2 丰富的可视化组件2.3 灵活的定制性2.4 易于集成2.5 文件导出功能2.6 多主题支持3、如何在项目中使用 Vue Data UI?3.1 安装 Vue Data UI3.2 全局注册组件3.3 局部引入组件3.4 使用通用组件3.5 TypeScript 集成4、总…

城市交通系统优化策略:透视拥堵之困,探索流畅之道

在快速城市化的今天&#xff0c;交通拥堵已成为众多大中型城市的“城市病”&#xff0c;严重影响居民生活质量、经济运行效率及环境质量。本文旨在深度剖析城市交通拥堵的根源&#xff0c;并提出一系列行之有效的优化策略&#xff0c;旨在构建更加顺畅、高效、绿色的城市交通系…

R语言实现logistic回归曲线绘制

方式一&#xff1a;编制函数 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码快 f <- function(x){y 1/(1 exp(-x))plot(x,y)}#sigmoid函数 f(x)​ 方式二&#xff1a;Sigmoid函数代码 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码块 #y<-1/(1exp(-x)) y&…

【NOIP1997 普及组第一题】棋盘问题

题目背景 NOIP1997 普及组第一题 题目描述 设有一个NM 方格的棋盘 (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正方形、多少个长方形&#xff08;不包括正方形&#xff09;。 例如&#xff1a;当 N2,M3时&#xff1a; 正方形的个数有 8 个&#xff1a;即边长为 1 的正…

北斗短报文平板终端|军用三防平板|国产加固平板|防爆工业平板

在当今数字化浪潮的推动下&#xff0c;各行各业对智能终端设备的需求日益多样化与专业化&#xff0c;特别是在工业领域&#xff0c;一款集通信、定位、导航及耐用性于一身的设备显得尤为重要。北斗三代短报文工业平板电脑正是应此需求而生&#xff0c;它不仅是一款普通的平板电…

睿赛德科技正式推出RT-Thread开源 4+服务,助力企业用户发展

RT-Thread始于2006 年&#xff0c;是100%由中国开发者编写的开源嵌入式操作系统。经过10多年的发展&#xff0c;已经成为国内最流行的嵌入式操作系统&#xff0c;广泛应用于工业、 电力、轨道交通、智慧城市、智能家居、穿戴、车载、甚至航空航天等领域。 RT-Thread的成功基于对…

基金好书入门阅读笔记《基金作战笔记:从投基新手到配置高手的进阶之路》笔记3

公募基金的分类方式按投资范围分 80%以上资产投资于股票的&#xff0c;叫股票基金&#xff1b;80%以上资产投资于债券的&#xff0c;叫债券基金&#xff1b;80% 以上资产投资于其他基金的&#xff0c;叫FOF; 80%以上资产投资于货币市场的&#xff0c;叫货币基金&#xff1b;以上…

【AI绘画】Midjourney进阶:中心点构图详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;什么是构图为什么Midjourney要使用构图 &#x1f4af;中心点构图中心点构图的特点使用场景提示词书写技巧测试 &#x1f4af;小结 &#x1f4af;前言 【AI绘画】Midj…

freertos的任务管理

任务函数 任务被实现为C函数。它们唯一特别的地方是它们的原型&#xff0c;它必须返回void并接受void指针参数。以下是函数原型。 void ATaskFunction( void *pvParameters );每个任务本身都是一个小程序。它有一个入口点&#xff0c;通常会在无限循环中永远运行&#xff0c;…

MWD天气图像多分类数据集,用于图像分类-共6个类别,共60000张图像数据 ,含有模型

MWD天气图像多分类数据集&#xff0c;用于图像分类- MWD天气图像多分类数据集&#xff0c;用于图像分类-共6个类别&#xff0c;共60000张图像数据 &#xff0c;含有模型 MWD天气图像多分类数据集及模型介绍 数据集概述 名称&#xff1a;MWD天气图像多分类数据集图像数量&…