【elasticsearch实战】从零开始设计全站搜索引擎

news2025/1/1 23:55:59

业务需求

最近需要一个全站搜索的功能,我们的站点的特点是数据多源,即有我们本地数据库,也包含了第三方数据源,我们的数据类型除了网页,还包括了各种类型的文档,例如:doc、pdf、excel、ppt等格式。搜索需求如下:

关键词检索

  • 高亮搜索词
  • 可以检索标题和正文内容
  • 支持不通数据类型权重优先:例如doc类型文档优先级更好;
  • 支持按相关度和时间维度排序
  • 需要支持根据用户权限过滤部分显示文档在这里插入图片描述

热门搜索词

  • 统计每日用户搜索词,按搜索次数排序
  • 热度按时间范围统计 T+1 统计,前n天的搜索词
    参考百度热词:
    在这里插入图片描述

输入词联想

  • 用户输入搜索词后,进行输入词联想推荐,如下图:
    在这里插入图片描述

业务分析

关键词检索

关键词检索的内容包括本地数据库和第三方数据源。

  1. 本地数据库存储在腾讯云的MySQL中,包括2类数据:

    • 富文本网页数据存储在MySQL的text字段中
    • 文档(doc、ppt、pdf、excel)数据存储在对象云存储中,我们使用了腾讯云COS存储,MySQL只存储了对象访问地址。
  2. 第三方数据源
    第三方数据源需要和本地数据库es检索的结果混排后展示给页面显示。

热门搜索词

热门搜索词主要来源用户搜索,目前场景比较简单,每天定时任务统计N天前的用户搜词词频,按搜索频次降序排序,存储到MySQL或者redis中。
但这种方法可能存在问题,热搜词没有时间权重衰减, 例如:一个关键词10天前搜索了101次,昨天搜索了100次,10天前的词还能继续排在昨天的热词前面吗? 因此需要设计一个热词衰减权重,搜索时间越长热度权重应该相应的衰减。

联想搜索词

联想搜索需要在用户输入关键词时,联想用户可能想要搜索的词,该功能需要解决2个问题:

  1. 关联词来源
  2. 关联词方式

关联词来源可以通过用户搜索关键词记录来提取。

技术选型

技术选择可以根据业务和当前的系统环境来判断:

  1. 尽量不重复造轮子;
  2. 使用已有、成熟的、开源的技术栈;
  3. 能满足需求,成本低、技术可控。
    搜索存储引擎目前最成熟活跃的方案非 elasticsearch莫属,我们的系统基于腾讯云TSF微服务框架搭建,业务数据存在在腾讯云的MySQL中,因此搜索业务全文检索计划使用腾讯云最新版本的Elasticsearch 8.12

es配置选择

在腾讯云es选择配置时,除了考虑文档数据量之外,还需要考虑使用的插件对配置的影响,例如腾讯云自研的QQ分词器,就比较占资源,这里提示最少要选择2核8G以上的配置,但我们在8.12版本选的这个配置时,也经常由于堆外内存过大导致了es出现OOM,最后不得不升级到8核16G,这里大家需要谨慎选择。
在这里插入图片描述

文档转换工具选择

我们的需求里面需要将不同类型的文档转换为纯文本,这里有几个开源的实现方案:

工具优点缺点
1. OpenOffice1. 一个开源的,功能强大的办公软件套装。
2. 支持多种格式的文档转换。
3. 支持多语言。
4. 可以运行在多种操作系统上。
1. 界面比较陈旧。
2. 某些高级功能不如付费的办公软件强大。
3. 需要较大的系统资源运行。
2. Tika1. Apache Tika是一个开源的文档类型和元数据提取工具。
2. 支持大量的文档格式。
3. 可以提取文档中的元数据和文本内容。
1. 对于一些复杂的文档格式,提取的结果可能不准确。
2. 需要Java环境运行。
3. Ingest Attachment1. Elasticsearch的一个插件,可以用来提取各种文件的内容。
2. 使用Apache Tika进行文档解析。
3. 可以直接与Elasticsearch集成,方便进行全文搜索。
1. 需要Elasticsearch环境。
2. 对于一些复杂的文档格式,提取的结果可能不准确。
4. FsCrawler1. FsCrawler是一个简单的文件系统爬虫,可以用来索引文件和文件夹。
2. 支持OCR和全文搜索。
3. 可以直接与Elasticsearch集成。
1. 需要Java环境运行。
2. 只能处理文件系统中的文件,不能处理网络上的文件。

