ES 常见面试题及答案

目录

es 写入数据流程

es 删除数据流程

es 读数据流程

es 部署的服务有哪些角色

es 的实现原理

es 和lucence 关系

如何提高写入效率

提高搜索效率

es doc value指的啥

分片指的啥,定义后可不可义再修改

 深分页如何优化

对于聚合操作是如何优化的

元数据有哪些,保存在哪里的

是否支持sql查询

mapping指的是啥

常用的分词器

别名通常会用在哪些场景

es是否支持向量检索

能不能支持join操作

副分片是如何复制的

keyword和text有啥区别

字典树体现在es的哪些应用上

使用es自带的唯一id还是自己生成

并发场景下数据一致性如何保证

es 更新mapping 字段如何操作

es 为啥称为近实时

es 可能会丢数据嘛


es 写入数据流程
  1. 客户端发送索引请求: 客户端应用通过 REST API 或者官方提供的客户端库发送索引请求到 Elasticsearch 集群中的任意节点。索引请求包括待索引的文档数据以及目标索引的名称、类型等信息。

  2. 文档解析和映射: Elasticsearch 接收到索引请求后,会对文档数据进行解析,将其转换成内部数据结构,并根据文档中的字段映射信息进行处理。如果目标索引不存在,Elasticsearch 会根据映射信息创建新的索引。

  3. 分片路由: 根据索引请求中指定的文档 ID 或者根据文档内容,Elasticsearch 确定文档应该被索引到哪个分片上。分片路由算法通常基于文档 ID 的哈希值或者基于文档字段值的哈希值计算结果。

  4. 文档分片: 一旦确定了文档应该被索引到哪个分片上,Elasticsearch 就会将文档数据分配到相应的分片中。如果需要,文档数据会在分片之间进行复制,以确保数据的高可用性和容错性。

  5. 文档存储和索引构建: 文档数据被存储到分片中,并且根据文档的字段信息构建倒排索引和其他索引结构。倒排索引是 Elasticsearch 的核心数据结构之一,用于快速定位包含特定词条的文档。

  6. 主分片确认: 文档数据成功存储到主分片后,Elasticsearch 返回确认响应给客户端,表示文档索引操作已经成功完成。在确认响应返回之前,主分片需要确保数据已经持久化到本地磁盘。

  7. 复制分片同步: 如果配置了复制(replica)分片,主分片会将索引的变更信息发送给相应的复制分片。复制分片负责同步主分片上的数据变更,以确保数据的冗余备份和高可用性。

  8. 索引刷新: 为了使新索引的文档对搜索可见,Elasticsearch 需要执行索引刷新操作。索引刷新操作将内存中的倒排索引数据刷新到磁盘,并更新索引元数据信息。默认情况下,索引刷新操作会定期执行,也可以通过客户端的请求强制执行。

es 删除数据流程
  1. 客户端发送删除请求: 客户端通过 REST API 或者官方提供的客户端库发送删除请求到 Elasticsearch 集群中的任意节点。删除请求包括待删除文档的索引、类型和 ID 信息。

  2. 分片路由: Elasticsearch 接收到删除请求后,会根据文档 ID 或者文档内容确定待删除文档所在的分片。分片路由算法通常与数据写入时的路由算法相同。

  3. 文档删除: 一旦确定了待删除文档所在的分片,Elasticsearch 就会在相应的分片上执行文档删除操作。删除操作涉及从倒排索引中移除文档的引用,并更新其他相关的索引数据结构。

  4. 主分片确认: 删除操作完成后,主分片会返回确认响应给客户端,表示文档删除成功。在确认响应返回之前,主分片需要确保删除操作已经持久化到本地磁盘。

  5. 复制分片同步: 如果配置了复制(replica)分片,主分片会将删除操作的变更信息发送给相应的复制分片。复制分片负责同步主分片上的删除操作,以确保数据的一致性。

  6. 索引刷新: 删除操作也会影响到倒排索引等索引数据结构,因此需要执行索引刷新操作来更新索引状态。索引刷新操作会将索引的变更信息刷新到磁盘,并更新索引元数据信息。

