Git基础知识
Git基础知识
目录
- 一、Git简介
- 1.1 什么是Git?
- 1.2 基本概念
- 1.3 Git与其他版本控制系统的区别
- 二、Git安装与配置
- 2.1 安装Git
- 2.2 基础配置
- 2.3 高级配置
- 2.4 多账户配置
- 三、基本操作
- 3.1 创建仓库
- 3.2 基本工作流
- 3.3 分支操作
- 3.4 查看历史
- 四、高级操作
- 4.1 撤销修改
- 4.2 暂存操作
- 4.3 远程操作
- 4.4 标签操作
- 五、Git工作流
- 5.1 功能分支工作流
- 5.2 Git Flow工作流
- 5.3 Forking工作流
- 5.4 Trunk-Based开发
- 六、Git高级特性
- 6.1 Cherry Pick
- 6.2 变基操作
- 6.3 子模块
- 6.4 子树合并
- 6.5 钩子(Hooks)
- 七、Git配置与优化
- 7.1 常用配置
- 7.2 性能优化
- 7.3 安全配置
- 八、最佳实践
- 8.1 提交规范
- 8.2 分支管理
- 8.3 安全实践
- 8.4 大型仓库管理
- 九、常见问题与解决方案
- 9.1 合并冲突
- 9.2 撤销错误操作
- 9.3 找回丢失的提交
- 9.4 清理仓库
- 9.5 处理大文件
- 十、Git与其他工具集成
- 10.1 Git与IDE集成
- 10.2 Git与CI/CD集成
- 10.3 Git与项目管理工具集成
- 10.4 Git与代码审查工具
- 十一、Git进阶技巧
- 11.1 交互式暂存
- 11.2 高级日志查看
- 11.3 高级搜索
- 11.4 高级分支操作
- 11.5 高级合并策略
- 十二、Git工作流最佳实践
- 12.1 小型团队工作流
- 12.2 大型团队工作流
- 12.3 开源项目工作流
- 12.4 企业项目工作流
一、Git简介
1.1 什么是Git?
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何大小的项目。其特点是:
- 分布式系统
- 数据完整性
- 快速分支
- 完整性能
- 多工作流支持
1.2 基本概念
- 仓库(Repository):存储项目的地方
- 分支(Branch):独立的开发线
- 提交(Commit):代码修改的快照
- 远程(Remote):远程仓库
- 工作区(Working Directory):实际工作的目录
- 暂存区(Staging Area):临时存储修改的区域
- 本地仓库(Local Repository):本地的Git仓库
- HEAD:指向当前分支的最新提交
- 标签(Tag):为特定提交创建的有意义名称
- 合并(Merge):将两个分支的历史合并到一起
- 变基(Rebase):重新应用一系列提交
- 冲突(Conflict):两个分支修改了同一文件的同一部分
1.3 Git与其他版本控制系统的区别
- 集中式vs分布式:Git是分布式的,每个开发者都有完整的代码历史
- 分支管理:Git的分支创建和切换非常快速和轻量
- 数据完整性:Git使用SHA-1哈希确保数据完整性
- 性能:Git在大型项目上性能优异
- 工作流灵活性:Git支持多种工作流程
二、Git安装与配置
2.1 安装Git
# Windows
# 下载Git安装包并安装# Linux
sudo apt-get update
sudo apt-get install git# Mac
brew install git
2.2 基础配置
# 配置用户信息
git config --global user.name "Your Name"
git config --global user.email "email@example.com"# 配置默认编辑器
git config --global core.editor vim# 查看配置
git config --list# 配置别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
2.3 高级配置
# 配置凭证缓存
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'# 配置换行符处理
git config --global core.autocrlf input # Mac/Linux
git config --global core.autocrlf true # Windows# 配置颜色输出
git config --global color.ui auto# 配置默认分支名
git config --global init.defaultBranch main# 配置提交模板
git config --global commit.template ~/.gitmessage
2.4 多账户配置
# 为不同项目配置不同用户
# 在项目目录中执行
git config user.name "Work Name"
git config user.email "work@example.com"# 使用SSH密钥区分不同账户
# 在~/.ssh/config中配置
Host github-workHostName github.comUser gitIdentityFile ~/.ssh/id_rsa_workIdentitiesOnly yesHost github-personalHostName github.comUser gitIdentityFile ~/.ssh/id_rsa_personalIdentitiesOnly yes
三、基本操作
3.1 创建仓库
# 初始化新仓库
git init# 克隆远程仓库
git clone https://github.com/username/repository.git# 克隆指定分支
git clone -b branch_name https://github.com/username/repository.git# 浅克隆(只获取最近的提交)
git clone --depth 1 https://github.com/username/repository.git# 克隆子模块
git clone --recursive https://github.com/username/repository.git
3.2 基本工作流
# 查看状态
git status# 添加文件到暂存区
git add file.txt
git add . # 添加所有文件# 提交更改
git commit -m "提交说明"# 推送到远程
git push origin master# 拉取远程更新
git pull origin master
3.3 分支操作
# 查看分支
git branch# 创建分支
git branch branch_name# 切换分支
git checkout branch_name# 创建并切换分支
git checkout -b branch_name# 合并分支
git merge branch_name# 删除分支
git branch -d branch_name# 强制删除分支
git branch -D branch_name# 查看所有分支(包括远程)
git branch -a# 查看远程分支
git branch -r# 跟踪远程分支
git checkout -b local_branch origin/remote_branch
3.4 查看历史
# 查看提交历史
git log# 查看简洁历史
git log --oneline# 查看图形化历史
git log --graph --oneline --all# 查看特定文件历史
git log -- path/to/file# 查看特定作者历史
git log --author="username"# 查看特定时间段历史
git log --since="2 weeks ago"# 查看特定提交的详细信息
git show commit_id
四、高级操作
4.1 撤销修改
# 撤销工作区修改
git checkout -- file.txt# 撤销暂存区修改
git reset HEAD file.txt# 撤销提交
git revert commit_id# 重置到指定提交
git reset --hard commit_id# 软重置(保留修改)
git reset --soft commit_id# 混合重置(默认)
git reset --mixed commit_id
4.2 暂存操作
# 暂存当前修改
git stash# 查看暂存列表
git stash list# 应用暂存
git stash apply# 删除暂存
git stash drop# 应用并删除暂存
git stash pop# 暂存特定文件
git stash push -m "message" path/to/file# 创建分支并应用暂存
git stash branch new_branch_name
4.3 远程操作
# 查看远程仓库
git remote -v# 添加远程仓库
git remote add origin https://github.com/username/repository.git# 删除远程仓库
git remote remove origin# 重命名远程仓库
git remote rename old_name new_name# 获取远程更新
git fetch origin# 拉取并合并远程更新
git pull origin master# 推送到远程
git push origin master# 强制推送
git push -f origin master# 推送所有分支
git push --all origin# 推送标签
git push --tags origin
4.4 标签操作
# 创建轻量标签
git tag v1.0.0# 创建带注释的标签
git tag -a v1.0.0 -m "版本1.0.0发布"# 为特定提交创建标签
git tag -a v1.0.0 commit_id# 查看所有标签
git tag# 查看标签详情
git show v1.0.0# 推送标签到远程
git push origin v1.0.0# 推送所有标签
git push origin --tags
五、Git工作流
5.1 功能分支工作流
# 创建功能分支
git checkout -b feature/new-feature# 开发完成后合并到主分支
git checkout main
git merge feature/new-feature# 删除功能分支
git branch -d feature/new-feature
5.2 Git Flow工作流
# 初始化Git Flow
git flow init# 开始新功能
git flow feature start new-feature# 完成功能
git flow feature finish new-feature# 开始发布
git flow release start 1.0.0# 完成发布
git flow release finish 1.0.0# 开始热修复
git flow hotfix start 1.0.1# 完成热修复
git flow hotfix finish 1.0.1
5.3 Forking工作流
# 1. Fork远程仓库# 2. 克隆自己的Fork
git clone https://github.com/your-username/repository.git# 3. 添加上游仓库
git remote add upstream https://github.com/original-username/repository.git# 4. 同步上游更新
git fetch upstream
git merge upstream/main# 5. 创建功能分支
git checkout -b feature/new-feature# 6. 推送到自己的Fork
git push origin feature/new-feature# 7. 创建Pull Request
5.4 Trunk-Based开发
# 1. 从主分支创建短生命周期分支
git checkout -b feature/new-feature# 2. 频繁提交到主分支
git checkout main
git merge feature/new-feature# 3. 删除功能分支
git branch -d feature/new-feature
六、Git高级特性
6.1 Cherry Pick
# 选择指定提交应用到当前分支
git cherry-pick commit_id# 选择多个提交
git cherry-pick commit_id1 commit_id2# 解决冲突后继续
git cherry-pick --continue# 取消cherry-pick
git cherry-pick --abort
6.2 变基操作
# 变基到指定分支
git rebase master# 交互式变基
git rebase -i HEAD~3# 解决冲突后继续
git rebase --continue# 取消变基
git rebase --abort# 变基特定范围
git rebase --onto new_base old_base branch
6.3 子模块
# 添加子模块
git submodule add https://github.com/username/repository.git# 初始化子模块
git submodule init# 更新子模块
git submodule update# 递归克隆包含子模块的项目
git clone --recursive https://github.com/username/repository.git# 更新所有子模块
git submodule update --remote# 在子模块中工作
cd submodule
git checkout master
git pull
cd ..
git add submodule
git commit -m "更新子模块"
6.4 子树合并
# 添加远程仓库作为子树
git remote add -f external https://github.com/username/external-repo.git
git subtree add --prefix=external external master# 更新子树
git subtree pull --prefix=external external master# 推送子树更改
git subtree push --prefix=external external master
6.5 钩子(Hooks)
# 客户端钩子
# pre-commit: 提交前运行
# commit-msg: 提交消息验证
# pre-rebase: 变基前运行
# post-checkout: 检出后运行# 服务器端钩子
# pre-receive: 接收推送前运行
# update: 更新引用前运行
# post-receive: 接收推送后运行# 示例:pre-commit钩子
#!/bin/sh
# .git/hooks/pre-commit
echo "Running tests..."
npm test
七、Git配置与优化
7.1 常用配置
# 设置默认推送行为
git config --global push.default simple# 设置自动转换换行符
git config --global core.autocrlf true# 设置忽略文件权限变化
git config --global core.fileMode false# 设置差异比较工具
git config --global diff.tool vimdiff# 设置合并工具
git config --global merge.tool vimdiff# 设置日志格式
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
7.2 性能优化
# 开启压缩
git config --global core.compression 9# 启用文件系统缓存
git config --global core.fscache true# 设置打包限制
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"# 启用并行获取
git config --global fetch.parallel 4# 启用部分克隆
git clone --filter=blob:none https://github.com/username/repository.git# 启用稀疏检出
git sparse-checkout init
git sparse-checkout set path/to/directory
7.3 安全配置
# 设置签名验证
git config --global commit.gpgsign true
git config --global user.signingkey YOUR_GPG_KEY_ID# 设置SSH密钥
# 生成SSH密钥
ssh-keygen -t ed25519 -C "your_email@example.com"
# 添加到SSH代理
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519# 设置凭证存储
git config --global credential.helper store
# 或使用更安全的方式
git config --global credential.helper cache
八、最佳实践
8.1 提交规范
-
提交信息格式
type(scope): subjectbodyfooter
-
类型说明
- feat: 新功能
- fix: 修复bug
- docs: 文档更新
- style: 代码格式
- refactor: 重构
- test: 测试
- chore: 构建过程或辅助工具的变动
-
提交示例
feat(auth): 添加用户登录功能- 实现用户名密码登录 - 添加记住我功能 - 集成第三方登录Closes #123
8.2 分支管理
-
分支命名
- master/main: 主分支
- develop: 开发分支
- feature/*: 功能分支
- hotfix/*: 紧急修复分支
- release/*: 发布分支
-
合并策略
- 使用Pull Request
- 进行Code Review
- 保持分支整洁
- 使用合并提交而非快进合并
- 定期合并主分支到功能分支
-
分支保护
- 保护主分支
- 要求代码审查
- 要求状态检查通过
- 限制直接推送
8.3 安全实践
-
敏感信息
- 使用.gitignore
- 避免提交密码
- 使用环境变量
- 使用git-secrets工具
-
权限控制
- 设置分支保护
- 使用签名验证
- 定期备份
- 限制直接推送到主分支
-
清理历史
- 使用git filter-branch清理敏感信息
- 使用BFG Repo-Cleaner工具
- 强制推送清理后的历史
8.4 大型仓库管理
-
模块化
- 使用子模块
- 使用子树合并
- 使用monorepo工具
-
性能优化
- 使用浅克隆
- 使用部分克隆
- 使用稀疏检出
- 定期进行垃圾回收
-
工作流优化
- 使用功能标志
- 使用特性分支
- 使用持续集成
- 使用自动化测试
九、常见问题与解决方案
9.1 合并冲突
# 查看冲突文件
git status# 解决冲突
# 手动编辑冲突文件
# 或使用合并工具
git mergetool# 标记为已解决
git add resolved_file.txt# 完成合并
git commit -m "解决合并冲突"
9.2 撤销错误操作
# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1# 撤销最后一次提交(丢弃修改)
git reset --hard HEAD~1# 撤销已推送的提交
git revert commit_id
git push origin master# 修改最后一次提交
git commit --amend
9.3 找回丢失的提交
# 查看操作历史
git reflog# 恢复丢失的提交
git checkout -b recovery_branch commit_id# 或直接重置
git reset --hard commit_id
9.4 清理仓库
# 清理未跟踪的文件
git clean -n # 预览
git clean -f # 执行# 清理已忽略的文件
git clean -X# 清理所有未跟踪的文件和目录
git clean -fd# 压缩仓库
git gc# 深度压缩
git gc --aggressive
9.5 处理大文件
# 使用Git LFS
# 安装Git LFS
git lfs install# 跟踪大文件
git lfs track "*.psd"
git add .gitattributes# 正常添加和提交
git add file.psd
git commit -m "添加大文件"# 查看跟踪的文件
git lfs ls-files
十、Git与其他工具集成
10.1 Git与IDE集成
- VS Code:内置Git支持
- IntelliJ IDEA:强大的Git集成
- Eclipse:EGit插件
- Visual Studio:Git集成
- Sublime Text:Git插件
10.2 Git与CI/CD集成
- GitHub Actions
- GitLab CI
- Jenkins
- CircleCI
- Travis CI
10.3 Git与项目管理工具集成
- GitHub Issues
- GitLab Issues
- Jira
- Trello
- Asana
10.4 Git与代码审查工具
- GitHub Pull Requests
- GitLab Merge Requests
- Gerrit
- Phabricator
- Review Board
十一、Git进阶技巧
11.1 交互式暂存
# 交互式添加文件
git add -i# 交互式暂存补丁
git add -p
11.2 高级日志查看
# 查看特定作者的提交
git log --author="username"# 查看特定时间段的提交
git log --since="2 weeks ago" --until="1 week ago"# 查看特定文件的修改历史
git log -p path/to/file# 查看特定提交的统计信息
git show --stat commit_id
11.3 高级搜索
# 搜索提交信息
git log --grep="关键词"# 搜索代码内容
git log -S "代码片段"# 搜索特定行
git log -L 10,20:path/to/file
11.4 高级分支操作
# 重命名分支
git branch -m old_name new_name# 移动分支到新的提交
git branch -f branch_name commit_id# 删除已合并的分支
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
11.5 高级合并策略
# 使用ours策略
git merge -X ours branch_name# 使用theirs策略
git merge -X theirs branch_name# 使用patience策略
git merge -X patience branch_name
十二、Git工作流最佳实践
12.1 小型团队工作流
- 主分支(main)用于生产环境
- 开发分支(develop)用于开发
- 功能分支(feature/*)用于新功能
- 发布分支(release/*)用于准备发布
- 热修复分支(hotfix/*)用于紧急修复
12.2 大型团队工作流
- 使用Git Flow或类似工作流
- 实施代码审查流程
- 使用持续集成/持续部署
- 实施自动化测试
- 使用功能标志管理功能发布
12.3 开源项目工作流
- 使用Forking工作流
- 维护清晰的贡献指南
- 使用Issue跟踪问题
- 使用Pull Request进行代码审查
- 维护更新日志
12.4 企业项目工作流
- 实施严格的代码审查
- 使用环境分支(dev, staging, prod)
- 实施自动化测试和部署
- 使用版本控制和语义化版本
- 实施安全扫描和合规检查
相关文章:
Git基础知识
Git基础知识 目录 一、Git简介 1.1 什么是Git?1.2 基本概念1.3 Git与其他版本控制系统的区别 二、Git安装与配置 2.1 安装Git2.2 基础配置2.3 高级配置2.4 多账户配置 三、基本操作 3.1 创建仓库3.2 基本工作流3.3 分支操作3.4 查看历史 四、高级操作 4.1 撤销修改…...
【Flink运行时架构】核心组件
在Flink的运行架构中,有两大比较重要的组件:作业管理器(JobManager)和任务管理器(TaskManager)。 Flink的作业提交与任务处理时的系统如下图所示。 其中,客户端并不是处理系统的一部分ÿ…...
【区块链安全 | 第四十篇】合约审计之delegatecall(二)
文章目录 漏洞代码代码分析攻击流程攻击代码前文重现修复建议审计思路 在阅读本文之前,请确保已先行阅读:【区块链安全 | 第三十九篇】合约审计之delegatecall(一) 漏洞代码 存在一漏洞代码如下: // 库合约…...
Redis实现分布式定时任务
设计思路 任务表示:每个任务通过一个特定格式的键来表示。键名可以包含任务ID等信息,值可以是任务的具体内容或指向任务详情的引用。过期机制:利用Redis的EXPIRE命令为任务设置过期时间,当到达设定的时间点时,Redis会…...
ERC20合约的基本调用
文章目录 ERC20合约的基本调用合约功能compile.js 代码读取文件 进行合约编译获取二进制对象导出对象 index.js 代码编译合约读取私钥设置收款账户构造 web3 对象获取账户地址获取 abi 和 bin创建合约交易部署合约构造转账交易验证转账后余额 测试项目目录执行查询 ERC20合约的…...
『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解
『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解 Pod 结构 每个 Pod 中都可以包含一个或者多个容器,这些容器可以分为两类 用户程序所在的容器,数量可多可少Pause 容器,这是每个 Pod 都会有的一个根容器,它的作用有两个 可…...
【React框架】什么是 Vite?如何使用vite自动生成react的目录?
什么是 Vite? Vite 是一个基于原生 ES Modules 开发的前端构建工具,由 Evan You(Vue 的作者)开发。它最大的特点包括: 极速冷启动:因为利用了浏览器原生的 ES Modules,所以在开发时无需等待整…...
JS实现文件点击或者拖拽上传
B站看到了渡一大师课的切片,自己实现了一下,做下记录 效果展示 分为上传前、上传中和上传后 实现 分为两步 界面交互网络请求 源码如下 upload.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset&q…...
【Vue #3】指令补充样式绑定
一、指令修饰符 Vue 的指令修饰符(Directive Modifiers)是 Vue 模板语法中的重要特性,它们以半角句号 . 开头,用于对指令的绑定行为进行特殊处理 修饰符作用如下: 简化事件处理(如阻止默认行为、停止冒泡…...
Vue.js组件安全工程化演进:从防御体系构建到安全性能融合
——百万级流量场景下的安全组件架构与源码级解决方案 文章目录 总起:安全工程化的组件革命 分论: 一、现存组件架构的七宗罪与安全改造路径 1.1 组件生态安全赤字现状 1.2 架构级安全缺陷深度剖析 1.3 性能与安全的死亡螺旋 二、百万级…...
LINUX基础 [二] - Linux常见指令
目录 💻前言 💻指令 🎮ls指令 🎮pwd指令 🎮whoami指令 🎮cd指令 🎮clear指令 🎮touch指令 🎮mkdir指令 🎮rmdir指令 🎮rm指令 &#…...
Linux进阶命令
目录 一、touch 1. 基本语法 2. 常用选项 二、which 1. 基本语法 2. 主要功能 3. 常用选项 三、find 1. 基本语法 2. 常用选项和表达式 四、more 1. 基本语法 2. 常用操作 3. 对比 more 和 less 五、grep 1. 基本语法 2. 常用选项 六、wc 1. 基本语法 2. 常…...
【Spring Boot 过滤器】
文章目录 前言一、什么是过滤器 Filter?二、Spring Boot 中使用 Filter 的方式1. 使用 Component 注解2. 使用 FilterRegistrationBean 显式注册 三、自定义过滤器示例1. 引入必要依赖2. 创建一个自定义 Filter3. 使用 FilterRegistrationBean 显式注册 四、多个 Fi…...
SPI通讯的软硬件NSS SSM SSI
学习自记: 1. NSS(Slave Select,从设备选择) 功能: NSS是SPI通信中用于选择从设备的信号线。主设备通过拉低NSS信号选中某个从设备,使其参与通信。通信结束后,主设备释放NSS&#…...
Java基础:集合List、Map、Set(超详细版)
集合体系概述 Collection常用方法 补充:addAll() Collection的遍历方式 迭代器 增强for(空集合可以,null不可以) lambda 集合对象存储对象原理 遍历方式的区别 List集合 特点、特有方法 遍历方式 (同上)…...
vue+leaflet 区域划分_反向遮罩层
leaflet 区域划分_遮罩层 geojson在线生成器网址:(https://datav.aliyun.com/portal/school/atlas/area_selector) 点击前往阿里云geojson生成器 效果图: 实现下面效果,只需要把addSateLayer函数的调用取消掉就好了. //添加遮罩层代码function addMask() {var latlngs;var fe…...
聊一聊原子操作和弱内存序
1、原子操作概念 在并发编程中,原子操作(Atomic Operation)是实现线程安全的基础机制之一。从宏观上看,原子操作是“不可中断”的单元,但若深入微观层面,其本质是由底层处理器提供的一组特殊指令来保证其原…...
免费送源码:Java+ssm+MySQL 校园二手书销售平台设计与实现 计算机毕业设计原创定制
摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对校园二手书销售平台等问题,对校…...
DAPP实战篇:使用ethersjs连接智能合约并输入地址查询该地址余额
本系列目录 专栏:区块链入门到放弃查看目录-CSDN博客文章浏览阅读400次。为了方便查看将本专栏的所有内容列出目录,按照顺序查看即可。后续也会在此规划一下后续内容,因此如果遇到不能点击的,代表还没有更新。声明:文中所出观点大多数源于笔者多年开发经验所总结,如果你…...
14.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--CAP
CAP 是一款专为 .NET 生态设计的开源框架,其核心目标是解决微服务中跨服务数据一致性问题。在分布式系统中,传统事务无法跨服务保证数据一致性,CAP 通过本地事务与消息记录绑定,再利用消息中间件(如 RabbitMQ、Kafka 等…...
智能资源管理机制-重传机制
一、发送端资源管理的核心机制 1. 滑动窗口(Sliding Window) 这是TCP协议的核心优化设计: 窗口动态滑动:发送端不需要保留所有已发送的分组,只需维护一个"发送窗口"窗口大小:由接收方通告的接…...
【Linux网络与网络编程】08.传输层协议 UDP
传输层协议负责将数据从发送端传输到接收端。 一、再谈端口号 端口号标识了一个主机上进行通信的不同的应用程序。在 TCP/IP 协议中,用 "源IP","源端口号","目的 IP","目的端口号"&…...
局域网下ESP32-S3 LED灯的UDP控制
在局域网下通过IP地址控制ESP32-S3上的LED,可以使用UDP或TCP协议。以下是一个基于UDP协议的完整示例,包括ESP32-S3的服务器代码和一个简单的Python客户端代码。 ESP32-S3 服务器代码 import socket import time import network import machineled Non…...
call、bind、apply
call、bind、apply它们三个都是函数的方法,都可以用于改变this的指向问题。 var person "liangxiao" let obj {name:"张三",say:function() {console.log(this.name);} }obj.say(); setTimeout(function() {obj.say(); },1000) obj.say()打…...
Redis 哨兵模式 搭建
1 . 哨兵模式拓扑 与 简介 本文介绍如何搭建 单主双从 多哨兵模式的搭建 哨兵有12个作用 。通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。 当哨兵监测到master宕机,会自动将slave切换成master,然后通过…...
客户端负载均衡与服务器端负载均衡详解
客户端负载均衡与服务器端负载均衡详解 1. 客户端负载均衡(Client-Side Load Balancing) 核心概念 定义:负载均衡逻辑在客户端实现,客户端主动选择目标服务实例。典型场景:微服务内部调用(如Spring Cloud…...
Ningx负载均衡
Ningx负载均衡 upstream(上游)配置负载均衡1、weight(加权轮询)2、ip_hash(负载均衡)3、url hash负载均衡4、least_conn(最小连接负载均衡) upstream(上游)配置负载均衡 Nginx负载均衡 参考: nginx从安装…...
头歌软件工程导论UML画图题(基于starUML)
一.结构化分析方法-数据流图 本关卡需要画图的一共有5关,直接将此图画好每关提交一次即可,以下的所有图均以此方法提交 二.面向对象分析之用例图 三.面向对象分析之类图 注意此处创建Class之后,双击Class出现以下选项 点击相应的选项创建属性…...
智能车摄像头开源—9 动态权、模糊PID、速度决策、路径优化
目录 一、前言 二、动态权 1.概述 2.偏差值加动态权 三、模糊PID 四、速度决策 1.曲率计算 2.速度拟合 3.速度控制 五、路径 六、国赛视频 一、前言 在前中期通过识别直道、弯道等元素可进行加减速操作实现速度的控制,可进一步缩减一圈的运行速度ÿ…...
java基础 this和super的介绍
this和super this关键字的用法super关键字的用法this与super的区别和注意事项 this关键字的用法 this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针 class Person{private String name;private int age;public String …...
《Python星球日记》第25天:Pandas 数据分析
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 订阅专栏:《Python星球日记》 目录 一、引言二、数据分组与聚合1. 分组操…...
C++在Linux上生成动态库并调用接口测试
加减乘除demo代码 项目结构 CPP/ ├── calculator.cpp ├── calculator.h ├── main.cpp 头文件 #ifndef CALCULATOR_H #define CALCULATOR_H#ifdef __cplusplus extern "C" {#endifdouble add(double a, double b);double subtract(double a, double b…...
Cesium.js(6):Cesium相机系统
Camera表示观察场景的视角。通过操作摄像机,可以控制视图的位置、方向和角度。 帮助文档:Camera - Cesium Documentation 1 setView setView 方法允许你指定相机的目标位置和姿态。你可以通过 Cartesian3 对象来指定目标位置,并通过 orien…...
机器学习中的数学(PartⅡ)——线性代数:概述
首先引入代数和线性代数的概念: 在将一些直观的、基于经验或直觉的概念转化为严格的数学或逻辑定义时,一种常用方法是构建一组对象和一组操作这些对象的规则,这就是代数。线性代数是研究向量和某些操作向量的规则。 其次从更广泛的意义上定…...
基于双闭环PID控制器的永磁同步电机控制系统匝间故障Simulink仿真
欢迎微♥关注“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2013Rb)软件。建议采用matlab2013 Rb及以上版本打开。(若需要其他版本可联系代为转换,高于该版本的matlab均可正…...
在51单片机上实现平滑呼吸灯:50us定时器PWM实战指南
在51单片机上实现平滑呼吸灯:50us定时器PWM实战指南 引言 本文将详细介绍如何在51单片机平台上,通过精确的50us定时器中断实现无闪烁的呼吸灯效果。相比常见的125us实现方案,50us定时器能提供更高的PWM频率和更细腻的亮度控制。 硬件设计 基本电路配置 主控芯片:SC92F8…...
asm汇编源代码之CPU型号检测
提供1个子程序: 1. CPU型号检测 CPUTYPE 无输入参数,返回值AX指示CPU类型(报歉,当时最新CPU型号只有80486) 函数的返回值详细描述如下 CPUTYPE PROC FAR ;OUT: AX01, 8086; AX02, 80286; AX03, 80386; AX04, 80486 UP; ; more source code at http://www.ahj…...
提高课:数据结构之树状数组
1,楼兰图腾 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm>using namespace std;typedef long long LL;const int N 200010;int n; int a[N]; int tr[N]; int Greater[N], lower[N];int lowbit(int x) {ret…...
python可变对象与不可变对象
文章目录 Python 中的可变对象与不可变对象不可变对象(Immutable Objects)可变对象(Mutable Objects)重要区别 Python 中的可变对象与不可变对象 在 Python 中,对象可以分为可变对象(mutable)和不可变对象(immutable),这是 Python 中非常重要的概念&…...
C++学习之金融类安全传输平台项目git
目录 1.知识点概述 2.版本控制工具作用 3.git和SVN 4.git介绍 5.git安装 6.工作区 暂存区 版本库概念 7.本地文件添加到暂存区和提交到版本库 8.文件的修改和还原 9.查看提交的历史版本信息 10.版本差异比较 11.删除文件 12.本地版本管理设置忽略目录 13.远程git仓…...
果篮问题 Python
# 给你两个长度为 n 的整数数组,fruits 和 baskets,其中 fruits[i] 表示第 i 种水果的 数量,baskets[j] 表示第 j 个篮子的 容量。 # 你需要对 fruits 数组从左到右按照以下规则放置水果: # 每种水果必须放入第一个 容量大于等于 …...
Spring 是如何解决循环依赖的?
在使用 Spring 框架进行开发时,循环依赖是一个常见而棘手的问题。循环依赖指的是两个或多个 bean 之间的相互依赖,导致 Spring 容器无法正常创建这些 bean。下面将深入探讨 Spring 如何解决循环依赖问题,并提供一些最佳实践。 什么是循环依赖…...
部署NFS版StorageClass(存储类)
部署NFS版StorageClass存储类 NFS版PV动态供给StorageClass(存储类)基于NFS实现动态供应下载NFS存储类资源清单部署NFS服务器为StorageClass(存储类)创建所需的RBAC部署nfs-client-provisioner的deployment创建StorageClass使用存储类创建PVC NFS版PV动态供给StorageClass(存储…...
深入理解 PyTorch 的 nn.Embedding:词向量映射及变量 weight 的更新机制
文章目录 前言一、直接使用 nn.Embedding 获得变量1、典型场景2、示例代码:3、特点 二、使用 iou_token nn.Embedding(1, transformer_dim) 并访问 iou_token.weight1、典型场景2、示例代码:3、特点 三、第一种方法在模型更新中会更新其值吗?…...
go语言内存泄漏的常见形式
go语言内存泄漏 子字符串导致的内存泄漏 使用自动垃圾回收的语言进行编程时,通常我们无需担心内存泄漏的问题,因为运行时会定期回收未使用的内存。但是如果你以为这样就完事大吉了,哪里就大错特措了。 因为,虽然go中并未对字符串…...
操作系统
操作系统 操作系统(OperatingSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统…...
《JVM考古现场(十八):造化玉碟·用字节码重写因果律的九种方法》
"鸿蒙初判!当前因果链突破十一维屏障——全体码农修士注意,《JVM考古现场(十八)》即将渡劫飞升!" 目录 上卷阴阳交缠 第一章:混沌初开——JVM因果律的量子纠缠 第二章:诛仙剑阵改—…...
【2】k8s集群管理系列--包应用管理器之helm(Chart语法深入应用)
一、Chart模板:函数与管道 常用函数: • quote:将值转换为字符串,即加双引号 • default:设置默认值,如果获取的值为空则为默认值 • indent和nindent:缩进字符串 • toYaml:引用一…...
汇编获取二进制
mov_.S mov %r8d,0 nop执行命令: gcc -c mov_.S 会输出 mov_.o 文件:objdump -D mov_.o : mov_.o: 文件格式 elf64-x86-64Disassembly of section .text:0000000000000000 <.text>:0: 44 89 04 25 00 00 00 mov %r8d,0x0…...
《嵌套调用与链式访问:C语言中的函数调用技巧》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、嵌套调用(一)定义(二)实现方式(三)优点(四)缺点 二、链式…...