ELK介绍使用

文章目录

  • 一、ELK介绍
  • 二、Elasticsearch
    • 1. ElasticSearch简介:
    • 2. Elasticsearch核心概念
    • 3. Elasticsearch安装
    • 4. Elasticsearch基本操作
      • 1. 字段类型介绍
      • 2. 索引
      • 3. 映射
      • 4. 文档
    • 5. Elasticsearch 复杂查询
  • 三、LogStash
    • 1. LogStash简介
    • 2. LogStash安装
  • 四、kibana
    • 1. kibana简介
    • 2. Kibana安装
  • 五、ELK监控项目,收集项目日志
    • 1. springboot集成LogStash
    • 2. 启动项目,监控项目运行
  • 六、搭建ELK日志系统demo(提供搭建思路)


一、ELK介绍

ELK就是由Elasticsearch + LogStash + Kibana来组成的,这三个技术就是我们常说的ELK技术栈,这是一种很典型的MVC思想,模型持久层,视图层和控制层。
      Logstash担任控制层的角色,负责搜集和过滤数据
      Elasticsearch担任数据持久层的角色,负责储存数据
      Kibana担任视图层角色,拥有各种维度的查询和分析,并使用图形化的界面展示存放在Elasticsearch中的数据

二、Elasticsearch

1. ElasticSearch简介:

Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

2. Elasticsearch核心概念

集群cluster

  • 一个集群由一个唯一的名字标识在定义,这个名字默认就是“elasticsearch”
  • 定义的这个名字非常重要,因为一个节点只能通过指定某个集群的名字,来加入这个集群
  • 一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能

索引index

  • 一个索引由一个名字来标识 (必须全部是小写字母的),并且当我们要对对应于这个索引中的文档 进行索引、搜索、更新和删除的时候,都要使用到这个名字。
  • 一个索引就是一个拥有几分相似特征的文档的集合,在一个集群中,可以定义任意多的索引。

映射 mapping

  • 映射是定义一个文档和它所包含的字段如何被存储和索引的过程,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的
  • ES可以根据插入的数据自动地创建mapping,也可以手动创建mapping。 mapping中主要包括字段名、字段类型等

文档 document

  • 一个文档是一个可被索引的基础信息单元。
  • 文档是索引中存储的一条条数据。一条文档是一个可被索引的最小单元
  • 在一个index里面,你可以存储任意多的文档。

字段 Field

  • 相当于是数据表的字段,对文档数据根据不同属性进行的分类标识

主分片 shards

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间,那么可以将索引划分成多份存储在不同的节点,这就叫做分片

  • 当创建一个索引的时候,可以指定分片数量
  • 分片允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
  • 每个分片本身也是一个功能完善并且独立的“索引”
  • 至于一个分片怎样分布,它的文档怎样聚合搜索请求,是完全由Elasticsearch管理的

副本分片 replicas

  • 副本分片主要是用来备份主分片的,达到高可用,Elasticsearch允许创建的分片有一份或多份拷贝,这些拷贝叫做副本分片
  • 一旦设置了副本,每个索引就有了主分片和副本分片,分片和副本的数量可以在索引创建的时候指定
  • 在索引创建之后,可以在任何时候动态地改变副本的数量,但是不能改变分片的数量

3. Elasticsearch安装

docker安装ES、LogStash、Kibana

4. Elasticsearch基本操作

1. 字段类型介绍

分类类型名称说明
字符串类型text / keyword需要进行全文检索的字段,通常使用 text 类型来对应,text 主要对应 非结构化的数据,可分词                                                                       keyword来对应结构化的数据,不可分词
日期类型date保存格式化的日期数据,可以指定格式:”format”: “yyyy-MM-dd HH:mm:ss”
数值类型long / integer / short / byte64位整数/32位整数/16位整数/8位整数
浮点类型double / float / half_float64位双精度浮点/32位单精度浮点/16位半进度浮点
布尔类型boolean“true” / ”false”
简单类型ipIPV4(192.168.1.110)/IPV6(192.168.0.0/16)
JSON分层嵌套类型object用于保存JSON对象
JSON分层嵌套类型nested用于保存JSON数组
经纬度类型geo_point用于保存经纬度坐标
特殊类型geo_shape用于保存地图上的多边形坐标