需要注意的是,删除操作并不会立即释放磁盘空间,而是标记文档为已删除状态。Elasticsearch 会定期执行段合并(segment merging)等后台任务,以清理已删除文档并释放磁盘空间。因此,即使执行了删除操作,索引的磁盘使用量不会立即减少,而是随着后台任务的执行逐渐减少

es 读数据流程

  1. 客户端发送搜索请求: 客户端应用通过 REST API 或者官方提供的客户端库发送搜索请求到 Elasticsearch 集群中的任意节点。搜索请求包括查询条件、索引名称、类型等信息。

  2. 查询解析: Elasticsearch 接收到搜索请求后,会解析查询条件,并将其转换成内部的查询结构。查询可以包括全文搜索、精确匹配、范围查询、布尔逻辑等多种类型。

  3. 查询路由: Elasticsearch 根据搜索请求中指定的索引名称和查询条件,确定哪些分片包含符合查询条件的文档数据。分片路由算法通常基于查询条件的哈希值或者根据文档分布情况进行优化。

  4. 分片并行搜索: Elasticsearch 并行地向分片发送搜索请求,并在每个分片上执行相应的查询操作。这意味着搜索请求可以同时在集群中的多个分片上进行处理,从而加快搜索速度。

  5. 结果汇总和排序: 每个分片都会返回符合查询条件的部分文档结果,然后 Elasticsearch 将这些部分结果汇总起来,并根据查询要求对结果进行排序。通常情况下,排序操作是在每个分片返回的结果上进行的。

  6. 结果返回给客户端: 最终,Elasticsearch 将搜索结果返回给客户端应用。搜索结果通常包括符合查询条件的文档数据、文档 ID、得分等信息。客户端应用可以根据需要对搜索结果进行进一步处理和展示

es 部署的服务有哪些角色

在 Elasticsearch 集群中,有几种不同的角色负责不同的任务和功能。以下是主要的角色:

  1. 节点 (Node): 节点是 Elasticsearch 集群的基本组成单元。每个节点是一个独立的 Elasticsearch 实例,负责处理数据索引、搜索、复制、集群管理等任务。节点可以分为不同的类型,包括主节点、数据节点和客户端节点。

  2. 主节点 (Master Node): 主节点是 Elasticsearch 集群的控制节点,负责管理集群的整体状态、索引的创建和删除、分片分配、故障检测和故障转移等操作。主节点不存储数据,其主要任务是协调集群中的其他节点。

  3. 数据节点 (Data Node): 数据节点负责存储索引数据和执行搜索操作。它们负责处理文档的索引和搜索请求,并且存储集群中的数据分片。数据节点可以根据需要扩展以增加存储容量和处理能力。

  4. 客户端节点 (Client Node): 客户端节点是专门用于接收客户端请求并将其转发到集群中的其他节点的节点。客户端节点不存储数据,其主要作用是减轻主节点和数据节点的负载,提高集群的可用性和性能。

es 和lucence 关系

Elasticsearch 和 Lucene 之间有着密切的关系,可以将它们看作是搜索引擎的两个不同层次:

  1. Lucene: Lucene 是一个开源的全文搜索引擎库,提供了用于索引和搜索文档的基本功能。它是 Apache 软件基金会的项目之一,是许多搜索引擎和信息检索系统的核心技术之一。Lucene 提供了一个高效的倒排索引数据结构,以及用于文本分析、查询解析、评分、排序等功能的实现。Lucene 可以作为一个库集成到 Java 应用中,提供搜索和索引功能。

  2. Elasticsearch: Elasticsearch 是建立在 Lucene 基础之上的分布式搜索和分析引擎,它提供了更高级别的抽象和功能,使得构建和管理大规模搜索应用更加简单和高效。Elasticsearch 提供了一个 RESTful API 接口,支持分布式索引和搜索、实时数据分析、复杂查询、聚合分析、数据可视化等功能。它在 Lucene 的基础上构建了一个分布式系统,支持自动的集群管理、数据复制、故障处理等特性,使得可以横向扩展以处理海量数据和高并发请求。

