代码管理系统简介与部署

目录

  • 版本控制
      • 1:版本控制概念
      • 2:版本控制的功能
        • (1)检入检出控制
        • (2)分支和合井
        • (3)历史记录
      • 3:版本控制的流程
        • (1)创建配置项。
        • (2)修改状态为“草稿”的配置项目。
        • (3)技术评审或领导审批。
        • (4)正式发布。
        • (5)变更。
      • 4:版本控制的优势
  • 版本控制的分类
      • 1:本地版本控制
      • 2:集中化的版本控制
      • 3:分布式版本控制
  • 常见的版本控制系统介绍
      • 1:Git
      • 2:GitHub
      • 3:GitLab
      • 4:其他版本控制系统
  • Git的工作原理
      • 1:Git的核心概念
        • (1)Git 对象
        • (2)Git 树
        • (3)提交历史链
        • (4)Git 分支
        • (5)Git 工作区
        • (6)Git 暂存区
        • (7)Git 远程仓库
      • 2:git的存储
      • 3:相关概念
  • 部署Git服务器
      • 1:基础环境
      • 2:服务器端基本设置
      • 3:客户端基本信息设置
      • 4:代码提交操作
  • 部署GitLab服务器
      • 1:基础环境
      • 2:安装GitLab
      • 3:修改配置文件
      • 4:加载配置文件并启动
      • 5:访问
      • 6:修改密码
      • 7:设置可以导入的类型
      • 8:创建项目![请添加图片描述](https://i-blog.csdnimg.cn/direct/09888aaba27c46d389b415c472403bc3.png)
      • 9:创建新用户
      • 10:在用户组中创建项目

版本控制

1:版本控制概念

版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。
具体来说,在每一项开发任务中,都需要首先设定开发基线,确定各个配置项的开发初始版本,在开发过程中,开发人员基于开发基线的版本,开发出所需的目标版本。当发生需求变更时,通过对变更的评估,确定变更的影响范围,对被影响的配置项的版本进行修改,根据变更的性质使配置项的版本树继续延伸或产生新的分支,形成新的目标版本,而对于不受变更影响的配置项则不应发产生变动。同时,应能够将变更所产生的对版本的影响进行记录和跟踪。必要时还可以回退到以前的版本。例如当开发需求或需求变更被取消时,就需要有能力将版本回退到开发基线版本。在曾经出现过的季度升级包拆包和重新组包的过程中,其实就是将部分配置项的版本回退到开发基线,将对应不同需求的不同分支重新组合归并,形成新的升级包版本。
版本控制是软件配置管理的核心功能。所有置于配置库中的元素都应自动予以版本的标识,并保证版本命名的唯一性。版本在生成过程中,自动依照设定的使用模型自动分支、演进。除了系统自动记录的版本信息以外,为了配合软件开发流程的各个阶段。还需要定义、收集一些元数据来记录版本的辅助信息和规范开发流程,并为今后对软件过程的度量做好准备。当然如果选用的工具支持,这些辅助数据将能直接统计出过程数据,从而方便软件过程改进活动的进行。对于配置库中的各个基线控制项,应该根据其基线的位置和状态来设置相应的访问权限。一般来说,对于基线版本之前的各个版本都应处于被锁定的状态,如需要对它们进行变更,则应按照变更控制的流程来进行操作。
版本控制(Revision contro1)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发项目的技术。
没有进行版本控制或者版本控制本身就缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段!我们就迫切需要一个版本控制工具。(多人开发就必须要使用版本控制)

2:版本控制的功能

(1)检入检出控制

软件开发人员对源文件的修改不能在软件配置管理库中进行,对源文件的修改依赖于基本的文件系统并在各自的工作空间下进行。为了方便软件开发,需要不同的软件开发人员组织各自的工作空间。一般说来,不同的工作空间由不同的目录表示,而对工作空间的访问,由文件系统提供的文件访问权限加以控制。访问控制需要管理各个人员存取或修改一个特定软件配置对象的权限。开发人员能够从库中取出对应项目的配置项进行修改,并检入到软件配置库中,对版本进行“升级”;配置管理人员可以确定多余配置项并删除。
同步控制的实质是版本的检入检出控制。检入就是把软件配置项从用户的工作环境存入到软件配置库的过程,检出就是把软件配置项从软件配置库中取出的过程。检人是检出的逆过程。同步控制可用来确保由不同的人并发执行的修改不会产生混乱。

(2)分支和合井

版本分支(以一个已有分支的特定版本为起点,但是独立发展的版本序列)的人工方法就是从主版本一称为主干上拷贝一份,并做上标记。在实行了版本控制后,版本的分支也是一份拷贝,这时的拷贝过程和标记动作由版本控制系统完成。版本合并(来自不同分支的两个版本合并为其中一个分支的新版本)有两种途径,一是将版本A的内容附加到版本B中;另一种是合并版本A和版本B的内容,形成新的版本C。

(3)历史记录

版本的历史记录有助于对软件配置项进行审核,有助于追踪问题的来源。历史记录包括版本号、版本修改时间、版本修改者、版本修改描述等最基本的内容,还可以有其他一些辅助性内容,比如版本的文件大小和读写属性。

3:版本控制的流程

(1)创建配置项。

项目成员依据《配置管理计划》,在配置库中创建属于其任务范围内的配置项。此时配置项的状态为“草稿”其版本号格式为 8.YZ。

(2)修改状态为“草稿”的配置项目。

项目成员使用配置管理软件的 Check in/check out 功能,可以自由修改处于“草稿”状态的配置项,版本号格式为0.YZ。

(3)技术评审或领导审批。

如果配置项是技术文档,则需要接受技术评审。如果配置项是“计划”这类文件,则需要项目经理(或上级领导)的审批。若配置项通过了技术评审或领导审批,则转向下一步·否则转回上一步。

(4)正式发布。

配置项通过技术评审或领导审批之后。则配置项的状态从“草稿”变为“正式发布”,版本号格式为
X.Y。

(5)变更。

修改处于“正式发布”状态的配置项,必须按照“变更控制流程”执行。

4:版本控制的优势

实现跨区域多人协同开发
追踪和记载一个或者多个文件的历史记录
组织和保护你的源代码和文档
统计工作量
并行开发、提高开发效率
跟踪记录整个软件的开发过程
减轻开发人员的负担,节省时间,同时降低人为错误

版本控制的分类

1:本地版本控制

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。但是,它的最大的弊端就是无法让位于不同系统上的开发者协同工作。

在这里插入图片描述

2:集中化的版本控制

为了解决不同开发者之间的协同工作,集中化的版本控制系统(centralized version contro]Systems,简称 CVCS)应运而生。这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,特别是相较于老式的本地 S 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏。 这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据–包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
在这里插入图片描述