我结合自身业务的情况,选了上面4种之外的方法,我们文档存储在腾讯云COS,直接调用`腾讯云API转html 或者text文档:文档转 HTML

如果没有使用腾讯云我这边推荐使用`FsCrawler, 可参考我之前的博文。

数据传输选型

我们的数据存储在MySQL,文档数据存储在对象存储腾讯云COS中,需要近实时的将文档数据的变更同步到es数据库中,有以下一些同步方案。

同步方案选型

  1. 应用同步双写
    在这里插入图片描述
  2. 应用异步双写
    在这里插入图片描述
  3. 基于MySQL的抽取
    在这里插入图片描述
  4. 基于Binlog实时同步
    在这里插入图片描述
    四种方案原理和对比如下:
方案原理优点缺点
1. 应用同步双写当应用程序对MySQL进行写操作时,同时对Elasticsearch进行写操作。1. 实时性较高。
2. 数据同步过程相对简单。
1. 对应用程序造成较大压力。
2. 需要应用程序维护两个数据源。
3. 一旦出现错误,可能导致数据不一致。
2. 应用异步双写当应用程序对MySQL进行写操作时,将写操作记录到消息队列,然后异步地对Elasticsearch进行写操作。1. 对应用程序的压力较小。
2. 数据同步过程相对简单。
1. 实时性较差。
2. 需要应用程序维护两个数据源。
3. 一旦出现错误,可能导致数据不一致。
3. 基于MySQL的定时任务抽取定时从MySQL中抽取数据,然后将数据写入到Elasticsearch。1. 对应用程序无影响。
2. 可以自定义同步周期。
1. 实时性较差。
2. 需要额外的定时任务维护。
3. 需要对MySQL进行查询操作,可能影响性能。
4. 基于MySQL的Binlog日志同步通过解析MySQL的Binlog日志,实时地将数据变更写入到Elasticsearch。1. 实时性较高。
2. 对应用程序无影响。
3. 可以保证数据一致性。
1. 需要解析Binlog日志,实现较为复杂。
2. 需要额外的同步工具或中间件。
3. 需要对MySQL的Binlog日志进行维护。

我们考虑综合考虑了实时性要求和对应用的改造影响,选择了方案4: 基于MySQL的Binlog日志同步
那么异步同步工具有又怎么选择呢?

同步工具选型

同步工具开源方案目前最活跃的应该是阿里巴巴开源的canal ,可以看github官网的原理介绍

  1. MySQL主备复制原理:
    • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志- 事件binary log events,可以通过 show binlog events 进行查看)
    • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
    • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
  2. canal 工作原理
    • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
    • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
    • canal 解析 binary log 对象(原始为 byte 流)

在这里插入图片描述
我们结合自己的业务场景和系统现状选择了腾讯云DTS做数据传输工具, 另外自研了数据传输的中间件,来解决不同数据表结构的适配问题,统一适配数据格式之后,将数据从新写入kafka,然后通过logstash 读取kafka数据写入binlog

订阅binlog
读取kafka
写入kafka2
input来源于kafka2
输出到kafka1
腾讯云 DTS-kafka1
MySQL
dts适配
kafka2
logstash
Elasticsearch

整体设计

架构图

架构图如下

  • 搜索服务:基础的关键词检索能力、权限控制、热词/联想词、搜索结果混排、查询第三方数据
  • 数据转换服务:读取kafkabinlog转换成满足es索引结构的json对象,再写入kafka,通过logstash写入es中。
    在这里插入图片描述

详细设计

该服务包括:搜索门户api、权限控制、搜索能力、搜索混排、搜索热词、联想关键词。

搜索混排

由于自主维护的数据和第三方数据源数据都存储在es中,因此可以直接使用评分进行合并,如下图所示。
在这里插入图片描述

注意:

  1. 可以配置不同数据源的评分权重(或者评分算法)以便优先要展示的结果;
  2. 需要记录不同数据源的偏移量和不同数据的查询结果,以便实现下次查询分页处理;
  3. 查询ES和查询私有云数据使用协程并行操作,等待2个结果共同返回处理。