Elasticsearch 实际上是 Lucene 的封装和扩展,它在 Lucene 基础上构建了一个分布式系统,提供了更丰富的功能和更容易使用的接口。通过 Elasticsearch,用户可以方便地构建和管理复杂的搜索应用,而无需直接操作 Lucene API。同时,Elasticsearch 还提供了许多其他功能,如数据分析、聚合分析、数据可视化等,使得它成为一个功能更加丰富的搜索和分析平台

es 的实现原理,主要是倒排索引

以下是倒排索引的基本原理和结构:

  1. 词条提取: 在构建倒排索引之前,需要对文档进行分词处理,将文档拆分成词条或者单词。分词过程通常包括词条化、标准化、词干提取等步骤,以确保搜索时能够正确匹配词条。

  2. 词条映射: 对于每个词条,倒排索引将其映射到包含该词条的文档列表。这意味着每个词条都有一个相关联的文档列表,其中包含了包含该词条的所有文档的标识符(如文档 ID)。

  3. 文档标识符: 文档标识符是倒排索引中的一个关键部分,用于标识包含特定词条的文档。文档标识符可以是文档的唯一编号、文件路径、URL 等。

  4. 倒排列表: 对于每个词条,倒排索引都会维护一个倒排列表,其中包含了包含该词条的所有文档的标识符。倒排列表通常按照某种顺序排列,以便进行高效的检索操作。

  5. 索引合并: 在实际应用中,倒排索引可能会分布在多个分片或者节点上,每个分片或节点负责维护一部分索引数据。当需要执行搜索操作时,倒排索引会合并多个分片或节点上的倒排列表,以获得完整的搜索结果。

倒排索引的优点在于它能够快速定位包含特定词条的文档,从而实现高效的搜索和检索操作。倒排索引通常被搜索引擎和信息检索系统广泛使用,如 Elasticsearch、Apache Solr 等

如何提高写入效率
  1. 批量写入: 将多个文档的索引请求合并成批量请求,一次性发送给 Elasticsearch。这样可以减少网络通信开销和请求处理时间,从而提高写入效率。使用 Elasticsearch 的 Bulk API 可以实现批量写入功能。

  2. 异步写入: 对于非实时要求较高的写入操作,可以采用异步写入的方式。将写入请求发送到消息队列或者异步任务队列,然后由后台任务异步处理,这样可以避免写入操作对客户端的响应时间造成影响。

  3. 分片和副本优化: 合理配置索引的分片和副本数量,以充分利用集群中的节点资源,并且确保数据的高可用性和容错性。通常情况下,增加分片数量可以提高写入并行度,从而提高写入效率,可以暂时调整副本数

  4. 硬件优化: 使用高性能的硬件设备,如 SSD 硬盘、高速网络等,可以提升 Elasticsearch 的写入性能。此外,确保 Elasticsearch 集群的硬件配置和网络带宽能够满足写入负载的需求。

  5. 索引设置优化: 根据具体的业务需求和数据特性,合理设置索引的配置参数,如刷新间隔、刷新策略、副本同步延迟等。调整这些参数可以平衡写入性能和数据一致性之间的关系

  6. 避免热点写入: 尽量避免将大量写入请求集中在少数几个节点上,通过自定义id,以防止出现热点写入问题。合理分布写入请求可以减轻节点的负载,并提高整个集群的写入性能

提高搜索效率

  1. doc_values 存储在磁盘上,可以在不加载整个文档的情况下直接访问字段值。这样可以避免加载大量文档到内存中,减少内存消耗和 I/O 操作,提高查询的性能和效率。

  2. 支持排序和聚合doc_values 可以被用于排序和聚合操作,可以在大规模数据上进行快速的排序和聚合计算。Elasticsearch 使用 doc_values 来支持各种类型的排序和聚合操作,包括字段值、范围、统计信息等。

  3. 主要是按照列存储的,压缩和读取效率高

