Git常用操作之GitLab
Git常用操作之GitLab
小薛博客官网:小薛博客Git常用操作之GitLab官方地址
1、GitLab安装
https://gitlab.cn/install/
1、Docker安装GitLab
https://docs.gitlab.cn/jh/install/docker.html
1、设置卷位置
在设置其他所有内容之前,请配置一个新的环境变量 $GITLAB_HOME,指向配置、日志和数据文件所在的目录。 确保该目录存在并且已授予适当的权限。
对于 Linux 用户,将路径设置为 /usr/local/gitlab:
export GITLAB_HOME=/srv/gitlab
对于 macOS 用户,使用用户的 $HOME/gitlab 目录:
export GITLAB_HOME=$HOME/gitlab
极狐GitLab 容器使用主机装载的卷来存储持久数据:
| 本地位置 | 容器位置 | 使用 |
|---|---|---|
$GITLAB_HOME/data | /var/opt/gitlab | 用于存储应用程序数据。 |
$GITLAB_HOME/logs | /var/log/gitlab | 用于存储日志。 |
$GITLAB_HOME/config | /etc/gitlab | 用于存储极狐GitLab 配置文件。 |
2、使用 Docker Engine 安装极狐GitLab
您可以微调这些目录以满足您的要求。 一旦设置了 GITLAB_HOME 变量,您就可以运行镜像:
sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish 23:22 \--name gitlab \--restart always \--volume $GITLAB_HOME/config:/etc/gitlab \--volume $GITLAB_HOME/logs:/var/log/gitlab \--volume $GITLAB_HOME/data:/var/opt/gitlab \--shm-size 256m \registry.gitlab.cn/omnibus/gitlab-jh:latest
这将下载并启动极狐GitLab 容器,并发布访问 SSH、HTTP 和 HTTPS 所需的端口。所有极狐GitLab 数据将存储在 $GITLAB_HOME 的子目录中。系统重启后,容器将自动 restart。
如果您使用的是 SELinux,请改为运行以下命令:
sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish 22:22 \--name gitlab \--restart always \--volume $GITLAB_HOME/config:/etc/gitlab:Z \--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \--shm-size 256m \registry.gitlab.cn/omnibus/gitlab-jh:latest
这将确保 Docker 进程有足够的权限在挂载的卷中创建配置文件。
如果您使用 Kerberos 集成 ,您还必须发布您的 Kerberos 端口(例如,--publish 8443:8443)。否则会阻止使用 Kerberos 进行 Git 操作。
初始化过程可能需要很长时间。 您可以通过以下方式跟踪此过程:
sudo docker logs -f gitlab
启动容器后,您可以访问 域名(如果您在 macOS 上使用 boot2docker,则可以访问 http://ip:端口)。Docker 容器开始响应查询可能需要一段时间。
访问极狐GitLab URL,并使用用户名 root 和来自以下命令的密码登录:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
密码文件将在 24小时后的第一次重新配置运行中自动删除。
3、使用 Docker Compose 安装极狐GitLab
version: '3.6'
services:web:image: 'registry.gitlab.cn/omnibus/gitlab-jh:latest'restart: alwayshostname: 'gitlab.example.com'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'https://gitlab.example.com'# Add any other gitlab.rb configuration here, each on its own lineports:- '80:80'- '443:443'- '22:22'volumes:- '$GITLAB_HOME/config:/etc/gitlab'- '$GITLAB_HOME/logs:/var/log/gitlab'- '$GITLAB_HOME/data:/var/opt/gitlab'shm_size: '256m'
确保您在与 docker-compose.yml 相同的目录下并启动极狐GitLab:
docker compose up -d
下面是另一个 docker-compose.yml 示例,其中极狐GitLab 在自定义 HTTP 和 SSH 端口上运行。注意 GITLAB_OMNIBUS_CONFIG 变量如何匹配 ports 部分:
version: '3.6'
services:web:image: 'registry.gitlab.cn/omnibus/gitlab-jh:latest'restart: alwayshostname: 'gitlab.example.com'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://gitlab.example.com:8929'gitlab_rails['gitlab_shell_ssh_port'] = 2224ports:- '8929:8929'- '2224:22'volumes:- '$GITLAB_HOME/config:/etc/gitlab'- '$GITLAB_HOME/logs:/var/log/gitlab'- '$GITLAB_HOME/data:/var/opt/gitlab'shm_size: '256m'
这与使用 --publish 8929:8929 --publish 2224:22 相同。

2、Linux Centos安装GitLab
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

安装依赖项
yum install policycoreutils-python
安装GitLab
rpm -i gitlab-ce-16.7.0-ce.0.el7.x86_64.rpm

# 修改配置
vim /etc/gitlab/gitlab.rb# 修改为ip或者域名
external_url 'http://43.139.157.112:6688'# 重新加载配置文件
gitlab-ctl reconfigure# 重启
gitlab-ctl restart

# 查看默认密码
cat /etc/gitlab/initial_root_password
2、GitLab设置中文


3、GitLab新建用户

4、Git安装
1、windows安装
https://git-scm.com/download/win

下载下来后傻瓜式安装即可,一直下一步就好。
2、Mac安装
简易安装法 打开Mac输入终端 输入git 会弹出安装
3、Git修改用户名邮箱
git config user.name "xueqimiao"
git config user.email "161616@qq.com"git config user.name
git config user.email
5、新建仓库



6、拉取、提交、撤销与推送代码
1、拉取代码

可以看到有两种方式拉取代码,我们先用http的方式,后面再使用SSH方式
1、命令拉取
# 拉取代码
git clone http://43.139.157.112:6688/root/xx-test.git
# 根据提示输入用户名和密码

2、IDEA拉取




2、提交代码
新建一个文件Test01

我们先不点击add,可以看到文件颜色为红色,说明文件还没有添加到版本控制中
1、命令提交
# 添加到暂存区
git add Test01.java
# add之后文件颜色为绿色

可以看到文件变成了正常颜色
# 添加指定文件到暂存区
git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录
git add [dir]# 添加当前目录的所有文件到暂存区
git add .# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
git add -p
# 提交
git commit -m '第一次提交'

注意: 此时远程仓库中还没有,因为我们还没有推送
# 提交暂存区到仓库区
$ git commit -m [message]# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a# 提交时显示所有diff信息
$ git commit -v# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
红色:表示文件还没有被 Git 跟踪,尚未添加到版本控制中
红色:表示在合并过程中遇到冲突的文件
红色:已删除的文件
绿色:表示文件在上次提交后已被修改
绿色:表示文件已被添加到暂存区,准备提交到版本库
绿色:表示文件被重命名,并且这个重命名操作已被暂存
正常颜色:表示文件没有变化
工作区(Working Directory):
- 工作区是你当前正在操作的目录,包含项目的实际文件。
暂存区(Staging Area / Index):
- 暂存区是一个中间区域,用于存储你已经做出的更改,但还没有提交到版本库。在工作区修改文件后,你可以将这些修改暂时存储在暂存区,然后一次性提交到版本库。
版本库(Repository):
- 版本库是一个包含项目历史记录的地方。它包括了所有提交的信息、文件的状态、以及指向每个提交的指针。版本库通常分为两部分:本地版本库(Local Repository)和远程版本库(Remote Repository)。
本地版本库(Local Repository):
- 本地版本库是你计算机上的一个存储库,包含完整的项目历史记录。你可以在本地进行提交、查看历史记录等操作。
远程版本库(Remote Repository):
- 远程版本库是位于网络上的一个共享版本库,通常托管在像 GitHub、GitLab 或 Bitbucket 等平台上。它允许多个开发者协作,通过推送(push)和拉取(pull)操作同步本地和远程版本库的变更。
2、IDEA提交
新建一个文件Test02

此时点击add

此时已经提交完成
3、撤销
1、撤销add
1、命令操作
新建一个文件Test03

git reset Test03.java

2、IDEA操作
新建一个文件Test04


HEAD是一个特殊的指针,它指向当前所在的本地分支的最新提交(最新的提交记录)。HEAD可以理解为你当前工作目录所处的位置,即当前所在分支的最新提交。Reset Type三种常用的模式:
git reset命令有三个常用的模式:--soft、--mixed(默认模式)和--hard。这些模式控制了命令的行为,特别是在重置提交时涉及到的暂存区和工作区的处理。–soft:
--soft模式表示“软重置”,它会将HEAD移动到目标提交,但不会修改暂存区和工作区。所有更改都保留在暂存区,你可以使用git commit来创建一个新的提交。git reset --soft HEAD^–mixed(默认模式):
--mixed模式是默认的重置模式,它会将HEAD移动到目标提交,并且会重置暂存区,但不会修改工作区。这意味着你的更改会被保留在工作区,但不会被包含在新的提交中。git reset --mixed HEAD^–hard:
--hard模式是最彻底的重置,它会将HEAD移动到目标提交,并且会重置暂存区和工作区,即丢弃所有未提交的更改。慎用这个选项,因为它会永久性地删除你在工作区中的所有更改。git reset --hard HEAD^
同样的idea也可以直接add

2、撤销提交
1、命令操作
撤销最后一次提交(commit),可以使用 git reset 或 git revert,具体取决于你想要的效果以及是否已经将更改推送到远程仓库。
- 使用
git reset撤销提交并保留更改:
git reset --soft HEAD^
这将把 HEAD 移动到前一个提交,保留工作区和暂存区的更改。你可以随后选择性地将需要的更改添加到暂存区,并提交。
- 使用
git reset撤销提交并清除所有更改:
git reset --hard HEAD^
这会将 HEAD 移动到前一个提交,并丢弃工作区和暂存区的所有更改。小心使用这个选项,因为它会永久删除未提交的更改。
2、IDEA操作


如果已经推送需要撤回
# 查看提交记录
git log git revert 记录hash值
your local changes would be overwritten by revert. hint: commit your changes or stash them to proceed. revert failed
这个错误提示表明在进行
git revert操作时,存在未提交的本地更改,而git revert操作要求工作目录是干净的,没有未提交的更改。解决这个问题的方法有两种:
1. 提交或存储本地更改:
提交更改:
如果你希望将这些未提交的更改包含在新的撤销提交中,可以先提交这些更改:
git add . git commit -m "Committing local changes before revert"然后再执行
git revert:git revert <commit-to-revert>存储更改:
如果你不想将这些未提交的更改包含在新的撤销提交中,可以使用
git stash将它们存储起来:git stash然后再执行
git revert:git revert <commit-to-revert>最后,如果需要,可以使用
git stash pop恢复之前存储的更改:git stash pop强制
git revert:如果你确定不需要保存本地更改,也可以使用
--no-commit选项强制git revert:git revert --no-commit <commit-to-revert>这将允许你在撤销提交之前进行其他更改。完成所有需要的更改后,手动提交:
git commit -m "Revert commit <commit-to-revert>"
git stash和git stash pop是用于暂存和恢复未提交的工作目录和暂存区更改的命令。它们的作用如下:
git stash:
git stash用于将当前工作目录和暂存区的未提交更改保存起来,使你的工作目录变得干净,以便进行其他操作。git stash这个命令会将未提交的更改保存为一个栈中的堆栈帧(stash),并将你的工作目录和暂存区恢复到干净的状态。
git stash pop:
git stash pop用于从栈中恢复最近的 stash,并将其从 stash 栈中删除。它会自动应用 stash,并尝试将你的本地更改合并到 stash 之前的提交上。git stash pop这个命令相当于同时运行
git stash apply和git stash drop。
git stash apply用于将 stash 中的更改应用到当前工作目录和暂存区,但并不删除 stash。git stash drop用于删除最近的 stash。通过
git stash pop,你可以一次性完成这两个步骤。示例:
使用
git stash:# 将未提交的更改保存到 stash git stash进行其他操作:
在这一步,你可以切换分支、拉取最新的代码、合并分支等。
使用
git stash pop:# 恢复最近的 stash,并应用到当前分支 git stash pop或者,你也可以使用
git stash apply和git stash drop来分别应用 stash 和删除 stash:# 恢复最近的 stash git stash apply# 删除最近的 stash git stash drop
4、推送代码
1、命令推送
# 全部推送
git push
git push origin
# 提交了多次 指定推送
## 查看提交记录 拿出hash值
git log# 推送
git push origin 008949bb2e3cdb560e709d175832e31e8edd65da:main(分支名)
git push:
git push会将当前分支的本地更改推送到与之关联的远程分支。- 如果当前分支与远程分支有关联(例如,使用
git branch --set-upstream-to或git push -u),那么git push将推送到关联的远程分支。例如,如果当前分支是main,而与之关联的远程分支是origin/main,则git push将推送到origin/main。- 如果当前分支没有明确与远程分支关联,
git push将会失败并给出相应的错误信息。示例:
git push
git push origin:
git push origin是显式指定要推送到的远程仓库。你可以提供一个远程仓库的名称(例如origin)以及一个分支名称,以明确要推送到的远程分支。- 这种方式允许你推送到非关联的远程分支,或者推送到远程仓库的不同分支。
示例:
git push origin main
git branch --set-upstream-to命令用于设置当前本地分支与远程分支的关联。在 Git 中,一个本地分支可以与远程分支建立关联,以便更方便地进行推送和拉取操作。下面是该命令的基本用法:
git branch --set-upstream-to=remote-branch local-branch其中:
remote-branch是远程分支的名称。local-branch是本地分支的名称。这个命令的目的是告诉 Git,将本地分支
local-branch与远程分支remote-branch关联起来。一旦关联建立,你就可以使用git push和git pull,而不需要每次都指定远程分支的名称。示例:
# 假设当前分支是 main,想要将其关联到远程分支 origin/main git branch --set-upstream-to=origin/main main之后,你可以直接使用
git push和git pull,Git 将根据关联的远程分支进行操作。# 推送本地更改到关联的远程分支 git push# 从关联的远程分支拉取更新 git pull注意:在较新的 Git 版本中,
--set-upstream-to也可以用-u替代,如下所示:git branch -u origin/main main
2、IDEA推送
一次推送

提交了多次选择性推送

7、SSH拉取代码
# 在终端中执行 一直回车就行
ssh-keygen

将公钥复制到GitLab中


再使用SSH地址拉取代码即可

8、创建分支
1、命令操作
# 新建分支
git branch dev# 新建一个分支,并切换到该分支
git checkout -b dev1# 推送分支git push --set-upstream origin dev1
# 列出所有本地分支
$ git branch# 列出所有远程分支
$ git branch -r# 列出所有本地分支和远程分支
$ git branch -a# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]# 新建一个分支,并切换到该分支
$ git checkout -b [branch]# 新建一个分支,指向指定commit
$ git branch [branch] [commit]# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]# 切换到指定分支,并更新工作区
$ git checkout [branch-name]# 切换到上一个分支
$ git checkout -# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]# 合并指定分支到当前分支
$ git merge [branch]# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]# 删除分支
$ git branch -d [branch-name]# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
2、IDEA操作


9、合并分支
1、命令操作
# 修改dev2分支内容并推送到远程

# 切换为dev1分支
git checkout dev1
# 也可以
git switch dev1# 合并dev2代码
git merge dev2
2、IDEA操作
我们将dev2的代码合并到dev分支,所以要先切换为dev分支

再选择dev2分支并点击merge

10、冲突解决
1、命令操作
同时修改dev1和dev2的同一个文件

切换到dev2,修改后再合并dev1

git merge dev1Updating 0a3ec3a..024f51d
error: Your local changes to the following files would be overwritten by merge:Test02.java
Please commit your changes or stash them before you merge.
Aborting# 我们可以先暂存
git stash
git merge dev1# 再恢复本地
git stash pop
再同时修改dev1和dev2的同一个文件

修改了dev1分支的代码并推送

切换为dev2分支修改了并推送
git commit . -m '修改dev2'# 推送
git push
再合并dev1分支代码
git merge dev1

# 此时需要手动编辑文件git add Test02.java
git commit -m '解决冲突'
git push
2、IDEA操作
idea在操作合并的时候会出现merge弹窗

11、回滚代码
1、命令操作
使用 git reset 或 git revert 命令。这两个命令的主要区别在于它们的影响范围和对历史记录的处理方式。
- 使用
git reset回滚:
# 回滚到指定版本(commit-hash 为目标版本的 commit 哈希值)
git reset --hard commit-hash
这将移动你的 HEAD 和当前分支指针到指定版本,并将工作目录和暂存区都恢复到目标版本的状态。请注意,--hard 参数表示丢弃工作目录和暂存区的所有更改,慎用。
- 使用
git revert回滚:
# 创建一个新的撤销提交以回滚到指定版本
git revert commit-hash
这将创建一个新的提交,该提交的变更是将目标版本的更改撤销掉。相比于 git reset,git revert 是一种更安全的方式,因为它不会修改历史记录,而是创建一个新的提交来撤销之前的提交。
2、IDEA操作



12、.gitignore文件
如果我们有不想提交的文件可以配置到这个文件当中,放到根目录下即可
# Compiled class file
*.class# Log file
*.log# BlueJ files
*.ctxt# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
*.iml
*.ipr
*.iws# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*#.idea
.idea/
target/
.gitlab-ci.yml
.mvn/
13、仓库备份与还原
# 旧GitLab服务器备份
sudo gitlab-rake gitlab:backup:create
默认日志保存路径 /var/opt/gitlab/backups
# 新GitLab服务器还原
gitlab-rake gitlab:backup:restore BACKUP= 文件名
# 注意等于号后面有一个空格
相关文章:
Git常用操作之GitLab
Git常用操作之GitLab 小薛博客官网:小薛博客Git常用操作之GitLab官方地址 1、GitLab安装 https://gitlab.cn/install/ 1、Docker安装GitLab https://docs.gitlab.cn/jh/install/docker.html 1、设置卷位置 在设置其他所有内容之前,请配置一个新的…...
【商城实战(33)】解锁版本迭代与更新策略
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
强化学习 - PPO控制无人机
PPO(Proximal Policy Optimization,近端策略优化)是一种强化学习算法,用于训练智能体(无人机)如何在环境中做出决策。它本质上是 策略梯度(Policy Gradient)方法 的一种改进…...
QT 磁盘文件 教程03-创建、删除、复制文件
【1】新建文件 bool CreateFile(QString name){QString fileName name ; //"文件绝对路径名"QFile file(fileName);QFileInfo fileInfo(file);QString fileExtension fileInfo.suffix();if(fileExtension.isEmpty()) {fileName".txt";}file.setFileName…...
Netty基础—NIO的使用简介
1.Buffer缓冲区 (1)Buffer缓冲区的作用 在NIO中,所有的数据都是通过使用Buffer缓冲区来处理的。如果要通过NIO,将数据写到文件和网络或从文件和网络中读取数据,那么就需要使用Buffer缓冲区来进行处理。 (2)Buffer缓冲区的4个核心概念 Buffer缓…...
Matlab 汽车ABS实现模糊pid和pid控制
1、内容简介 Matlab 181-汽车ABS实现模糊pid和pid控制 可以交流、咨询、答疑 2、内容说明 略 实现汽车防抱死制动系统(ABS)的控制算法,通常涉及到传统的PID控制和模糊PID控制两种方法。下面将分别介绍这两种控制策略的基本概念以及如何在M…...
驾驭数据洪流:实时数据分析与流处理技术的革命
驾驭数据洪流:实时数据分析与流处理技术的革命 在现代社会,数据不再是冷冰冰的存储单位,而是实时运转的“生命体”。从电商交易监控、社交媒体互动,到自动驾驶决策,我们正被无数实时数据所包围。与此同时,实时数据分析和流处理技术应运而生,成为解决这一时代难题的关键…...
Muon: An optimizer for hidden layers in neural networks
引言 在深度学习领域,优化算法对模型训练效率和性能起着关键作用。从经典的随机梯度下降 (SGD) 及其动量法,到自适应优化方法 Adam/AdamW 等,一系列优化器大大加速了神经网络的收敛。然而,随着模型规模和数据量的爆炸式增长&…...
网络安全运维应急响应与溯源分析实战案例
在日常运维过程中,网络安全事件时有发生,快速响应和精准溯源是保障业务稳定运行的关键。本文将通过一个实际案例,详细解析从发现问题到溯源定位,再到最终解决的完整流程。 目录 一、事件背景 二、事件发现 1. 监控告警触发 2…...
【VSCODE 插件 可视化】:SVG 编辑插件 SVG Editor
插件下载 svgeditor 创建文件 Windows/Linux 快捷键 Ctrl Shift P 打开VSCODE 命令面板查找 New File With Svg Editor 编辑文件 保存文件 打开文件以继续编辑 CG 选中多个:shift单击没找到横向分布功能无法用键盘微调位置...
Cursor插件市场打不开解决
问题现象: cursor搜索插件的时候提示错误,无法搜索安装插件 error while fetching extensions.failed to fetch 问题原因 cursor默认安装使用的并不是vs code的插件市场,国内网络有时候打不开 解决 修改插件市场地址并重启cursor 打开cur…...
嵌入式开发之STM32学习笔记day06
基于STM32F103C8T6的开发实践——从入门到精通01 1. 引言 STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器,广泛应用于嵌入式系统中。STM32F103C8T6是其中非常受欢迎的一款,凭借其强大的性能、丰富的外设接口和低廉的价格…...
K8S学习之基础三十五:k8s之Prometheus部署模式
Prometheus 有多种部署模式,适用于不同的场景和需求。以下是几种常见的部署模式: 1. 单节点部署 这是最简单的部署模式,适用于小型环境或测试环境。 特点: 单个 Prometheus 实例负责所有的数据采集、存储和查询。配置简单&…...
AI驱动的视频字幕提取与翻译工具
青梧字幕是一款基于Whisper技术的AI字幕提取工具,专为视频制作者、翻译人员和自媒体创作者设计。它通过先进的语音识别算法,能够自动从视频文件中提取字幕内容,并支持多种语言和字幕格式,极大地简化了字幕制作流程。 目前暂支持 …...
Android ARouter的详细使用指南
Android ARouter的详细使用指南。我需要先确定用户的基础,可能他们已经有Android开发经验,但对ARouter不太熟悉。首先,我应该介绍ARouter是什么,解决什么问题,比如模块化中的页面跳转问题。然后,需要分步骤…...
【MySQL】MySQL审计工具Audit Plugin安装使用
MySQL审计工具Audit Plugin安装使用 https://www.cnblogs.com/waynechou/p/mysql_audit.html MySQL 5.6 开启审计功能 https://blog.51cto.com/u_15127556/4344503 MySQL之添加日志审计功能 https://blog.csdn.net/weixin_43279032/article/details/105507170 MySQL开启日志记录…...
游戏引擎学习第163天
我们可以在资源处理器中使用库 因为我们的资源处理器并不是游戏的一部分,所以它可以使用库。我说过我不介意让它使用库,而我提到这个的原因是,今天我们确实有一个选择——可以使用库。 生成字体位图的两种方式:求助于 Windows 或…...
JVM常用概念之锁省略
问题 synchronized(同步-重量级锁)会解除所有编译器优化吗? 基础知识 使用当前的 Java 内存模型,未观察到的锁不一定会产生任何内存效应。除其他情况外,这意味着对非共享对象进行同步是徒劳的,因此运行时不必在那里做任何事情。这给编译优…...
用python代码将excel中的数据批量写入Json中的某个字段,生成新的Json文件
需求 需求: 1.将execl文件中的A列赋值给json中的TrackId,B列赋值给json中的OId 要求 execl的每一行,对应json中的每一个OId json 如下: {"List": [{"BatchNumber": "181-{{var}}",// "Bat…...
《我的Python觉醒之路》之转型Python(十五)——控制流
[今天是2025年3月17日,继续复习第一章节、第二章节的内容 ] 《我的Python觉醒之路》之转型Python(十四)——控制流...
路由器与防火墙配置命令
路由器与防火墙配置命令 小明啊,你不是学计算机的嘛,叔叔家的路由器坏了,可以过来帮叔叔看看吗 命令可以用缩写,造就一堆容易造成歧义的缩写,比如add是address的缩写,sh是shutdown的缩写。 默认为Cisco路…...
PosterRender 实现微信下程序 分享商品生成海报
PosterRender 是什么 PosterRender 是一种专注于生成高质量海报图像的技术或工具,常用于生成静态图片,特别是适合用于营销、宣传和展示的图形设计。它通常用于在服务端或客户端渲染复杂的图像,包括文字、图形、图标、背景等,生成…...
C语言及内核开发中的回调机制与设计模式分析
在C语言以及操作系统内核开发中,回调机制是一种至关重要的编程模式。它通过注册框架和定义回调函数,实现了模块间的解耦和灵活交互,为系统的扩展性和可维护性提供了有力支持。本文将深入探讨这种机制的工作原理、应用场景以及与设计模式的关联。 一、回调机制的核心概念 (…...
第27周JavaSpringboot git初识
Git 课程笔记 一、Git 的介绍 1. Git 的诞生背景 Git 是 Linux 内核的作者 Linus Torvalds 为了更好地管理 Linux 内核开发而创建的版本控制系统。在 Linux 内核开发初期,由于开发者众多,协作成本很高,后来使用了 BitKeeper 工具来辅助协作…...
代码随想录算法训练营第34天 | 62.不同路径 63. 不同路径 II 整数拆分 不同的二叉搜索树 (跳过)
62.不同路径 62. 不同路径 - 力扣(LeetCode) 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。 代码随想录 视频讲解:动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_b…...
Java使用JDBC连接操作Sqlite 笔记250314
Java使用JDBC连接操作Sqlite 以下是使用 Java JDBC 连接和操作 SQLite 数据库的详细步骤: 1. 添加 SQLite JDBC 驱动 在项目中引入 SQLite JDBC 驱动依赖。 Maven 项目在 pom.xml 中添加:<dependency><groupId>org.xerial</groupId>…...
消息队列导致数据库数据读取不一致解决方案
我使用的是在数据库添加一个版本字段,记录版本,保证版本一致性,就能保证每次读取的是需要的内容。 具体问题:使用消息队列时,发送方给接收方发送消息,接收方修改了数据库的同时发送方查询数据库࿰…...
如何利用 Zeabur 实现 OceanBase 的一键部署
引言 Zeabur 是一个功能强大且即开即用的自动化部署平台,它不仅能迅速部署多种应用,还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户,如 AFFiNE、Bytebase 等企业客户,以及大量全栈和独立开发者。将…...
计算机网络进化论:从比特流到量子通信的深层解构
第一章 物理媒介与链路层(1960-1970) 1.1 比特流物理编码 // 曼彻斯特编码实现 vector<bool> manchester_encode(uint8_t byte) {vector<bool> bits;for(int i=7; i>=0; --i) {bool bit = (byte >> i) & 1;bits.push_back(bit); // 前半周期bits…...
超参数优化算法:scikit-opt库、Scikit-Optimize库
1 scikit-opt库:https://www.cnblogs.com/luohenyueji/p/18333387 https://blog.csdn.net/weixin_45750972/article/details/124683402 a 差分进化算法 (Differential Evolution):一种基于群体搜索的优化算法,通过模拟生物进化的过程来寻找最…...