另外你的第三方数据源没有存储在es数据库中,不能直接给出文档评分的,可以考虑以下混排方案:

方案原理优点缺点
es临时建索引做混排将来自不同数据源的数据在Elasticsearch中创建一个临时索引,然后在该索引上进行搜索和排序。1. 利用Elasticsearch强大的搜索功能。
2. 支持复杂的查询和排序。
1. 需要创建临时索引,可能影响性能。
2. 需要处理索引的创建和删除。
3. 可能需要处理数据源之间的数据差异。
Lucene内存混排将来自不同数据源的数据加载到Lucene内存索引中,然后在内存索引上进行搜索和排序。1. 高性能,因为数据存储在内存中。
2. 支持复杂的查询和排序。
1. 内存占用较高。
2. 需要处理Lucene内存索引的创建和维护。
3. 可能需要处理数据源之间的数据差异。
分词词频内存混排根据分词和词频对来自不同数据源的数据进行内存中的排序,然后返回排序后的结果。1. 实现相对简单。
2. 内存占用相对较低。
1. 只支持基于分词和词频的排序。
2. 对于复杂的查询和排序需求,可能不够灵活。
3. 可能需要处理数据源之间的数据差异。

翻页方案

由于要对2个数据源进行混排,要支持搜索跳页比较困难,因此在功能实现上目前只能支持上下翻页来实现

翻页计算公式

前端需要保存每一页es 和 api 两个数据源的偏移量:EsOffset 和 ApiOffset,可以使用对象数组保存pageArrays[0] = {EsOffset: 0, ApiOffset: 0 } , 翻页计算公式如下:

  • 当前页码计算公式:PageNo =(EsOffset+ApiOffset) /PageSize

  • 上一页:将当前页码减1 :pageArrays[(EsOffset+ApiOffset)/ PageSize - 1 ] , 获取上一页页面缓存的上一页 EsOffset 和 ApiOffset

  • 下一页: EsOffset = EsOffset + EsUsedItemCountApiOffset = ApiOffset + ApiUsedItemCount, 获取下一页的EsOffset 和 ApiOffset

注意:查询到第一页时,可清空页面分页缓存数组对象,重新存储。

翻页举例说明

  1. 查询首页,假设没页显示20条数据

    • 请求参数:EsOffset = 0,ApiOffset=0, PageSize=20

    • 返回结果:EsOffset = 0,ApiOffset=0,EsUsedItemCount=7,ApiUsedItemCount=13, EsHasNextPage=true,ApiHasNextPage=true

前端需要需要页面需要保存当前第一页页面的 EsOffset=0ApiOffset=0PageNo = (0 + 0) / 20 = 0 ,页面缓存数据: pageArrays=[{EsOffset: 0, ApiOffset: 0 }]

  1. 继续查询下一页

    • 请求参数:EsOffset = EsOffset + EsUsedItemCount=> 0 + 7 = 7,ApiOffset=ApiOffset+ApiUsedItemCount = 0 + 13 = 13, PageSize=20

    • 返回结果:EsOffset = 7,ApiOffset=13, EsUsedItemCount = 12,ApiUsedItemCount = 8, EsHasNextPage=true,ApiHasNextPage=true

    • 前端继续缓存当前分页数据:EsOffset=7 和 ApiOffset=13,PageNo = (7 + 13) / 20 = 1, pageArrays=[{EsOffset: 0, ApiOffset: 0 },{EsOffset: 7, ApiOffset: 13}]

  2. 查询上一页

  • 请求参数:当前页码减1 (EsOffset+ApiOffset)/ PageSize - 1 => (7 + 13)/20 - 1 = 0 EsOffset = pageArrays[0].EsOffset = 0,ApiOffset=pageArrays[0].ApiOffset = 0, PageSize = 20

  • 返回结果:与第一页一致
    如果是查询第一数据,清空缓存数组,重新缓存当前分页数据。

权限处理

搜索权限需要满足根据用户权限过滤部分无权限的文档,以下是召回前处理和召回后处理权限的方案对比。

