面经 - MySQL的B+树相关
LSM树(Log-Structured Merge-Tree)是一种用于存储和检索数据的树形数据结构,广泛应用于数据库和存储系统中。它通过将数据写入内存中的缓冲区,然后定期将缓冲区中的数据写入磁盘上的有序文件,并通过合并操作来优化磁盘I/O性能。以下是LSM树的详细介绍:
结构LSM树由两部分组成:
内存中的缓冲区(MemTable):数据首先写入内存中的缓冲区(通常是有序的)。当缓冲区达到一定大小时,会将数据写入磁盘。
磁盘上的有序文件(SSTable)数据以有序的方式存储在磁盘上的文件中。这些文件通常是不可变的,新的写入操作不会直接修改这些文件,而是写入新的文件。为了优化查询性能,磁盘上的文件会定期合并(Compaction)。
工作原理写入流程
数据首先写入内存中的缓冲区(MemTable)。
当缓冲区满了,数据会被写入磁盘上的一个新文件(SSTable)。
磁盘上的文件是按顺序写入的,且是不可变的。
读取流程
查询时,首先在内存中的缓冲区(MemTable)中查找。
如果没有找到,再一次在磁盘上的文件中查找。
为了提高查询效率,磁盘上的文件通常会使用索引(如B树或哈 ...
面经 - Redis的数据基本类型
五种基本类型
String(字符串)特点: Redis中最基础的数据类型,一个键对应一个值,值可以是字符串、数字或者二进制数据,最大能存储512MB。应用场景: 缓存:存储用户会话、页面内容等。 计数器:文章阅读量、库存扣减等。 分布式锁:通过SETNX实现简单锁机制。 短有效期数据:验证码(结合EXPIRE)。
常用命令:SET、GET、INCR、DECR、APPEND、SETNX等。
List(列表)特点:双向链表,支持头部(Left)和尾部(Right)操作,元素可重复。应用场景: 消息队列:生产者通过LPUSH推送任务,消费者通过BRPOP获取。 最新动态:存储用户最新发布的文章(如LPUSH+LTRIM限制长度)。 分页查询:LRANGE分页获取历史记录。常用命令:LPUSH/RPUSH、LPOP/RPOP、LRANGE、BLPOP(阻塞式弹出)。
Hash(哈希)特点:键值对集合,适合存储对象(如用户信息)。应用场景: 对象存储:用户信息(HMSET user:1 name “Alice” age 30)。 部分更新:修改用户单个字段(HSET u ...
面经 - MySQL的B+树相关
MySQL的B+树特点
所有数据存储在叶子节点:B+树的非叶子节点仅存储键值和指向子节点的指针,而叶子节点存储实际的数据。
叶子节点形成有序链表:叶子节点通过指针连接成一个链表,支持高效的范围查询和顺序访问。
自平衡性:B+树是一种自平衡的多路查找树,通过节点分裂和合并操作保持平衡,确保查询操作的时间复杂度为O(logN)。
高效磁盘I/O:B+树的节点较大,适合存储在磁盘上,减少磁盘访问次数,提高查询效率。
B+树的删除过程
查找要删除的数据:从根节点开始逐层查找,直到找到叶子节点。
删除数据:如果叶子节点的剩余键值数量大于最小要求,则直接删除数据。
节点调整: 如果叶子节点的键值数量少于最小要求,会尝试与相邻的兄弟节点合并或借位。 如果兄弟节点也无法合并,父节点的索引键值会下移,进行借位操作。 合并或借位操作会沿树的路径向上进行,知道合适的位置或根节点。
树的高度可能减少:如果根节点的子树被合并,树的高度会减少。
面经 - C++子类和父类的内存分布情况
在C++中,子类和父类的内存分布情况取决于继承的方式(单继承、多继承、虚继承)以及类中是否包含虚函数。以下是几种常见的内存分布情况的详细说明:
单继承父类和子类的内存布局
子类对象的内存布局是父类成员变量和子类成员变量的连续排列
如果父类中有虚函数,则子类对象中包含一个指向虚函数表(vtable)的指针(vptr),用于支持多态。
内存分布示例12345678910class Base {public: int a; virtual void func() {} // 虚函数};class Derived : public Base {public: int b;}
Base类的内存布局:vptr(4或8字节,取决于平台)+a(4字节)
Derived类的内存布局:vptr(与Base共享)+a(从Base继承)+b(4字节)
多继承父类和子类的内存布局
子类对象的内存布局是多个父类成员变量的连续排列,加上子类自己的成员变量。
每个父类如果有虚函数,子类对象中会包含多个虚函数表指针(vptr)。
...
面经 - Base64编码相关
Base64编码是一种常用的数据编码方式,主要用于将二进制数据转换为纯文本形式,以便在需要纯文本的环境中传输或存取数据。以下是使用Base64编码的主要原因:
1. 确保数据传输的兼容性问题:许多协议和系统(如电子邮件、HTTP、文件存储等)只支持纯文本数据。如果直接传输二进制数据(如图片、音频、视频等),可能会因为包含特殊字符(如换行符、控制字符等)而导致数据损坏或解析错误。
解决:Base64将二进制数据转换为64个可打印的ASCII字符(A-Z、a-z、0-9、+、/和=),从而确保数据在传输过程中不会被误解或损坏。
2. 跨平台和跨系统的支持问题:不同的系统和平台对二进制数据的处理方式可能不同,例如换行符在Windows和Unix系统中的表示方式不同(\r\n vs \n)。如果直接传输二进制数据,可能会导致数据不一致。
解决:Base64编码将数据转换为纯文本,避免了因平台差异导致的问题,确保数据在不同系统之间的一致性。
3. 嵌入资源到文本中问题:在某些场景下,需要将二进制资源(如图片、字体等)嵌入到文本文件中,例如HTML、CSS或配置文件中。直接嵌入 ...
名词说明 - bi
BI即商业智能(Business Intelligence),是将企业内外部数据整合、分析并转化为有价值信息和洞察的一套技术、工具和流程,以下是其简要介绍:
基本概念BI通过数据收集、存储、处理、分析和展示等环节,帮助企业从海量数据中提取关键信息,为业务决策提供支持,使企业能够更科学、高效的进行运营管理。
核心功能数据收集与整合从企业内部的各类业务系统(如ERP、CRM、SCM等)、数据库以及外部数据源(如市场调研数据、行业报告、社交媒体数据等)收集数据,并进行清洗、转换和整合,形成统一的数据仓库或数据湖,为后续分析提供高质量的数据基础。
数据处理和分析运用数据挖掘、统计分析、机器学习等技术手段,对数据进行深入分析,包括数据查询、筛选、排序、分组、汇总等基本操作,以及趋势分析、关联分析、预测分析、聚类分析等高级分析方法,以发现数据中的潜在规律、模式和关系,为决策提供依据。
数据可视化将分析结果以直观易懂的图表、报表、仪表盘等形式展示出来,如柱状图、折线图、饼图、地图、热力图等,使业务人员能够快速理解数据所传达的信息,及时掌握业务状况和趋势,从而做出更明智的决策。
优势支持决策定制为管理 ...
面经 - AMQP协议
概念AMQP(Advanced Message Queuing Protocal)是一种高级消息队列协议,是一种开放标准的应用层协议,用于消息导向的中间件。它提供了消息队列、发布/订阅、点对点通信等功能,旨在实现跨平台、跨语言的消息传输。AMQP由金融服务行业发起,并由OASIS标准化。
AMQP的主要特性
可靠性:AMQP支持消息确认和持久化,确保消息在传输过程中的可靠性。
灵活路由:通过交换器(Exchange)和绑定(Binding),实现复杂的消息路由策略。
事务支持:支持事务处理,确保消息传输的一致性。
高性能:优化了高吞吐量和低延迟的消息传输。
安全性:支持TLS加密和多种身份验证机制,确保消息传输的安全性。
AMQP的工作原理
连接建立:客户端与AMQP代理服务器建立TCP链接,并通过握手进行身份验证和会话初始化。
通道创建:在连接上创建多个通道(Channel),用于并行处理多个消息流。
交换器(Exchange):客户端将消息发送到交换器,交换器根据绑定规则将消息路由到对应的队列。
队列(Queue):队列存储接收到的消息,等待消费者取走。
消费者(Con ...
名词说明 - chat bi
Chat BI(powered by LLM)即基于大语言模型(LLM)的聊天式商业智能工具,是新一代智能交互系统,以下是其简要介绍:
基本概念Chat BI将自然语言处理技术与商业智能相结合,允许用户通过自然语言与数据分析系统交互,打破传统BI工具复杂操作的局限,无需专业数据分析知识,用户像与人聊天一样向系统提问,即可快速精确分析结果
核心特点自然语言交互利用先进的自然语言处理技术,理解用户的语言指令并转化为数据查询,用户可像与真人交流般获取数据
即问即答用户提出问题后,系统能实时返回结果,无需繁琐操作,提高数据分析效率,助力企业敏捷决策。
可视化分析能自动生成图表和报告,使数据分析接轨更加直观易懂,帮助用户更好地理解和展示数据。
灵活易用无需专业背景,普通业务人员也能快速上手,降低数据分析门槛,让数据洞察更普及。
多轮对话与智能追问支持多轮对话,用户可在得到一份数据结果后继续提问,系统结合上下文回答;当用户提问模糊时,系统还能智能追问,充分理解意图后再作答。
输入联想和猜你想问根据用户输入关键词联想相关问题推荐,或依据当前提问智能推荐相关问题,提升分析效率,让分析思路不间断。
数据 ...
名词说明 - Headless BI
Headless BI 即无头商业智能,是一种新兴的BI架构模式,以下是其简要介绍:
基本概念它将BI系统的前端展示层与后端数据处理、分析引擎等分析,只提供后端的数据处理、分析功能以及相应的API接口,没有自带的前端可视化界面,需要开发者自行构建前端界面或将其集成到其他应用中。
核心特点前后端分离后端专注数据处理、存储、分析等核心功能,前端展示完全交由开发者定制,可根据不同业务场景和用户需求打造个性化的界面。
高度灵活性与可定制性企业或开发者能基于自身需求,灵活设计数据展示方式、交互逻辑,满足特定业务流程和用户角色的使用习惯。
强大的API驱动通过丰富的API与外部系统无缝集成,可将BI能力嵌入到各类业务应用、工作流中,实现数据驱动的业务操作。
技术栈无关性前端开发可采用任意技术栈,开发团队能使用熟悉的工具和框架进行界面构建,提高开发效率。
工作原理数据源中的数据经ETL(抽取、转换、加载)流程进入 Headless BI系统的数据处理层,分析引擎对数据进行深度分析处理后,通过API接口将结果数据提供给外部应用,由外部定制的前端界面展示给用户。
优势深度个性化满足企业独特的业务需求和用 ...
面经 - http响应码
1xx(临时响应)表示临时响应并需要请求者继续制行操作的状态代码。
100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。
2xx(成功)表示成功处理了请求的状态代码。
200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201(已创建)请求成功并且服务器创建了新的资源。
202(已接受)服务器已接受请求,但尚未处理。
203(非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源。
204(无内容)服务器成功处理了请求,但没有返回任何内容。
205(重置内容)告知浏览器清除当前页面中的所有html表单元素,也就是表单重置。
206(部分内容)服务器成功处理了部分GET请求。
3xx(重定向)表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。
300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。
301(永久移动)请求的网页已永久移动到新位置。服 ...
