ElasticSearch上
安装ElasticSearch
- Lucene:Java语言的搜索引擎类库,易扩展;高性能(基于倒排索引)
- Elasticsearch基于Lucene,支持分布式,可水平扩展;提供Restful接口,可被任何语言调用
- Elasticsearch结合kibana、logstash、Beats,是一套完整的技术栈,被叫做ELK。
安装ElasticSearch
docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network hm-net \-p 9200:9200 \-p 9300:9300 \--restart=always \elasticsearch:7.12.1
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:配置JVM的最大最小内存-e "discovery.type=single-node"
:配置运行模式(集群模式、单点模式)-v es-data:/usr/share/elasticsearch/data
:es的数据存储目录-v es-plugins:/usr/share/elasticsearch/plugins
:es的插件目录-p 9200:9200
:访问的http端口-p 9300:9300
:集群间通信端口
查看es的日志:
docker logs -f es
安装成功后,在浏览器输入:http://192.168.140.101:9200/
,看到响应即安装成功。
安装Kibana
Kibana是个图形界面,帮助我们连接es
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=hm-net \
-p 5601:5601 \
--restart=always \
kibana:7.12.1
-e ELASTICSEARCH_HOSTS=http://es:9200 \
:因为kibana和es在同一个网络下,所以可以通过容器名直接连接es
查看kibana的日志:
docker logs -f kibana
安装成功后,在浏览器输入:http://192.168.140.101:5601/
,看到响应即安装成功。
可以利用kibana中Dev Tools
控制台向es发送http请求
倒排索引
MySQL采用的是正向索引:
查询词条时需要
逐行遍历文档
,再判断文档中是否包含了词条
Elasticsearch采用倒排索引:
- 文档(document):每条数据就是一个文档
- 词条(term):文档按照语义分成的词语
用户搜索的时候,先对用户搜索的数据进行分词,将分词后的词条放到
词条列表
中得到文档id,根据文档id去文档列表
中查询。虽然有两次查询,但是每次查询都是有索引,搜索速度快。
IK分词器
中文分词往往需要根据语义,比较复杂,这就需要用到中文分词器,例如:IK分词器
。
下载地址:IK分词器
安装IK分词器
只需要把IK分词器下载后放到es的插件目录
后重启es
即可生效。
测试IK分词器是否安装成功
ik_smart
智能切分,粗粒度
POST /_analyze
{"analyzer": "ik_smart","text": "今天天气真好"
}
ik_max_word
最细切分,细粒度IK分词器
POST /_analyze
{"analyzer": "ik_max_word","text": "今天天气真好"
}
自定义词典
可以在ik插件的config目录下的IKAnalyzer.cfg.xml文件配置扩展词典
、停止词典
ElasticSearch中基础概念
索引库操作
索引库相当于MySQL里的表,Mapping相当于对表字段的约束
Mapping映射属性
mapping是对索引库中文档的约束。
- type:字段数据类型
- 字符串:text(可分词文本)、keyword(精确值,不能分词,例如:品牌、国家、ip地址)
- 数值:long、integer、short、byte、double、float
- 布尔:boolean
- 日期:date(es自己把日期对象做了序列化)
- 对象:object
- index:是否创建索引,默认为true
- true:es就会给这个字段创建倒排索引,就可以根据这个字段进行搜索或排序
- analyzer:使用哪种分词器(ik_smart、ik_max_word),只有字段类型是text才需要指定分词器
- properties:该字段的子字段
在es中,不需要管是否是数组,就算是数组,也只要指定元素的类型即可
索引库的CRUD
es中提供的API都是Restful的接口,遵循Restful的基本规范:
创建索引库
PUT /索引库名称
{"mappings": {"properties": {"字段名":{"type": "text", // 可分词"analyzer": "ik_smart"},"字段名2":{"type": "keyword", // 不可分词"index": "false"},"字段名3":{"properties": {"子字段": {"type": "keyword"}}},// ...略}}
}
【例】:
# 创建索引库
PUT /people
{"mappings": {"properties": {"info": {"type": "text","analyzer": "ik_smart"},"age": {"type": "byte"},"email": {"type": "keyword","index": "false"},"name": {"type": "object","properties": {"firstName":{"type": "keyword"},"lastName": {"type": "keyword"}}}}}
}
修改索引库
PUT /索引库名/_mapping
{"properties": {"新字段名":{"type": "integer"}}
}
【例】:
# 修改索引库,新增一个sex字段
PUT /people/_mapping
{"properties": {"sex": {"type": "boolean"}}
}
【注】:es中是
不允许对已有索引库的字段进行修改
,但是允许添加新的字段
。
【原因】:假设已经在es中创建大量的倒排索引,做了大量的分词,如果此时需要修改索引库,那么前期做的所有分词都作废还要重新建立倒排索引,对于整个数据库的影响很大。
查询索引库
# 查询索引库
GET /索引库名
删除索引库
# 删除索引库
DELETE /索引库名
文档操作
文档的CRUD
新增文档
POST /索引库名/_doc/文档id
{"字段1": "值1","字段2": "值2","字段3": {"子属性1": "值3","子属性2": "值4"},
}
【例】:
POST /people/_doc/1
{"info": "程序员","email": "xiaolin0333@qq.com","name": {"firstName": "林","lastName": "三"}
}
新增文档的时候最好指定文档id,es会根据文档id创建索引,如果不指定id,es会随机生成id,这样将来操作文档就会很不方便
修改文档
1. 全量修改
删除旧文档,添加新文档
PUT /{索引库名}/_doc/文档id
{"字段1": "值1","字段2": "值2",// ... 文档的所有字段都要写
}
注:如果想要修改一个文档id不存在的文档,删除文档的时候,文档不存在,会直接新增一条文档
因此PUT请求具备了新增
和修改
两种功能
- 新增:文档id不存在
- 修改:文档id存在
2. 增量修改
修改部分字段值
POST /{索引库名}/_update/文档id
{"doc": {"字段名": "新的值",}
}
查询文档
# 查询文档
GET /索引库名/_doc/文档id
删除文档
# 删除文档
DELETE /索引库名/_doc/文档id
批量处理
es中允许通过一次请求中携带多次文档操作。
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } } // 新增(索引库名、id)
{ "field1" : "value1" } // 新增的文档信息{ "delete" : { "_index" : "test", "_id" : "2" } } // 删除(索引库名、id){ "update" : {"_id" : "1", "_index" : "test"} } // 更新(索引库名、id)
{ "doc" : {"field2" : "value2"} } // 更新的文档信息(增量修改)
写的时候不能换行,只能在一行写,否则会报错
【例1】:批量新增
POST /_bulk {"index": {"_index": "people","_id": "2"}}{"info": "这是人", "email": "xiaolin0333@qq.com", "name": {"firstName": "林", "lastName": "三"}}{"index": {"_index": "people","_id": "3"}}{"info": "这是狗", "email": "cmb@qq.com", "name": {"firstName": "柴", "lastName": "犬"}}
【例2】:批量删除
POST /_bulk {"delete": {"_index": "people","_id": "2"}}{"delete": {"_index": "people","_id": "3"}}
JavaRestClient
客户端初始化
- 引入es的RestHighLevelClient的依赖:
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
- 因为SpringBoot默认ES的版本是7.17.0,所以需要覆盖默认的ES版本:
<properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><elasticsearch.version>7.12.1</elasticsearch.version></properties>
- 初始化RestHighLevelClient(这里暂时先用单元测试为例)
public class ElasticTest {private RestHighLevelClient client;@Testvoid testConnection() {System.out.println("client = " + client);}@BeforeEach // 初始化方法:在单元测试执行前void setUp() {client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.140.101:9200")));}@AfterEach // 销毁方法:在单元测试执行后void tearDown() throws IOException {if(client != null) {client.close();}}
}
商品表Mapping映射
【业务分析】:
【在控制台创建Mapping映射】:
# 商品索引库
PUT /hmall
{"mappings": {"properties": {"id": {"type": "keyword"},"name": {"type": "text","analyzer": "ik_smart"},"price": {"type": "integer"},"image": {"type": "keyword","index": false},"category": {"type": "keyword"},"brand": {"type": "keyword"},"sold": {"type": "integer"},"commentCount": {"type": "integer","index": false},"isAD": {"type": "boolean"},"updateTime": {"type": "date"}}}
}
索引库操作
- 创建XxxIndexRequest。Xxx指:Create、Get、Delete
- 准备请求参数(Create需要)
- 发送请求。调用client.indices.xxx()方法,xxx指:create、get、exists、delete
创建索引库
创建索引库的JavaAPI和Restful接口API对比:
@Test
void testCreateIndex() throws IOException {// 1. 准备Request对象CreateIndexRequest request = new CreateIndexRequest("items");// 2. 准备请求参数request.source(MAPPING_TEMPLATE, XContentType.JSON); // MAPPING_TEMPLATE就是前面在控制台写的那段// 3. 发送请求client.indices().create(request, RequestOptions.DEFAULT);
}
查询索引库
@Test
void testGetIndex() throws IOException {// 1. 准备Request对象GetIndexRequest request = new GetIndexRequest("items");// 2. 发送请求GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);// 查询索引库(索引库不存在报错)boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);// 判断索引库是否存在(索引库不存在返回false)
}
删除索引库
@Test
void testDeleteIndex() throws IOException {// 1. 准备Request对象DeleteIndexRequest request = new DeleteIndexRequest("items");// 2. 发送请求client.indices().delete(request, RequestOptions.DEFAULT);}
文档操作
- 初始化RestHighLevelClient
- 创建XxxRequest。Xxx指:Index、Get、Update、Delete
- 准备参数(Index和Update需要)
- 请求参数。调用xxx()方法,xxx是index、get、update、delete
- 解析结果(Get需要)
新增文档
新增文档的JavaAPI和Restful接口API对比:
@Test
void testIndexDoc() throws IOException {// 准备文档数据Item item = itemService.getById(2018833);ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class); // 文档数据对象String jsonStr = JSONUtil.toJsonStr(itemDoc); // JSON// 1. 准备RequestIndexRequest request = new IndexRequest("items").id(itemDoc.getId());// 索引库名、文档id// 2. 准备JSON文档request.source(jsonStr, XContentType.JSON);// 3. 发送请求client.index(request, RequestOptions.DEFAULT);
}
修改文档
全量修改
全量修改相当于新增,就是新增的时候文档id已经存在
局部修改
@Test
void testUpdateDoc() throws IOException {// 1. 准备RequestUpdateRequest request = new UpdateRequest("items", "2018833"); // 索引库名、文档id// 2. 准备请求参数request.doc("price", 25600,"stock", 9999);// 3. 发送请求client.update(request, RequestOptions.DEFAULT);
}
查询文档
查询文档主要是拿到_source部分
@Test
void testGetDoc() throws IOException {// 1. 准备RequestGetRequest request = new GetRequest("items", "2018833"); // 索引库名、文档id// 2. 发送请求GetResponse response = client.get(request, RequestOptions.DEFAULT);String json = response.getSourceAsString();ItemDoc doc = JSONUtil.toBean(json, ItemDoc.class);System.out.println(doc);
}
删除文档
@Test
void testDeleteDoc() throws IOException {// 1. 准备RequestDeleteRequest request = new DeleteRequest("items", "2018833"); // 索引库名、文档id// 2. 发送请求client.delete(request, RequestOptions.DEFAULT);
}
批处理
构建请求时会用到BulkRequest来封装普通的CRUD请求:
【案例】:往索引库里添加所有上架的商品
@Test
void testBulkDoc() throws IOException {int pageNo = 1, pageSize = 500;while(true) {// 0. 准备文档数据Page<Item> page = itemService.lambdaQuery().eq(Item::getStatus, 1) // 上架商品.page(Page.of(pageNo, pageSize));List<Item> records = page.getRecords();if(records == null || records.isEmpty()) {return;}// 1. 准备RequestBulkRequest request = new BulkRequest();// 2. 准备数据-批量新增for(Item item : records) {ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class);request.add(new IndexRequest("items").id(item.getId().toString()).source(JSONUtil.toJsonStr(itemDoc), XContentType.JSON));}// 3. 发送请求client.bulk(request, RequestOptions.DEFAULT);pageNo++;}
}
相关文章:
ElasticSearch上
安装ElasticSearch Lucene:Java语言的搜索引擎类库,易扩展;高性能(基于倒排索引)Elasticsearch基于Lucene,支持分布式,可水平扩展;提供Restful接口,可被任何语言调用Ela…...
基于SpringCloud的广告系统设计与实现(二)
一、common公共模块 1.common的作用 通用的代码、配置不应该散落在各个业务模块中,不利于维护与更新 一个大的系统,响应对象需要统一外层格式 各种业务设计与实现,可能会抛出各种各样的异常,异常信息的收集也应该做到统一 2.统…...
2011年西部数学奥林匹克的几何题
2011G1 证明: 显然, O O O, I I I, F F F 共线, E I / / M O EI//MO EI//MO, △ E I F ∼ △ M O F \triangle EIF \sim \triangle MOF △EIF∼△MOF. 进而 E F / M F r 1 / r 2 EF/MFr_1/r_2 EF/MFr1/r2. ( r 1 (r_1 (r1 为圆 I I I 的半径, r 2 r_2 r2 为…...
(一)afsim第三方库编译
注意:防止奇怪的问题,源码编译的路径最好不要有中文,请先检查各文件夹名 AFSIM版本 Version: 2.9 Plugin API Version: 11 软件环境 操作系统: Kylin V10 SP1 项目构建工具: cmake-3.26.0-linux-aarch6…...
boss直聘 __zp_stoken__ 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 py代码 import execjs imp…...
python matplotlib绘图,显示和保存没有标题栏和菜单栏的图像
目录 1. 使用plt.savefig保存无边框图形 2. 显示在屏幕上,并且去掉窗口的标题栏和工具栏 3. 通过配置 matplotlib 的 backend 和使用 Tkinter(或其他图形库) 方法 1:使用 TkAgg 后端,并禁用窗口的工具栏和标题栏 …...
AI-Talk开发板之替换唤醒词
一、说明 聆思提供的Demo唤醒词默认为"小美,小美",V2.4及之后的SDK支持替换唤醒词,聆思提供了在线工具生成唤醒词固件。 工具:tool.listenai.com/audio-custom/products/ 官方博客教程:实操给桌面AI语音助理ÿ…...
C#实现字符串反转的4种方法
见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看...... 1、string.Reverse 方法 string content "Hello World";string reverseStri…...
【MySQL索引:B+树与页的深度解析】
文章目录 MySQL索引:B树与页的深度解析1. 索引使用的数据结构——B树1.1 B树介绍1.2 B树的特点1.3 B树和B树的对比 2. MySQL中的页2.1 页的介绍2.2 页主体2.3 页目录2.4 B树在MySQL索引中的应用 MySQL索引:B树与页的深度解析 在MySQL数据库中࿰…...
在 macOS 上,用命令行连接 MySQL(/usr/local/mysql/bin/mysql -u root -p)
根据你提供的文件内容,MySQL 的安装路径是 /usr/local/mysql。要直接使用 mysql 命令,你需要找到 mysql 可执行文件的路径。 在 macOS 上,mysql 客户端通常位于 MySQL 安装目录的 bin 子目录中。因此,完整的路径应该是࿱…...
深入HDFS——数据上传源码
引入 就如RPC篇章里提到的观点一样,任何一种能广为传播的技术,都是通过抽象和封装的思想,屏蔽底层底层复杂实现,提供简单且强大的工具,来降低使用门槛的。 HDFS的风靡自然也是如此。 通过前面深入了NameNode和DataN…...
归并排序算法
归并排序 1算法介绍 和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用…...
优雅解决webview_flutter不支持安卓选择图片视频文件问题
这个问题,网上一搜索,就是要去修改别人写好的插件。 搞Flutter开发,尽量不要去修改别人的插件 ,特别是像 webview_flutter 这种比较大的官方插件。 相信我,你拿捏不了它。 主要问题就是: webview_flutter…...
Linux UDP 编程详解
一、引言 在网络编程领域,UDP(User Datagram Protocol,用户数据报协议)作为一种轻量级的传输层协议,具有独特的优势和适用场景。与 TCP(Transmission Control Protocol,传输控制协议࿰…...
UllnnovationHub,一个开源的WPF控件库
目录 UllnnovationHub1.项目概述2.开发环境3.使用方法4.项目简介1.WPF原生控件1.Button2.GroupBox3.TabControl4.RadioButton5.SwitchButton6.TextBox7.PasswordBox8.CheckBox9.DateTimePicker10.Expander11.Card12.ListBox13.Treeview14.Combox15.Separator16.ListView17.Data…...
[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令
[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令 简介 项目分析 如何执行系统命令并拿到结果 代码实现 简介 在Python学习日记-77中我们介绍了 socket 基于 TCP 和基于 UDP 的套接字,还实现了服务器端和客户端的通信,本…...
css3过渡总结
一、过渡的定义与作用 CSS3 过渡(Transitions)允许 CSS 属性在一定的时间区间内平滑地过渡,从一个值转变为另一个值。它能够让网页元素的状态变化更加自然、流畅,给用户带来更好的视觉体验。例如,当一个元素从隐藏状态…...
生产环境中常用的设计模式
生产环境中常用的设计模式 设计模式目的使用场景示例单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点- 日志记录器- 配置管理器工厂方法模式定义一个创建对象的接口,让子类决定实例化哪个类- 各种工厂类(如视频游戏工厂模式创…...
【STM32-学习笔记-4-】PWM、输入捕获(PWMI)
文章目录 1、PWMPWM配置 2、输入捕获配置3、编码器 1、PWM PWM配置 配置时基单元配置输出比较单元配置输出PWM波的端口 #include "stm32f10x.h" // Device headervoid PWM_Init(void) { //**配置输出PWM波的端口**********************************…...
游戏行业销售数据分析可视化
完整源码项目包获取→点击文章末尾名片! 🌟分析: 可看出最近五年用户最喜爱的游戏类型依然还是Action-动作类(当然市场发行的也很多) Sports-运动类和Shooter-射击类顺序互换,但我估计现在大环境局势紧张可以会推动射击…...
微服务网关,如何选择?
什么是API网关 API网关(API Gateway)是微服务架构中的一个关键组件,它充当了客户端与后端服务之间的中间层。其主要功能包括请求路由、协议转换、负载均衡、安全认证、限流熔断等。通过API网关,客户端无需直接与多个微服务交互&a…...
Java开发提速秘籍:巧用Apache Commons Lang工具库
一、Java 开发效率之困 在当今数字化时代,Java 作为一门广泛应用的编程语言,在各类软件开发项目中占据着举足轻重的地位。无论是大型企业级应用、互联网平台,还是移动应用后端,都能看到 Java 的身影。然而,Java 开发者…...
多用户商城系统源码哪家好用?怎么选?
想拥有属于自己的多用户商城系统,但回头一看自己又是个技术小白,看着网上眼花缭乱的b2b2c商城系统,更是不知道如何选起?下面给大家分享一条较为成熟的选择思路,以作参考。 1、从需求上决定系统方向 企业在选型b2b2c商…...
聊聊如何实现Android 放大镜效果
一、前言 很久没有更新Android 原生技术内容了,前些年一直在做跨端方向开发,最近换工作用重新回到原生技术,又回到了熟悉但有些生疏的环境,真是感慨万分。 近期也是因为准备做地图交互相关的需求,功能非常复杂&#x…...
NVIDIA视频编解码
开源了两个项目:英伟达显卡视频编解码、jetson视频编解码。都是基于官方SDK进行的封装,由于官方自带的demo晦涩难懂并且每块都是独立的,我对SDK进行二次封装并形成了一套较为完整的视频编解码流程,调用简单,有完整的测…...
Mysql事务隔离级
什么是事务的隔离级别 数据库事务的隔离级别是指事务在并发执行时,如何控制事务之间相互影响的程度。它决定了多个事务并发执行时,事务中的操作对其他事务的可见性,进而影响数据的一致性和并发性。 为什么会有隔离级别的概念? …...
K210视觉识别模块
K210视觉识别模块是一款功能强大的AI视觉模块,以下是对其的详细介绍: 一、核心特性 强大的视觉识别功能:K210视觉识别模块支持多种视觉功能,包括但不限于人脸识别、口罩识别、条形码和二维码识别、特征检测、数字识别、颜色识别…...
springboot使用websocket
文章目录 一、概述1、简介 二、 使用1、引包2、配置处理器3、前端测试 一、概述 1、简介 简介略,附上官方文档,spring5和spring6的官方文档内容大致是一样的: https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framewo…...
线程池底部工作原理
线程池内部是通过线程和队列实现的,当我们通过线程池处理任务时: 如果线程池中的线程数量小于corePoolSize,无论是否有处于空闲的线程,都创建新的线程来处理被添加的任务。 如果线程池中的线程数量等于corePoolSize,…...
DevUI 2024 年度运营报告:开源生态的成长足迹与未来蓝图
在当今数字化飞速发展的时代,开源已成为推动技术创新与协作的重要力量。DevUI 作为开源领域的重要一员,其发展历程与成果备受关注。值此之际,GitCode 精心整理了 DevUI 年度运营报告,为您全面呈现 DevUI 社区在过去一年里的开源之…...
Mybatis面试题
Mybatis面试题 什么是 MyBatis?讲下 MyBatis 的缓存Mybatis 是如何进行分页的?分页插件的原理是什么?简述 Mybatis 的插件运行原理,以及如何编写一个插件?Mybatis 动态 sql 是做什么的?都有哪些动态 sql&am…...
Python获取系统运行时间
有时候想获取系统启动后到现在的运行时间,在Linux C可以使用clock_gettime()来获得,如下, #include <time.h> #include <stdio.h>int main() {struct timespec ts;clock_gettime(CLOCK_MONOTONIC, &ts);printf("syste…...
软考高级5个资格、中级常考4个资格简介及难易程度排序
一、软考高级5个资格 01、网络规划设计师 资格简介:网络规划设计师要求考生具备全面的网络规划、设计、部署和管理能力;该资格考试适合那些在网络规划和设计方面具有较好理论基础和较丰富从业经验的人员参加。 02、系统分析师 资格简介:系统分…...
【18】Word:明华中学-儿童医保❗
目录 题目 NO2 NO3 NO4 NO5 NO6 NO7 NO8 NO9 题目 NO2 布局→页面设置对话框→纸张方向:横向→纸张大小:A3 ;页面设置对话框:直接输入纸张大小的宽度和高度即可→页面设置对话框:上下左右边距→版式&…...
Vue 中实现修改数组,并保持页面渲染数据是响应式更改
如果你在 Vue 中使用数组并希望确保对数组项的修改是响应式的,直接替换数组项可能不会触发 Vue 的响应式更新。为了确保响应式更新,你可以使用 Vue 提供的 Vue.set() 方法(在 Vue 2 中)或使用 this.$set() 方法(在 Vue…...
MATLAB算法实战应用案例精讲-【数模应用】图形变换和复杂图形组合(附python和MATLAB代码实现)
目录 前言 算法原理 变换 1二维变换 1.1缩放 1.2 翻转 1.3剪切 1.4 旋转 2齐次坐标 2.1引入齐次坐标的原因 2.2 二维齐次坐标 2.3二维仿射变换 2.4逆变换 4组合变换 5三维变换(由二维变换推理而来) 5.1三维齐次坐标 5.2 三维仿射变换 5.3 缩放和平移 5.4…...
GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什么区别?
GCC支持Objective C的故事 Objective-C 主要由 Stepstone 公司的Brad Cox和 Tom Love 在1980 年左右发明。乔布斯离开苹果公司后成立了NeXT STEP公司, 买下了Objective-C 语言的授权。GCC对Objective-C语言的支持是在1992年加入的,具体是在GCC 1.3版本中…...
自动驾驶占用网格预测
文章目录 需要阅读的文献:github论文仓库论文idea提取BEVFormer 需要阅读的文献: ⭐[ECCV 2024] SparseOcc 纯稀疏3D占用网络和 RayIoU 评估指标 ECCV 2024|OSP:自动驾驶全新建模方法,端到端输出任意位置的占用结果 S…...
1.17组会汇报
STRUC-BENCH: Are Large Language Models Good at Generating Complex Structured Tabular Data? STRUC-BENCH:大型语言模型擅长生成复杂的结构化表格数据吗?23年arXiv.org 1概括 这篇论文旨在评估大型语言模型(LLMs)在生成结构…...
使用 Ansys Motor-CAD 的自适应模板加速创新
应对现代电机设计挑战 电机设计不断发展,Ansys 正在通过创新解决方案引领潮流,不断突破可能的界限。随着电动汽车、工业自动化和可再生能源系统的快速增长,对优化电机的需求从未如此之高。工程师面临着越来越大的压力,他们需要开发…...
用nginx正向代理https网站
目录 1. 缘起2. 部署nginx3. 测试3.1 http测试3.2 https测试4 给centos设置代理访问外网 1. 缘起 最近碰到了一个麻烦事情,就是公司的centos测试服务器放在内网环境,而且不能直接上外网,导致无法通过yum安装软件,非常捉急。 幸…...
PyTorch使用教程(6)一文讲清楚torch.nn和torch.nn.functional的区别
torch.nn 和 torch.nn.functional 在 PyTorch 中都是用于构建神经网络的重要组件,但它们在设计理念、使用方式和功能上存在一些显著的区别。以下是关于这两个模块的详细区别: 1. 继承方式与结构 torch.nn torch.nn 中的模块大多数是通过继承 torch.nn…...
图论DFS:黑红树
我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法…...
StarRocks 怎么让特定的SQL路由到FE master节点的
背景 本文基于 StarRocks 3.1.7 大家都知道对于Starrocks来说 FE 是分 master和follower的,而只有master节点才能对元数据进行写操作。但是为什么呢?哪里有体现呢? 这其中的原因在网上是搜不到的,所以大家只知道只有master节点才…...
蓝桥杯真题 - 公因数匹配 - 题解
题目链接:https://www.lanqiao.cn/problems/3525/learning/ 个人评价:难度 2 星(满星:5) 前置知识:调和级数 整体思路 题目描述不严谨,没说在无解的情况下要输出什么(比如 n n n …...
Java 8 Stream API
文章目录 Java 8 Stream API1. Stream2. Stream 的创建3. 常见的 Stream 操作3.1 中间操作3.2 终止操作 4. Stream 的并行操作 Java 8 Stream API Java 8 引入了 Stream API,使得对集合类(如 List、Set 等)的操作变得更加简洁和直观。Stream…...
AI刷题-还原原始字符串、大数和中的极值位距离
目录 一、还原原始字符串 问题描述 举例 输入格式 输出格式 输入 输出 输入 输出 输入 输出 输入 输出 输入 输出 输入 输出 数据范围 解题思路: 数据结构选择 最终代码: 运行结果: 二、大数和中的极值位距离 问题…...
Ubuntu20.04取消root账号自动登录的方法,触觉智能RK3568开发板演示
Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力…...
MySQL 数据库 :SQL 语句规约(不得使用外键与级联,一切外键概念必须在应用层解决。)
文章目录 I 强制规约表名限定数据订正禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。不得使用外键与级联,一切外键概念必须在应用层解决。使用 ISNULL() 来判断是否为 NULL 值NPE 问题不要使用 count(列名) 或 count(常量) 来替代 count(*)II 建议in 操作能避免则…...
深入理解 SQL 中的 DATEDIFF 函数
深入理解 SQL 中的 DATEDIFF 函数 DATEDIFF 函数在 SQL 中是一个用于计算两个日期之间差值的重要工具。不同数据库实现了不同版本的 DATEDIFF,它们在功能和语法上有所不同。本文将详细解析 DATEDIFF 的用法、数据库间差异、复杂场景中的应用,以及替代方…...