方案实现优点缺点
召回前过滤在查询时,根据用户的权限对文档进行过滤,只返回有权限查看的文档。1. 查询结果直接满足权限要求。
2. 减少了无关文档的返回,提高了性能。
1. 需要在查询时处理权限信息。
2. 对于复杂的权限体系,实现可能较为复杂。
召回后过滤先查询所有文档,然后根据用户的权限对查询结果进行过滤。1. 查询过程简单,不需要处理权限信息。
2. 适用于简单的权限体系。
1. 可能返回大量无关文档,影响性能。
2. 需要在查询后处理权限信息,增加了实现复杂度。

根据我的需求和场景,对性能要求较高,我们使用召回前过滤。如果希望简化查询过程,页可以考虑使用召回后过滤。
下面是在文档的权限格式,包含文档有权限的用户ID和部门ID

"privilege": {
     "data": [
         {
             "type": "staff",
             "id": "xxxx"
         },
         {
             "type": "department",
             "id": 1
         }
     ]
 }

我们在设计索引mapping时

{
  "mappings": {
    "properties": {
      "privilege": {
        "properties": {
          "data": {
            "type": "nested",
            "properties": {
              "type": {
                "type": "keyword"
              },
              "id": {
                "type": "keyword"
              }
            }
          }
        }
      }
    }
  }
}

查询权限过滤参数:

GET /your_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "nested": {
            "path": "privilege.data",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "privilege.data.type": "staff"
                    }
                  },
                  {
                    "term": {
                      "privilege.data.id": "xxxx"
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "privilege.data",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "privilege.data.type": "department"
                    }
                  },
                  {
                    "term": {
                      "privilege.data.id": "1"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

搜索行为日志收集

需要满足用户搜索历史记录,首先需要收集用户搜索行为日志。

输入关键词
写入日志
用户
服务端
Mysql

通过收集用户搜索关键词存储在MySQL,每日定时任务统计热词和联想词来实现热门搜索榜和搜索联想词。

搜索热词设计

通过收集用户搜索词来统计热搜词, 其中热搜词的热度通过统计搜词词频来统计,统计包括热度周期,T+n 天的搜词次数排序,可以设计一个热度公式。

  1. 初始热度权重: w (默认1)

  2. 单位时间词频: c :(时间单位可以是 分钟、小时、天等,例如:以天为单位统计)

  3. 统计时间段数:T:(例如:连续统计30天关键词搜索频次)

  4. 单位时间热度: w / T(每个单位时间热度权重)

  5. 距离当前时间单位: n (例如计算最近30天,昨天的单位为:0)
    一个词热度计算公式:
    hot = [(T - 0)* c0 + (T - 1) * c1 + (T-2) * c2 + … + (T-n) * cn] * (w / T)
    我们以按天统计,统计30天为例,每天的访问词频从近到远为: c0, c1, c2, … cn ( n 从0到29), 热度默认权重:1,时间段 T = 30(最近30天)
    hot = [(30 - 0) * c0 + (30 -1) * c1 + (30-2)c2 + … + (30 - 29) * c29] * 1 / 30
    => (30
    c1 + 29 * c2 + 28 * c3 + …+ c29) / 30
    化简后可以得到热度公式:
    h o t = ∑ i = 0 n = 29 ( T − i ) ∗ c i ∗ w / T hot= \sum_{i=0}^{n=29} (T-i)*ci * w/T hot=i=0n=29(Ti)ciw/T

  6. 每天定时任务统计用户搜索词,使用公式根据近30天的热度值,按从大到小排序top n;

  7. 将top n 结果存储到MySQL中,方便后续人工干预。

思考:同义词合并逻辑,类似词的搜索建议合并成一个词条,避免相似词太多。

搜索联想词设计

搜索联想词,使用了es的数据类型CompletionElasticsearch 提供了一个叫做 Completion Suggester 的功能,它是一个基于前缀的自动完成建议器,可以用来实现关键词联想。当你输入一个词的前缀时,它就可以提供一些可能的完成建议。

  1. 每日统计用户近3个月搜索词,排序前top n 个词;

  2. 将top n 写入es。(n >= 1000)。

索引模版

全文搜索模版

PUT _template/template_fulltext
{
  "index_patterns": ["fulltext-*"],
  "settings": {
    "number_of_shards": 1,
    "analysis": {
      "analyzer": {
        "ik_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_analyzer"
      },
      "summary": {
        "type": "text",
        "analyzer": "ik_analyzer"
      },
      "content": {
        "type": "text",
        "analyzer": "ik_analyzer"
      },
      "author": {
        "type": "keyword"
      },
      "document_type": {
        "type": "keyword"
      },
      "url": {
        "type": "keyword"
      },
      "publish_date": {
        "type": "date"
      },
      "update_date": {
        "type": "date"
      },
      "privilege": {
        "properties": {
          "data": {
            "type": "nested",
            "properties": {
              "department": {
                "type": "keyword"
              },
              "id": {
                "type": "keyword"
              }
            }
          }
        }
      }
    }
  }
}

联想词索引

PUT _template/template_suggest
{
  "index_patterns": ["suggest-*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "suggest": {
        "type": "completion"
      }
    }
  }
}

