当前位置: 首页 > news >正文

Springboot+ElasticSearch构建博客检索系统-学习笔记01

课程简介:从实际需求分析开始,打造个人博客检索系统。内容涵盖:ES安装、ES基本概念和数据类型、Mysql到ES数据同步、SpringBoot操作ES。通过本课,让学员对ES有一个初步认识,理解ES的一些适用场景,以及如何使用springboot来同ES进行交互。


视频地址:

  1. Springboot + ElasticSearch 构建博客检索系统-慕课网

博客笔记:

  1. Springboot+ElasticSearch构建博客检索系统-学习笔记01
  2. Springboot+ElasticSearch构建博客检索系统-学习笔记02

参考笔记:

  1. ElasticSearch与Springboot结合入门学习_hyyyya的博客-CSDN博客
  2. GitHub - holic-x/springboot-es: 基于springboot-es的博客检索系统
  3. GitHub - gaohanghang/springboot-blog-es: Springboot + ElasticSearch 构建博客检索系统
  4. GitHub - Hyyellow/ElasticSearch_Demo: ES框架的初步尝试Demo

目录

第1章 课程介绍

视频:1-1 课程导学(08:33)

第2章 初识ElasticSearch

视频:2-1 ElasticSearch概念和适用场景(04:46)

视频:2-2 ElasticSearch数据类型和关系型数据库的对比(02:19)

视频:2-3 安装ES、postman、kibana(06:30)

视频:2-4 演示postman、kibana对ES的交互(11:46)

01、Postman的使用

02、kibana的DevTools使用

第3章 博客网站全文检索

视频:3-1 基于Mysql实现(07:29)

01、创建数据库数据表

02、测试sql查询语句

03、mysql检索数据原理分析

视频:3-2 基于ES实现(04:57)

第4章 Mysql、ES数据同步

视频:4-1 数据同步中间件(09:02)

视频:4-2 Logstash全量、增量同步解决方案(10:30)

01、下载并安装logstash

02、引入mysql连接jar包并配置mysql.conf文件

03、使用kibana进行数据连接测试

04、将mysql数据同步到es中

05、mysql.conf文件sql语句解析

第5章 SpringBoot集成ES

第6章 课程回顾与总结


第1章 课程介绍

视频:1-1 课程导学(08:33)

搜索“elasticsearch”时间对比:

  1. mysql:3004ms
  2. elasticsearch:7ms

思维导图-开发技术栈:

第2章 初识ElasticSearch

视频:2-1 ElasticSearch概念和适用场景(04:46)

 

  1. 分布式:单点或多节点集群运行,node节点、cluster集群;
  2. 全文检索:标题+内容;
  3. 实时快速:速度快;
  4. Restful:接口。

视频:2-2 ElasticSearch数据类型和关系型数据库的对比(02:19)

es官方:在一个index中尽量保持一个type。

  1. index:数据库;
  2. type:数据表;
  3. document:一行一行的数据;
  4. field:字段;
  5. mapping:数据字段定义。

视频:2-3 安装ES、postman、kibana(06:30)

es由java实现,es版本6.3.2、jdk1.8。

  1. 免费且开放的搜索:Elasticsearch、ELK 和 Kibana 的开发者 | Elastic
  2. Elasticsearch:官方分布式搜索和分析引擎 | Elastic

 

kibana:开源的分析与可视化(图表、饼图)平台,用于与es协同工作。


kibana下载地址:Download Kibana Free | Get Started Now | Elastic


 

视频:2-4 演示postman、kibana对ES的交互(11:46)

01、Postman的使用

 

  1. GET:获取数据
  2. PUT:创建索引
  3. DEL:删除索引
  4. POST:修改数据
localhost:9200/_all
localhost:9200/testlocalhost:9200/person/_doc/1
{"first_name": "John","last_name": "Smith","age": 25,"about": "I love to go rock climbing.","interests": ["sports", "music"]
}localhost:9200/person/_doc/2
{"first_name": "Eric","last_name": "Smith","age": 23,"about": "I love basketball.","interests": ["sports", "reading"]
}localhost:9200/person/_doc/_search?q=first_name:john

02、kibana的DevTools使用

使用kibana的Dev Tools发送结构化的查询语句,来同ES进行简单的交互。