2. 索引

# 1.创建索引-->phone_index
PUT /phone_index# 2.创建索引 进行索引分片配置
PUT /phone_index
{"settings": {"number_of_shards": 1, // 指定主分片的数量"number_of_replicas": 0 // 指定副本分片的数量}
}# 3.查看全部索引 
GET /_cat/indices?v# 4.删除索引-->phone_index
DELETE /phone_index# 5.删除全部索引 *代表通配符,代表所有索引
DELETE /*

3. 映射

创建映射

# 1.创建索引phone_index,指定映射
PUT /phone_index
{ "settings": {"number_of_shards": 1,		// 指定主分片"number_of_replicas": 0		// 指定副本分片}, "mappings": {					// 创建映射"properties": {				// 设置属性"title":{					// 指定字段为title"type": "keyword"		// 指定字段类型为字符串keyword,不可分词},"price":{					// 指定字段为price"type": "double"		// 指定字段类型为浮点型double},"created_at":{			// 指定字段为created_at"type": "date"			// 指定字段类型为日期类型date},"desc":{					// 指定字段为desc"type": "text"			// 指定字段类型为字符串text,可分词}}}
}

查看映射

# 1.语法:GET /索引名/_mapping
GET /item_index/_mapping

4. 文档

添加文档

# 1. 指定文档id  语法:POST /索引名/_doc/指定文档id
POST /phone_index/_doc/1  // 指定文档id 
{"title":"华为手机","desc":"华为,遥遥领先","price":1900
}# 2. 自动生成id  语法:POST /索引名/_doc/
POST /phone_index/_doc/
{"title":"苹果手机","desc":"苹果4,肾机","price":2900
}

查询文档

# 1.语法:GET /索引名/_doc/文档id
GET /phone_index/_doc/1

删除文档

# 1.语法:GET /索引名/_doc/文档id
DELETE /phone_index/_doc/1

更新文档

# 1.更新文档 语法:PUT /索引名/_doc/文档id
PUT /phone_index/_doc/1
{"title":"iphon16"
}
# 2. 先删除,在将更新文档以新的内容插入。
POST /phone_index/_doc/1/_update
{"doc" : {"title" : "华为旗舰版"}
}

批量更新文档
批量时不会因为一个失败而全部失败,而是继续执行后续操作,在返回时按照执行的状态返回!

# 1. 批量更新两条文档
POST /phone_index/_doc/_bulk{"index":{"_id":"1"}}{"title":"华为","desc":"遥遥领先,遥遥领先"}{"index":{"_id":"2"}}{"title":"iphone4","desc":"iPhone 4屏幕采用LED屏幕"}# 2. 更新,删除,新增
POST /phone_index/_doc/_bulk {"update":{"_id":"1"}}{"doc":{"title":"小米"}}{"delete":{"_id":2}}{"index":{"_id":3}}{"title":"荣耀手机","desc":"LED屏幕。。。。",  "price":900}

5. Elasticsearch 复杂查询

命令含义
match_all查询所有,返回索引中的全部文档
term关键字,用来使用关键词查询
range范围查询,用来指定查询指定范围内的文档
prefix前缀查询,用来检索含有指定前缀的关键词的相关文档
wildcard通配符查询, ? 用来匹配一个任意字符 * 用来匹配多个任意字符
ids多id查询, 值为数组类型,用来根据一组id获取多个对应的文档
fuzzy模糊查询含有指定关键字的文档
multi_match多字段查询
highlight高亮查询,符合条件的文档中的关键词高亮
size定查询结果中返回指定条数。 默认返回值10条
from指定起始返回位置,和size关键字连用可实现分页效果
sort指定字段排序
_source返回指定字段,在数组中用来指定展示那些字段
  1. match_all 查询所有
GET /phone_index/_search
{"query": {"match_all": {}}
}
  1. range 范围查询
GET /phone_index/_search
{"query": {"range": {"price": {"gte": 1400,	// 大于等于"lte": 9999		// 小于等于}}}
}
  1. wildcard 通配符查询

Wildcard 查询是一种基于通配符的查询,它使用单个字符(?)代表一个字符,使用星号(*)代表零个或多个字符。Wildcard 查询可用于对单个词执行模糊匹配,也可以用于对短语进行模糊匹配。它可以在搜索中用于查找某些词汇的变体或拼写错误的单词。

GET /phone_index/_search
{"query": {"wildcard": {"desc": "hua*"}}
}
  1. fuzzy 模糊查询

注意:

  • fuzzy 模糊查询 最大模糊错误 必须在0-2之间
  • 搜索关键词长度为 2 不允许存在模糊
  • 搜索关键词长度为3-5 允许一次模糊
  • 搜索关键词长度大于5 允许最大2模糊
GET /phone_index/_search
{"query": {"fuzzy": {"desc": {"value": "hua"}}}
}
  1. highlight 高亮查询
POST /phone_index/_search
{"query": {"match": {"title": "huawei"}},"highlight": {"fields": {"*": {}},"pre_tags": "<font color='red'>","post_tags": "</font>","fragment_size": 10}
}

三、LogStash

LogStash参考,想要深度了解LogStash的可以看一看

1. LogStash简介

gstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地进行存储。任何事件类型都可以加入分析,通过输入、过滤器和输出插件进行转换。与此同时,还提供了很多原生编解码工具简化消息处理。Logstash通过海量数据处理和多种多样的数据格式支持延伸了我们对数据的洞察力。
LogStash工作原理:
在这里插入图片描述

  1. 输入,以下是常见得输入内容
  • file:从文件系统上的文件读取,与UNIX命令非常相似 tail -0F
  • syslog:在已知端口上侦听syslog消息进行解析
  • redis:使用redis通道和redis列表从redis服务器读取。Redis通常用作集中式Logstash安装中的“代理”,该安装将Logstash事件从远程Logstash“托运人”排队。
  • beats:处理 Beats发送的事件,beats包括filebeat、packetbeat、winlogbeat。
  1. 过滤,以下是常见得过滤器
  • grok:解析并构造任意文本。Grok是目前Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方式。Logstash内置了120种模式,您很可能会找到满足您需求的模式!
  • mutate:对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
  • drop:完全删除事件,例如调试事件。
  • clone:制作事件的副本,可能添加或删除字段。
  • geoip:添加有关IP地址的地理位置的信息(也在Kibana中显示惊人的图表!)
  1. 输出,以下是常见得输出内容
  • elasticsearch:将事件数据发送给Elasticsearch。如果您计划以高效,方便且易于查询的格式保存数据… Elasticsearch是您的最佳选择
  • file:将事件数据写入磁盘上的文件。
  • graphite:将事件数据发送到graphite,这是一种用于存储和绘制指标的流行开源工具。http://graphite.readthedocs.io/en/latest/
  • statsd:将事件数据发送到statsd,这是一种“侦听统计信息,如计数器和定时器,通过UDP发送并将聚合发送到一个或多个可插入后端服务”的服务。如果您已经在使用statsd,这可能对您有用!
  1. 编解码器
    编解码器基本上是流过滤器,可以作为输入或输出的一部分运行。使用编解码器可以轻松地将消息传输与序列化过程分开。流行的编解码器包括json, multiline等。
    json:以JSON格式编码或解码数据。
    multiline:将多行文本事件(例如java异常和堆栈跟踪消息)合并到一个事件中

2. LogStash安装

docker安装ES、LogStash、Kibana

四、kibana

1. kibana简介

  1. Kibana提供了一系列交互式的可视化组件,包括图表、表格、地图、仪表盘等,用户可以通过简单的拖拽和点击操作,将Elasticsearch中数据转化为易于理解和分析的图形化展示。
  2. Kibana还支持自定义查询和过滤器,用户可以根据自己的需求对Elasticsearch中数据进行深入挖掘和分析。Kibana还提供了一些其他的功能,例如实时监控、警报、报告等;

2. Kibana安装

docker安装ES、LogStash、Kibana

五、ELK监控项目,收集项目日志

1. springboot集成LogStash

  1. maven坐标
        <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.3</version>
  1. application.yml
server:port: 80  #tomcat端口servlet:context-path: /
  1. logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--该日志将日志级别不同的log信息保存到不同的文件中 -->
<configuration><include resource="org/springframework/boot/logging/logback/defaults.xml"/><springProperty scope="context" name="springAppName" source="spring.application.name"/><!-- 日志在工程中的输出位置 --><property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}"/><!-- 控制台的日志输出样式 --><property name="CONSOLE_LOG_PATTERN"value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><!-- 日志输出编码 --><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>utf8</charset></encoder></appender><!-- logstash远程日志配置--><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>192.168.128.23:4560</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/></appender><!-- 日志输出级别 --><root level="DEBUG"><appender-ref ref="console"/><appender-ref ref="logstash"/></root>
</configuration>

2. 启动项目,监控项目运行

提示:按照以下步骤进行设置

  1. 访问kibana,点击 Stack Management
    在这里插入图片描述
  2. 点击 Index Patterns
    在这里插入图片描述
  3. 点击 Create Index Patterns
    在这里插入图片描述
  4. 设置索引模式名,关联索引,点击 Next step
    在这里插入图片描述
  5. 选择时间字段, 点击 Create Index Patterns
    在这里插入图片描述
  6. 设置好的索引模式如下
    在这里插入图片描述
  7. 点击 Discover ,进行项目监控
    在这里插入图片描述
  8. 监控项目运行情况
    在这里插入图片描述

六、搭建ELK日志系统demo(提供搭建思路)

  1. maven
 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.16</version><scope>compile</scope></dependency></dependencies>
  1. application.yml
server:port: 8081  #tomcat端口servlet:context-path: /
spring:elasticsearch:rest:uris: XXX.XXX.XXX.XXX:9200
  1. pojo(这个很重要)
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;import java.util.Date;/*** ELK日志实体类*/
@Data
//指定索引和主分片/副分片的数量
@Document(indexName = "elk_log", shards = 1, replicas = 1)
public class ElkLog {@Idprivate String id;@Field(type = FieldType.Integer)private Integer port;@Field(type = FieldType.Keyword)private String host;@Field(type = FieldType.Text)private String message;@Field(name = "@version", type = FieldType.Keyword)private String version;//时间转换@Field(name = "@timestamp", type = FieldType.Date, format = DateFormat.date_time)private Date timestamp;
}
  1. controller
import com.elk.pojo.ElkLog;
import com.elk.service.ElkLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/elkLog")
public class ElkLogController {@Autowiredprivate ElkLogService elkLogService;/*** 分页查询日志** @return*/@RequestMapping("/selectListByPage")public List<ElkLog> selectListByPage() {return elkLogService.selectListByPage(1, 1000, 10);}
}
  1. service
import com.elk.pojo.ElkLog;
import java.util.List;public interface ElkLogService {//分页查询日志List<ElkLog> selectListByPage(Integer page, Integer pagSize, Integer time);}
  1. serviceimpl

import com.elk.pojo.ElkLog;
import com.elk.service.ElkLogService;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;@Service
public class ElkLogServiceImpl implements ElkLogService {@Autowiredprivate ElasticsearchRestTemplate elasticsearchTemplate;/*** 分页查询日志** @param page* @param pagSize* @param time* @return*/@Overridepublic List<ElkLog> selectListByPage(Integer page, Integer pagSize, Integer time) {Calendar calendar = Calendar.getInstance();//当前时间往前推time分钟calendar.add(Calendar.MINUTE, -time);//设置查询条件 查询当前时间往前推time分钟的数据Query query = new NativeSearchQuery(QueryBuilders.rangeQuery("@timestamp").gte(calendar.getTime()));//设置分页query.setPageable(PageRequest.of(page - 1, pagSize));//将进行查询SearchHits<ElkLog> elkLogHits = elasticsearchTemplate.search(query, ElkLog.class);List<ElkLog> elkLogList = new ArrayList<>();for (SearchHit<ElkLog> elkLogHit : elkLogHits) {ElkLog elkLog = elkLogHit.getContent();elkLogList.add(elkLog);}return elkLogList;}
}
  1. 验证
    在这里插入图片描述

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

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

相关文章

【企业发展战略】某环境管理集团公司发展战略与规划项目纪实

在集团公司高速发展、业务范围不断扩大时&#xff0c;组织往往对公司未来的发展方向感到迷茫&#xff0c;不知道如何进行更好的规划&#xff0c;找到合适的发展战略&#xff0c;为企业提供更长远的发展空间&#xff0c;带来更多是利益。面对这个问题&#xff0c;华恒智信认为企…

远程在线教育平台从涉及到落地实践

在当前数字化时代&#xff0c;远程在线教育平台正成为教育行业的重要趋势之一。随着互联网技术的不断发展&#xff0c;人们对于灵活、便捷的学习方式需求日益增加&#xff0c;远程在线教育平台为广大学生和教育机构提供了全新的学习和教学模式。然而&#xff0c;要让远程在线教…

uniapp微信小程序获取当前位置

uni-app微信小程序uni.getLocation获取位置&#xff1b;authorize scope.userLocation需要在app.json中声明permission&#xff1b;小程序用户拒绝授权后重新授权-CSDN博客

Python工具小技巧

Python工具小技巧 将.py后缀文件转化为.exe后缀文件安装PyinstallerPyinstaller参数大全 将.py后缀文件转化为.exe后缀文件 目前比较常见的打包exe方法都是通过Pyinstaller来实现的&#xff0c;本文也将使用这种常规方法。 安装Pyinstaller 首先我们要先安装Pyinstaller&…

CSS中em/px/rem/vh/vw区别详解

文章目录 一、介绍二、单位pxemremvh、vw 三、总结 一、介绍 传统的项目开发中&#xff0c;我们只会用到px、%、em这几个单位&#xff0c;它可以适用于大部分的项目开发&#xff0c;且拥有比较良好的兼容性 从CSS3开始&#xff0c;浏览器对计量单位的支持又提升到了另外一个境…

SpringBoot配置文件

在SpringBoot中默认配置文件是在resources目录下的名为application的文件&#xff0c;常用后缀为&#xff1a;.properties、.yml、.yaml 一、指定自己的配置文件 如果把所有的配置文件都放到一个application.properties文件中&#xff0c;难免有些太多&#xff0c;有的时候我们…

【C语言】数据类型和变量

前言&#x1f49e;&#x1f49e; 啦啦啦~这里是土土数据结构学习笔记&#x1f973;&#x1f973; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1f4a5; 所属专栏&#xff1a;C语言笔记 &#x1f4a5;欢迎大家&#x1f973;&#x1f973;点赞✨收藏&#x1f49…

Day24:安全开发-PHP应用文件管理模块显示上传黑白名单类型过滤访问控制

目录 文件管理模块-上传-过滤机制 文件管理模块-显示-过滤机制 思维导图 PHP知识点 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0c;资源下载&#xff0c;留言版&#xff0c;后台模块&#xff0c;模版引用&#xff0c;框架开发等 技术&#xff1a;输入输出&#…

[java基础揉碎]方法的重写/覆盖

重写介绍 简单的说:方法覆盖(重写)就是子类有一个方法,和父类(也可能是爷爷,更上一级)的某个方法的名称、返回类型、参数一样&#xff0c;那么我们就说子类的这个方法 覆盖了父类的方法 重写重载对比

语音模块学习——LSYT201B模组(实际操作篇)

目录 一、定制词条 二、直接用串口通信 三、使用单片机通信 理论篇在这&#xff0c;依旧是深圳雷龙发展的语音模块。 http://t.csdnimg.cn/2SzJL 一、定制词条 因为我想后面加到我的毕设上加个语音模块&#xff0c;所以定制的词条都是和芯测相关的。 动作词条播报串口输…

排序(6)——快速排序算法之挖坑版&前后指针版

目录 挖坑版 基本思路 代码实现 注意点 前后指针版 基本思路 代码实现 注意点 由于hoare版本的快速排序有很多坑和需要注意的地方&#xff0c;就会导致代码写起来不容易&#xff0c;这里我们给出两种不同的单趟排序思路&#xff1a;挖坑版&#xff06;前后指针版。 挖坑…

Python 读取写入excel文件

使用Python读取和写入excel的xlsx、xls文件 目录 读取xlsx文件 安装三方库 引入三方库 读取数据 打开文件 表名 最大行数 最大列数 读取一张表 读取整个文件 返回xls整体内容 安装三方包 读取内容 写入xls文件 引入三方库 创建文件并写入数据 报错及解决 报错…

房屋租赁系统|基于 Mysql+Java+JSP技术的房屋租赁系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 文末获取源码 前台首页功能 管理员功能 租户功能 房屋租赁系统结构图 数据库设计 lunwen参考 概述 源码获取 文末获取源码 前台首页功能 管理员功能 租户功能 房屋租赁系统结构图 数据库设计 lunwen参考 概述 随着科学技术的飞速发展&#xff0c;社会的方方面面…

ODI报错

三月 08, 2024 1:20:09 下午 oracle.odi.mapping 信息: Start generation of map physical design: MapPhysicalDesign New_Mapping.物理 三月 08, 2024 1:20:09 下午 oracle.odi.mapping 信息: Finished generation of map physical design: MapPhysicalDesign New_Mapping.物…

HTML—基本介绍

HTML是一种超文本标记语言(HyperText Markup Language)&#xff0c;用于创建网页的标记语言超文本&#xff1a;是指页面内可以包含图片、链接、声音、视频等内容标记&#xff1a;HTML富含大量的标签供程序员使用&#xff0c;通过标记符号来规定指定内容的样式 浏览器最终根据不…

HybridCLR热更新介绍

官方文档 参照视频 HybridCLR介绍 HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案 HybridCLR与ToLua/XLua、ILRuntime有什么不同 什么是游戏热更新&#xff1a;有热更的游戏更新流程 游戏热更新的种类 资源热更新&#xff1a;主要…

内存分区与具体介绍:

1. 内存分区图&#xff1a; 2. 分区介绍&#xff1a; 2.1. 栈区&#xff1a; 存放&#xff1a;临时的局部变量、函数的传参 特点&#xff1a;占用内存小&#xff0c;速度快 数据的存储和释放采用栈式结构&#xff0c;先入后出&#xff0c;类似于C下类的构造析构函数 2.2. 堆区&…

在Linux(Ubuntu)中使用终端编译 vscode安装

文章目录 &#x1f4da;在Linux&#xff08;Ubuntu&#xff09;中使用终端编译&#x1f407;.cpp程序编译&#x1f407;.py程序编译&#x1f407;查看Python、C编程环境 &#x1f4da;vscode安装 &#x1f4da;在Linux&#xff08;Ubuntu&#xff09;中使用终端编译 虚拟机安装…

移动端精准测试之跨版本覆盖率合并

一&#xff0c;项目简介 在移动端项目测试过程中&#xff0c;尤其是发版前的回归测试阶段&#xff0c;会遇到这样的情况&#xff0c;在测试过程中测试不断地发现问题&#xff0c;开发就进行修改&#xff0c;然后打包测试。而测试完成后呢&#xff0c;业务测试同学想知道整个回归…

Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器

引言 在当今的软件开发世界中&#xff0c;网络通信已成为不可或缺的一部分。Qt&#xff0c;作为一个跨平台的C框架&#xff0c;为我们提供了强大的网络编程能力。本文将带你深入Qt的网络模块&#xff0c;探索如何使用QNetworkAccessManager、QNetworkRequest和QNetworkReply等核…