后续优化

数据源优化

  1. 文档质量优化:

    • 清洗低质量文档;
    • 去除重复文档;
  2. 排序优先级配置:支持不同来源数据设置不同权重。

搜索体验持续优化

  1. 搜索词库完善,补充分词器搜索词库:可以通过热门搜索词表和日常维护;

  2. 搜索词自动补全(completion类型)?

  3. 搜索词同义替换,输入错别字时能给出正确词的结果?

  4. 搜索点击率统计,即搜索命中结果的点击统计

参考文档

  1. Elasticsearch官网文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html
  2. 轻风博客: https://www.cnblogs.com/88223100/p/Four-data-synchronization-schemes-to-Elasticsearch.html
  3. 一本书讲透Elasticsearch:作者博客 https://blog.csdn.net/laoyang360

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

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

相关文章

Hive借助java反射解决User-agent编码乱码问题

一、需求背景 在截取到浏览器user-agent,并想保存入数据库中,经查询发现展示的为编码后的结果。 现需要经过url解码过程,将解码后的结果保存进数据库,那么有几种实现方式。 二、问题解决 1、百度:url在线解码工具 …

Mac上使用M1或M2芯片的设备安装Node.js时遇到一些问题,比如卡顿或性能问题

对于Mac上使用M1或M2芯片的设备可能会遇到在安装Node.js时遇到一些问题,比如卡顿或性能问题。这可能是因为某些软件包或工具在M1或M2芯片上的兼容性不佳。为了解决这个问题,您可以尝试以下方法: 1. 使用Rosetta模式 对于一些尚未适配M1或M2…

YOLOv9|加入2023Gold YOLO中的GD机制!遥遥领先!

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 一、Gold YOLO摘要 在过去的几年里,YOLO系列模型已经成为实时目标检测领域的领先方法。许多研究通过修改体系结构、增加数据和设计新的损…

记录dockers中Ubuntu安装python3.11

参考: docker-ubuntu 安装python3.8,pip3_dockerfile ubuntu22 python3.8-CSDN博客

JavaScript中的事件模型(详细案例代码)

文章目录 一、事件与事件流二、事件模型原始事件模型特性 标准事件模型特性 IE事件模型 一、事件与事件流 javascript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性, 常见的有加载事件、鼠标事件、自定…

FPGA静态时序分析与约束(四)、时序约束

系列文章目录 FPGA静态时序分析与约束(一)、理解亚稳态 FPGA静态时序分析与约束(二)、时序分析 FPGA静态时序分析与约束(三)、读懂vivado时序报告 文章目录 系列文章目录前言一、什么是时序约束&#xff1…

【CVE-2022-47549】OPTEE之使用故障注入攻击绕过Raspberry Pi3上的TA签名验证

目录 一、问题描述 二、严重性评估 三、缓解措施 四、Patches 五、解决方案 六、参考 七、OP-TEE ID 八、报告人/单位 九、更多信息 十、时间线 一、问题描述 SEAL研究人员和工程师成功地通过利用电磁故障注入的glitch攻击,在树莓派3设备上攻克了签名检查…

佛教圣地——普陀山

洛 迦 山 今天早上集合时间是5:20,我们不到4点都醒了,昨天晚上我并没有睡着。清早起来之后,身体很是匮乏。但我们还需要去托运行李,所以只能匆忙起来,等忙活完了,已经5点多了,我们下楼走到小区门…

