镜像私服Harbor 2.0安装-探索工厂模式:如何优化Harbor项目管理与API集成

文章目录

    • 一、docker-compose
      • 1. 下载 Docker Compose:
      • 2.添加执行权限:
      • 3.验证安装
    • 二、安装harbor 2.0
      • 1.下载harbor离线包
      • 2. 根据需求配置 Harbor
      • 3.给harbor创建SSL证书
      • 4.预编译harbor
      • 5. 安装并启动 Harbor (必须到你安装的目录)
    • 三、登录harbor的web页面
    • 四、harbor的启动和停止
    • 五、harbor的使用
    • 六、 探索工厂模式:如何优化Harbor项目管理与API集成
        • 步骤1:创建Harbor服务和工厂类
          • Harbor服务类 HarborService.java
          • Harbor应用工厂类 HarborApplicationFactory.java
        • 步骤2:Harbor客户端工厂和API请求类
          • Harbor客户端工厂类 HarborClientFactory.java
          • Harbor 2.0.x版本客户端工厂类 HarborClientFactory20X.java
        • 步骤3:HarBorControlle

一、docker-compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过一个配置文件(通常是 docker-compose.yml)来定义应用的服务、网络和卷,并使这些服务能够在单个命令中启动和停止 。

在实际生产环境中,一个应用往往由许多服务构成,而 docker 的最佳实践是一个容器只运行一个进程,因此运行多个微服务就要运行多个容器。多个容器协同工作需要一个有效的工具来管理他们,定义这些容器如何相互关联。compose 应运而生。compose 是用来定义和运行一个或多个容器(通常都是多个)运行和应用的工具。使用 compose 可以简化容器镜像的构建以及容器的运行。compose 使用 YAML 文件来定义多容器之间的关系。一个 docker-compose up 就可以把完整的应用跑起来。 本质上, compose 把 YAML 文件解析成 docker 命令的参数,然后调用相应的 docker 命令行接口,从而将应用以容器化的方式管理起来。它通过解析容器间的依赖关系顺序地启动容器。而容器间的依赖关系由 YAML 文件中的 links 标记指定。

1. 下载 Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

这条命令会将 Docker Compose 下载并保存到 /usr/local/bin/docker-compose。
image.png

2.添加执行权限:

sudo chmod +x /usr/local/bin/docker-compose

3.验证安装

docker-compose --version
docker-compose version 1.29.2, build 5becea4c

二、安装harbor 2.0

Harbor是一个开源的企业级Docker Registry,用于存储和分发Docker镜像。它提供了一些额外的安全、身份验证和管理功能,使得在企业环境中更容易管理Docker镜像。您可以通过Harbor来管理镜像的存储、访问控制、安全扫描和复制等功能。

1.下载harbor离线包

可以去https://github.com/goharbor/harbor/releases找到合适的版本下载,或者直接使用这个地址https://github.com/goharbor/harbor/releases/download/v2.0.0/harbor-offline-installer-v2.0.0.tgz 点击它下载下来再传到centos上。
image.png
或者直接在centos上使用命令下

wget -P /usr/local/src/ https://github.com/goharbor/harbor/releases/download/v2.0.0/harbor-offline-installer-v2.0.0.tgz

下载完成后将包上传到服务器的/root/app目录。(你想下载到哪里就放在哪个目录下)

[root@localhost app]#  tar -zxvf harbor-offline-installer-v2.0.0.tgz
harbor/harbor.v2.0.0.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl

[root@localhost app]# ll
总用量 488972
drwxr-xr-x. 2 root root       122 72 11:28 harbor
-rw-r--r--. 1 root root 500705880 624 09:51 harbor-offline-installer-v2.0.0.tgz

2. 根据需求配置 Harbor

解压成功之后进入到harbor目录:

