Spring Cloud(十五):微服务自动化部署 DevOps CI/CD、Maven打包、ELK日志采集

news2024/9/20 18:29:32
  • DevOps CI/CD
    • Gitlab(免费版和收费版)
    • Jenkins
    • 基于GitLab+Jenkins快速实现CI\CD
  • 后端项目打包以及部署方式
    1. spring-boot-maven-plugin
    2. maven-dependency-plugin
    3. maven 官网插件
    4. maven-jar-plugin
    5. 上传jar包到maven私服
  • ELK 日志采集
    • 使用FileBeat+Logstash+ES实现分布式日志收集
    • 使用 maven(logstash-logback-encoder) + Logstash +ES实现分布式日志收集

DevOps CI/CD

DevOps:

  • 即Development (开发) 和Operations(运维)的组合词, 是一组过程、方法与系统的统称, 用于促进开发应用程序或软件工程、技术运营和质量保障QA部门之间的沟通、协作与整合

CI/CD:

  • CI指的是持续集成Continuous Integeration,他是开发人员的自动化过程。成功的CI意味
    着人员同的新代码变更会定期构建、测试并合并到共享存储库(比如Git或者SVN)
  • CD指的是持续交付 Continuous Delivery和持续部署Continuous Deployment。成功的CD意味着运维人员可以从共享存储
    库中持续获取到最新的产品副本,并确保最新的产品副本可以正确更新到服务器上。

Gitlab(免费版和收费版)

  • GitLab是企业中最为常用的私有代码仓库解决方案
  • GitLab是一个开源项目,分为免费的ce社区版和收费的ee企业版
  • GitLab需要部署非常多的后台服务,通常建议单机内存不要低于4G。如果配置太低的话,会出现很多奇怪的问题
  • Linux服务器需要提前安装几个服务 yum install -y curl policycoreutils-python openssh-server 。如果已经安装了,这一步可以省略。
  • 获取GitLab安装包。社区版的GitLab下载地址https://packages.gitlab.com/gitlab/gitlab-ce。电商项目中采用的Linux服务器,就可以选择下载gitlab-ce-15.1.0-ce.0.el7.x86_64.rpm
  • 安装GitLab 执行 rpm -Uvh gitlab-ce-15.1.0-ce.0.el7.x86_64.rpm 开始安装
  • 安装完成后,第一次运行GitLab前,需要执行一次配置初始化操作。 gitlab-ctl reconfig 这个过程耗时比较长
  • 使用gitlab-ctl指令来操作gitlab服务
    gitlab-ctl reconfigure 重新配置gitlab。
    gitlab-ctl start 启动gitlab
    gitlab-ctl stop 停止gitlab
    gitlab-ctl restart 重启gitlab
    gitlab-ctl status 查看gitlab服务状态
    gitlab-ctl tail 查看gitlab服务日志。
  • 服务启动完成后,就可以访问gitlab服务了。默认的服务端口就是80端口。默认的用户名和密码是
    root/123456(通常建议登录后立即修改默认密码)
  • 可以修改访问的地址和端口(默认本机才可以访问),修改/etc/gitlab/gitlab.rb配置文件,修改其中的 external_url属性即可

Jenkins

Jenkins是企业最常用的一个自动化部署软件。下载地址为https://www.jenkins.io/download/
建议下载LTS(长期支持)版本的war包部署jenkins.war

  • 需要安装JDK - Jenkins运行需要JDK环境支持,目前Jenkins建议使用JDK11版本。
  • 启动Jenkins - 启动指令 nohup java -jar jenkins.war --httpPort=8080 & 端口默认就是8080端口
  • 第一次启动的过程中,Jenkins会在日志文件中打印默认的admin用户密码 xxxxxxxxxxxxxxxxxxxxxxx
  • 启动完成后,就可以访问Jenkins的前台管理页面http://x.x.x.x:8080/ 第一次访问时,前端页面会引导进行一些初始化工作。例如,需要输入admin用户的默认密码,这个密码就在启动日志当中。
  • 引导安装一些插件,后续也可以再安装插件
  • 插件管理页面 Manage Jenkins-> Manage Plugins 包括Git 、Git client、NodeJS Plugin、Maven integration plugin、 Localization:Chinese(Simplified)中文插件
  • 下载完成后有些插件需要重启才能生效。Jenkins重启的方式是直接在浏览器上访问restart接口
  • 要配置几个基础的组件
    • 进入Mange Jenkins->Global ToolConfiguration页面需要对Maven、Git和NodeJS组件进行配置
    • 用yum -install git 安装git客户端
    • Maven和NodeJS插件,可以去官网上下载对应的压缩包,解压后,将bin子目录配置到环境变量中