3:分布式版本控制

为了避免中央服务器的单点故障,于是分布式版本控制系统(Distributed Version Control system,
简称 DVCS)面世了。
在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来,包括完整的历史记录。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。这就是git 分布式版本系统的优势。
在这里插入图片描述

常见的版本控制系统介绍

1:Git

Git(读音为/git/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的
项目版本管理。也是Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 的优势就是:每个人都拥有全部的代码,可以避免一些安全隐患。不会因为服务器损坏或者网络问题,造成不能工作的情况。
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时 push 到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
Git 是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件 A,其他人也在电脑上改了文件 A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git 可以直接看到更新了哪些代码和文件!

2:GitHub

GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。GitHub 可以提供给用户空间创建 Git 仓储,保存用户的一些数据文档或者代码等GitHub 作为开源代码库以及版本控制系统,目前拥有 140 多万开发者用户。随着越来越多的应用程序转移到了云上,GitHub 已经成为了管理软件开发以及发现已有代码的首选方法。GitHub 可以托管各种Git 库,并提供一个 Web 界面,但与其它像 SourceForge 或 Google code 这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。
GitLab 是一个基于 Git 的项目管理软件,用于仓库管理系统的开源项目。使用 Git 作为代码管理工具,并在此基础上搭建起来 web 服务。Git、Gitlab、Github 都是基于 Git 的,可以说是 Git 的衍生品。

3:GitLab

Gitlab 是一款自由和免费的开源软件,因此不需要编写许可证或购买许可证。它允许开发者将源代码托管到自有服务器或者像 Gitlab.com 这样的云端服务器上。这个免费的模式非常适合中小型企业开发者,可以获得许多强大的功能,如代码分枝、分支合并、查看历史变更等
Gitlab 非常易于使用和管理。它提供了一个友好的 web 界面,可以让开发者在浏览器中完成 Git 的核心操作。它为用户提供了许多简单易用的功能,如 API、集成、安全,以及其他一些其他的托管服务功能。除此之外,Gitlab 管理界面也很直观,可以方便的管理用户权限和代码基础设施的其他方面。

4:其他版本控制系统

其他开放源码的版本控制工具还有有很多,如 Concurrent Versions system(csv)、Subversion(SVN)、Vesta、Revision Control System(Rcs)、Source code control system(sccs)等。比较常用的两个工具是 CVS 和 SVN。CVS 是 Dick Grune在 1984年~1985 年基于 RCS 开发的一个客户一服务器架构的版本控制软件,长久以来一直是免费版本控制软件的主要选择。SVN的一个重要开发目标是修正 CVS 中广为人知的缺点,提供一个新的版本控制软件。对于中小规模团队,SVN 是一个比较好的开源版本控制工具,SVN 常用客户端工具为TortoiseSVN。

Git的工作原理

1:Git的核心概念

Git 是一个分布式版本控制系统,它的核心是 Git 对象、Git 树和提交(快照)历史链这三个概念。Git 原理的核心可以概括为以下几点:

(1)Git 对象

Git 中的所有数据都存储在 Git 对象中。每个 Git 对象都由一个 SHA-1 校验和作为唯一的标识符,可以是文件内容、目录结构或者版本历史等。

(2)Git 树

Git 树是由 Git 对象组成的一个目录结构,保存了文件夹、文件和子树的信息,每个树对象都包含一个或多个子对象的引用。

(3)提交历史链

每个提交对象都可以有一个或多个父对象,形成一个提交历史链。通过这个提交历史链,Git 可以跟踪每个文件的修改历史,也可以方便地进行版本回滚、分支合并等操作。

(4)Git 分支

分支是指向 Git 仓库中某一次提交的一个指针,也就是一个指向 Git 提交历史的引用。每个分支都包含了 Git 仓库中的一个提交对象,这个提交对象指向了你项目的一个特定状态。

(5)Git 工作区

工作区是文件的实际工作目录,是你在电脑上看到的目录。在执行“git add” 命令前,工作区的文件修改和添加不会被 Git 跟踪。

(6)Git 暂存区

暂存区是一个临时的存储区域,用于存储将要提交的文件和修改。在执行“git add”命令时,修改的文件会被保存到暂存区中。

(7)Git 远程仓库

远程仓库是指存储在远程服务器上的 Git 仓库,用于多人协作开发、备份和共享代码。Git 支持多种协议,如 HTTPS、SSH 等,可以通过、gitremote、命令管理远程仓库。
Git的强大之处在于它的分布式特性和提交历史链的设计,使得团队协作和代码管理更加方便和高效。

2:git的存储

Git 的工作流程可以简单概括为将工作目录(working directory)的修改提交到暂存区(stagingarea),再将暂存区的修改提交到本地仓库(1ocal repository),最后将本地仓库的修改推送到远程仓库(remote repository)。
在 Git 中,对象分为三种类型:blob、tree 和 commit。blob 对象表示文件内容;tree 对象表示文件夹或目录结构;commit 对象表示一个提交或快照,commit 对象包含作者、时间戳、提交信息等版本信息。每一次我们修改文件,Git 都会完整的保存一份这个文件的快照而非记录差异。每次提交到暂存区的时候,都会把需要暂存文件的副本放到仓库里面(为blob对象)并为每个blob对象生成一个sha-1,这一堆 blob 对象包括当前暂存的所有修改。
提交的时候,生成一个快照(一堆暂存的 blob 对象和没有变化的对象就形成了当前修改的一个快照,是一个 tree 对象),并生成一个提交对象包含这个快照的指针,并包含一些提交信息。同时还有一个或者多个指针指向当前提交的前一次提交。
每次提交会生成一个校验和,这个校验和就唯一指定一个提交。所以一次提交就相当于给整个库打了一个不可变的快照。
git add 添加文件到暂存区,并且创建数据对象添加到 tree 对象中且记录到 git 数据库git commit 然后把以上的 tree 对象添加到 commit 对象中记录到 git 数据库中。

3:相关概念

(1)Git 的标签(Tag)管理
Git 支持标签管理,可以给代码库中的某个版本打上标签,方便以后查找和回滚到指定版本。

(2)Git 的远程仓库管理
Git 可以将本地仓库推送到远程仓库进行备份或共享。常用的远程仓库有 GitHub、GitLab、Bitbucket 等,Git 支持多种协议进行远程仓库之间的数据传输,如 HTTPS、SSH 等。

(3)Git的钩子(Hook)
Git 的钩子是一种脚本,可以在 Git 命令执行前或执行后自动触发,用于实现自定义的功能。Git 支持多种钩子,如提交钩子、合并钩子等。

(4)Git的子模块(Submodule)
Git的子模块是一种管理外部代码库的方式,可以将外部代码库嵌入到主代码库中,方便管理和维护。

(5)Git的工作流(Workflow)
Git 支持多种工作流,如集中式工作流、功能分支工作流、Gitflow 工作流等,可以根据项目需求选择不同的工作流进行代码管理和版本控制。

部署Git服务器

1:基础环境

一台git一台client,需要时间同步
请添加图片描述
请添加图片描述
请添加图片描述
两台都安装git
请添加图片描述

2:服务器端基本设置

初始化git仓库
请添加图片描述
在本案例中,我们要将该服务器初始化为远程仓库,提供给其他开发人员用来提交项目,在初始化的时候,需要加上–bare 的选项。

备注:
git init:建立一个标准的 git 仓库,它将我们所在的目录转换为一个 Git 本地仓库。
建立一个标准的 Git 仓库,这样的仓库初始化后,其项目目录为工作空间,其下的.git 目录是版本控制器。git init 命令执行后会在本地生成一个.git 的文件夹,用来追踪仓库的所有变更。

git init–bare:它将我们所在的目录指定为远程服务器仓库。这样的仓库初始化后,其项目目录下就是标准仓库.git 日录里的内容,没有工作空间。这个仓库只保存git 历史提交的版本信息,而不允许用户在上面进行各种 git 操作(如:push、commit 操作)。但是,你依旧可以使用 git show 命令查看提交内容。

3:客户端基本信息设置

设置密钥对,免输入密码
请添加图片描述

从git服务器中克隆版本仓库到本地
请添加图片描述
此时会在当前目录下生成一个空目录,这个步骤的目的是将服务器端的项目(空项目)克隆到本地,这样就在本地建立了一个代码库,开发者就可以基于此代码库进行程序开发。之后就可以将代码从本地提交到远程的代码库了。

配置用户信息
请添加图片描述

4:代码提交操作

编写代码

请添加图片描述

添加到暂存区

请添加图片描述
备注:
“git add.”命令可以将当前目录中的所有文件添加到暂存区。

添加到本地仓库请添加图片描述
备注:
-m:m指的是 message,可以是一些备注信息
-a:用于先将所有工作区的变动文件,提交到暂存区,再运行git commit。用了-a参数,就不用执行“git add .”

注意:
git commit -m 只是 git add 之后文件放在在暂存区之后的提交,如果暂存区没有 add,是没有效果的。
git commit -am 是之前提交过到工作区的日志信息已经存在(git commit -m “日志信息”文件名)已经执行过,再执行同样的日志信息可以不用 add,一步到位

为当前版本库设置标签
请添加图片描述
请添加图片描述
master 分支是当前主分支的最新版本,上一步中为代码版本打过标签后没有再提交过新的代码,所以查看到的是相同的内容。

修改文件内容
请添加图片描述
请添加图片描述
查看工作状态
请添加图片描述
添加远程版本库
请添加图片描述
注意:
在克隆了一个远程仓库到本地的时候,已经在本地自动添加了名称为origin 的远程仓库,如果想设置其他的仓库名称,可以使用 git remote add 的命令进行添加。

备注:
如果要删除一个远程仓库,可以使用命令:
git remote remove gitserver

上传代码
请添加图片描述
为了验证文件是否推送到远程的 Git服务,可以换个目录(或主机)再次克隆一份版本仓库
请添加图片描述
备注:
指定标签下载对应的版本
不指定版本默认下载的最新的版本
git clone -b v1.1 root@192.168.207.137:/opt/mypro.git
git clone -b v1.2 root@192.168.207.137:/opt/mmypro.git
git clone -b master root@192.168.207.137:/opt/mypro.git

-b master 的参数可以省去,默认就是克隆master 分支的当前版本

部署GitLab服务器

1:基础环境

需要时间同步,另一台client可以继续使用
请添加图片描述
请添加图片描述

2:安装GitLab

请添加图片描述
请添加图片描述

3:修改配置文件

请添加图片描述
请添加图片描述

4:加载配置文件并启动

注意80端口不能被占用
请添加图片描述
备注:
重启:gitlab-ctl restart
关闭:gitlab-ctl stop
启动:gitlab-ctl start
状态:gitlab-ctl status
帮助:gitlab-ctl–help

5:访问

查看密码
请添加图片描述
请添加图片描述

6:修改密码

请添加图片描述
请添加图片描述

7:设置可以导入的类型

请添加图片描述
请添加图片描述
请添加图片描述

8:创建项目请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
客户机克隆空项目
请添加图片描述
创建本地代码
请添加图片描述
提交暂存区
请添加图片描述
从暂存区提交到本地仓库
请添加图片描述
分支命名
请添加图片描述
为客户端设置 GitLab 为远程仓库

请添加图片描述
将分支版本提交到远程仓库
请添加图片描述
-u:相当于记录了 push 到远端分支的默认值,这样当下次我们还想要继续 push 的这个远端分支的时候推送命令就可以简写成 git push 即可
-f:强制更新,需要 gitlab 权限允许。

设置权限允许强制更新

请添加图片描述

9:创建新用户

添加组
请添加图片描述
请添加图片描述
添加用户
请添加图片描述
请添加图片描述
备注:
access level:用户地访问级别。
Regular:普通用户,只能访问属于他自己的组和项目Admin:管理员,可以访问所有的组合项目

设置密码
请添加图片描述
请添加图片描述
将用户加入组
请添加图片描述请添加图片描述

Gitlab 用户在组里面有5种不同权限:
Guest:可以创建 issue、发表评论,不能读写版本库。
Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限。
Maintainer:可以创建项目、添加 tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限。
0wner:可以设置项目访问权限:-Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限。

10:在用户组中创建项目

以zhangsan身份登录
请添加图片描述
重新设置密码后添加项目
请添加图片描述
选择导入项目

请添加图片描述
请添加图片描述
添加仓库的url
此处,我们选择一个 gitee 上的开源项目 mall,其连接如下:
https://gitee.com/kgc-wjq/league.git

请添加图片描述

请添加图片描述
请添加图片描述
注意:
此处设置的访问级别为Private,在客户端进行克隆的时候,就需要输入 zhangsan 的账号密码进行身份认证后才能克隆下来。如果选择Public,在克隆的时候就不需要身份验证了。

验证结果
请添加图片描述
请添加图片描述
在客户机克隆请添加图片描述

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

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

相关文章

Pandas数据结构详解Series与DataFrame

Pandas数据结构详解:Series与DataFrame实战指南 前言 Pandas是Python数据分析的核心库,其强大的数据处理能力主要基于两种核心数据结构:Series和DataFrame。本文将深入解析这两种数据结构的概念、创建方式、常用属性和方法,并通…

TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编译 TensorRT-LLM 的完整实践

一、TensorRT-LLM有三种安装方式,从简单到难 1.NGC上的预构建发布容器进行部署,见《tensorrt-llm0.20.0离线部署DeepSeek-R1-Distill-Qwen-32B》。 2.通过pip进行部署。 3.从源头构建再部署。 在实际开发中,我们常常面临这样的场景:本地笔记…

完整、可落地的 Elasticsearch 拼音补全配置模板 设计方案

在中文搜索场景中,用户经常使用拼音输入(如 “iPhone”、“pingguo”)来搜索中文内容(如“苹果手机”)。为了提升用户体验,Elasticsearch 可通过 拼音分词器 Completion Suggester 实现 拼音补全&#xff…

Redis面试精讲 Day 23:Redis与数据库数据一致性保障

【Redis面试精讲 Day 23】Redis与数据库数据一致性保障 在“Redis面试精讲”系列的第23天,我们将深入探讨Redis与数据库数据一致性保障这一在高并发分布式系统中极为关键的技术难题。该主题是面试中的高频压轴题,常出现在中高级后端开发、架构师岗位的考…

HTML <link rel=“preload“>:提前加载关键资源的性能优化利器

在网页性能优化中&#xff0c;“资源加载时机”是影响用户体验的关键因素——一个延迟加载的核心CSS可能导致页面“闪白”&#xff0c;一段未及时加载的关键JS可能让交互按钮失效。传统的资源加载方式&#xff08;如<link>加载CSS、<script>加载JS&#xff09;依赖…

WPF加载记忆上次图像

问题点使用MVVM先viewModel构造函数然后才Loaded事件,但Loaded事情时halcon控件没有加载完毕。Window_ContentRendered事件中halcon控件才有了句柄。解决问题1.viewModel函数中调用相机的类获取相机名(在这里是为了MVVM中以后可以做其它的事情如识别二维码)2.在Window_ContentR…

AT89C52单片机介绍

目录 1AT89C52原理图及结构框图 1.1 原理图 1.2 AT89C52 结构框图 1.2.1 8 位 CPU 1.2.2 存储器 1.2.3 I/O 端口 1.2.4 定时器 / 计数器 1.2.5 串行通信接口 1.2.6 中断系统 1.2.7 时钟与复位 1.2.8 总线结构 1.2.9 特殊功能寄存器区 2 AT89C52引脚介绍(PDIP) …

联网车辆功能安全和网络安全的挑战与当前解决方案

摘要在过去的二十年里&#xff0c;数字化重塑了我们的日常生活&#xff0c;汽车行业也身处这一变革之中。如今的车辆正变得日益智能且联网&#xff0c;具备了更多的安全和便捷功能&#xff08;如自动紧急制动、自适应巡航控制&#xff09;。下一代车辆将实现高度自动化乃至 5 级…

网络安全(Java语言)脚本 汇总(二)

文章目录目录遍历漏洞扫描器源代码思路一、核心功能二、依赖库三、核心流程四、关键方法五、数据结构六、输出信息目录遍历漏洞扫描器 源代码 /*** description : 目录遍历漏洞扫描器* 注意; 在输入URL时 要求必须保存 ?page 的末尾 才能保证路径合成的有效性*//*** desc…

基于 ArcFace/ArcMargin 损失函数的深度特征学习高性能人脸识别解决方案

要实现当前最先进的人脸识别系统,我们需要采用业界公认性能最佳的算法框架,主要包括基于 ArcFace/ArcMargin 损失函数的深度特征学习、MTCNN 人脸检测与对齐以及高效特征检索三大核心技术。以下是优化后的解决方案: 核心优化点说明 算法选择:采用 ArcFace(Additive Angul…

Sql server 查询每个表大小

在SQL Server中&#xff0c;你可以通过查询系统视图和系统表来获取数据库中每个表的大小。这可以通过几种不同的方式来实现&#xff0c;下面是一些常用的方法&#xff1a;方法1&#xff1a;使用sp_spaceused存储过程sp_spaceused是一个内置的存储过程&#xff0c;可以用来显示数…

react 错误边界

注意点&#xff1a; 类组件是可以和函数式组件混合写的&#xff01;&#xff01;&#xff01;getDerivedStateFromError是静态的&#xff0c;避免副作用&#xff0c;如果想将错误上报到服务器&#xff0c;则去componentDidCatch里去处理。getDerivedStateFromError直接返回{ ha…

自定义 VSCode 标题栏以区分不同版本

自定义 VSCode 标题栏以区分不同版本 当您在同一台计算机上使用多个 Visual Studio Code 版本时&#xff0c;自定义窗口标题栏是一个有效的方法&#xff0c;可以帮助您快速区分它们。 为何需要区分多个 VSCode 版本&#xff1f; 在同一台电脑上安装和使用多个 VSCode 实例是很常…

失败存储:查看未成功的内容

作者&#xff1a;来自 Elastic James Baiera 及 Graham Hudgins 了解失败存储&#xff0c;这是 Elastic Stack 的一项新功能&#xff0c;用于捕获和索引之前丢失的事件。 想获得 Elastic 认证吗&#xff1f;看看下一期 Elasticsearch Engineer 培训什么时候开始&#xff01; E…

基于Spring Boot+Vue的莱元元电商数据分析系统 销售数据分析 天猫电商订单系统

&#x1f525;作者&#xff1a;it毕设实战小研&#x1f525; &#x1f496;简介&#xff1a;java、微信小程序、安卓&#xff1b;定制开发&#xff0c;远程调试 代码讲解&#xff0c;文档指导&#xff0c;ppt制作&#x1f496; 精彩专栏推荐订阅&#xff1a;在下方专栏&#x1…

Node.js/Python 实战:封装淘宝商品详情 API 客户端库(SDK)

在开发电商相关应用时&#xff0c;我们经常需要与淘宝 API 交互获取商品数据。直接在业务代码中处理 API 调用逻辑会导致代码冗余且难以维护。本文将实战演示如何使用 Node.js 和 Python 封装一个高质量的淘宝商品详情 API 客户端库&#xff08;SDK&#xff09;&#xff0c;使开…

【Docker】关于hub.docker.com,无法打开,国内使用dockers.xuanyuan.me搜索容器镜像、查看容器镜像的使用文档

&#x1f527; 一、国内镜像搜索替代方案 国内镜像源网站 毫秒镜像&#xff1a;支持镜像搜索&#xff08;如 https://dockers.xuanyuan.me&#xff09;&#xff0c;提供中文文档服务&#xff08;https://dockerdocs.xuanyuan.me&#xff09;&#xff0c;可直接搜索镜像名称并…

2025盛夏AI热浪:八大技术浪潮重构数字未来

——从大模型革命到物理智能&#xff0c;AI如何重塑产业与人机关系&#x1f31f; 引言&#xff1a;AI从“技术爆炸”迈向“应用深水区」代码示例&#xff1a;AI商业化闭环验证模型# 验证AI商业化闭环的飞轮效应 def validate_ai_flywheel(compute_invest, app_adoption): re…

从希格斯玻色子到 QPU:C++ 的跨维度征服

一、引言&#xff1a;粒子物理与量子计算的交汇点在当代物理学和计算机科学的前沿领域&#xff0c;希格斯玻色子研究与量子计算技术的交汇正形成一个激动人心的跨学科研究方向。希格斯玻色子作为标准模型中最后被发现的基本粒子&#xff0c;其性质和行为对我们理解物质质量的起…

Elasticsearch:如何使用 Qwen3 来做向量搜索

在这篇文章中&#xff0c;我们将使用 Qwen3 来针对数据进行向量搜索。我们将对数据使用 qwen3 嵌入模型来进行向量化&#xff0c;并使用 Qwen3 来对它进行推理。在阅读这篇文章之前&#xff0c;请阅读之前的文章 “如何使用 Ollama 在本地设置并运行 Qwen3”。 安装 Elasticsea…