SCUI Admin:快速构建企业级中后台前端的利器 让前端开发更快乐。

欢迎加入我们的前端组件学习交流群,可添加群主微信,审核通过后入群。 随着Web技术的不断发展,中后台前端解决方案在各类企业级应用中扮演着越来越重要的角色。SCUI Admin正是一款基于Vue3和elementPlus的WebUI前端框架,旨在帮助开…

离线安装docker、docker-compose、Mysql镜像

离线安装docker docker-compose mysql镜像 一、下载docker docker-compose mysql 镜像文件 1、首先下载docker镜像 博主所用文件版本号: docker-23.0.6.tgz 下载docker 地址 :https://blog.csdn.net/xiaohanshasha/article/details/135489623?spm1001…

Keil笔记(缘更)

Keil 一、使用Keil时可能会出现的问题1.Project框不见了2.添加文件时找不到3.交换文件位置4.main.c测试报1 warning 二、STLINK点灯操作1.配置寄存器进行点灯2.使用库函数进行点灯 3.GPIO1.LED闪烁 一、使用Keil时可能会出现的问题 1.Project框不见了 view->Project Windo…

免费分享一套SpringBoot+Vue自习室(预约)管理系统,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue自习室预约)管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue自习室预约(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue自习室预约(预约)管理系统…

景联文科技:提供通用多模态数据,助力AI多模态领域实现飞跃式发展

回顾2023年,以ChatGPT为代表的通用人工智能大模型在全球范围内掀起了新一轮人工智能产业发展浪潮,我国人工智能大模型市场呈现百“模”争鸣、日新月异的迅猛发展态势。 根据大模型之家、钛媒体数据,2023年中国大模型市场规模达到147亿人民币&…

2024/3/14打卡棋子(14届蓝桥杯)——差分

标准差分模板 差分——前缀和的逆运算(一维二维)-CSDN博客 题目 小蓝拥有 nn 大小的棋盘,一开始棋盘上全都是白子。 小蓝进行了 m 次操作,每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0…

药店在线客服机器人的设计与开发

摘要 随着信息技术的快速发展和人工智能领域的不断进步,药店在线客服机器人已经成为现代药店服务模式中不可或缺的一部分,这种机器人技术通过模拟人类客服代表,能够提供24/7的咨询服务,从而大幅提高服务效率和顾客满意度&#xff…

进程和ELF文件

程序的二进制格式: 关联知识:GCC编译原理与使用-CSDN博客 linux二进制程序的严格格式:ELF(Executeable and Linkable format) 一 预处理,编译,汇编得到的.o文件,就是ELF的第一种类…

基于java+springboot+vue实现的高校心理健康评测与服务系统(文末源码+Lw+ppt)23-424

摘 要 随着社会的发展,系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息,但各种信息鱼龙混杂,信息真假难以辨别。为了方便用户更好的获得高校心理健康评测与服务,因此,设计一种安全高效的高校心理健康评…

LabVIEW电液伺服作动器

LabVIEW电液伺服作动器 随着工业自动化技术的快速发展,电液伺服作动器在各类精密控制领域得到了广泛应用。基于CRIO架构,利用LabVIEW软件开发了一套电液伺服作动器测控系统,实现了高精度的位移同步控制与测量,有效提高了系统的控…

解决电脑显示找不到msvcp140_CODECVT_IDS.dll文件的办法

最近不少朋友在问如何应对msvcp140_CODECVT_IDS.dll文件遗失的情况,那么,哪些方法可以有效地消除这一问题呢?本文将带领大家深入探讨,并顺便介绍一下msvcp140_CODECVT_IDS.dll文件的性质,一起来看看具体的解决方案。 一…

深入浅出计算机网络 day.2 概论⑥ 计算机网络体系结构

上帝疯狂杜撰世界悲情的命题 将凉薄和荒芜尽写 —— 24.3.13 内容概述 1.常见的三种计算机网络体系结构 2.计算机网路体系结构分层的必要性 3.计算机网络体系结构分层思想举例 4.计算机网络体系结构中的专用术语 一、常见的三种计算机网络体系结构 1.OSI参考模型 …