基于GitLab+Jenkins快速实现CI\CD

  1. 创建一个Maven项目
  2. 配置项目构建及部署过程
  3. 源码管理部分配置对应的git仓库地址、git用户名密码、git分支
  4. 构建触发器 – 可以选配置Poll SCM选项。这个选项可以定时扫描Git代码仓库
  5. 构建环境部分建议选择一下JDK版本
  6. Build部分,就可以选择需要执行的编译脚本
    • Root Pom pom.xml
    • pacakge -Dmaven.test.skip=true 类似 mvn package -Dmaven.test.skip=true
    • 如果是前端项目,就需要用Nodejs的npm run build指令来构建
  7. 构建完成之后,就会在后端项目的各个模块的target目录下生成可执行的包。这时,可以选择用
    Jenkins将这些Jar包分发到远程服务器上,并直接运行
    • ssh server 目标服务器
    • transfers set soruce files 执行Jar地址。从目标根路径开始查找 xx/tarter/xx-exec.jar
    • remove prefix 不要前缀。表示只传对应的jar包 xx/tarter
    • remove directory 远程服务器的目标地址 /xxx
    • exec command 在远端服务器执行的启动脚本
      • 后端
        ps -ef | grep *demo* | grep -v grep | awk '{print $2}' | xargs kill -9
        nohup java -jar ../../xx-exec.jar > /app/xxx/xxx.log 2 > &1 %
        
      • 前端
        nginx -s reload
        
  8. 代码质量检测 Blue Ocean插件
  9. 任务流水 Pepeline
  10. MeterSphere完成自动化接口测试
  11. 或者搭建SonarQube服务,并通过jenkins集成。这样就可以使用SonarQube服务来进行代码质量检测
  12. 集成Docker,进行虚拟化部署

后端项目打包以及部署方式

1. spring-boot-maven-plugin 这样打出来的Jar包, 所有的依赖都打在了一个包中, 包太大, 但是可以直接使用Java -jar指令执行 。这么大的Jar包,编译会很耗时,并且在网络中传输非常麻烦, 其实大部分依赖包是不会变的jdbc,mybatis等

在这里插入图片描述

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<version>2.3.12.RELEASE</version>
	<executions>
	    <!-- 不排除repackage, 打包会多大一次 将原始Maven打包的jar重命名为XXX.jar.original作为原始文件 
	    包含:类文件和配置文件,还会包含应用所依赖的jar包以及Springboot启动相关类(loader等),以此来满足Springboot独立应用的特性 -->
		<execution>
			<goals>
				<goal>repackage</goal>
			</goals>
		</execution>
	</executions>
	<!-- 解决运行包不能被其他包依赖的问题 -->
	<configuration>
		<classifier>exec</classifier>
	</configuration>
</plugin>

2. maven-dependency-plugin 可以将所有依赖的jar包都放到export文件夹中target目录下的jar包只包含当前项目的源码,文件大小就会小很多

  • 当前项目的源码
    在这里插入图片描述
  • 依赖的jar包
    在这里插入图片描述
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
     <version>2.10</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <!-- 将依赖包放入export文件夹 -->
                <outputDirectory>export</outputDirectory>
                <excludeTransitive>false</excludeTransitive>
                <stripVersion>true</stripVersion>
            </configuration>
        </execution>
    </executions>
</plugin>
  • 如何部署 java -cp 指定Classpath 和 启动类 & 新增依赖通过工具 rsync
#!/bin/sh

#执行jar包
RUN_LIBS=""

#依赖jar包 自行制定目录
SUPPORT_LIBS=""
RUN_LIB_PATH="/app/lib"
SUPPORT_LIB_PATH="/app/support"

