【Elasticsearch入门到落地】4、Elasticsearch的安装
接上篇《3、es与mysql的概念对比》
上一篇我们学习了Elasticsearch与Mysql的概念与区别。本篇我们来进行Elasticsearch的环境准备及软件安装。
一、环境准备
如果我们没有自己的Linux服务器,且现在正在使用的是Windows操作系统的电脑,那么首先我们需要安装VMware Workstation,并在VMware中安装Centos版本的Linux虚拟机做测试用,安装教程如下:
《虚拟机 VMware Workstation-安装详细步骤(作者Envyᥫᩣᩚ)》
https://blog.csdn.net/2302_82029124/article/details/140334173
《linux笔记 - 安装虚拟机(作者zf xia)》
https://blog.csdn.net/qq_43021651/article/details/143341068
这里虚拟机我安装的是VMware Workstation Pro 17,centos镜像使用的是CentOS7.9,Xshell远程连接使用的Xshell8免费版,下载地址如下:
【VMware Workstation Pro 17】下载地址(3DM三大妈):
https://soft.3dmgame.com/down/321412.html
【CentOS7.9】镜像下载地址(阿里云镜像):
https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso
【Xshell8免费版】官网下载地址:
https://www.xshell.com/zh/free-for-home-school/
装完后效果(记得关闭防火墙,否则有可能xshell连不上):
如果虚拟机连不上外网(例如ping www.baidu.com不通),参考下文
《vmware创建的虚拟机无法连接外网(作者骑士999111)》
https://blog.csdn.net/qishiheyongshi/article/details/133001432
虚拟机和xshell都装好后,我们就可以使用xshell链接虚拟机,IP地址是我们在安装虚拟机的时候设置好的,用root登录就行:
进入根目录查看一下,显示正常即可:
二、安装Docker
在安装Elasticsearch之前,首先需要安装好Docker。什么是Docker?Docker是一个开源的容器化平台,它允许开发者将应用程序及其所有依赖项打包到一个标准化的单元中,这个单元被称为“容器”。容器可以在任何支持Docker的环境中运行,从而确保应用程序的可移植性和一致性。
简单来说,Docker就像一个轻量级的虚拟机,但它比虚拟机更高效,因为它直接使用宿主机的操作系统内核,而不是像虚拟机那样需要模拟一个完整的操作系统。这使得Docker容器的启动速度非常快,并且占用资源更少。
你可以把docker中的一个容器理解为即将安装到VMware中的装好了很多软件环境的ISO镜像文件,只不过这个ISO镜像文件很轻量级。
想了解更多信息大家可到Docker官网查看。安装Docker的教程详见:
《CentOS安装Docker(超详细)(作者屈家全)》
https://blog.csdn.net/weixin_56781779/article/details/132258636
输入“docker -v”查看Docker版本,显示无误后,Docker安装成功:
安装完Docker后,就可以开始安装Elasticsearch了。
有同学会问为啥要先安装docker?原因有如下几点:
在安装Elasticsearch之前先安装Docker,主要基于以下几个原因:
1、安装过程与复杂度
(1)直接安装:
需要手动下载Elasticsearch的二进制包或使用包管理器(如apt、yum等)进行安装。
安装过程可能涉及配置文件的编辑、服务的启动和管理等步骤。
(2)Docker安装:
使用docker pull命令从Docker Hub或其他镜像仓库下载Elasticsearch的Docker镜像。
使用docker run命令启动Elasticsearch容器。
安装过程相对简单,不需要手动配置Elasticsearch的多个细节。
2、资源管理与隔离性
(1)直接安装:
Elasticsearch直接运行在宿主机的操作系统上,直接访问宿主机的资源(如CPU、内存、磁盘等)。
性能直接受宿主机的资源限制,可能会与其他应用程序共享资源,影响性能或安全性。
(2)Docker安装:
Elasticsearch运行在一个隔离的Docker容器中,不会直接访问宿主机的资源。
可以通过Docker命令轻松设置容器的资源限制(如CPU、内存等)。
提供了良好的隔离性,Elasticsearch与其他容器或宿主机上的应用程序是隔离的。
3、升级与维护
(1)直接安装:
升级通常需要停止服务、替换二进制文件、重新配置等步骤。
维护和管理可能需要更多的手动操作。
(2)Docker安装:
升级通常只需要拉取最新的镜像并重新启动容器。
生命周期管理更加简单和自动化。
4、配置与数据持久化
(1)直接安装:
配置文件通常位于宿主机的某个目录中。
数据存储在宿主机上的指定目录中。
需要手动管理配置文件和数据。
(2)Docker安装:
可以使用docker run命令中的-v参数将宿主机上的目录挂载到容器内,以实现配置文件和数据的持久化。
即使容器被删除,配置文件和数据仍然保留在宿主机上。
综上所述,直接安装Elasticsearch和Docker安装Elasticsearch在多个方面存在显著差异。Docker安装提供了更好的资源隔离性、更简单的升级与维护流程以及更灵活的配置与数据持久化选项。而直接安装则可能更直接地利用宿主机的资源,但在资源管理和安全性方面可能需要更多的手动配置。在选择安装方式时,需要根据具体的使用场景和需求进行权衡。
三、安装Elasticsearch
1、需要安装的内容
这里我们部署的是单点的Elasticsearch,而不是集群的,所以安装一台服务即可。
我们要安装的软件除了Elasticsearch,还需要安装Kibana和IK分词器,它们都是数据处理和搜索分析领域的重要工具,各自有不同的功能与作用,区别如下:
(1)Elasticsearch
Elasticsearch是一个基于Lucene构建的开源、分布式、实时的搜索和分析引擎。它主要用于全文搜索、日志分析、实时数据分析等场景,支持多种数据类型(如文本、数字、地理位置等)和灵活的查询语言。Elasticsearch的核心优势包括大规模数据处理能力、高性能搜索、实时分析、灵活性和多样性、易于集成、可扩展性、容错性与高可用性,以及丰富的开源社区支持。
(2)Kibana
Kibana是一个开源的数据可视化和分析平台,设计用于与Elasticsearch协同工作。Kibana允许用户搜索、查看和与存储在Elasticsearch索引中的数据进行交互,可以轻松地执行高级数据分析,并以各种图标、表格和地图的形式可视化数据。Kibana的主要功能包括数据可视化、实时监控、用户友好的界面和与Elastic Stack的无缝集成。通过Kibana,用户可以创建和共享动态仪表板,实时显示Elasticsearch查询的变化,从而更好地理解和分析数据。
(3)IK分词器
IK分词器(IK Analyzer)是一款开源的中文分词工具,支持智能分词、细粒度分词等多种分词模式。它基于词典的分词算法,结合了最大匹配法和逆向最大匹配法,能够在保证分词准确性的同时,保持较高的分词速度。IK分词器的主要作用是将中文文本切分为有意义的词项,为后续的文本分析、信息检索、机器学习等任务提供基础数据。其优势在于高效性、灵活性和多种分词模式,适用于不同的应用场景。
总的来说,Elasticsearch、Kibana和IK分词器在数据处理和搜索分析领域各自扮演着重要的角色。Elasticsearch负责存储、搜索和分析数据;Kibana负责数据的可视化和管理;而IK分词器则专注于中文文本的分词处理,为Elasticsearch等搜索引擎提供准确的分词结果。
2、创建网络
因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:
docker network create es-net
然后查看网络列表:
docker network ls
效果:
(1)命令含义
docker network create es-net 是一个Docker命令,用于创建一个新的Docker网络。在这个例子中,创建的网络名称是 es-net。Docker网络允许容器之间安全地通信,并且可以通过配置来限制外部访问。
(2)语法解释
docker:这是Docker命令行工具的调用命令,用于执行Docker相关的操作。
network:这是指定要操作的是Docker网络的一个子命令。Docker网络是Docker容器之间通信的基础设施。
create:这是指定要对Docker网络执行的操作,即创建一个新的网络。
es-net:这是新创建的Docker网络的名称。在这个例子中,网络被命名为 es-net,但你可以根据需要将其命名为任何有效的名称。
(3)为什么要创建网络?
在Docker中,容器之间默认是隔离的,它们不能直接相互通信,除非通过特定的网络配置。创建自定义网络(如 es-net)允许你将多个容器连接到一个共同的网络中,使它们能够相互通信。这对于部署需要相互通信的服务(如Elasticsearch和Kibana)非常有用。
Elasticsearch和Kibana容器互联:一旦你创建了 es-net 网络,你就可以在启动Elasticsearch和Kibana容器时将它们连接到这个网络。这可以通过在 docker run 命令中使用 --network 参数来实现。例如:
docker run -d --name elasticsearch --network es-net -p 9200:9200 -p 9300:9300 elasticsearch:latest
docker run -d --name kibana --network es-net -p 5601:5601 kibana:latest
在这个例子中,Elasticsearch和Kibana容器都被连接到了 es-net 网络,因此它们能够相互通信。Kibana将能够访问Elasticsearch提供的API,从而提供数据可视化和搜索功能。
总之,创建Docker网络是部署多个需要相互通信的容器时的一个重要步骤,它提供了容器之间安全通信的基础设施。
3、加载镜像
这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G,pull下来需要花点时间,获取镜像包语法如下:
docker pull elasticsearch:7.12.1
在过程中可以会遇到报错,解决方案参考下面的文章:
《Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request canceled while(作者修心光)》
https://blog.csdn.net/qq18346342939/article/details/142751367
注:如果pull的时间太长,可以下载CSDN的离线安装包,下载地址:
https://download.csdn.net/download/booguojieji/85329645
使用方法:
elasticsearch的7.12.1版本的镜像,使用docker load -i elasticsearch.tar 加载镜像
kibana的7.12.1版本的镜像,使用docker load -i kibana.tar 加载kibana镜像包
ik分词器,解压到es的plugins目录下
4、运行Elasticsearch
安装好Elasticsearch的镜像后,使用下面的语句将es服务启动起来:
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 es-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1
上述语句的解释如下:
(1)docker run -d
docker run 是Docker的命令,用于创建一个新的容器并运行一个命令。
-d 参数表示容器将以“分离模式”运行,即在后台运行。
(2)--name es
--name 参数后面跟的是容器的名称,这里将容器命名为es。
(3)-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
-e 参数用于设置环境变量。
这里设置的环境变量ES_JAVA_OPTS用于调整Elasticsearch的Java虚拟机(JVM)的启动参数。-Xms512m设置JVM的初始堆大小为512MB,-Xmx512m设置JVM的最大堆大小为512MB。
(4)-e "discovery.type=single-node"
同样使用-e参数设置环境变量。
discovery.type=single-node是Elasticsearch的配置,表示Elasticsearch将以单节点模式运行。这在开发或测试环境中很常见,但在生产环境中通常不推荐,因为缺乏高可用性和数据冗余。
(5)-v es-data:/usr/share/elasticsearch/data
-v 参数用于创建数据卷。
这里创建了一个名为es-data的数据卷,并将其挂载到容器内的/usr/share/elasticsearch/data目录。Elasticsearch的数据将存储在这个数据卷中,这样做的好处是即使容器被删除,数据也不会丢失。
(6)-v es-plugins:/usr/share/elasticsearch/plugins
同样使用-v参数创建数据卷。
这里创建了一个名为es-plugins的数据卷,并将其挂载到容器内的/usr/share/elasticsearch/plugins目录。这允许你将Elasticsearch插件安装在数据卷中,而不是容器内部,同样可以保持插件在容器删除后的持久性。
(7)--privileged
--privileged参数给予容器额外的权限,使得容器内的应用可以访问宿主机的设备,并可以执行一些通常需要较高权限的操作。这对于Elasticsearch这样的应用可能是必要的,因为它可能需要访问宿主机的一些资源。
(8)--network es-net
--network参数用于指定容器要连接的网络。
这里指定容器连接到名为es-net的Docker网络。这允许容器之间的网络通信,适用于需要相互通信的服务。
(9)-p 9200:9200和-p 9300:9300
-p 参数用于端口映射。
这里将容器内的9200、9300端口映射到宿主机的9200、9300端口。9200端口是Elasticsearch的HTTP API端口,用于RESTful通信。9300端口是Elasticsearch的节点间通信端口,用于集群内部通信。
(10)elasticsearch:7.12.1
这是要运行的Docker镜像的名称和标签。
这里使用的是elasticsearch镜像,版本为7.12.1。Docker会从Docker Hub(或其他配置的镜像仓库)下载这个镜像(如果本地没有的话),并基于它启动容器。
综上所述,这个命令启动了一个名为es的Elasticsearch容器,配置了JVM参数、以单节点模式运行、使用数据卷存储数据和插件、拥有较高的权限、连接到特定的Docker网络,并映射了9200和9300端口供外部访问。
启动后效果:
此时我们在浏览器输入http://ip:9200/,就可以看到如下界面(这里的ip是你的Linux虚拟机或服务器的ip):
里面包含了版本信息和服务启动时间,此时说明咱们的elasticsearch已经安装并启动成功。
5、安装Kibana
kibana可以给我们提供一个elasticsearch的可视化界面,便于我们学习。
运行docker命令,部署kibana
docker run -d \--name kibana \-e ELASTICSEARCH_HOSTS=http://es:9200 \--network=es-net \-p 5601:5601 \
kibana:7.12.1
●--network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
●-e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
●-p 5601:5601:端口映射配置
效果:
kibana启动一般比较慢,需要多等待一会,可以通过命令:
docker logs -f kibana
查看运行日志,当查看到下面的日志,说明成功:
此时,在浏览器输入地址访问:http://ip:5601,即可看到结果(这里的ip是你的Linux虚拟机或服务器的ip):
这里就是Kibana的首页,下面有两种操作模式,一种是“Add Data”导入数据进行试用,一种是“Explore on my own”自己玩。这里我们选择自己玩:
进入“Explore on my own”后,在右上角可以看到“Manage”按钮,是用于管理的,而“Dev tools”即是开发工具。当然我们也可以点击左侧的三个横线,打开主菜单:
这些菜单牵扯到es的各种各样的管理,包括数据分析、外观、安全管理等等。
我们先来用一下Dev tools这个工具:
这是一个DLS(Elasticsearc的查询语句格式)的控制台,它可以让我们非常方便的去发送DLS的请求:
默认在左侧显示的json语句,就是我们的DSL语句。这个语句的含义是“查询所有的数据”。而第一句中的“GET”代表的是我们发送的是一个RESTful风格的HTTP的GET请求,“_search”代表我们要做的是搜索操作。
如果我们点击播放的小按钮,Kibana就会发送左侧的DSL语句给es服务(Kibana之所以知道es服务的地址,是因为在前面我们启动Kibana的时候,已经通过“ELASTICSEARCH_HOSTS”参数指定了es的访问地址)。点击后效果:
可以看到右侧已经有es的反馈结果了,搜到了很多数据信息。
如果我们直接GET一个“/”空路径,那么它输出的结果,就和我们安装好es直接在浏览器上访问的结果一样:
还剩下一个IK分词器没安装,我们在下一篇博文中单独进行讲解。
参考:《黑马Elasticsearch全套教程》
转载请注明出处:https://guangzai.blog.csdn.net/article/details/144490516
相关文章:
【Elasticsearch入门到落地】4、Elasticsearch的安装
接上篇《3、es与mysql的概念对比》 上一篇我们学习了Elasticsearch与Mysql的概念与区别。本篇我们来进行Elasticsearch的环境准备及软件安装。 一、环境准备 如果我们没有自己的Linux服务器,且现在正在使用的是Windows操作系统的电脑,那么首先我们需要安…...
如何在谷歌浏览器中开启安全浏览
在数字化时代,网络安全变得愈发重要。作为全球最受欢迎的网络浏览器之一,谷歌浏览器提供了多种功能来保护用户的在线安全。本文将详细介绍如何在谷歌浏览器中开启安全浏览,并额外提供一些有用的页面滚动设置、地址栏快捷搜索和跟踪防护的相关…...
短视频矩阵贴牌:打造品牌新势力的策略与实践
在数字化浪潮席卷全球的今天,短视频以其独特的魅力迅速崛起,成为连接用户与品牌的重要桥梁。企业为了快速抢占市场,提升品牌影响力,纷纷探索短视频矩阵贴牌这一新兴模式。本文将深入探讨短视频矩阵贴牌的概念、优势、实施流程及注…...
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
目录 一、前言 二、Spring Boot 简介 三、Spring Boot 核心模块 四、Spring Boot 项目实战:构建一个简单的 RESTful API 1. 创建 Spring Boot 项目 2. 配置数据库 3. 创建实体类 4. 创建 JPA 仓库接口 5. 创建服务层 6. 创建控制器层 7. 测试 API 8. 运…...
linux basics
本篇文章旨在为网络安全初学者介绍linux操作系统基础。通过阅读本文,读者将能够对linux系统有一个初步的了解 一、openssl 1、命令: openssl passwd -1 123 -l参数指定使用MD5加密算法对密码"123"进行加密处理。MD5是一种常用的哈希算法,它将…...
[OpenGL] Transform feedback 介绍以及使用示例
一、简介 本文介绍了 OpenGL 中 Transform Feedback 方法的基本概念和代码示例。 二、Transform Feedback 介绍 1. Transform Feedback 简介 根据 OpenGL-wiki,Transform Feedback 是捕获由顶点处理步骤(vertex shader 和 geometry shader࿰…...
pytorch_fid 安装笔记
目录 torch安装: pytorch_fid安装 torch安装: pip install torch2.5.0 --index-url https://download.pytorch.org/whl/cu121 pytorch_fid安装 pip install pytorch_fid 安装后,torch也会自动安装,导致torch引用报错。...
SAM大模型实践(一)
参考着segment-geospatial 项目主页的介绍,尝试复现一下Example-satallite的案例。 Satellite - segment-geospatialhttps://samgeo.gishub.org/examples/satellite/ 过程当中遇到了一些坑给大家做点分享,主要有几种情况,一个是torch…...
数据结构 ——前缀树查词典的实现
数据结构 ——前缀树查词典的实现 一、前缀树的概念 前缀树是一种多叉树结构,主要用于存储字符串。每个节点代表一个字符,路径从根节点到叶节点表示一个完整的字符串。前缀树的关键特征是 共享前缀,也就是说,如果两个字符串有相…...
边缘智能创新应用大赛获奖作品系列一:智能边缘计算✖软硬件一体化,开启全场景效能革命新征程
边缘智能技术快速迭代,并与行业深度融合。它正重塑产业格局,催生新产品、新体验,带动终端需求增长。为促进边缘智能技术的进步与发展,拓展开发者的思路与能力,挖掘边缘智能应用的创新与潜能,高通技术公司联…...
修改ubuntu apt 源及apt 使用
视频教程:修改ubuntu apt 源和apt 使用方法_哔哩哔哩_bilibili 1 修改apt源 1.1 获取阿里云ubuntu apt 源 https://developer.aliyun.com/mirror/ubuntu?spma2c6h.13651102.0.0.3e221b11mqqLBC 1.2 修改apt 源 vim /etc/apt/sources.list deb https://mirrors.aliyun.com/ub…...
Kafka 磁道寻址过程详解
前言 Apache Kafka 是一款高吞吐、分布式的消息流平台,广泛应用于实时数据处理和事件驱动系统。在 Kafka 中,消息是存储在磁盘上的,这种高效的数据读写性能得益于 Kafka 独特的磁盘存储架构和寻址机制。本文将从 Kafka 的存储结构、磁道寻址…...
GEE+本地XGboot分类
GEE本地XGboot分类 我想做提取耕地提取,想到了一篇董金玮老师的一篇论文,这个论文是先提取的耕地,再做作物分类,耕地的提取代码是开源的。 但这个代码直接在云端上进行分类,GEE会爆内存,因此我准备把数据下…...
安防监控Liveweb视频汇聚融合平台助力执法记录仪高效使用
Liveweb平台可接入的设备除了常见的智能分析网关与摄像头以外 ,还可通过GB28181协议接入执法记录仪,实现对执法过程的全程监控与录像,并对执法轨迹与路径进行调阅回看。那么,如何做到执法记录仪高效使用呢? 由于执法记…...
酷盾安全:Edge SCDN边缘安全内容分发网络
在当今数字化迅猛发展的时代,互联网内容分发的高效与安全成为了企业不可忽视的重要课题。为了满足这一需求,酷盾安全推出了创新的Edge Secure Content Delivery Network(Edge Scdn)解决方案,它不仅融合了分布式DDoS防护…...
决策引擎技术
决策引擎(Decision Engine)是一种用于自动化决策过程的软件系统。它通常用于处理复杂的业务逻辑,根据输入的数据和预定义的规则或模型来做出决策。决策引擎在许多领域都有广泛的应用,如金融、保险、医疗、供应链管理等。 在Java中…...
Servlet学习中遇到的一些问题及解决
错误:JavaWeb-错误:类xxx不是Servlet 解决:可能是Tomcat版本不匹配导致,更换Tomcat版本解决问题 错误:在自定义的Servlet类中不能添加 WebServlet 注解 解决:可能是WebServlet版本不匹配,更换…...
oracle开窗函数笔记、over()笔记
文章目录 开窗函数、组函数、分析函数概念聚合函数和分析函数的区别partition by后面也可以跟多个字段 开窗函数一定要加 聚合函数、或分析函数吗,否则会报错lag()和lead()的用法lag和lead实战开窗函数可以和其他函数一起使用吗? TODO开窗函数中的count(1)是什么意…...
深度学习面试相关-2024.12.15记录
深度学习 面试相关- 2024.12.15记录 目录 深度学习 面试相关- 2024.12.15记录整体常问问题1数学基础1.1 概率统计1.2 线代 2机器学习算法2.1 深度学习算法2.2 机器学习算法 整体常问问题 https://www.nowcoder.com/discuss/353154899112304640 1数学基础 1.1 概率统计 htt…...
CSS|07 标准文档流
标准文档流 一、什么是标准文档流 在制作的 HTML 网页和 PS 画图软件画图时有本质上面的区别: HTML 网页在制作的时候都得遵循一个“流的规则:从左至右、从上至下。 使用 Ps 软件画图时可以在任意地方画图。 <!DOCTYPE html> <html lang"en"> <hea…...
1 JVM JDK JRE之间的区别以及使用字节码的好处
JDK jdk是编译java源文件成class文件的,我们使用javac命令把java源文件编译成class文件。 我们在java安装的目录下找到bin文件夹,如下图所示: 遵循着编译原理,把java源文件编译成JVM可识别的机器码。 其中还包括jar打包工具等。主要是针对…...
ubuntu安装8812au驱动却无法加载网卡的问题
驱动GIT地址 https://github.com/aircrack-ng/rtl8812au按照里面提示安装驱动 输入 sudo dkms status查看驱动是否安装成功 接入网卡,看看ifconfig能否输出网卡 如果不行 使用sudo dmesg -w插拔网卡看看输出 如果输出为: load module with unavailable key is …...
Eureka学习笔记-服务端
Eureka学习笔记 服务端 模块设计 Resources :这部分对外暴露了一系列的 Restful 接口。Eureka Client 的注册、心跳、获取服务列表等操作都需要调用这些接口。另外,其他的 Server 在同步 Registry 时也需要调用这些接口。Controller :这里提…...
LangChain
文章目录 一、LangChain 是什么?二、核心概念1. LLM Wrappers2. Prompt Templates3. Indexes4. Chains5. Agents 三、工作流程四、应用场景示例一:简单的语言模型调用示例二:使用Prompt Templates(提示模板)示例三&…...
搭建分布式Hive集群
title: 搭建分布式Hive集群 date: 2024-11-29 23:39:00 categories: - 服务器 tags: - Hive - 大数据搭建分布式Hive集群 本次实验环境:Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3、Mysql-5.7.38、Hive-3.1.2 功能规划 方案一(本地运行模…...
Scala的惰性求值:深入理解与实践
在编程中,我们经常需要处理那些计算成本高昂或者可能永远不会用到的值。在这种情况下,惰性求值(Lazy Evaluation)是一种非常有用的策略。它允许我们推迟计算,直到这些值真正需要被使用。Scala,作为一种多功…...
游戏引擎学习第54天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们现在正专注于在游戏世界中放置小实体来代表所有的墙。这些实体围绕着世界的每个边缘。我们有活跃的实体,这些实体位于玩家的视野中,频繁更新,而那些离玩家较远的实体则以较低的频率运…...
QT绘制同心扇形
void ChartForm::paintEvent(QPaintEvent *) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置抗锯齿painter.save();// 设置无边框(不需要设置QPen,因为默认是不绘制边框的)QPen pen(Qt::NoPen);// QPen pen…...
梳理你的思路(从OOP到架构设计)_浅尝架构师的滋味02
目录 1、 App开发者的职责:买主提供需求知识,App开发者帮他写代码 撰写的代码 撰写代码,将装配(扩充)到 2、 从生活中体会 基於軟硬整合觀點“两种知识” 编辑 1、 App开发者的职责:买主提供需求知识,App开发者帮…...
使用VLC 搭建 RTSP 服务器
第一步:打开 VLC ,媒体--->流 第二步:添加一个选择本地的文件,然后点击选择"串流" 第三步:确认你选择的文件,然后点击下一个 第四步: 配置 选择的视频文件使用哪种 流输出…...
什么是大型语言模型
大型语言模型简介 大型语言模型 (LLM) 是一种深度学习算法,可以使用非常大的数据集识别、总结、翻译、预测和生成内容。 NVIDIA 开发者计划 想要了解有关 NIM 的更多信息?加入 NVIDIA 开发者计划,即可免费访问任何基础设施云、数据中心或个…...
游卡,科锐国际,蓝禾,汤臣倍健,顺丰,途游游戏25秋招内推
游卡,科锐国际,蓝禾,汤臣倍健,顺丰,途游游戏25秋招内推 ①科锐国际25届秋招补录 人力资源类岗位,补录城市:上海,苏州,锦州;全日制公办本科及以上 25届应届毕业…...
Linux -- 线程控制相关的函数
目录 pthread_create -- 创建线程 参数 返回值 代码 -- 不传 args: 编译时带 -lpthread 运行结果 为什么输出混杂? 如何证明两个线程属于同一个进程? 如何证明是两个执行流? 什么是LWP? 代码 -- 传 args&a…...
【Linux】Linux内核启动流程分析
Linux 内核的启动流程要比 uboot 复杂的多,涉及到的内容也更多,因此我们大致的了解一下Linux 内核的启动流程即可。 Linux启动流程 启动过程可以分为以下几个主要步骤: 1.引导加载程序(Bootloader)阶段 Linux 内核的…...
【uniapp蓝牙】基于native.js链接ble和非ble蓝牙
【uniapp蓝牙】基于native.js链接ble和非ble蓝牙 uniapp不是仅支持低功耗蓝牙(基础蓝牙通讯不支持),有些可能需要基础蓝牙。我现在同步我的手机蓝牙列表低功耗,基础蓝牙都支持 /*** author wzj* 通用蓝牙模块封装* 搜索 ble 和非…...
OpenGL ES 03 加载3张图片并做混合处理
OpenGL ES 02 加载3张图片并做混合处理 什么是纹理单元纹理单元的作用使用纹理单元的步骤详细解释加载图片并绑定到到GPU纹理单元采样器的设置1.设置采样器变量的纹理单元编号,目的是为了告诉纹理采样器,从哪个纹理单元采集数据2.如果你没有显式地设置采…...
c++数据结构算法复习基础--13--基数算法
基数排序 - 桶排序 时间复杂度 O(n*d) – d为数据的长度 每次比较一位(个位、十位。。。),所以取值范围就为0-9。 根据该特点,设计桶的概念 – 0号桶、1号桶… 1、思想 1)找出最长的数字,确定要处理的…...
基于YOLOv5的行人与帽子检测与识别说明文档
基于YOLOv5的行人与帽子检测与识别说明文档 1. 任务的内容和目标 1.1 任务目标 在计算机视觉领域,头盔检测至关重要,主要用于判定图像或视频里的人是否佩戴头盔。于工业生产、建筑工地、交通出行(如摩托车与自行车骑行)等高危场…...
Mybatis——(2)
2.2 Mybatis 工具类(了解) 为了简化MyBatis的开发,可将MyBatis进一步封装。 import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apa…...
QT笔记- QSystemTrayIcon系统托盘功能完整示例
1. 创建托盘对象 // 创建托盘图标QSystemTrayIcon * trayIcon new QSystemTrayIcon(this);QIcon icon("://icon/test.png");trayIcon->setIcon(icon);trayIcon->show();trayIcon->connect(trayIcon, &QSystemTrayIcon::activated,this, &MainWindo…...
ElasticSearch08-分析器详解
零、文章目录 ElasticSearch08-分析器详解 1、分析器原理 Elasticsearch的分词器(Analyzer)是全文搜索的核心组件,它负责将文本转换为一系列单词(term/token)的过程,也叫分词。 (1ÿ…...
指针的深入讲解
本章重点: 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数 我们在指针的初阶的时候主要讲了: 1.指针就是变量,用来存放地址,地址唯一标识一块内存空间 2.指针的大小是固定4个…...
王佩丰24节Excel学习笔记——第十二讲:match + index
【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章小技巧】 vlookup与match,index 相结合使用match,index 结合,快速取得引用的值扩展功能,使用match/index函数,结合照相机工具获取照片 一、回顾…...
概率论得学习和整理28:用EXCEL画折线图,X轴数据也被当成曲线的解决办法
目录 1 折线图和散点图,对数据的处理差别 1.1 EXCEL画图的一些默认设置 1.2 多于2列的数据,也是如此 2 如果我们非要以第1列数据为X轴,做一个折线图呢?也能 2.1 首先,把第1列,想当成X轴的数据…...
387. 字符串中的第一个唯一字符
1,题目 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 2,代码 class Solution { public:int firstUniqChar(string s) {//记数排序int coutArr[26] {0};//统计字符出现…...
Oracle RAC最佳实践-优化私网连接
在 Oracle RAC 环境中,私网(Interconnect) 是节点之间通信和数据传输的关键部分。一直有个误解,认为私网(心跳网)只要能通随便什么交换机都可以,甚至有直连的,实际上私网的性能至关重要…...
[bug] StarRocks borker load意向之外的bug
意向之外,又清理之中 背景: StarRocks各方面碾压相同类型的数据库,最近我们要从生成HIVE导历史数据(ORC格式)到StarRocks,前期小测一下,在测试是没问题,上生产先导2个月的数据&…...
游戏AI实现-寻路算法(Dijkstra)
戴克斯特拉算法(英语:Dijkstras algorithm),又称迪杰斯特拉算法、Dijkstra算法,是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程: 1.首先设置开始节点的成本值为0,并将…...
9 OOM和JVM退出。OOM后JVM一定会退出吗?
首先我们把两个概念讲清楚 OOM是线程在申请堆内存,发现堆内存空间不足时候抛出的异常。 JVM退出的条件如下: java虚拟机在没有守护线程的时候会退出。守护线程是启动JVM的线程,服务于用户线程。 我们简单说下守护线程的功能: 1.日志的记录…...
Linux 端口操作
安装netstat yum -y install net-tools 检测端口占用 netstat -npl | grep "端口" 安装lsof lsof yum -y install lsof 检测端口占用 lsof -i :端口号 安装nc yum -y install nc 查看对方端口是否开放 nc -vz 对方ip 对方端口 安装telnet telnet yum -y in…...