分片指的啥,定义后可不可义再修改

指的是同一个索引,会有由三个shard 来存储数据

 深分页如何优化

首先来看原理,三个节点的话,如果是查一页,每页是10的话,实际上每个节点都会查10条数据出来,如果是1w页的话,每个节点都要查10w的数据出来,所以深分页带来的查询消耗是巨大的

对于聚合操作是如何优化的

这里我主要是想讲的是doc_values,列式存储,压缩,对于数值来说,聚合计算效果好,不支持字符类型,字符类型也不需要聚合运算

元数据有哪些,保存在哪里的

是否支持sql查询

开源版本不支持,可以通过自定义来实现,把sql语法转成es的查询语句

mapping指的是啥

具体来说,Mapping 定义了以下几个方面的内容:

  1. 字段类型(Field Type): 定义了每个字段的数据类型,例如文本(text)、关键字(keyword)、日期(date)、数值(numeric)、布尔值(boolean)等。

  2. 分析器(Analyzer): 对于文本类型的字段,Mapping 可以指定使用哪种分析器进行文本分析和处理。分析器用于将文本拆分成词条,并进行标准化、词干提取、停用词过滤等处理。

  3. 索引选项(Index Options): 定义了字段在索引中的索引行为,包括是否索引、是否存储、是否启用位置信息等。索引选项影响了字段的搜索行为和存储行为。

  4. 字段属性(Field Properties): 定义了字段的各种属性和设置,如是否可搜索、是否可排序、是否可聚合等。字段属性影响了字段的使用方式和行为特性。

  5. 嵌套字段(Nested Field): 对于复杂的数据结构,Mapping 可以定义嵌套字段,以支持多层级的文档结构。嵌套字段允许在一个字段中存储另一个文档或者文档数组

别名通常会用在哪些场景

索引按月/或者其它维度进行存储时,通过别名来查询全部的索引

es是否支持向量检索

支持

能不能支持join操作

副分片是如何复制的

在 Elasticsearch 中,副本的复制发生在主分片上发生索引操作后。当客户端发送索引请求时,请求会首先到达主分片,主分片负责处理索引操作并在本地更新索引数据。一旦主分片确认成功地将索引操作应用到本地数据后,它会将相同的操作发送给所有对应的副本分片。

副本分片在收到来自主分片的索引操作后,会执行相同的操作,将索引操作应用到本地数据中。一旦副本分片确认成功地应用了索引操作,它会向主分片发送确认请求。主分片收到来自所有副本分片的确认请求后,确认索引操作成功,并向客户端发送成功响应。

keyword和text有啥区别

keyword 为关键字不会进行分词

text会进行分词

字典树体现在es的哪些应用上
  1. 倒排索引(Inverted Index):ES使用倒排索引来快速查找包含特定词条的文档。在倒排索引中,每个词条都映射到包含该词条的文档列表。字典树可以用于构建这种倒排索引,其中每个节点代表一个词条的字符,从根节点开始,沿着路径可以得到包含该前缀的文档列表。

  2. 全文搜索(Full-Text Search):ES支持全文搜索,允许用户搜索文本中的任意词条。字典树可以用于存储文档中的单词,使得搜索引擎可以快速地定位包含特定单词的文档。

  3. 前缀搜索(Prefix Search):ES允许用户进行前缀搜索,即查找以特定前缀开头的词条。字典树是实现前缀搜索的理想数据结构,因为它可以有效地存储以相同前缀开头的词条,并且可以快速地找到满足特定前缀条件的所有词条。

  4. 自动补全(Autocomplete):基于用户输入提供自动补全建议是许多应用中常见的需求。字典树可以用于实现自动补全功能,它可以快速地查找以用户输入的前缀开头的词条,并提供相应的建议。

使用es自带的唯一id还是自己生成

使用es自带的唯一id,已经经过优化

并发场景下数据一致性如何保证

