Git 命令代码管理详解
一、Git 初相识:版本控制的神器
在当今的软件开发领域,版本控制如同基石般重要,而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造,最初是为了更好地管理 Linux 内核源代码。随着时间的推移,Git 凭借其卓越的特性,迅速在全球开发者社区中广泛传播,成为了现代软件开发过程中不可或缺的关键工具。
想象一下,没有版本控制的软件开发会是怎样一番混乱景象:代码频繁修改,一旦出现问题,很难追溯到错误源头;团队协作时,成员各自为政,代码合并冲突不断,项目进度受阻。而 Git 的出现,完美地解决了这些痛点。
对于个人开发者而言,Git 就像是一位贴心的助手。当你独自探索项目时,它能帮你记录每一次代码的改动,无论是新功能的添加、Bug 的修复,还是代码结构的优化。你可以随时回顾之前的版本,找回那些可能被误删或改错的代码片段,让你的开发过程更加从容不迫。
在团队协作场景下,Git 更是发挥着无可替代的作用。它允许多个开发者同时在不同的分支上工作,互不干扰。例如,一个电商项目团队,前端开发人员可以在 “frontend-feature” 分支专注优化页面交互,后端开发人员在 “backend-api” 分支全力开发新的接口,等各自功能稳定后,再轻松地将分支合并到主分支,实现无缝对接。这种并行开发的模式,极大地提高了团队的开发效率,让项目能够快速迭代推进。
不仅如此,Git 还具备强大的分布式特性。每个开发者都拥有本地仓库,即便在没有网络连接的情况下,依然可以正常进行代码提交、查看历史记录等操作。等到网络恢复,再与远程仓库同步,确保团队成员之间的代码始终保持一致。
可以说,掌握 Git,就等于掌握了软件开发的主动权,它能让你的开发之路更加顺畅,让团队协作更加高效,开启代码管理的全新篇章。接下来,就让我们深入探索 Git 的奇妙世界,领略那些常用命令的魅力。
二、Git 的基础命令:开启代码管理之旅
现在,让我们正式踏上 Git 的学习之旅,从那些最基础、最常用的命令开始。
- git init:这是你在 Git 世界迈出的第一步,用于初始化一个新的本地 Git 仓库。想象你有一个全新的项目文件夹,里面存放着刚写的代码文件,在项目根目录下打开终端,输入 “git init”,瞬间,Git 就为你创建了一个隐藏的.git 文件夹,这里面藏着 Git 管理项目所需的所有 “魔法道具”,比如版本历史记录、分支信息等,你的项目就此被纳入 Git 的版本控制体系,开启了可追溯、可管理的新篇章。例如:
$ mkdir my_project $ cd my_project $ git init Initialized empty Git repository in /Users/yourname/my_project/.git/
- git clone:当你想要获取一份远程仓库(如 GitHub、GitLab 上的项目)的副本到本地时,它就派上用场了。语法是 “git clone [远程仓库地址]”,执行后,Git 会在本地创建一个与远程仓库同名的文件夹,把远程仓库的代码、分支等信息完整地拷贝过来,你就可以在本地尽情地探索、修改代码了。比如:
$ git clone https://github.com/username/repository.git Cloning into 'repository'... remote: Enumerating objects: 100, done. remote: Counting objects: 100% (100/100), done. remote: Compressing objects: 100% (50/50), done. remote: Total 100 (delta 30), reused 80 (delta 20) Receiving objects: 100% (100/100), 10.00 KiB | 10.00 KiB/s, done. Resolving deltas: 100% (30/30), done.
- git add:代码写好、修改完,想要提交到仓库,得先把它们添加到暂存区,这就是 “git add” 的活儿。你可以 “git add [具体文件名]” 逐个添加,也能用 “git add.” 一键添加当前目录下所有修改和新增的文件。比如:
$ git add main.py $ git add.
- git commit:文件添加到暂存区后,就该 “git commit” 登场,将暂存区的内容提交到本地仓库,形成一个版本记录。“git commit -m ' 提交说明 '” 是最常用的方式,提交说明要简洁明了,概括本次提交的改动内容,方便后续回溯查找问题。例如:
$ git commit -m "修复登录页面的密码验证Bug" [master 123abcde] 修复登录页面的密码验证Bug1 file changed, 5 insertions(+), 3 deletions(-)
- git status:它就像一个贴心的小助手,随时告诉你当前仓库的状态。运行 “git status”,它会显示哪些文件已修改未暂存、哪些文件已暂存未提交、有没有新建的未跟踪文件等信息,让你对项目的代码变动了如指掌。比如:
$ git status On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: README.mdUntracked files:(use "git add <file>..." to include in what will be committed)new_feature.pyno changes added to commit (use "git add" and/or "git commit -a")
- git diff:好奇自己改了哪些代码?“git diff” 帮你查看工作区与暂存区的差异,展示哪些行被添加、修改或删除,助你精细把控代码变动。若想看暂存区与上次提交的差异,用 “git diff --cached”。像这样:
$ git diff diff --git a/main.py b/main.py index 123456..654321 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,8 @@ def login():username = input("请输入用户名:")password = input("请输入密码:")if username == "admin" and password == "123456": + print("登录成功,欢迎管理员!")return Trueelse:print("用户名或密码错误")
- git log:想回顾项目的提交历史,“git log” 就是时光机。它按时间倒序列出每次提交的作者、日期、提交 ID 和提交说明,你能清晰看到项目的演进脉络,还能用 “git log -p” 查看每次提交的详细代码变动。例如:
$ git log commit 123abcde (HEAD -> master) Author: Your Name <your@email.com> Date: Mon Jan 1 10:00:00 2024 -0800修复登录页面的密码验证Bugcommit 456defgh Author: Your Name <your@email.com> Date: Sun Dec 31 15:00:00 2023 -0800添加用户注册功能...
这些基础命令如同基石,构建起你使用 Git 进行版本控制的底层架构,熟练掌握它们,后续的高级玩法才能信手拈来。
三、分支管理:并行开发的利器
在 Git 的强大功能体系中,分支管理犹如一把利剑,为开发者开辟出并行开发的广阔天地。它允许我们在同一项目下,同时进行多个功能的开发、测试与修复,互不干扰,极大地提升了开发效率。
- git branch:这是分支管理的基础命令,用于查看本地分支列表。在终端输入 “git branch”,当前所在分支前会标有 “*” 号,一目了然。例如:
$ git branch * masterdevfeature-a
若要创建新分支,使用 “git branch [分支名]”。比如,启动一个新功能开发,可创建 “feature-b” 分支:
$ git branch feature-b
它只是创建了分支指针,指向当前提交,HEAD 仍指向原分支。若想创建并切换到新分支,用 “git checkout -b [分支名]” 更便捷,一步到位。像这样:
$ git checkout -b fix-bug Switched to a new branch 'fix-bug'
- git checkout:是切换分支的得力工具。执行 “git checkout [分支名]”,就能让 HEAD 指向目标分支,工作区、暂存区也随之切换。如在 “feature-a” 开发告一段落,切换回 “master”:
$ git checkout master Switched to branch'master'
若未提交修改就切换,Git 会阻止并提示提交或暂存,防止工作丢失。不过,加上 “-f” 参数可强制切换,覆盖本地修改,慎用!另外,“git checkout” 还能恢复文件,“git checkout -- [文件名]” 可从暂存区或上次提交恢复文件,撤销工作区修改。假设改错了 “main.py”,用它轻松找回:
$ git checkout -- main.py
- git merge:用于合并分支,将指定分支合并到当前分支。常见场景是把开发完的功能分支合并到主分支。如 “feature-a” 稳定后,切换到 “master” 合并:
$ git checkout master $ git merge feature-a Updating 123456..abcdef Fast-forwardmain.py | 10 +++++++---README.md | 5 ++++-2 files changed, 12 insertions(+), 3 deletions(-)
这里出现 “Fast-forward”,是 Git 自动采用的快进式合并,因 “feature-a” 基于 “master” 最新提交,无新分叉,Git 直接将 “master” 指针移到 “feature-a” 最新提交。但多分支并行开发复杂,常遇非快进合并,产生合并冲突,需手动解决。比如 “dev” 和 “master” 同时改 “config.ini” 不同部分,合并就会冲突:
$ git merge dev Auto-merging config.ini CONFLICT (content): Merge conflict in config.ini Automatic merge failed; fix conflicts and then commit the result.
此时,打开 “config.ini”,会看到 Git 用 “<<<<<<<”“=======”“>>>>>>>” 标记冲突内容,手动选保留或修改后,“git add” 标记解决,再 “git commit” 完成合并。
- git cherry-pick:这是个强大且灵活的命令,能将指定提交应用到当前分支,无需合并整个分支。比如 “feature-b” 分支某次提交修复关键 Bug,想快速应用到 “master”:
$ git checkout master $ git cherry-pick abcdef # abcdef是修复Bug的提交哈希值 [master 789ghi] Fix critical bug1 file changed, 5 insertions(+), 3 deletions(-)
它不仅能挑单个提交,还支持多个,用空格分隔哈希值或指定范围,如 “git cherry-pick abcdef 123456” 或 “git cherry-pick abcdef^..67890”(不含起始提交)。若操作冲突,解决方法类似合并冲突,修改后 “git add”,再用 “git cherry-pick --continue” 继续,想放弃就 “git cherry-pick --abort”。
合理运用分支管理策略,结合这些命令,能让团队协作如虎添翼,不同功能并行推进、快速整合,项目迭代更高效。
四、远程仓库交互:团队协作的桥梁
在现代软件开发的协作舞台上,与远程仓库的交互是 Git 的核心好戏。它打破了地域与设备的限制,让全球开发者能无缝对接,共同雕琢代码大厦。
- git remote:这是管理远程仓库连接的 “总控台”。输入 “git remote”,不带参数,能列出本地仓库关联的所有远程仓库简称,像常见的 “origin”。若加 “-v” 参数,即 “git remote -v”,它会详细展示每个远程仓库的简称与对应的 URL,让你清楚数据流向何处。比如:
$ git remote origin $ git remote -v origin https://github.com/username/repository.git (fetch) origin https://github.com/username/repository.git (push)
初次接触项目,需添加远程仓库,用 “git remote add [简称] [URL]”。如团队新建 GitHub 仓库,你在本地项目执行:
$ git remote add origin https://github.com/teamname/project.git
就建立了本地与远程的纽带,后续推送、拉取就靠它指引方向。若远程地址变更,可用 “git remote set-url [简称] [新 URL]” 更新,无缝切换数据源。
- git pull:它是团队保持同步的关键动作,用于从远程仓库拉取最新代码并合并到本地当前分支。本质上,它是 “git fetch” 与 “git merge” 的组合拳。执行 “git pull”,默认从 “origin” 远程仓库拉取当前分支对应的远程分支代码,自动合并。像:
$ git pull remote: Enumerating objects: 10, done. remote: Counting objects: 100% (10/10), done. remote: Compressing objects: 100% (5/5), done. remote: Total 10 (delta 3), reused 8 (delta 2) Receiving objects: 100% (10/10), 1.00 KiB | 1.00 KiB/s, done. Resolving deltas: 100% (3/3), done. Updating 123456..abcdef Fast-forwardmain.py | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)
这里 “Fast-forward” 表示快进合并,远程分支领先且无分叉,本地分支指针直接前移。但多分支并行常遇冲突,拉取时 Git 会暂停,提示手动解决冲突,修改文件、“git add” 标记、“git commit” 完成合并,确保代码和谐统一。
- git push:开发者将本地成果推向世界的有力工具,把本地分支更新推送到远程仓库对应分支。格式为 “git push [远程主机名] [本地分支名]:[远程分支名]”。如将本地 “master” 分支推送到 “origin” 的 “master”:
$ git push origin master Counting objects: 20, done. Delta compression using up to 4 threads. Compressing objects: 100% (15/15), done. Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done. Total 20 (delta 5), reused 0 (delta 0) To https://github.com/username/repository.git123456..abcdef master -> master
首次推送新分支,建议加 “-u” 参数,如 “git push -u origin feature-branch”,它不仅推送,还建立本地分支与远程分支追踪关系,后续 “git push”“git pull” 可省略分支名,自动匹配。若远程分支有新提交且冲突,需先拉取合并;若执意推送覆盖,用 “--force” 参数,但这可能破坏他人工作,务必谨慎,协作中沟通先行,避免 “代码战争”。
五、标签管理:项目里程碑的标记
在 Git 的世界里,标签(Tag)扮演着至关重要的角色,它像是一个个醒目的里程碑,标记着项目发展历程中的关键节点。无论是软件版本的发布,还是重要功能的完成,都能通过标签精准定位,让项目管理更加井然有序。
使用 “git tag” 命令可以轻松创建标签。最简单的形式,直接在命令后跟上标签名称,如 “git tag v1.0”,便能为当前所在的提交打上一个名为 “v1.0” 的轻量标签。这种轻量标签就像是一个便捷的书签,指向特定的提交,不过它仅包含最基本的信息,没有额外的附注。若你想要创建带有详细信息的附注标签,可以使用 “git tag -a [标签名] -m [附注信息]” 的形式。例如,“git tag -a v2.0 -m ' 正式发布第二版,包含全新界面设计与优化功能 '”,这样创建的标签不仅能标记版本,还记录了版本的关键特性,方便后续回溯查阅。
想查看已有的标签,只需在终端输入 “git tag”,所有的标签就会按字典序整齐列出,一目了然。若你对某个特定标签的详细信息感兴趣,比如它对应的提交详情、作者、创建日期以及附注内容等,可以使用 “git show [标签名]” 命令。像查看刚刚创建的 “v2.0” 标签的详细信息,运行 “git show v2.0”,屏幕上便会清晰展示出该标签所关联提交的所有相关信息,仿佛打开了一扇通往当时开发场景的时光之门。
有时候,项目推进过程中,可能需要删除一些不再适用或打错的标签。删除本地标签使用 “git tag -d [标签名]” 命令,比如发现之前的 “v1.0-test” 标签有误,执行 “git tag -d v1.0-test” 就能迅速清理。不过要注意,默认情况下,创建的标签仅存储在本地,并不会自动推送到远程仓库。如果要推送标签到远程,让团队成员共享,需使用 “git push origin [标签名]” 命令,如 “git push origin v2.0”,将本地的 “v2.0” 标签推送到远程仓库 “origin”。要是本地积累了多个标签,想要一次性全部推送到远端,使用 “git push origin --tags” 即可,简单高效,确保远程与本地标签状态一致,团队成员都能基于统一的版本标记开展工作。
六、撤销与回退:错误修正的后悔药
在软件开发的漫长旅程中,即便经验丰富的开发者,也难免会踏入代码的 “雷区”,犯下一些错误。幸运的是,Git 提供了一系列强大的撤销与回退命令,如同给我们配备了 “后悔药”,让修正错误不再困难重重。
当我们在工作区对文件进行了修改,却突然意识到这是个错误的方向,想要撤销这些尚未暂存的更改时,“git checkout -- [文件名]” 就是我们的救星。它能迅速将指定文件恢复到最近一次提交或暂存时的状态。比如,你在 “main.py” 中写了一些测试代码,后来发现并不需要,执行 “git checkout -- main.py”,文件就会瞬间回到之前的干净版本,仿佛错误从未发生过。
要是已经使用 “git add” 将修改添加到了暂存区,但还没提交,而此时你又想撤回暂存区的更改,让文件回到工作区未暂存时的模样,“git reset HEAD [文件名]” 便能派上用场。它巧妙地将暂存区的修改回退到工作区,给你重新审视代码的机会。假设你不小心把一些调试信息也 “git add” 了,执行 “git reset HEAD main.py”,这些调试信息就从暂存区撤回,等待你的进一步处理。
而一旦错误的代码已经提交到了本地仓库,想要回退版本,就需要根据不同的场景选择合适的命令。如果只是想在本地仓库撤销某次提交,并且希望保留工作区和暂存区的更改,以便后续继续修改,“git reset --soft [提交哈希值]” 是个不错的选择。它会温柔地将 HEAD 指针移动到指定提交,版本库回退,但工作区和暂存区不受影响,让你可以轻松调整代码后重新提交。例如,你提交了一个功能,但发现漏了一些关键优化,使用 “git reset --soft [上一版本哈希值]” 回退,接着完善代码再提交即可。
与之相对的,“git reset --hard [提交哈希值]” 则是一剂猛药。它会毫不留情地将暂存区与工作区都强制回退到指定版本,彻底抹去后续的提交记录。这在你确定某个错误提交导致项目完全偏离正轨,想要彻底重来时非常有用,但务必谨慎使用,因为一旦执行,未提交的代码将永久丢失。
还有一种情况,当你已经将错误的提交推送到了远程仓库,想要补救就需要更加小心谨慎。首先在本地使用上述合适的 “git reset” 命令回退版本,然后使用 “git push origin [分支名] --force” 强制推送到远程仓库。不过,这种强制推送会重写远程仓库的历史记录,极有可能影响其他协作者的工作,所以在操作之前,一定要与团队成员充分沟通,达成共识,避免引发 “代码冲突大战”。
另外,“git stash” 命令也独具魅力,它能将当前工作区的修改暂存起来,让你的工作区瞬间变得干净整洁,就像把杂乱的物品暂时收纳进了一个魔法盒子。当你正在开发一个新功能,突然遇到紧急 Bug 需要修复,而当前工作区的代码又尚未完成不宜提交时,“git stash” 就能大显身手。执行后,你的修改被安全保存,工作区切换到上次提交的状态,等 Bug 修复完,再通过 “git stash pop” 将暂存的修改取出来,继续未完成的工作,无缝衔接,高效便捷。
七、进阶技巧:提升效率的秘籍
当你熟练掌握了 Git 的基础与核心命令后,是时候探索一些进阶技巧,进一步提升开发效率,让你在代码管理的世界里游刃有余。
想查看某个特定文件的详细历史记录,“git log [文件名]” 便能精准定位。比如,你想追溯 “config.ini” 的配置变更历程,输入 “git log config.ini”,它会列出该文件的所有提交记录,包括每次提交的作者、日期、提交说明以及具体的代码改动,让你清晰洞察配置参数的演变逻辑,快速排查因配置变更引发的问题。
搜索提交记录时,“git log” 的过滤功能堪称强大。按作者过滤,使用 “git log --author=' 作者名字 '”,能迅速聚焦特定开发者的所有提交,当你排查某位同事代码中的潜在问题,或回顾其负责模块的开发历程时,这招极为实用;依提交信息过滤,“git log --grep=' 关键词 '” 可帮你找出包含特定关键词的提交,像团队规定提交信息需关联问题单号,通过 “git log --grep='JRA-123'” 就能精准定位相关修复提交;按日期筛选也不在话下,“git log --after=' 起始日期 ' --before=' 结束日期 '” 划定时间区间,如查看近两周内的提交,执行 “git log --after='2 weeks ago'” 即可,让你聚焦特定时段的代码变更。
为常用命令配置别名能大幅节省输入时间。在全局配置文件(~/.gitconfig)中,添加 “[alias]” 段落,如 “st = status”“cm = commit -m”“lg = log --color --graph --pretty=format:'% Cred% h% Creset -% C (yellow)% d% Creset % s % Cgreen (% cr) % C (bold blue)<% an>Creset' --abbrev-commit”,之后输入 “git st”“git cm ' 更新说明 '”“git lg” 就能分别替代原本冗长的命令,提升操作流畅度。你还可依据个人习惯自由定制别名,打造专属快捷指令集,让 Git 操作如丝般顺滑。
八、总结与展望:Git 学习永不止步
至此,我们一同走过了 Git 命令的精彩旅程,从基础的仓库初始化、文件提交,到分支的灵活运用、远程仓库的交互,再到标签标记、错误回退以及进阶技巧,每一个环节都蕴含着 Git 的强大与精妙。这些命令如同积木,组合起来便能搭建出高效、有序的软件开发流程,无论是个人开发者独自探索创新,还是团队成员协同攻坚,都离不开它们的助力。
然而,Git 的世界广袤无垠,我们所触及的仅是冰山一角。随着技术的不断演进,新的需求与挑战会接踵而至,像大型项目中的复杂分支管理策略优化、跨团队协作时更流畅的代码集成流程,都有待我们进一步探索。持续学习 Git 的高级特性、深入理解其底层原理,将让我们在面对复杂场景时游刃有余,开发效率更上一层楼。
希望各位读者以此次学习为起点,在日常实践中不断磨砺对 Git 命令的运用能力,尝试新的技巧,解决新的问题,让 Git 真正成为手中的利剑,斩断开发路上的荆棘,开启属于自己的代码传奇之旅,为个人成长与团队成就赋能添彩,向着更高的技术巅峰奋勇攀登。
相关文章:
Git 命令代码管理详解
一、Git 初相识:版本控制的神器 在当今的软件开发领域,版本控制如同基石般重要,而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造,最初是为了更好地管理 Linux 内核源代码。随着时间的推移,Git 凭借…...
游戏引擎学习第78天
Blackboard: Position ! Collision “网格” 昨天想到的一个点,可能本来就应该想到,但有时反而不立即思考这些问题也能带来一些好处。节目是周期性的,每天不需要全程关注,通常只是在晚上思考,因此有时我们可能不能那么…...
Centos9-SSH免密登录配置-修改22端口-关闭密码登录-提高安全性
Centos9-SSH免密登录配置-修改22端口-关闭密码登录 生成秘钥对将公钥信息存进authorized_keys测试登录查询访问记录、比对指纹更换22访问端口关闭账号密码登录生成秘钥对 生成密钥对,指定 备注 和 文件目录命令执行后,默认两次回车,不设置秘钥使用密码ssh-keygen -t rsa -b …...
汇总统计数据--SQL中聚集函数的使用
目录 1、为什么需要汇总数据 2、聚集函数 (1)AVG函数 (2)COUNT函数 (3)MAX和MIN函数 (4)SUM函数 3、聚集不同值--DISTINCT 4、组合聚集函数 5、小结 博主用的是mysql8 DBMS…...
pdf提取文本,表格以及转图片:spire.pdf
文章目录 🐒个人主页:信计2102罗铠威🏅JavaEE系列专栏📖前言:🎀 1. pdfbox1.1导入pdfbox 的maven依赖1.1 提取文本1.2 提取文本表格(可自行加入逻辑处理)1.3 pdf转换成图片代码&…...
【C#学习笔记】C#中委托
概述 C#的委托是一种类型安全的函数指针,用于引用方法,委托允许方法作为参数传递,或者将方法赋值给委托变量,并通过委托调用方法。 委托类型:委托定义了方法的的签名([方法的参数类型和返回值]࿰…...
C#的Task
优先使用Task.Run,除非有定制化需求才用Task.Factory.StartNew Task.Factory.StartNew的TaskScheduler参数颠覆你的认知: var cnt 0;var cancelToken new CancellationTokenSource();await Task.Factory.StartNew(() > {cnt;Debug.WriteLine($&quo…...
企业全文搜索-搜索权限,非侵入文档同步,权限同步 ,扩展字段
简介 企业全文搜索帮助员工高效快速定位所需的信息和资源,搜索权限控制是必须的,原因有二,首先,企业文档,包括公文,流程,技术文档等,带有敏感信息,搜索返回带片段,可能带出敏感信息;其次,若没有权限,用户搜索出来的文档可能不能阅读原文,体验非常差。onesearch有…...
Linux电源管理——CPUidle Framework
目录 前言 一、CPU idle 二、cpuidle framework 相关概念 三、cpuidle core 数据结构 3.1、cpuidle_state 3.2、cpuidle_driver 3.3、cpuidle_device 3.4、cpuidle_governor 四、cpuidle driver初始化流程 4.1、cpuidle driver 初始化方式 4.2、drv->states[0]的初…...
【黑灰产】假钱包推广套路
假钱包推广产业链研究 市面上钱包的主要推广方式: 1,竞价(搜索引擎),误导客户为真正官方钱包从而完成下载使用 优点:精准,客户大 缺点:竞价户容易挂,投资大 2࿰…...
联想java开发面试题及参考答案
IP 协议是哪一层的? IP 协议(Internet Protocol)属于网络层协议。 网络层主要负责将数据从源节点传输到目标节点,它在整个网络通信体系中起到了承上启下的关键作用。在分层网络模型中,下层(如数据链路层)为网络层提供物理链路的连接和帧传输服务。数据链路层关注的是在相…...
C# 继承(接口)
接口 如果一个类派生与一个接口,它就会执行某些函数。并不是所有的面向对象语言都支持接口。 熟悉COM的开发人员应注意,尽管在概念上C#接口类似于COM接口,但他们是不筒的,底层的结构不筒。比如,C#接口并不派生于IUnko…...
FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )
以Xilinx 公司Virtex-II 系列FPGA 为例,其基本结构由下图所示。它是主要由两大部分组成:可编程输入/输出(Programmable I/Os)部分和内部可配置(Configurable Logic)部分。 可编程输入/输出(I/Os…...
妙用编辑器:把EverEdit打造成一个编程学习小环境
1 妙用编辑器:把EverEdit打造成一个编程学习小环境 1.1 应用场景 最近在学习Python语言,由于只是学习和练习,代码规模很小,不想惊动PyCharm、VSCode、WingIDE这些重型武器,只想轻快的敲些代码,记事本虽好&…...
ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用
目录 ELK工作原理展示图 一、ElasticSearch介绍(数据搜索和分析) 1.1、特点 1.2、数据组织方式 1.3、特点和优势 1.3.1、分布式架构 1.3.2、强大的搜索功能 1.3.3、数据处理与分析 1.3.4、多数据类型支持 1.3.5、易用性与生态系统 1.3.6、高性…...
【学习笔记】理解深度学习和机器学习的数学基础:数值计算
深度学习作为人工智能领域的一个重要分支,其算法的实现和优化离不开数值计算。数值计算在深度学习中扮演着至关重要的角色,它涉及到如何在计算机上高效、准确地解决数学问题。本文将介绍深度学习中数值计算的一些关键概念和挑战,以及如何应对…...
【Java回顾】Day5 并发基础|并发关键字|JUC全局观|JUC原子类
JUC全称java.util.concurrent 处理并发的工具包(线程管理、同步、协调) 一.并发基础 多线程要解决什么问题?本质是什么? CPU、内存、I/O的速度是有极大差异的,为了合理利用CPU的高性能,平衡三者的速度差异,解决办法…...
VSCODE使用Echarts组件库(不是vue)
第一步打开Echarts官网 Examples - Apache ECharts 第二步随便点击一个图形点击我圈的按钮 第三步...
DNS解析域名简记
域名通常是由: 权威域名.顶级域名.根域名组成的。 从左往右,级别依次升高,这和外国人从小范围到大范围的说话习惯相关。(我们自己是更习惯先说大范围再说小范围,如XX省XX市XX区XX路) DNS解析域名时,会先查…...
选择器css
1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…...
9.4 visualStudio 2022 配置 cuda 和 torch (c++)
一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客,作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为: 2.vs…...
ASP.NET Core 实现微服务 -- Polly 服务降级熔断
在我们实施微服务之后,服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理࿱…...
2_CSS3 背景 --[CSS3 进阶之路]
CSS3 中的背景属性提供了许多强大的功能来增强网页设计,包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…...
于交错的路径间:分支结构与逻辑判断的思维协奏
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。* 这一节内容很多,文章字数达到了史无前例的一万一,我们要来学习分支与循环结构中…...
升级 CentOS 7.x 系统内核到 4.4 版本
问题描述 在 CentOS 7.x 系统中,默认内核版本是 3.10.x,这个版本可能会带来一些与 Docker 和 Kubernetes 兼容性的问题,导致系统性能不稳定或功能异常。为了提高系统的稳定性和兼容性,建议升级到更高版本的内核,例如 …...
MySQL数据导出导入
一、数据导出 1.导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines--default-character-setutf8 --lock-all-tables --add-drop-database -A >db.all.sql 2.导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.…...
【机器学习:八、逻辑回归】
逻辑回归(Logistic Regression) 1. 逻辑回归的引出 在现实世界中,许多问题都涉及到分类任务。例如: 判断一封邮件是否为垃圾邮件;预测某人是否会患某种疾病;确定图片中是否包含某种特定物体。 这些问题…...
uniapp使用sm4加密
安装:npm install sm-crypto --save 1、在utils下新建crypto.js文件 // sm4 加密 export function encryption(params) {const SM4 require("sm-crypto").sm4const key 0123456789abcdeffedcba9876543212; // 提供的密钥const iv fedcba9876543210012…...
【STM32-学习笔记-1-】GPIO
文章目录 GPIOⅠ、GPIO函数Ⅱ、GPIO_InitTypeDef结构体参数①、GPIO_Mode②、GPIO_Pin③、GPIO_Speed GPIO Ⅰ、GPIO函数 // 将指定的GPIO端口寄存器重置为默认值 void GPIO_DeInit(GPIO_TypeDef* GPIOx);// 将GPIO的备用功能寄存器重置为默认值 void GPIO_AFIODeInit(void);…...
C#中的运算符和类--06
目录 一.运算符 1.赋值运算符 2.算数运算符 3.关系运算符 4.逻辑运算符 5.位运算符 6.三元运算符 7.空合并运算符 8.其他运算符 二.类 1.普通类 2.静态类 3.抽象类 4.密封类 5.部分类 6.泛型类 7.嵌套类 8.记录类 9.接口 一.运算符 1.赋值运算符 定义:赋值…...
【微服务】面试 2、服务雪崩
服务雪崩概念 主要内容:在微服务项目中,微服务间存在远程调用。若某一服务(如服务 d)出现故障,调用它的服务(如服务 a)会失败。若调用方持续向故障服务发起请求,由于服务连接数有限且…...
“深入浅出”系列之QT:(6)如何在一个项目中调用另一个项目
在Qt中,如果想在一个项目中调用另一个项目,这通常意味着想要在一个CMake构建的项目中集成或依赖另一个CMake构建的项目。 1.子模块或子目录方式: 如果另一个项目可以作为一个子模块或子目录包含在当前项目中,可以使用add_sub…...
计算机网络—地址与子网(IPv4)相关知识总结
前言 为了更加清楚的了解该相关知识,下面是发现的一些宝藏博主的博客。 彻底搞懂网络地址、广播地址、主机地址、网关、子网掩码、网络号、主机号 - lipga - 博客园 IP地址(分类)、子网掩码、网络号、主机号、子网号_网络号,主机号,子网号…...
计算机网络 (36)TCP可靠传输的实现
前言 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过多种机制实现可靠传输,这些机制主要包括连接管理、序列号和确认应答机制、重传机制、流量控制、拥塞控制等。 一、连接管理 TCP使用三次握手࿰…...
SQL从入门到实战-2
高级语句 窗口函数 排序窗口函数 例题二十九 select yr,party,votes, rank() over (PARTITION BY yr ORDER BY votes desc) as pson from ge where constituency S14000021 order by party,yr 偏移分析函数 例题三十 select name,date_format(whn,%Y-%m-%d) data, confi…...
基于python的网页表格数据下载--转excel
基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...
用户界面的UML建模13
􀂄 Concrete Presentation Model 包中所包含的是,在Environment 包中与表示层框架模式中的《apm》类相对应的那些类。 8 结论 本文使用了一个图书馆系统的案例,来论述了关于用户界面的建模。通过使用统一建模语言来对应用系统进行建模&…...
[Python学习日记-75] 计算机基础与网络
[Python学习日记-75] 计算机基础与网络 简介 计算机基础 什么是网络编程 计算机网络 简介 本篇主要介绍的计算机基础是浓缩的,这是因为我们主要学习的是 Python,而 Python 主要是为了开发应用程序的,并不会用它来开发操作系统和嵌入式程序…...
【机器学习:六、特征工程】
1. 特征工程背景意义 在机器学习中,特征工程是模型成功的关键之一。无论算法多么先进,其性能都很大程度上依赖于输入数据的质量。特征工程是指对原始数据进行处理,以创建更适合算法的特征的过程。这一过程在以下方面具有重要意义:…...
webpack打包要义
webpack基本 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的工作原理可以概括为以下几个核心步骤: 1. 入口起点(Entry) Webpack 从配置文件中指定的入口文件(Entry Point)开始,分析应用…...
Mybatis——Mybatis开发经验总结
摘要 本文主要介绍了MyBatis框架的设计与通用性,阐述了其作为Java持久化框架的亮点,包括精良的架构设计、丰富的扩展点以及易用性和可靠性。同时,对比了常见持久层框架,分析了MyBatis在关系型数据库交互中的优势。此外࿰…...
013:深度学习之神经网络
本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 深度学习是机器学习中重要的一个学科分支,它的特点就在于需要构建多层且“深度”的神经网络。 人们在探索人工智能初期,就曾设想构建一个用数学方式…...
Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser)
Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser) 思路字符串替换器 思路 模板变量替换无非是寻找出字符串(模板)中的特殊标记,用对应的变量进行字符串替换。 提到变量替换,大家第一能…...
蓝桥杯备考:数据结构之栈 和 stack
目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈:没有任何元素 入栈:插入元素消息 出…...
Lambda离线实时分治架构深度解析与实战
一、引言 在大数据技术日新月异的今天,Lambda架构作为一种经典的数据处理模型,在应对大规模数据应用方面展现出了强大的能力。它整合了离线批处理和实时流处理,为需要同时处理批量和实时数据的应用场景提供了成熟的解决方案。本文将对Lambda…...
Vue.js组件开发,AI时代的前端新玩法
AI可不只是写写小说、聊聊天,现在它的触角已经伸到了程序员的代码世界里。特别是前端开发,很多人都在尝试用ChatGPT或者类似的AI工具来写代码,甚至直接生成Vue.js组件。有些人感叹,"写代码的时代是不是要结束了?&…...
标定 3
标定场景与对应的方式 标定板标定主要应用场景: (1)无法获取到执行机构物理坐标值,比如相机固定,执行机构为传送带等 (2)相机存在畸变等非线性标定情况,需要进行畸变校正 (3)标定单像素精度 (4)获取两个相机之间的坐标系关系 标定板操作步骤: (1)确定好拍…...
电商项目-基于ElasticSearch实现商品搜索功能(三)
本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码,介绍代码逻辑和代码实现。 主要实现功能:根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal,…...
【51单片机】03 蜂鸣器-播放音乐
蜂鸣器-播放音乐 一、原理介绍1.硬件电路 二、练习1.让蜂鸣器发声2.尝试演奏小星星 一、原理介绍 蜂鸣器分为有源蜂鸣器、无源蜂鸣器两种。 有源蜂鸣器:施加合适的电压之后就会发出特定频率的声音 无源蜂鸣器:需要提供特定频率的声音信号,才能…...
MySQL 架构
MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰: MySQL Connectors:为使⽤…...