告诉es使用者要查询的索引之后,用“_type”标识默认的唯一的type;在es6.0版本之后,官方推荐一个索引一个type,推荐不写type。

GET _all
GET /person/_doc/1POST /person/_search
{"query": {"bool": {"should": [ //should:应该做什么事情{"match": { //match:匹配"first_name": "Eric" //"last_name": "Smith"}}]}}
}POST /person/_search
{"query": {"bool": {"should": [ // must:必须{"match": {"last_name": "Smith"}},{"match": {"about": "basketball"}}]}}
}

第3章 博客网站全文检索

视频:3-1 基于Mysql实现(07:29)

01、创建数据库数据表

/*
Navicat MySQL Data TransferSource Server         : localhost
Source Server Version : 50557
Source Host           : localhost:3306
Source Database       : blogTarget Server Type    : MYSQL
Target Server Version : 50557
File Encoding         : 65001*/SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for t_blog
-- ----------------------------
DROP TABLE IF EXISTS `t_blog`;
CREATE TABLE `t_blog` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',`title` VARCHAR(60) DEFAULT NULL COMMENT '博客标题',`author` VARCHAR(60) DEFAULT NULL COMMENT '博客作者',`content` MEDIUMTEXT COMMENT '博客内容',`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4;-- ----------------------------
-- Records of t_blog
-- ----------------------------
INSERT INTO `t_blog` VALUES ('1', 'Springboot 为什么这', 'noob', '没错 Springboot ', '2019-12-08 01:44:29', '2019-12-08 01:44:34');
INSERT INTO `t_blog` VALUES ('3', 'Springboot 中 Redis', 'noob', 'Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, Solr和Cassandra。\\n\\n使用Redis\\nRedis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。\\n\\nRedis官网\\nRedis中文社区\\n引入依赖\\nSpring Boot提供的数据访问框架Spring Data Redis基于Jedis。可以通过引入spring-boot-starter-redis来配置依赖关系。\\n\\n\\n org.springframework.boot\\n spring-boot-starter-redis\\n\\n注意不同版本的spring boot下,redis的starter依赖名略有不同,如果上面的不行,可以尝试spring-boot-starter-data-redis\\n\\n参数配置\\n按照惯例在application.properties中加入Redis服务端的相关配置,具体说明如下:\\n\\n# REDIS (RedisProperties)\\n# Redis数据库索引(默认为0)\\nspring.redis.database=0\\n# Redis服务器地址\\nspring.redis.host=localhost\\n# Redis服务器连接端口\\nspring.redis.port=6379\\n# Redis服务器连接密码(默认为空)\\nspring.redis.password=\\n# 连接池最大连接数(使用负值表示没有限制)\\nspring.redis.pool.max-active=8\\n# 连接池最大阻塞等待时间(使用负值表示没有限制)\\nspring.redis.pool.max-wait=-1\\n# 连接池中的最大空闲连接\\nspring.redis.pool.max-idle=8\\n# 连接池中的最小空闲连接\\nspring.redis.pool.min-idle=0\\n# 连接超时时间(毫秒)\\nspring.redis.timeout=0\\n其中spring.redis.database的配置通常使用0即可,Redis在配置的时候可以设置数据库数量,默认为16,可以理解为数据库的schema\\n\\n测试访问\\n通过编写测试用例,举例说明如何访问Redis。\\n\\n@RunWith(SpringJUnit4ClassRunner.class)\\n@SpringApplicationConfiguration(Application.class)\\npublic class ApplicationTests {\\n\\n @Autowired\\n private StringRedisTemplate stringRedisTemplate;\\n\\n @Test\\n public void test() throws Exception {\\n\\n // 保存字符串\\n stringRedisTemplate.opsForValue().set(\"aaa\", \"111\");\\n Assert.assertEquals(\"111\", stringRedisTemplate.opsForValue().get(\"aaa\"));\\n\\n }\\n\\n}\\n通过上面这段极为简单的测试案例演示了如何通过自动配置的StringRedisTemplate对象进行Redis的读写操作,该对象从命名中就可注意到支持的是String类型。如果有使用过spring-data-redis的开发者一定熟悉RedisTemplate<K, V>接口,StringRedisTemplate就相当于RedisTemplate<String, String>的实现。\\n\\n除了String类型,实战中我们还经常会在Redis中存储对象,这时候我们就会想是否可以使用类似RedisTemplate<String, User>来初始化并进行操作。但是Spring Boot并不支持直接使用,需要我们自己实现RedisSerializer接口来对传入对象进行序列化和反序列化,下面我们通过一个实例来完成对象的读写操作。\\n\\n创建要存储的对象:User\\npublic class User implements Serializable {\\n\\n private static final long serialVersionUID = -1L;\\n\\n private String username;\\n private Integer age;\\n\\n public User(String username, Integer age) {\\n this.username = username;\\n this.age = age;\\n }\\n\\n // 省略getter和setter\\n\\n}\\n实现对象的序列化接口\\n\\npublic class RedisObjectSerializer implements RedisSerializer {\\n\\n private Converter<Object, byte[]> serializer = new SerializingConverter();\\n private Converter<byte[], Object> deserializer = new DeserializingConverter();\\n\\n static final byte[] EMPTY_ARRAY = new byte[0];\\n\\n public Object deserialize(byte[] bytes) {\\n if (isEmpty(bytes)) {\\n return null;\\n }\\n\\n try {\\n return deserializer.convert(bytes);\\n } catch (Exception ex) {\\n throw new SerializationException(\"Cannot deserialize\", ex);\\n }\\n }\\n\\n public byte[] serialize(Object object) {\\n if (object == null) {\\n return EMPTY_ARRAY;\\n }\\n\\n try {\\n return serializer.convert(object);\\n } catch (Exception ex) {\\n return EMPTY_ARRAY;\\n }\\n }\\n\\n private boolean isEmpty(byte[] data) {\\n return (data == null || data.length == 0);\\n }\\n}\\n配置针对User的RedisTemplate实例\\n\\n@Configuration\\npublic class RedisConfig {\\n\\n @Bean\\n JedisConnectionFactory jedisConnectionFactory() {\\n return new JedisConnectionFactory();\\n }\\n\\n @Bean\\n public RedisTemplate<String, User> redisTemplate(RedisConnectionFactory factory) {\\n RedisTemplate<String, User> template = new RedisTemplate<String, User>();\\n template.setConnectionFactory(jedisConnectionFactory());\\n template.setKeySerializer(new StringRedisSerializer());\\n template.setValueSerializer(new RedisObjectSerializer());\\n return template;\\n }\\n\\n\\n}\\n完成了配置工作后,编写测试用例实验效果\\n\\n@RunWith(SpringJUnit4ClassRunner.class)\\n@SpringApplicationConfiguration(Application.class)\\npublic class ApplicationTests {\\n\\n @Autowired\\n private RedisTemplate<String, User> redisTemplate;\\n\\n @Test\\n public void test() throws Exception {\\n\\n // 保存对象\\n User user = new User(\"超人\", 20);\\n redisTemplate.opsForValue().set(user.getUsername(), user);\\n\\n user = new User(\"蝙蝠侠\", 30);\\n redisTemplate.opsForValue().set(user.getUsername(), user);\\n\\n user = new User(\"蜘蛛侠\", 40);\\n redisTemplate.opsForValue().set(user.getUsername(), user);\\n\\n Assert.assertEquals(20, redisTemplate.opsForValue().get(\"超人\").getAge().longValue());\\n Assert.assertEquals(30, redisTemplate.opsForValue().get(\"蝙蝠侠\").getAge().longValue());\\n Assert.assertEquals(40, redisTemplate.opsForValue().get(\"蜘蛛侠\").getAge().longValue());\\n\\n }\\n\\n}\\n当然spring-data-redis中提供的数据操作远不止这些,本文仅作为在Spring Boot中使用redis时的配置参考,更多对于redis的操作使用,请参考Spring-data-redis Reference。\\n\\n代码示例\\n本文的相关例子可以查看下面仓库中的chapter3-2-5目录:\\n\\nGithub:https://github.com/dyc87112/SpringBoot-Learning\\nGitee:https://gitee.com/didispace/SpringBoot-Learning\\n如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!', '2019-12-08 01:44:29', '2019-12-08 01:44:29');
INSERT INTO `t_blog` VALUES ('4', 'Springboot 中如何优化', 'noob', NULL, '2019-12-08 01:44:29', '2019-12-08 01:44:29');
INSERT INTO `t_blog` VALUES ('5', 'Springboot 消息队列', 'noob', NULL, '2019-12-08 01:44:29', '2019-12-08 01:44:29');
INSERT INTO `t_blog` VALUES ('6', 'Docker Compose + Springboot', 'noob', NULL, '2019-12-08 01:44:29', '2019-12-08 01:44:29');
INSERT INTO `t_blog` VALUES ('7', 'hello es', 'noob', 'hello es', '2019-12-08 01:44:29', '2019-12-08 01:44:29');

02、测试sql查询语句

SELECT * FROM t_blog WHERE title LIKE "%spring%" OR content LIKE "%spring%";

03、mysql检索数据原理分析

视频:3-2 基于ES实现(04:57)

第4章 Mysql、ES数据同步

视频:4-1 数据同步中间件(09:02)

 

 

 

es官方的数据收集及同步组件:logstash。

  1. logstash就像一个管道,一头连接着数据源,一头连接着es。
  2. logstash的输入数据源有很多,log4j日志文件。
  3. logstash-jdbc用于对接mysql这一类的数据源,实现要求:id对应es中的_id;mysql表中需要有标识创建数据或更新数据时间的字段time,通过与时间的比较完成增量的同步。

视频:4-2 Logstash全量、增量同步解决方案(10:30)

01、下载并安装logstash

logstash下载地址

  1. Logstash:收集、解析和转换日志 | Elastic
  2. Logstash 6.3.2 | Elastic

02、引入mysql连接jar包并配置mysql.conf文件

 

input {jdbc {# 指定jdbc驱动包位置(不同版本处理不同,此处可直接将mysql驱动包放置logstash-core/lib/jars下,无需配置jdbc_driver_library)# "C:\\logstash-6.3.2\\mysql-connector-java-5.1.31.jar" /xxx/logstash-7.5.0/mysql-connector-java-5.1.31.jarjdbc_driver_library => "F:\\logstash\\logstash-6.3.2\\mysql-connector-java-5.1.31.jar"# 要使用的驱动包类,有过java开发经验的应该很熟悉这个了,不同的数据库调用的类不一样。jdbc_driver_class => "com.mysql.jdbc.Driver"# mysql数据库的连接信息jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/blog"# mysql用户jdbc_user => "root"# mysql密码jdbc_password => "root"# 定时任务,多久执行一次查询,默认一分钟,如果想要没有延迟,可以使用 schedule => "* * * * * *"# 定时任务,默认一分钟,"* * * * *"代表设置为无延迟schedule => "* * * * *"# *清空存储在logstash的上一次的sql_last_value记录*clean_run => true# 要执行的语句statement => "select * FROM t_blog WHERE update_time > :sql_last_value AND update_time < NOW() ORDER BY update_time desc"}
}output {elasticsearch {# es host : porthosts => ["127.0.0.1:9200"]# 索引index => "blog"# _id (取到mysql数据库记录的id)document_id => "%{id}"}
}

03、使用kibana进行数据连接测试

注意:kibana数据从Elasticsearch而来,在启动kibana需要先启动Elasticsearch。

启动kibana步骤:

  1. 先启动elasticsearch:F:\elasticSearch\elasticsearch-6.3.2\bin\elasticsearch.bat
  2. 再启动kibana:F:\elasticSearch\kibana-6.3.2-windows-x86_64\bin\kibana.bat

04、将mysql数据同步到es中

logstash -f ../config/mysql.conf

  1. -f:指定自己设置的配置文件
  2. config/mysql.conf:配置文件存储位置

使用kibana开发工具查看mysql数据是否成功同步到es中:

GET /blog/_stats

POST /blog/_search
{
}

05、mysql.conf文件sql语句解析

  1. Select * from t_blog where update_time >:sql_last_value order by update_time DESC;
  2. R12、R22等临界点数据始终不会被扫描到,始终不会被同步到es中。
  3. Select * from t_blog where update_time >=:sql_last_value order by update_time DESC;
  4. 为了使R12、R22等临界点数据被扫描到,被同步到es中。
  5. Select * from t_blog where update_time >:sql_last_value and update_time < NOW() order by update_time DESC;

 

 

第5章 SpringBoot集成ES

Springboot+ElasticSearch构建博客检索系统-学习笔记02

视频:5-1 分词器介绍(01:40)
视频:5-2 IK分词器的安装和使用(11:50)
视频:5-3 springboot项目搭建(08:45)
视频:5-4 项目结构和JPA演示(10:03)
视频:5-5 Springboot集成ES(11:59)
视频:5-6 项目后端REST API实现(17:07)
视频:5-7 项目前端VUE视图渲染(21:49)

第6章 课程回顾与总结

Springboot+ElasticSearch构建博客检索系统-学习笔记02

视频:6-1 课程回顾与总结(05:04)

相关文章:

Springboot+ElasticSearch构建博客检索系统-学习笔记01

课程简介&#xff1a;从实际需求分析开始&#xff0c;打造个人博客检索系统。内容涵盖&#xff1a;ES安装、ES基本概念和数据类型、Mysql到ES数据同步、SpringBoot操作ES。通过本课&#xff0c;让学员对ES有一个初步认识&#xff0c;理解ES的一些适用场景&#xff0c;以及如何使…...

vue3+element-plus el-descriptions 详情组件二次封装(vue3项目)

最终效果 一、需求 一般后台管理系统&#xff0c;通常页面都有增删改查&#xff1b;而查不外乎就是渲染新增/修改的数据&#xff08;由输入框变成输入框禁用&#xff09;&#xff0c;因为输入框禁用后颜色透明度会降低&#xff0c;显的颜色偏暗&#xff1b;为解决这个需求于是封…...

No.14新一代信息技术

新一代信息技术产业包括&#xff1a;加快建设宽带、泛在、融合、安全的信息忘了基础设施&#xff0c;推动新一代移动通信、下一代互联网核心设备和智能终端的研发及产业化&#xff0c;加快推进三网融合&#xff0c;促进物联网、云计算的研发和示范应用。 大数据、云计算、互联…...

微信小程序开发(五)小程序代码组成2

微信小程序开发&#xff08;五&#xff09;小程序代码组成2 为了进一步加深我们对小程序基础知识的了解和掌握&#xff0c;需要更进一步的了解小程序的代码组成以及一些简单的代码的编写。 参考小程序官方的的代码组成文档&#xff1a;https://developers.weixin.qq.com/ebook?…...

关于tensorboard --logdir=logs的报错解决办法记录

我在运行tensorboard --logdirlogs时&#xff0c;产生了如下的报错&#xff0c;找遍全网后&#xff0c;解决办法如下 先卸载 pip uninstall tensorboard再安装 pip install tensorboard最后出现如下报错 Traceback (most recent call last): File “d:\newanaconda\envs\imo…...

em,rem,px,rpx,vw,vh的区别与使用

在css中单位长度用的最多的是px、em、rem&#xff0c;这三个的区别是&#xff1a;一、px是固定的像素&#xff0c;一旦设置了就无法因为适应页面大小而改变。二、em和rem相对于px更具有灵活性&#xff0c;他们是相对长度单位&#xff0c;意思是长度不是定死了的&#xff0c;更适…...

Vue+node.js医院预约挂号信息管理系统vscode

网上预约挂号系统将会是今后医院发展的主要趋势。 前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正…...

Java真的不难(五十四)RabbitMQ的入门及使用

RabbitMQ的入门及使用 一、什么是RabbitMQ&#xff1f; MQ全称为Message Queue&#xff0c;即消息队列。消息队列是在消息的传输过程中保存消息的容器。它是典型的&#xff1a;生产者、消费者模型。生产者不断向消息队列中生产消息&#xff0c;消费者不断的从队列中获取消息。…...

Unity | Script Hot Reload

官网地址&#xff1a;https://hotreload.net/ 一、作用 Unity在运行时&#xff0c;可以直接修改代码&#xff0c;避免等待过长的编译时间。 二、说明 1、支持的平台&#xff1f; Windows、MacOS、Linux 2、支持的Unity版本&#xff1f; 2018.4 (LTS)2019.4 (LTS)2020.3 (L…...

3|射频识别技术|第五讲:数据通信和编码技术|第九章:编码与调制|重点理解掌握传输介质中的有线传输介质

计算机网络部分&#xff1a;https://blog.csdn.net/m0_57656758/article/details/128943949传输介质分为有线传输介质和无线传输介质两大类&#xff1b;有线传输介质通常包含双绞线、同轴电缆和光导纤维&#xff1b;无线传输介质包含微波、红外线等。传输介质的选择和连接是网络…...

【遇见青山】基于Redis的Feed流实现案例

【遇见青山】基于Redis的Feed流实现案例1.关注推送2.具体代码实现1.关注推送 关注推送也叫做Feed流&#xff0c;直译为投喂。为用户持续的提供"沉浸式”的体验&#xff0c;通过无限下拉刷新获取新的信息。 Feed流产品有两种常见模式&#xff1a; 这里我们实现基本的TimeL…...

【芯片前端】一文搞定|寄存器组织生成与uvm ral_model环境全流程

前言 本文以组织一个系统(或模块)寄存器为例,进行寄存器与ral生成相关的全流程展示。内容包括如下几个部分: 寄存器文档组织 描述文件与辅助RTL代码结构 ralf/ral/rtl文件代码结构 UVM RAL访问环境组织 寄存器文档组织 在windows路径下组织寄存器文档,格式为excel表格。…...

Leetcode力扣秋招刷题路-0061

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 61. 旋转链表 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&…...

xilinx srio ip学习笔记之axistream接口

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之axistream接口前言接口转化前言 srio 的IQ接口都是基于axistream的&#xff0c;以前没怎么用过axistream的接口&#xff0c;或者说没怎么用过复杂条…...

轨迹误差评估指标[APE/RPE]和EVO

轨迹误差评估指标[APE/RPE]和EVO1. ATE/APE2. RPE3. EVO3.1 评估指标3.2 使用3.2.1 轨迹可视化3.2.2 APE3.2.3 RPEReference: 高翔&#xff0c;张涛 《视觉SLAM十四讲》视觉SLAM基础&#xff1a;算法精度评价指标&#xff08;ATE、RPE&#xff09; 在实际工程中&#xff0c;我…...

uni-app 消息推送功能UniPush

uni-app 消息推送功能UniPush,这里用的是uni-app自带的UniPush1.0&#xff08;个推服务&#xff09;&#xff0c;所以只针对UniPush1.0介绍实现步骤。 建议查阅的文章&#xff1a; UniPush 1.0 使用指南[2] Unipush 常见问题[3] 当然现在已经出了UniPush2.0&#xff08;HBuilde…...

面试题(二十六)场景应用

1. 场景应用 1.1 微信红包相关问题 参考答案 概况&#xff1a;2014年微信红包使用数据库硬抗整个流量&#xff0c;2015年使用cache抗流量。 微信的金额什么时候算&#xff1f; 微信红包的金额是拆的时候实时算出来&#xff0c;不是预先分配的&#xff0c;采用的是纯内存计…...

密码技术在车联网安全中的应用与挑战

随着智慧交通和无人驾驶的快速发展&#xff0c;车联网产业呈现蓬勃发展态势&#xff0c;车与云、车与车、车与路、车与人等综合网络链接的融合程度越来越高&#xff0c;随之而来的安全挑战也更加严峻。解决车联网的安全问题需要一个整体的防护体系&#xff0c;而密码技术凭借技…...

富媒体数据管理解决方案:简化、优化、自动化

富媒体数据管理解决方案&#xff1a;简化、优化、自动化 适用于富媒体的 NetApp 解决方案有助于简化和降低数据管理成本&#xff0c;优化全球媒体工作流并自动执行媒体资产管理。这将有助于减轻您的负担。 为什么选择 NetApp 的富媒体数据管理解决方案&#xff1f; 成本更低…...

QT入门Input Widgets之QFontComboBox、QTextEdit、QPlainTextEdit、QDial、QKeySequenceEdit

目录 一、QFontComboBox的相关介绍 1、实际使用 二、QTextEdit与QPlainTextEdit 三、QDial的相关介绍 四、QKeySequenceEdit的相关介绍 此文为作者原创&#xff0c;创作不易&#xff0c;转载请标明出处&#xff01; 一、QFontComboBox的相关介绍 1、实际使用 一般使用较…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...