Elasticsearch 使用乐观并发控制(Optimistic Concurrency Control)来处理并发更新场景。当多个客户端同时尝试更新同一个文档时,Elasticsearch 会比较文档的版本号,并且只允许具有最新版本号的客户端执行更新操作。这样可以避免并发更新导致的数据不一致问题

// 准备更新请求
        UpdateRequest request = new UpdateRequest("products", "123")
                .doc(createUpdateScript())
                .retryOnConflict(3) // 如果遇到版本冲突,最多重试3次
                .versionType(VersionType.EXTERNAL);

        // 发送更新请求
        UpdateResponse response = client.update(request, RequestOptions.DEFAULT);

        // 处理更新响应
        if (response.status() == RestStatus.OK) {
            System.out.println("Document updated successfully");
        } else {
            System.out.println("Failed to update document: " + response.status());
        }
es 更新mapping 字段如何操作

可以加字段,不能删除字段

es 为啥称为近实时

Elasticsearch 支持实时刷新(Real-Time Refresh)功能,允许索引的变更立即可见。默认情况下,Elasticsearch 每秒钟会执行一次索引刷新操作,将内存中的索引数据刷新到磁盘上,从而使得新索引的文档对搜索可见

es 可能会丢数据嘛

refresh 1s一次

segment flush 30分钟,或者达到指定文件大小

translog 5s一次

理论上可能会丢5s的数据

filter 和query 有啥区别
  1. 缓存机制

    • filter 查询的结果可以被缓存,这意味着相同的 filter 查询可以被多次重用,从而提高了性能。
    • query 查询的结果默认情况下不会被缓存,每次执行查询都会重新计算。
  2. 评分机制

    • query 查询会根据文档与查询的匹配程度计算一个评分(score),并按照评分进行排序,默认情况下,查询结果会按照评分从高到低排序。
    • filter 查询不会计算评分,它只是用来过滤文档,返回与查询匹配的文档,而不关心匹配程度。
  3. 语义

    • query 查询用于描述文档与查询的匹配程度,它会考虑到查询中的全文检索、词条匹配、相似度等因素。
    • filter 查询主要用于过滤文档,根据指定的条件来筛选文档,它主要关注于查询条件的匹配与否,而不关心匹配程度。
  4. 性能

    • 由于不涉及评分计算,filter 查询通常比 query 查询性能更好,特别是在过滤大量文档时。
    • query 查询的性能通常会受到评分计算的影响,特别是当查询结果需要排序时,性能可能会受到更大的影响。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务高级篇(二):分布式事务+Seata架构

文章目录 一、分布式事务理论基础1.1 CAP定理1.2 BASE理论 二、初始Seata2.1 Seata的架构2.2 部署TC【事务协调者】服务2.3 微服务集成Seata 三、实践3.1 XA模式3.1.1 原理3.1.2 实现 3.2 AT模式3.2.1 原理3.2.2 脏写问题以及解决方案【全局锁超时处理】3.2.3 实现 3.3 TCC模式…

机器人路径规划:基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(提供Python代码)

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略&#…

【漏洞复现】Progress Kemp LoadMaster 命令注入漏洞(CVE-2024-1212)

0x01 产品简介 Progress Kemp LoadMaster是一款高性能的应用交付控制器,具有可扩展性,支持实体硬件和虚拟机的负载均衡。它提供了当今应用服务所需的各种功能,包括深度用户验证、资安防护(如WAF/IPS/DDoS防护)以及零信…

Cannot run program “C:\Program Files\Java\jdk-17\bin\java.exe“

错误提示:Cannot run program “C:\Program Files\Java\jdk-17\bin\java.exe” 解决办法: 检查环境变量是否配置是否正确检查项目环境是否正确,可能会出现多个JDK版本,将不需要的删除

Spring Cloud(Finchley版本)系列教程(四) 断路器(Hystrix)

Spring Cloud(Finchley版本)系列教程(四) 断路器(Hystrix) 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 一、断路器Hystrix hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,…

如何实现在固定位置的鼠标连点