#加载程序包
for i in ${RUN_LIB_PATH}/* ; do
  RUN_LIBS=${RUN_LIBS}:$i
done

#加载依赖包
for i in ${SUPPORT_LIB_PATH}/* ; do
  SUPPORT_LIBS=${SUPPORT_LIBS}:$i
done

#整合classpath
CLASSPATH=${RUN_LIBS}:${SUPPORT_LIBS}
export CLASSPATH

#调用java指令执行。-D输入参数 java中可以用 System.getProperties读取。同时指定执行入口类 SpringBootApplication 这是一个典型的Springboot的执行方式。
java -Xdebug -Xnoagent -Djava.compiler=NONE - Xrunjdwp:transport=dt_socket,server=y,address=27899,suspend=n -cp $CLASSPATH - Dspring.profiles.active=prod com.demo.DemoAdminApplication -D user.timezone=GMT+08 1>demo-admin.out 2>demo-admin.err & echo Start App Success!

3. maven 官网插件

https://maven.apache.org/plugins/index.html

  • changelog 插件,可以打印出Maven仓库中最近的提交记录
  • checkstyle和pmd插件可以对代码进行静态检查
  • javadoc插件可以打印出项目文档,你还可以用pdf插件,打印出pdf版本的项目文档
  • antrun插件去执行一些ant脚本(老程序员应该对ant很熟悉)
  • pmd 静态代码检查工具 https://maven.apache.org/plugins/maven-pmd-plugin/

pmd可以定义自己的规则 https://maven.apache.org/plugins/maven-pmd-plugin/examples/multi-module-config.html

 <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-pmd-plugin</artifactId>
     <version>3.19</version>
     <executions>
         <execution>
             <phase>package</phase>
             <goals>
                 <goal>aggregate-pmd</goal>
             </goals>
         </execution>
     </executions>
 </plugin>

在这里插入图片描述

在这里插入图片描述

4. maven-jar-plugin 工具包打成一个Jar包 <packaging>jar</packaging>

<modelVersion>4.0.0</modelVersion>
<artifactId>demo-common</artifactId>
<packaging>jar</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
        </plugin>
    </plugins>
</build>

5. maven-jar-plugin 将不同的模块输出到多个不同的jar包当中,而不是所有代码全都输出一个jar包

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.2.2</version>
    <configuration>
        <!-- manifest配置信息 主要是可以配置主执行类。有主执行类,可以用java -jar直接执行。没有的话就需要指定执行类 -->
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>support/</classpathPrefix>
                <mainClass>com.myapp.MyAppApplication</mainClass>
                <!-- 可以按上面的方式自己配置,也可以指定MF文件打包。 -->
                <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>myapp1-jar</id>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <classifier>myapp</classifier>
                <includes>
                    <include>com/myapp/**</include>
                    <include>mybatis/**</include>
                    <include>templates/**</include>
                    <include>*.properties</include>
                    <include>dubbo.xml</include>
                </includes>
            </configuration>
        </execution>
        <execution>
            <id>myapp2-jar</id>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <classifier>myapp2</classifier>
                <includes>
                    <include>com/myapp2/crawler/*</include>
                    <include>com/myapp2/crawler/*</include>
                    <include>com/myapp2/utils/**</include>
                    <include>log4j.properties</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

6. 上传jar包到maven私服 mvn deploy -P release

在distributionManagement中配置snapshot快照库和release发布库地址

 <distributionManagement>
     <repository>
         <id>maven-public</id>
         <name>release</name>
         <url>http://x.x.x.x:8081/repository/maven-releases/</url>
     </repository>

     <snapshotRepository>
         <id>maven-public-snapshot</id>
         <name>snapshot</name>
         <url>http://x.x.x.x:8081/repository/maven-snapshots/</url>
     </snapshotRepository>
 </distributionManagement>

maven ~/.m2/settings.xml

<server>  
  <id>nexus-releases</id>  
  <username>admin</username>  
  <password>admin123</password>  
</server>  
  
<server>  
  <id>nexus-snapshots</id>  
  <username>admin</username>  
  <password>admin123</password>  
</server>  

ELK 日志采集

ELK 架构: https://blog.csdn.net/menxu_work/article/details/126032167

自动化监控 Prometheus、Grafana: https://blog.csdn.net/menxu_work/article/details/125776376

使用FileBeat+Logstash+ES实现分布式日志收集

使用 maven(logstash-logback-encoder) + Logstash +ES实现分布式日志收集

logstash-logback-encoder

<!-- apm-toolkit-logback-1.x -->
<dependency>
	<groupId>org.apache.skywalking</groupId>
	<artifactId>apm-toolkit-logback-1.x</artifactId>
	<version>8.9.0</version>
</dependency>

<dependency>
	<groupId>net.logstash.logback</groupId>
	<artifactId>logstash-logback-encoder</artifactId>
	<version>6.3</version>
</dependency>

net.logstash.logback.appender.LogstashTcpSocketAppender <destination>logstash.localhost.com:5055</destination>

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 控制台 Appender -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志的格式化 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <!-- https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/  -->
    <!-- 通过grpc上报日志到skywalking oap-->
    <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="async" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="console"/>
    </appender>

    <!-- add converter for %tid -->
    <conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter"/>
    <!-- add converter for %sw_ctx -->
    <conversionRule conversionWord="sw_ctx" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackSkyWalkingContextPatternConverter"/>
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>logstash.localhost.com:5055</destination>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                       {
                        "level": "%level",
                        "tid": "%tid",
                        "skyWalkingContext": "%sw_ctx",
                        "thread": "%thread",
                        "class": "%logger{1.}:%L",
                        "message": "%message",
                        "stackTrace": "%exception{10}"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>

    <!-- 设置 Appender -->
    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="grpc-log"/>
        <appender-ref ref="async"/>
        <appender-ref ref="logstash" />
    </root>
</configuration>

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

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

相关文章

使用握手信号实现跨时钟域数据传输(verilog)

大家好&#xff0c;最近汇总了2021年oppo哲库招聘手撕代码题目&#xff0c;本文章一共含有以下几个题目&#xff1a; 一&#xff0c;使用握手信号实现跨时钟域数据传输&#xff08;verilog&#xff09; 二&#xff0c;自动售卖机&#xff08;verilog&#xff09; 三&#xf…

Jenkins执行shell脚本报错:bash: kubectl: command not found

问题描述 搭建好Jenkins之后&#xff0c;通过shell脚本构建k8s应用&#xff0c;但是脚本报错&#xff1a; bash: kubectl: command not found网上找了很多解决办法都不正确&#xff0c;并不适用于我的问题。 先说明&#xff0c;我的Jenkins和k8s各自独立的&#xff0c;不在同…

如何实现自有App上的小程序第三方微信授权登陆?

对于微信小程序来说&#xff0c;有 OpenID 或 UnionID 作为唯一标识&#xff0c;微信授权登陆小程序账号是很容易实现的&#xff0c;但对于其他应用上的小程序来说&#xff08;如支付宝、百度等&#xff09;&#xff0c;打通该登陆方式是比较麻烦的。 之前在FinClip开发了小程…

OPC Expert 最新版 Crack-2022-12-05

使用 OPC Expert 进行故障排除只是开始&#xff01;像专业人士一样解决您的 OPC 和 DCOM 连接问题&#xff01; 快速修复 OPC 和 DCOM 错误&#xff1a;使用 OPC Expert&#xff0c;您无需任何经验即可解决和修复 OPC 连接问题。OPC Expert 为您完成繁重的工作&#xff0c;以快…

excel根据颜色赋值 Excel填充颜色单元格替换成数字 excel把所有红色变成1

法/步骤 案例中&#xff0c;周一到周五产生倒班的&#xff0c;是用橙色标识的。周六周日的倒班是用蓝色标识的。然后&#xff0c;我们要将橙色的单元格替换成数字30&#xff0c;蓝色的单元格替换成数字50&#xff0c;分别代表30元和50元的倒班费。 使用快捷键CtrlH进入替换对…

如何把小程序游戏运行到自有App中?(IOS篇)

千呼万唤始出来&#xff01;FinClip 终于支持小游戏了。 我们团队算是 FinClip 的老用户了&#xff0c;年初就向官方提出了希望 FinClip 支持微信小游戏的建议。随着前段时间 “羊了个羊” 微信小游戏的爆火&#xff0c;官方也把小游戏支持提上了日程&#xff0c;近期官方开启…

[附源码]JAVA毕业设计时间管理系统(系统+LW)

[附源码]JAVA毕业设计时间管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

通过Node + SSE 做了一个构建日志推送

1.注册页是什么 当我们使用一个从未使用过的网站时,想要注册账号,点击注册账号时看到的网页就是注册页> 注册页例子如下: 我们看到以下的注册页中,有两大类信息: 第一大类是用户信息类,> 包括用户名,密码和email,他们都有自己的 取值规则 ,例如用户名显示不得小于3个字符…

哪款TWS耳机音质比较好?音质最好的TWS耳机推荐

现如今&#xff0c;喜欢戴蓝牙耳机听歌的人越来越多&#xff0c;甚至一些高端的蓝牙耳机在音质上可以媲美有线耳机。最近看到很多人问&#xff0c;哪款TWS耳机音质比较好&#xff1f;下面&#xff0c;我来给大家推荐几款音质最好的TWS耳机&#xff0c;可以当个参考。 一、南卡…

jsp社区医院信息系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp社区医院信息系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使用…

将苹果手机数据导入苹果手机苹果?如何传输苹果手机数据

当用户需要将数据传输到苹果手机&#xff0c;应该怎么操作呢&#xff1f;所以&#xff0c;在本文中&#xff0c;易我小编将讲解将苹果手机数据导入苹果手机苹果&#xff1f; 方法1、利用iOS的快速迁移功能 如果是使用版本iOS 12.4及更高版本系统&#xff0c;新手机还没进行任何…

博世XC事业部李胤:自动驾驶降温不意外,但这条路肯定会走下去

“&#xff08;今年自动驾驶&#xff09;有些降温&#xff0c;这是正常的。所有的新技术不可能一路发展直上云天&#xff0c;总有坎坷。”2022年11月22日下午&#xff0c;博世智能驾驶与控制事业部&#xff08;以下简称“博世XC事业部”&#xff09;中国区总裁李胤在媒体群访中…

脑电信号分类问题的数据预处理方法

脑电波介绍 脑电波&#xff08;Electroencephalogram, EEG&#xff09;是应用电生理指标来记录大脑活动的方法。大脑在活动时&#xff0c;神经元同步发生突触后电位反应在了头皮表面&#xff0c;研究者将电机放置在被试者的头皮上检测脑电波信号。电机位置大概如下&#xff1a;…

[python] 基于wordcloud库绘制词云图

词云Wordcloud是文本数据的一种可视化表示方式。它通过设置不同的字体大小或颜色来表现每个术语的重要性。词云在社交媒体中被广泛使用&#xff0c;因为它能够让读者快速感知最突出的术语。然而&#xff0c;词云的输出结果没有统一的标准&#xff0c;也缺乏逻辑性。对于词频相差…

Log,SqlServerProfile, EFProfile三种监视EntityFramework中的sql流

大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自己缺乏好的工具去监控sql,本篇给大家介绍的三种监控手段Log和SqlServer profile,ef profi…

QA | SWCF2022 笔记:卫星传输链路中的关键技术分享

2022年度SWCF卫星通信与仿真测试研讨会正在进行中。精彩演讲&#xff1a;卫星传输链路中的关键技术分享&#xff0c;收到一些粉丝的技术问题&#xff0c;我们汇总了热点问题并请讲师详细解答。 主题&#xff1a;卫星传输链路中的关键技术分享 认识卫星通信与传输链路过程 1. …

来看看火爆全网的ChatGPT机器人写的武侠小说,我直呼内行!

作为一个程序员&#xff0c;不免对最近爆火的ChatGPT聊天机器人非常好奇&#xff0c;晚上睡不着觉&#xff0c;经过一番折腾&#xff0c;总算和ChatGPT聊上了。然后突发奇想&#xff0c;让它写武侠小说如何&#xff0c;会让小说家失业吗&#xff1f;结果机器人的反应让我直呼内…

RfDNet 在Ubuntu16下的配置与运行——(二)数据准备与训练

RfDNet 在Ubuntu16下的配置与运行——(二)数据准备与训练 相关博客&#xff1a;RfDNet 在Ubuntu16下的配置与运行——(一)运行Demo 接上篇&#xff0c;现在需要下载数据&#xff0c;官方使用的训练数据为&#xff1a; ScanNet 数据集 Scan2CAD 数据集&#xff1a;Scan2CAD ali…

Linux(常用命令)

(1)目录操作 ls 列出当前目录下都有啥ls / 或者 跟个具体的路径可以查看指定目录的内容ls -l 缩写为 ll 可以以列表的形式展示目录内容pwd 查看当前路径对应的绝对路径 cd / 切换到根目…

Redis缓存篇:高频问题横扫核心知识点,面试高级工程师必备知识体系

文章目录Redis 为什么这么快&#xff1f;到底有多快&#xff1f;基于内存实现高效的数据结构SDS 简单动态字符串优势zipList 压缩列表quicklistskipList 跳跃表整数数组&#xff08;intset&#xff09;单线程模型I/O 多路复用模型Redis 全局 hash 字典Hash 冲突怎么办&#xff…