[root@localhost app]# cd harbor
[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml
[root@localhost harbor]# vim harbor.yml

注释:
● hostname写上你要访问的harbor的地址当主机名。
● certificate和private_key是支持HTTPS访问的证书的路径,文件名最好和主机名对应,便于记忆。
● harbor_admin_password是默认的harbor登录的密码
● database-password我猜是默认的harbor数据库密码,默认的是root123,建议改掉。
● data_volume 是数据默认存放目录,即harbor的docker持久化目录默认放在了/data下
或者创建一个

cat > /root/app/harbor/harbor.yml <<EOF
hostname: 192.168.235.130
 
http:
  port: 80
https:
  port: 443
  certificate: /root/app/harbor/certs/192.168.235.130.crt
  private_key: /root/app/harbor/certs/192.168.235.130.key
 
harbor_admin_password: Harbor12345
 
database:
  password: harbor123db
  max_idle_conns: 50
  max_open_conns: 100
 
data_volume: /data
 
clair:
  updaters_interval: 12
trivy:
  ignore_unfixed: false
  skip_update: false
  insecure: false
jobservice:
  max_job_workers: 10
 
notification:
  webhook_job_max_retry: 10
chart:
  absolute_url: disabled
 
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor
_version: 2.0.0
 
proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - clair
    - trivy
EOF

3.给harbor创建SSL证书

没有创建证书的话会502错误

  • 安装openssl证书工具
yum install -y openssl
  • 创建证书存放文件夹
[root@localhost harbor]# mkdir certs
[root@localhost harbor]# cd certs/
  • 生成无加密的根证书私钥(注意一定要进到证书目录)
[root@localhost certs]# openssl genrsa -out ca.key 4096
Generating RSA private key, 4096 bit long modulus
..................................................................++
.......................................++
e is 65537 (0x10001)

使用刚才生成的私钥制作自签名证书(将这里的192.168.235.130替换成你的域名即可)

[root@localhost certs]#  openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=192.168.235.130/OU=192.168.235.130/CN=192.168.235.130" -key ca.key -out ca.crt
[root@localhost certs]# ls
ca.crt  ca.key

生成服务器端自己域名的key(将这里的192.168.235.130替换成你的域名即可)

[root@localhost certs]# openssl genrsa -out 192.168.235.130.key 4096
Generating RSA private key, 4096 bit long modulus
.................................................................................................................................................................................................................++
...............................................................++
e is 65537 (0x10001)

生成服务器端自己域名的CSR签名请求(将这里的192.168.235.130替换成你的域名即可)

openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=harbor.hiibm.com/OU=192.168.235.130/CN=192.168.235.130" -key 192.168.235.130.key -out 192.168.235.130.csr
生成一个 openssl 命令需要的外部配置文件 xexternalfile.ext(将这里的192.168.235.130替换成你的域名即可)
cat > xexternalfile.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=192.168.235.130
EOF

通过外部配置文件 xexternalfile.ext和 csr 生成 crt(将这里的192.168.235.130替换成你的域名即可)

openssl x509 -req -sha512 -days 3650 -extfile xexternalfile.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in 192.168.235.130.csr -out 192.168.235.130.crt

将服务端的 crt 转换成客户端用的 cert(将这里的192.168.235.130替换成你的域名即可)

openssl x509 -inform PEM -in 192.168.235.130.crt -out 192.168.235.130.cert

image.png

4.预编译harbor

cd /root/app/harbor
./prepare

5. 安装并启动 Harbor (必须到你安装的目录)

cd /root/app/harbor
./install.sh

直到看到[✔ ----Harbor has been installed and started successfully.----]才说明harbor安装成功了。
image.png
6.查看docker进程,看harbor是否安装成功

docker ps

image.png
看到一堆包含harbor的docker ps进程
-至此,harbor2.0就安装完成了。

三、登录harbor的web页面

**1. 打开浏览器,访问 http://,使用配置文件中设置的管理员账户(默认用户名为 admin,密码为 Harbor12345)登录到 Harbor 的 Web 界面。 **
image.png
image.png
至此,harbor就彻底安装完成了。

四、harbor的启动和停止

cd /root/app/harbor
 
#停止harbor
docker-compose -f docker-compose.yml down
 
#启动harbor
docker-compose -f docker-compose.yml up -d

五、harbor的使用

  1. 登录Harbor管理界面后,您可以创建项目(Project),用于组织和管理Docker镜像。
  2. 设置项目的访问权限和成员,可以控制谁可以查看、上传和管理镜像
# 登录 用户名密码 admin/Harbor12345
docker login -u admin -p Harbor12345 192.168.235.130  
# 给本地镜像打tag,命令格式如下
docker tag [ImageId] [harbor域名]/[项目名]/[REPOSITORY]:[TAG]
# 上传镜像
docker push [harbor域名]/[项目名]/[REPOSITORY]:[TAG]
eg: docker push 192.168.235.130/wise2c/wisebuild-frontend:harbor-db-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:clair-adapter-photon-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:clair-photon-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:notary-server-photon-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:notary-signer-photon-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:harbor-registryctl-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:registry-photon-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:nginx-photon-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:harbor-log-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:harbor-jobservice-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:harbor-core-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:harbor-portal-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:harbor-db-v2.0.0
docker push 192.168.235.130/wise2c/wisebuild-frontend:prepare-v2.0.0

查看一下 推送成功
image.png
点击复制图标 复制拉取命令

 docker pull 192.168.235.130/wise2c/wisebuild-frontend@sha256:485c21b2cfb96d0213ff1f9a99fe751179078290c6709d247a6e4abf0781fd93

image.png
用户管理:
LDAP集成和OIDC支持:可以集成LDAP或OIDC,管理和认证用户身份。
角色和权限管理:管理用户的角色和权限,以控制其对Harbor功能和资源的访问权限。
仓库管理:
项目和命名空间:创建和管理项目,将镜像组织到命名空间中,便于管理和访问控制。
镜像版本管理:管理镜像的不同版本和标签,支持版本控制和历史记录。
镜像复制:
复制策略:配置镜像复制策略,将镜像同步复制到多个Harbor实例或外部Registry,以提高可用性和冗余性。
标签管理:
标签策略:定义标签策略,管理和限制镜像标签的使用,以维护镜像的一致性和安全性。
项目定额:
资源配额:为每个项目设置资源配额,限制项目可以使用的存储空间和计算资源,以控制资源的分配和使用。
审查服务:
安全扫描服务:集成安全扫描工具,对上传的镜像进行漏洞扫描,并提供漏洞报告和建议修复措施。
垃圾清理:
镜像清理策略:配置镜像保留策略和垃圾清理任务,定期清理过期和未使用的镜像,以节省存储空间并优化性能。
配置管理:
系统配置:管理Harbor的全局设置,包括网络配置、存储后端、SSL证书、日志配置等,以定制化和优化Harbor的运行环境。

六、 探索工厂模式:如何优化Harbor项目管理与API集成

image.png
image.png
image.png
在这个教程中,我们将演示如何使用Java编写代码来访问Harbor的API,并获取特定项目的详细信息。我们将使用Harbor的REST API和Java的HttpClient库进行示例代码编写。
准备工作

  1. 环境要求:

Java开发环境(JDK 8或更高版本)
Maven或Gradle(用于管理依赖)

  1. Harbor实例:

确保您有一个运行中的Harbor实例,并已知道其地址、用户名和密码。

  1. harbor数据库设计

image.png
工厂模式概述
工厂模式是一种常见的创建型设计模式,旨在封装对象的创建过程,使得客户端无需关心具体对象的实例化细节。通过工厂模式,我们可以集中管理对象的创建逻辑,并通过统一的接口或方法提供对象实例。
例分析:Harbor项目管理与API集成
在我们的实例中,我们使用了工厂模式来优化Harbor项目的管理和API集成。具体实现如下:

步骤1:创建Harbor服务和工厂类

首先,我们需要创建一些Java类来管理与Harbor的交互。

Harbor服务类 HarborService.java
import java.util.Optional;

public class HarborService {

    // 根据ID获取Harbor实例
    public Optional<Harbor> harbor(long id) {
        return repository.findById(id); // 假设repository已定义并实现了findById方法
    }

    // 根据Harbor实例ID和项目ID获取项目详细信息
    public Optional<HarborProject> project(long id, int projectId) {
        Optional<Harbor> harbor = harbor(id);

        if (harbor.isPresent()) {
            HarborClientFactory clientFactory = HarborApplicationFactory.getHarborClientFactory(harbor.get());
            return Optional.ofNullable(clientFactory.project(projectId));
        }
        return Optional.empty();
    }
}

Harbor应用工厂类 HarborApplicationFactory.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HarborApplicationFactory {

    private static final Logger logger = LoggerFactory.getLogger(HarborApplicationFactory.class);

    // 根据Harbor版本返回对应的HarborClientFactory实例
    public static HarborClientFactory getHarborClientFactory(Harbor harbor) {
        if (harbor.getVersion().contains("v1.7") || harbor.getVersion().contains("v1.10")) {
            return new HarborClientFactory10X(harbor.getAddress(), harbor.getUsername(), harbor.getPassword());
        }
        if (harbor.getVersion().contains("v2.0") || harbor.getVersion().contains("v2.10")) {
            return new HarborClientFactory20X(harbor.getAddress(), harbor.getUsername(), harbor.getPassword());
        }
        throw new BizRuntimeException(String.format("当前Harbor版本[%s]不支持", harbor.getVersion()));
    }
}

步骤2:Harbor客户端工厂和API请求类

接下来,我们将创建Harbor客户端工厂和API请求类,用于实际调用Harbor的REST API。

Harbor客户端工厂类 HarborClientFactory.java
public abstract class HarborClientFactory {

    protected final String address;
    protected final String username;
    protected final String password;

    public HarborClientFactory(String address, String username, String password) {
        this.address = address;
        this.username = username;
        this.password = password;
    }

    // 定义获取项目详情的抽象方法
    public abstract HarborProject project(long proID);
}

Harbor 2.0.x版本客户端工厂类 HarborClientFactory20X.java
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HarborClientFactory20X extends HarborClientFactory {

    private static final Logger LOGGER = LoggerFactory.getLogger(HarborClientFactory20X.class);
    private static final String PROJECT_PATH_DEFAULT = "/api/v2.0/projects";

    public HarborClientFactory20X(String address, String username, String password) {
        super(address, username, password);
    }

    @Override
    public HarborProject project(long proID) {
        TrustSslUtil.initDefaultSsl(); // 忽略SSL验证,仅用于本地测试环境
        HarborProject project = new HarborProject();
        String url = address + PROJECT_PATH_DEFAULT + "/" + proID;

        ResponseEntity<Project> response;
        try {
            RestTemplate restTemplate = new RestTemplate();
            response = restTemplate.getForEntity(url, Project.class);
        } catch (HttpClientErrorException e) {
            if (e.getStatusCode() == HttpStatus.NOT_FOUND) {
                throw new BizRuntimeException(String.format("未找到项目[%d]", proID));
            }
            throw new BizRuntimeException(String.format("获取项目[%d]失败: %s", proID, e.getMessage()));
        }

        // 将API响应映射到HarborProject对象
        Project projectResponse = response.getBody();
        if (projectResponse != null) {
            BeanUtils.copyProperties(projectResponse, project);
            project.setDeleted(projectResponse.getDeleted() != null && projectResponse.getDeleted());
            project.setBublic(projectResponse.getMetadata().isPublicX());
        }

        return project;
    }
}

应用工厂模式的好处包括但不限于:

  • 封装对象创建逻辑:将具体的对象实例化过程封装在工厂类中,客户端无需了解具体的实现细节。
  • 简化对象的创建和管理:通过统一的接口或方法,简化了对象的创建和管理过程,提高了代码的灵活性和可维护性。
  • 支持多版本和扩展性:通过工厂模式,可以根据不同的需求或版本,选择合适的对象实例化方式,支持系统的扩展和升级。
public class HarborProject implements Serializable {

    @JsonProperty("project_id")
    private int projectId;

    @JsonProperty("owner_id")
    private int ownerId;

    @JsonProperty("name")
    private String name;

    @JsonProperty("creation_time")
    private Date creationTime;

    @JsonProperty("update_time")
    private Date updateTime;

    @JsonProperty("deleted")
    private int deleted;

    @JsonProperty("owner_name")
    private String ownerName;

    @JsonProperty("public")
    private int bublic;

    @JsonProperty("current_user_role_id")
    private int currentUserRoleId;

    @JsonProperty("repo_count")
    private int repoCount;

    @JsonProperty("metadata")
    private HarborAuthority metadata;

    private Long tenantId;

    private String tenantName;
    
  }

步骤3:HarBorControlle
@RestController
@RequestMapping("/api/harbors")
public class HarborController {

    private static final Logger logger = LoggerFactory.getLogger(HarborController.class);

    private final HarborService harborService;

   @Autowired
    public HarborController(HarborService harborService) {
        this.harborService = harborService;
    }
    
   @GetMapping("/{id}/projects/{projectId}")
    @ApiOperation(value = "查询Harbor实例下的项目", tags = "Harbor")
    public Serializable getHarborProject(@PathVariable("id") long id, @PathVariable("projectId") int projectId) {
        Optional<HarborProject> project = harborService.project(id, projectId);
        if (!project.isPresent()) {
            return BizErrorType.RESOURCE_NOT_FOUND;
        }
        return project.get();
    }
  }

BizErrorType 错误类型定义

public enum BizErrorType {
  RESOURCE_NOT_FOUND("12000001", "请求资源未找到"),
}

TrustSslUtil 忽略ssl工具类

package com.wise2c.biz.util;

import javax.net.ssl.*;
import java.net.Socket;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;

/**
 * 忽略证书验证
 */
public class TrustSslUtil {

    public static void initDefaultSsl() {
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            HostnameVerifier hv = (urlHostName, session) -> true;
            TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509ExtendedTrustManager() {
                        @Override
                        public void checkClientTrusted(X509Certificate[]
                                                               x509Certificates, String s) {
                        }


                        @Override
                        public void checkServerTrusted(X509Certificate[]
                                                               x509Certificates, String s) {
                        }


                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }


                        @Override
                        public void checkClientTrusted(X509Certificate[]
                                                               x509Certificates, String s, Socket socket) {
                        }


                        @Override
                        public void checkServerTrusted(X509Certificate[]
                                                               x509Certificates, String s, Socket socket) {
                        }


                        @Override
                        public void checkClientTrusted(X509Certificate[]
                                                               x509Certificates, String s, SSLEngine sslEngine) {
                        }


                        @Override
                        public void checkServerTrusted(X509Certificate[]
                                                               x509Certificates, String s, SSLEngine sslEngine) {
                        }
                    }};
            sc.init(null, trustAllCerts, new SecureRandom());


            SSLContext.setDefault(sc);
            HttpsURLConnection.setDefaultHostnameVerifier(hv);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

image.png
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

哈尔滨如何选择合适的等保测评机构?

选择合适的等保测评机构确实需要细致考虑&#xff0c;您提到的八个方面已经非常全面&#xff0c;涵盖了资质、专业能力、服务质量和合规性等多个关键点。为了进一步确保所选机构的可靠性&#xff0c;还可以考虑以下几点&#xff1a; 1.技术创新与工具&#xff1a;了解测评机构是…

鸿蒙生态应用开发白皮书V3.0

来源&#xff1a;华为&#xff1a; 近期历史回顾&#xff1a;

红酒SPA:享受放松与奢华的很好结合

在繁忙的都市生活中&#xff0c;人们总是渴望找到一片宁静的天地&#xff0c;让疲惫的身心得到很好的放松。而红酒SPA&#xff0c;作为一种不同的放松方式&#xff0c;将红酒的浪漫与SPA的舒适整合&#xff0c;为现代人带来了一场奢华享受。 一、红酒的浪漫与SPA的舒适 红酒&a…

北京网站建设怎么开始做

北京作为中国的首都&#xff0c;拥有众多的企业和机构&#xff0c;网站建设不仅是一种宣传和推广的手段&#xff0c;更是企业发展的必备工具。但是对于很多企业来说&#xff0c;网站建设是一个相对陌生的领域&#xff0c;不知道从哪里开始。今天我们就来谈一谈北京网站建设的步…

算法-位图与底层运算逻辑

文章目录 1. 位图的理论基础2. 完整版位图实现3. 底层的运算逻辑-位运算 1. 位图的理论基础 首先我们要理解什么是位图, 位图的一些作用是什么 位图法就是bitmap的缩写。所谓bitmap&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于大规模数据&#xff0c;但数据状态又…

【HDC.2024】探索无限可能:华为云区块链+X,创新融合新篇章

6月23日&#xff0c;华为开发者大会2024&#xff08;HDC 2024&#xff09;期间&#xff0c; “「区块链X」多元行业场景下的创新应用”分论坛在东莞松山湖举行&#xff0c;区块链技术再次成为焦点。本次论坛以"区块链X"为主题&#xff0c;集结了行业专家、技术领袖、…

fyne的MultiLineEntry设置大小

MultiLineEntry设置大小 在另一篇文章讲过&#xff0c;放入border布局中&#xff0c;可以最大化MultiLineEntry。 这里再介绍另一种方法:SetMinRowsVisible() func (e *Entry) SetMinRowsVisible(count int) {e.multiLineRows counte.Refresh() }SetMinRowsVisible强制mult…

Typora(跨平台 Markdown 编辑器 )正版值得购买吗

Typora 是一款桌面 Markdown 编辑器&#xff0c;作为国人开发的优秀软件&#xff0c;一直深受用户的喜爱。 实时预览格式 Typora 是一款适配 Windows / macOS / Linux 平台的 Markdown 编辑器&#xff0c;编辑实时预览标记格式&#xff0c;所见即所得&#xff0c;轻巧而强大…

Linux kernel 与 设备树

Linux kernel 与 设备树 1 介绍1.1 概述1.2 发展历程1.3 各版本发布时间及特色1.4 Linux 单内核1.5 Linux 内核网址1.6 NXP 官方镜像与 野火 鲁班猫镜像的区别 2 Linux 内核组成2.1 进程管理2.2 内存管理2.3 文件系统2.4 设备管理2.5 网络功能 3 Linux 内核编译3.1 编译 Kernel…

llm学习-2(使用embedding和数据处理)

首先可以简单了解一下向量数据库相关知识&#xff1a; 向量数据库相关知识&#xff08;搬运学习&#xff0c;建议还是看原文&#xff0c;这个只是我自己的学习记录&#xff09;-CSDN博客 补充&#xff1a; 使用embedding API 文心千帆API Embedding-V1是基于百度文心大模型…

【STM32】GPIO复用和映射

1.什么叫管脚复用 STM32F4有很多的内置外设&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的功能引脚&#xff0c;那么当这个GPIO作为内置外设使用的时候&#xff0c;就叫做复用。 STM32F4系列微控制器IO引脚通过一个…

我使用 GPT-4o 帮我挑西瓜

在 5 月 15 日&#xff0c;OpenAI 旗下的大模型 GPT-4o 已经发布&#xff0c;那时网络上已经传开&#xff0c; 但很多小伙伴始终没有看到 GPT-4o 的体验选项。 在周五的时候&#xff0c;我组建的 ChatGPT 交流群的伙伴已经发现了 GPT-4o 这个选项了&#xff0c;是在没有充值升…

仓库管理系统25--数据导出

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、添加用户控件 <UserControl x:Class"West.StoreMgr.View.DataExportView"xmlns"http://schemas.microsof…

《单片机》期末考试复习-学习笔记总结

题型 问答题(15分)编程题(65分)编程题1(20分)编程题2(45分)设计题(20分)一、问答题 1.1.单片机概念和特点 1.2. 51单片机的中断结构 1.3.主从式多机通讯的概念及其工作原理 多机通信是指两台以上计算机之间的数据传输,主从式多机通信是多机通信系统中最简单的一种,…

springboot个体快餐订单系统-计算机毕业设计源码13441

目 录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 个体快餐订单系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 个…

MySQL常用操作命令大全

文章目录 一、连接与断开数据库1.1 连接数据库1.2 选择数据库1.3 断开数据库 二、数据库操作2.1 创建数据库2.2 查看数据库列表2.3 删除数据库 三、表操作3.1 创建表3.2 查看表结构3.3 修改表结构3.3.1 添加列3.3.2 删除列3.3.3 修改列数据类型 3.4 删除表 四、数据操作4.1 插入…

Java UU跑腿同城跑腿小程序源码快递代取帮买帮送源码小程序+H5+公众号跑腿系统

&#x1f680;【同城生活小助手】&#x1f680; &#x1f3c3;‍♂️【同城跑腿&#xff0c;即刻送达的便利生活】&#x1f3c3;‍♀️ 在快节奏的都市生活中&#xff0c;时间成了最宝贵的资源。UU跑腿小程序&#xff0c;作为同城生活的得力助手&#xff0c;让你轻松解决生活…

校园卡手机卡怎么注销?

校园手机卡的注销流程可以根据不同的运营商和具体情况有所不同&#xff0c;但一般来说&#xff0c;以下是注销校园手机卡的几种常见方式&#xff0c;我将以分点的方式详细解释&#xff1a; 一、线上注销&#xff08;通过手机APP或官方网站&#xff09; 下载并打开对应运营商的…

百度AI使用-图像文字识别

前言 百度AI接口可以免费试用&#xff0c;本文描述如何申请使用该资源&#xff0c;以及在QT-Demo下使用百度AI接口&#xff0c;实现图像文字识别功能。 一、百度AI资源申请使用 1.浏览器访问&#xff1a;https://apis.baidu.com&#xff0c; 注册百度智能云账号 2.可以购买试…

AI的价值——不再那么“废”人,保险行业用AI人员流失减少20%

最近有个热点挺让人唏嘘的&#xff0c;某咖啡店员工对顾客泼咖啡粉&#xff0c;我们对于这个事件不予评价。但是对员工这种情绪崩溃&#xff0c;我们所接触的行业中也有不少例子&#xff0c;比如保险行业&#xff0c;相信大家经常会被打保险电话&#xff0c;这类电话很容易就被…