鼠大侠的鼠标连点功能是免费的 浏览器搜索下载鼠大侠,指定连点间隔和启动快捷键 点击设置,指定点击位置

2024年熔化焊接与热切割证模拟考试题库及熔化焊接与热切割理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年熔化焊接与热切割证模拟考试题库及熔化焊接与热切割理论考试试题是由安全生产模拟考试一点通提供,熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材,熔化焊接与热切割大…

部分字符函数与字符串函数的讲解

说到字符函数,我们见过很多,比如strlen,strcpy,strcat...... 这时候就会有人说还有sizeof,其实sizeof不是库函数,他其实是操作符 但是你听说过以下库函数么? 所以说字符串的函数有很多&#xff…

Photomator:专业级照片编辑的利器

Photomator软件是一款功能强大的照片编辑和管理工具,专注于提供高质量的图像处理体验和便捷的工作流程。以下是关于Photomator软件功能特色的详细介绍: 高级颜色调整功能:Photomator提供了大量前沿的颜色调整工具,包括AI驱动的自…

【数据结构】单链表详解

前言 为了解决顺序表存在的一些问题,我们引入了单链表~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 顺序表存在一定的问题 与顺序表的对比 认识链表 链表结构 打印节点 头文件SList.h 源…

opencv安装(C++)并配置vs

准备工作: 1.opencv安装包(此教程使用4.9) 2.visual studio(此教程使用vs2019) opencv安装: 1、下载opencv: 1.1 官网下载:Releases - OpenCV 1.2 百度网盘:链接:https://pan.baidu.com/s/1NpEoFjbbyQJtFD…

HANA VIEW 用 ABAP 创建CDS VIEW,在生成ODATA

这里我们做ADT来创建 场景介绍:把hana中的一个底表,创建成ABAP的 CDS VIEW ,在把CDS VIEW 生成 OData 服务。 一、创建CDS Table Function 红框内根据自身情况填写 选择 Define Table Function with Parameters 创建 Data Definition 完整代码,定义 结构 , 也可以定义参…

基于springboot+vue的火锅店管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

javaSwing推箱子游戏

一、简介 策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。在人类…

支小蜜校园防欺凌系统怎么识别到学生打架?

校园欺凌行为已经成为一个全球性的社会问题,它不仅影响了学生的身心健康,也破坏了校园的和谐氛围。为了有效预防和应对这一现象,许多学校开始引入校园防欺凌系统。那么,校园防欺凌系统是如何识别到学生打架的呢?本文将…

腾讯云轻量2核2G3M服务器优惠价61元一年性能测评

阿里云轻量应用服务器2核2G3M带宽优惠价一年61元,100%CPU性能,3M带宽下载速度384KB/秒,40GB SSD系统盘,月流量200GB,折合每天6.6GB流量,超出月流量包的流量按照0.8元每GB的价格支付流量费,地域节…

网络——入门基础

目录 协议 网络协议 OSI七层模型 网络传输基本流程 网络传输流程图 局域网通信 数据包的封装和解包 广域网通信 网络地址管理 IP地址 MAC地址 协议 关于什么是局域网,什么是广域网,我这里就不过多赘述了,我们直接来谈一下什么…

数据结构:10、排序

本文将会介绍8种排序,并在文章末附上代码 一、排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,…

二、阅读器的开发(初始)-- 1、阅读器简介及开发准备工作

1、阅读器工作原理及开发流程 1.1阅读器工作原理简介 电子书(有txt、pdf、epub、mobi等格式)->解析(书名、作者、目录、封面、章节等)->(通过阅读器引擎)渲染 -> 功能(字号、背景色、…

学生信息管理系统--修改信息(非常详细的修改,更新,撤销,删除逻辑)

目录 概述修改包括的操作修改在每个模块中的应用 详解修改与更新取消删除 特殊概念数据集游标 总结 概述 学生信息管理系统,功能相对简单且代码重复性高,应该采用复用的思想来减少代码的冗余和提高代码的可维护性。然而,对于基础入门项目来说…