软件研发 --- devops是什么
我们的开发者常常会遇到这样的一个问题,我在开发环境下开发好的软件经常要大量工具手动部署到生产环境的操作,开发环境和生产环境间是割裂的,devops是他们间的中间环境,实现这种重复劳动自动化。CI/CD 是实现部署自动化的核心技术手段,它将开发、测试、部署等环节串联起来,形成自动化流水线。
由于 DevOps 涵盖了整个软件开发生命周期,这意味着您将与许多技术打交道。此外,DevOps 仍在不断发展,不断有新的工具被开发出来。
作为 DevOps 工程师,你不会编写应用程序,但因为你需要与开发团队紧密合作以改进和自动化他们的任务,因此你需要了解以下概念:
软件开发概念
开发人员如何工作和协作(敏捷,Jira工作流)
他们使用什么Git工作流
应用程序如何配置(构建和打包工具)
自动化测试和测试范围
经典的 软件开发生命周期(Software Development Life Cycle, SDLC),它描述了从零开始构建一个软件系统所需要经历的各个阶段。
这个周期就像一个路线图,指导开发团队如何系统地、有条不紊地创造和维护高质量的软件。以下是图中每个阶段的解释:
1. 规划
- 这是什么? 项目的起点。在这个阶段,团队需要确定项目的目标、范围和可行性。
- 主要活动:
- 与客户或利益相关者沟通,了解他们最初的想法和需求。
- 进行成本效益分析,评估项目是否值得做。
- 制定初步的项目计划、预估时间和资源。
- 通俗比喻: 盖房子前的“立项”阶段,决定要盖一栋什么样的房子,预算多少,多久盖完。
2. 分析
- 这是什么? 详细地分析和定义软件需要具备的功能和条件。
- 主要活动:
- 深入收集用户的具体需求。
- 将需求整理成详细的文档(需求规格说明书)。
- 明确软件“应该做什么”,而不是“如何去做”。
- 通俗比喻: 确定房子的具体功能,比如需要几个卧室、几个卫生间,厨房要多大,窗户朝向哪里。
3. 设计
- 这是什么? 制定软件的“蓝图”。
- 主要活动:
- 根据分析阶段的需求,设计软件的整体架构。
- 定义各个模块、组件、接口和数据结构。
- 决定使用什么技术(比如用什么数据库、什么编程语言)。
- 通俗比喻: 建筑师画出详细的设计图纸,包括结构图、电路图、水管图等。
4. 实施(实施/编码)
- 这是什么? 将设计蓝图变成实际代码的阶段。
- 主要活动:
- 程序员根据设计文档编写代码。
- 这是整个周期中通常最耗时的一部分。
- 通俗比喻: 施工队根据设计图纸,开始砌墙、铺设水电、安装门窗,把房子实体盖起来。
5. 测试与集成
- 这是什么? 检查软件质量,确保其能正常工作的阶段。
- 主要活动:
- 对编写好的代码进行各种测试,找出并修复其中的错误(Bug)。
- 将不同的代码模块组合(集成)在一起,测试它们是否能协同工作。
- 确保软件满足了最初定义的所有需求。
- 通俗比喻: 房子盖好后的“质检”和“装修收尾”。检查水电是否通畅、墙体是否牢固、门窗是否能正常开关,并进行内部装修和整合。
6. 维护
- 这是什么? 软件正式发布上线后的持续支持阶段。
- 主要活动:
- 修复用户在使用过程中发现的新问题。
- 根据用户反馈或业务变化,增加新功能或进行优化。
- 确保软件在真实环境中长期稳定运行。
- 通俗比喻: 业主入住后的“物业服务”。定期检修房屋,修理损坏的东西,或者根据业主需求进行一些小规模的改造。
操作系统与 Linux 基础
作为 DevOps 工程师,你需要准备和维护应用程序部署的基础设施(服务器)。
你需要了解如何管理服务器以及在服务器上安装不同的工具。
操作系统的基本概念你需要理解:
Shell 命令
Linux 文件系统与权限
SSH 密钥管理
虚拟化
由于大多数服务器使用 Linux 操作系统,你需要了解并熟练使用 Linux,尤其是其命令行界面
你还需要了解网络和安全的基础知识,以便配置基础设施,例如:
配置防火墙以保护访问·了解IP地址、端口和DNS的工作原理
负载均衡器
袋里
HTTP/HTTPS
然而,这里要划清 DevOps 和 IT 运营之间的界限:你不需要成为系统管理员。因此,不需要高级的服务器管理知识。了解基本知识就足够了。对于更高级的用例,有像系统管理员、网络专家或安全专业人员等自己的职业。
容器化 - Docker
由于容器已成为软件打包的新标准,您将把应用程序打包为容器运行。以前软件打包是maven打包jar现在再次将jar打包为docker镜像
这意味着你需要大致了解:虚拟化概念 容器化概念 如何在服务器上管理容器化应用
容器是软件的标准单元,它封装了代码及其所有依赖项,从而使得应用在任何计算环境中都能快速、可靠地运行。
Docker无疑是当前最受欢迎的容器技术!
你应该知道的一些事情:
运行容器
检查活动容器
Docker网络
使用Docker卷持久化数据
使用Dockerfile将应用程序容器化使用
Docker Compose 运行多个容器
使用Docker仓库工作
容器和虚拟机具有类似的资源隔离和分配优势,但运作方式有所不同。虚拟机对整个操作系统进行虚拟化,而容器则仅对操作系统的应用层进行虚拟化。因此,容器更加轻量化且运行速度更快。
持续集成/持续交付管道
CI/CD 是 DevOps 的核心。
在DevOps中,所有的代码变更,如新功能或错误修正,都需要被集成到现有的应用程序中,并以自动化方式持续地部署给最终用户。
因此术语:
持续集成和持续部署(CI/CD)
当功能或错误修复完成后,应自动触发在CI服务器(例如Jenkins)上运行的流水线,其包含以下步骤
1.运行测试
2.打包应用程序
3.构建容器镜像
4.将容器镜像推送到镜像仓库
5.将新版本部署到服务器上。

市面上有很多CI/CD平台。目前最受欢迎的是Jenkins
其他流行的 CI/CD 平台:GitLab、GitHub Actions、Travis Cl、Bamboo
你需要学习的技能:
配置CI/CD服务器
配置一条流水线
指定代码仓库以自动触发流水线
构建和打包管理工具来执行测试并打包应用程序
配置工件存储库(如Nexus)放置打包后的应用程序
配置部署到不同的环境运行应用程序(云,K8s集群)
学习一个云服务提供商
如今,许多公司在云上使用虚拟基础设施,而不是管理自己的基础设施。这些是基础设施即服务(laaS平台,提供一系列附加服务,如备份、安全、负载平衡等。
这些服务是特定于平台的。因此您需要了解该特定平台的各项服务并学会如何管理其上的整个部署基础设施。
例如,对于AWS,你应该了解以下基础知识:
·IAM服务-管理用户和权限
·VPC服务-您的私有网络
。EC2服务-虚拟服务器
AWS是最强大和最广泛使用的laaS平台,但也是一个困难的平台。
其他热门平台:Microsoft Azure、Google cloud
AWS提供了大量服务,但您只需要学习您或您的公司实际所需的服务。例如,当K8s集群在AWS上运行时,您还需要学习EKS服务。
一旦你学会了其中一个laas平台,学习其他平台就很容易了
容器编排 - Kubernetes
由于容器既受欢迎又易于使用,许多公司在多台服务器上运行着数百或数千个容器。这意味着这些容器需要以某种方式得到管理。
为此,有容器编排工具。
像Kubernetes这样的容器编排工具,自动化部署、扩展和管理容器化应用程序。
Kubernetes(也称为K8s)是最受欢迎的容器编排工具
因此你需要学习:
Kubernetes如何工作
如何管理K8s集群
如何在K8s上部署应用程序
所需特定K8s知识:
学习核心组件,如Deployment、Service、ConfigMap、Secret.StatefulSet和Ingress
Kubernates CLl (Kubectl)
使用Kubernetes卷持久化数据
命名空间
监控与可观测性
一旦软件投入生产,监控它就变得非常重要,以跟踪性能、发现基础设施和应用程序中的问题。
作为DevOps工程师,你的职责之一是:
设置软件监控
设置基础设施监控,例如对您的Kubernetes集群和底层服务器进行监控·可视化数据
普罗米修斯:
一种流行的监控和警
报工具
Grafana:
分析和交互式可视化工具
你还应该了解系统如何收集和聚合数据,以期利用这些数据进行故障排除、获取商业洞察等。
ELK 堆栈:
一个流行的日志管理堆栈
基础设施即代码
手动创建和维护基础设施既费时又容易出错,尤其是在需要复制基础设施(例如用于开发、测试和生产环境)时。
在DevOps中,我们希望尽可能自动化,这就是基础设施即代码发挥作用的地方。

开发
测试
生产环境
使用laC,我们用代码来创建和配置基础设施,并且你需要知道两种类型的laC工具:
1.基础设施配置
2.配置管理
Terraform 是最受欢迎的基础设施配置工具
Ansible是最受欢迎的配置管理工具
将所有内容作为代码的好处,
在团队中鼓励协作
记录基础设施的变更
基础设施状态的透明度
在集中位置访问该信息,而不是以某些脚本的形式分散在人们的本地机器上。
脚本语言
由于您需与开发人员及系统管理员紧密合作,共同实现开发和运维任务的自动化,因此您将需要编写脚本和小应用程序来自动执行这些任务。
为此,你需要一些脚本或基本编程技能。
示例:像刷新缓存、启动构建和部署等实用脚本。
这可以是特定于操作系统的脚本语言,如bash或Powershell.JS
Ruby或但更需要的是像Python、Go这样的OS独立语言。
这些语言更强大和灵活。如果你熟悉其中一种,作为DevOps工程师将更有价值。
Python是最受欢迎的编程语言之一,易于学习。
有很多编程语言,但我建议从Python开始。
Python被广泛使用,易于学习,并用于许多不同的用途,特别是在DevOps中。
你不需要和软件开发人员一样的水平。
学习如何用Python编写脚本就足够了。
而且好的是,编程概念保持不变所以当你很好地学习了一种语言时你可以很快地学习新的语言。
版本控制 - Git
您将所有自动化逻辑编写为代码。而且,除了应用程序代码,自动化代码也应通过版本控制工具(如 Git)进行管理和托管。
K8s 配置文件
基础设施即代码
Python脚本
Git 是一个本地安装的命令行工具它能够跟踪源代码中的更改,并实现更好的代码协作。
因此,你需要学习:
核心Git命令,如git clone、git branchgit pull/push、git merge等。
以及如何在项目上进行协作,例如创建拉取请求、代码审查和分支。
你需要学习Git。它是使用最广泛和最受欢迎的版本控制工具
我们的文件存储在远程仓库中。大多数流行的远程仓库是GitHub和GitLab。
Git 仓库
不要在你的Git仓库中存储秘密和密码
1. 什么是 DevOps?
DevOps 不是单一的工具、职位或技术,而是一种文化理念、实践方法和工具链的集合。它的核心目标是通过打破开发(Dev)团队和运维(Ops)团队之间的传统壁垒,实现更快速、更可靠、更高质量的软件交付和部署。
核心思想:
协作与文化变革: 强调开发、运维、QA、安全等不同职能团队(甚至扩展到 BizDevOps)之间的沟通、协作和共同承担责任。消除“扔过墙”的心态。
自动化: 尽可能自动化软件交付流程中的所有环节,特别是构建、测试、部署和基础设施配置。这是实现快速、可靠交付的关键。
持续集成(CI): 开发人员频繁地将代码变更合并到共享主干。每次合并都会触发自动化构建和测试,以便快速发现集成错误。
持续交付(CD): 确保代码变更在通过自动化测试后,能够快速、安全地部署到生产环境或准生产环境。目标是让软件随时处于可部署状态。
持续部署: 持续交付的延伸,指代码变更一旦通过所有测试阶段,就自动部署到生产环境(通常需要成熟的流程和强大的保障机制)。
监控与反馈: 在生产环境中对应用程序和基础设施进行持续监控,快速获取性能和用户行为反馈,并将这些信息反馈给开发和运维团队,以驱动后续的优化和修复。
基础设施即代码(IaC): 使用代码(如 Terraform, Ansible, CloudFormation)来管理和配置基础设施,使其版本化、可重复、可测试,提高环境的一致性和效率。
微服务: 虽然 DevOps 本身不强制要求微服务架构,但微服务(将大型单体应用拆分为小型、独立的服务)通常与 DevOps 实践配合得非常好,因为每个服务可以独立开发、部署和扩展。
总结来说,DevOps 是关于如何更高效、更高质量地构建、交付和运行软件的整个系统方法。
2. DevOps 工程师的职责和责任
DevOps 工程师是 DevOps 文化和实践的主要推动者和实践者。他们扮演着桥梁、自动化专家和赋能者的角色。职责范围很广,通常包括:
核心职责:
构建和维护 CI/CD 流水线: 设计、实现、优化自动化构建、测试、打包和部署流程(使用 Jenkins, GitLab CI/CD, GitHub Actions, CircleCI, Argo CD 等工具)。
基础设施管理与自动化(IaC): 使用工具(如 Terraform, AWS CloudFormation, Azure Resource Manager, Ansible, Puppet, Chef)自动化云或本地基础设施的配置、部署和管理。
云平台管理: 在 AWS, Azure, GCP 等云平台上设计、部署、管理和优化计算、存储、网络等资源。
配置管理: 确保服务器和应用程序环境的配置一致、可重复、可审计(使用 Ansible, SaltStack, Puppet, Chef 等)。
监控、日志和告警: 实施和运维监控系统(如 Prometheus, Grafana, Datadog, New Relic, Zabbix)、日志聚合系统(如 ELK Stack - Elasticsearch, Logstash, Kibana; Splunk, Loki)以及告警系统,确保系统健康、性能可观测,并能快速响应问题。
版本控制管理: 管理和维护 Git 仓库(如 GitHub, GitLab, Bitbucket),推广良好的分支策略和工作流。
容器化与编排: 使用 Docker 等容器技术打包应用及其依赖;使用 Kubernetes, Docker Swarm 等编排工具管理容器化应用的部署、伸缩和运维。
编写自动化脚本: 使用 Shell, Python, Go 等语言编写脚本,自动化重复性任务。
系统维护与优化: 确保操作系统、中间件、数据库等的安全、稳定和性能优化。
安全集成(DevSecOps): 在 CI/CD 流程中集成安全扫描(SAST, DAST, 容器扫描、秘钥管理等),将安全左移。
故障排除与支持: 参与生产环境故障排查和解决,提供部署和运维支持。
文档编写: 为基础设施、流程、工具编写清晰、可维护的文档。
核心责任:
确保系统可靠性与可用性: 对生产环境的稳定性和高可用性负责(追求高 SLA/SLO)。
提升交付速度与效率: 通过自动化不断优化软件交付流程,缩短发布周期。
保障部署质量与安全: 确保部署过程可靠、可回滚,并符合安全合规要求。
优化资源利用与成本: 合理规划和管理云资源或物理资源,优化成本。
促进协作与文化变革: 积极与开发、测试、运维、安全等团队沟通协作,推动 DevOps 理念的落地和持续改进。
持续学习与工具评估: 跟踪 DevOps 领域的新技术、新工具和最佳实践,评估并引入合适的技术栈。
简而言之,DevOps 工程师负责设计、构建、维护和优化支撑快速、可靠、自动化软件交付和运维的技术栈与流程。
3. DevOps 在整个软件开发生命周期(SDLC)中的位置
传统 SDLC(如瀑布模型)通常是线性的、阶段化的(需求->设计->开发->测试->部署->运维),开发与运维分离。DevOps 彻底改变了这种模式,将其转变为一个高度自动化、协作的、持续迭代的闭环。 DevOps 贯穿并整合了 SDLC 的所有阶段:
计划:
DevOps 理念强调跨团队(包括运维)在需求分析和设计阶段就参与进来(“左移”),共同考虑可部署性、可运维性、可观测性、安全性(DevSecOps)和基础设施需求。运维团队的经验对制定切实可行的发布计划至关重要。
编码:
开发人员工作在版本控制(Git)中。
持续集成(CI)实践鼓励频繁提交小批量代码到主干分支。
DevOps 工程师提供高效的开发环境(如本地容器环境)和快速反馈的 CI 流程。
构建:
CI 流水线自动触发代码拉取、依赖安装、编译、打包(如生成 Docker 镜像、JAR/WAR 包等)。
DevOps 工程师的核心工作: 设计、实现和维护这个自动化构建流程。
测试:
CI 流水线自动运行单元测试、集成测试(可能还有部分自动化UI/E2E测试)。
自动化测试是快速、可靠 CD 的基础。
可能包含自动化安全扫描(SAST)。
DevOps 工程师负责集成测试工具、管理测试环境、确保测试结果反馈迅速。
发布/部署:
持续交付(CD)流水线接管,将成功通过测试的构建物自动部署到各种环境(测试、预发布/Staging)。
可能包含自动化更严格的环境测试(性能、安全扫描如DAST、合规检查)。
最终目标是安全、可靠地将变更部署到生产环境(可能是手动批准触发,也可能是持续部署自动完成)。
DevOps 工程师的核心工作: 设计、实现和维护自动化部署流程(蓝绿部署、金丝雀发布、滚动更新等),确保部署过程可靠、可回滚。使用 IaC 确保环境一致性。
运维:
应用在生产环境运行。
DevOps 工程师的核心工作:
监控: 实时监控应用性能、基础设施状态、日志和用户行为。
告警: 设置智能告警,在问题影响用户前通知团队。
日志管理: 集中收集、存储和分析日志,用于故障排查和审计。
基础设施维护: 自动化扩缩容、打补丁、备份恢复等。
故障排除与修复: 快速响应和解决生产环境问题。如果修复需要代码变更,流程会快速回到“编码”阶段。
监控与反馈 (贯穿始终并闭环):
生产环境的监控数据和用户反馈是至关重要的输入。
这些信息被持续反馈给开发、测试和运维团队:
开发: 了解新功能表现、发现隐藏缺陷、优化性能。
测试: 补充测试用例、优化测试策略。
运维: 优化基础设施配置、调整监控策略。
计划: 指导下一个迭代或版本的优先级和方向。
DevOps 工程师的核心工作: 建立和维护这个反馈闭环的工具链和流程,确保信息流动顺畅。
关键点:
打破壁垒: DevOps 消除了传统“开发完成丢给运维”的壁垒。开发、运维(及测试、安全)在整个生命周期中紧密协作。
自动化是支柱: CI/CD 流水线是实现快速、可靠、贯穿生命周期自动化的核心载体。
持续反馈闭环: 监控生产环境并快速反馈是驱动持续改进的关键,使整个生命周期成为一个不断学习、优化的闭环。
DevOps 工程师是赋能者: 他们构建和维护支撑这个自动化、协作、闭环流程的基础设施和工具链,让开发人员能更专注于写代码,让运维工作更高效、更主动。
总结图景:
想象一个无限循环的“∞”符号:
一个环代表“开发流”:从计划、编码、构建、测试到发布(部署到非生产环境)。
另一个环代表“运维流”:发布(部署到生产)、运行、监控。
DevOps(特别是 CI/CD 和自动化)是连接这两个环的桥梁和加速器。
监控和反馈是连接“运维流”回到“开发流”的纽带,驱动新的计划、编码和优化。
DevOps 工程师负责构建、维护和优化这座桥梁、加速器和反馈通道,确保整个循环高效、顺畅地运转。
希望这个详细解释能帮助你清晰理解 DevOps 的概念、工程师角色以及它在软件生命周期中的核心地位。
第01课:什么是操作系统以及它是如何工作的?
核心概念: 操作系统是硬件与应用软件之间的桥梁,管理硬件资源(CPU、内存、磁盘、I/O设备),为应用程序提供运行环境和服务。
主要任务:
进程管理: 创建、调度、终止进程,处理进程间通信/同步。
内存管理: 分配/回收内存空间,虚拟内存(重要!),内存保护。
存储管理: 文件系统组织(目录、文件),磁盘空间管理,数据持久化。
I/O 设备管理: 设备驱动程序,设备抽象(统一接口),缓冲/缓存。
安全与保护: 用户认证,访问控制,防止恶意程序。
用户界面: 提供用户与系统交互的方式(CLI命令行 / GUI图形界面)。
构建方式:
宏内核: 核心功能(进程、内存、文件系统、驱动等)都在一个大的内核空间中运行(Linux)。
微内核: 内核只保留最基本功能(进程通信、少量调度),其他服务(文件系统、驱动、网络栈)作为用户态进程运行(Minix, QNX)。
混合内核: 结合两者思想,核心功能在内核态,部分非核心但性能关键的服务也在内核态(Windows NT, macOS)。
主要OS差异:
Unix/Linux: 哲学(KISS原则、一切皆文件、小工具组合),开源为主,强大CLI,模块化设计,高度可定制。发行版众多(Ubuntu, Fedora, Debian等)。
Windows: 商业闭源,GUI优先,广泛硬件/软件兼容性,用户友好,注册表管理配置。
macOS: Unix基础(BSD),闭源,高度集成硬件(Apple生态),GUI体验优秀,注重安全和易用性,自带强大开发工具。包管理器
Homebrew非常流行。
第02课:虚拟化
虚拟机简介:
概念: 在物理机(Host)上通过软件(Hypervisor)模拟出多台逻辑计算机(Guest VM),每台VM有自己的虚拟硬件(vCPU, vRAM, vDisk, vNIC)和操作系统。
Hypervisor类型:
Type 1 (裸金属): 直接运行在硬件上(VMware ESXi, Microsoft Hyper-V, Xen, KVM)。
Type 2 (托管): 运行在宿主操作系统之上(VirtualBox, VMware Workstation/Player, Parallels Desktop)。
用途: 服务器整合、测试/开发环境、运行不同OS、隔离应用、云计算基础。
设置Linux虚拟机:
选择 Hypervisor:初学者推荐
VirtualBox或VMware Workstation Player(免费)。下载 Linux ISO:如 Ubuntu Desktop, Fedora Workstation。
创建新VM:指定名称、类型(Linux)、版本(如Ubuntu 64-bit)。
分配资源:vCPU数量、内存大小(建议至少2GB)、创建虚拟硬盘(VDI/VMDK,动态分配,建议20GB+)。
挂载ISO:在存储设置中将下载的ISO文件设置为虚拟光驱。
启动VM:开始安装过程(通常图形化,类似安装物理机)。
安装Guest Additions / VMware Tools:安装后提供更好的集成体验(共享剪贴板/文件夹、调整分辨率、性能优化)。
第03课:包管理器 - 安装软件
包管理器 & 软件仓库:
包管理器: 自动化软件安装、升级、配置、依赖关系解决和卸载的工具。核心是解决依赖地狱问题。
软件仓库: 集中存放大量预编译软件包及其元数据(依赖信息、描述等)的服务器。包管理器从这里获取软件。
包: 包含软件文件、安装脚本、依赖声明、版本信息等的归档文件(
.deb,.rpm,.snap)。
Linux安装软件的主要方式:
1. 包管理器 (APT, YUM/DNF, Pacman, Zypper等): 最主流、最安全、最推荐的方式!
APT: Debian, Ubuntu, Mint 等使用。命令:
sudo apt update(更新仓库索引),sudo apt install <包名>,sudo apt upgrade(升级所有包),sudo apt remove <包名>。APT vs APT-GET:
apt是较新的命令行工具,整合了apt-get,apt-cache等功能,提供更友好的输出(进度条、颜色)和更简洁的命令(如apt list --upgradable)。apt-get更底层,脚本兼容性好。日常使用apt即可。YUM/DNF: Red Hat, Fedora, CentOS 等使用。
dnf是yum的现代替代。命令:sudo dnf update(更新索引+升级包),sudo dnf install <包名>,sudo dnf upgrade,sudo dnf remove <包名>。
2. 图形化软件中心:
Ubuntu 软件中心 / GNOME 软件 / KDE Discover: 提供GUI界面搜索、浏览、安装/卸载软件。底层调用APT等包管理器。
3. Snap:
概念: Canonical (Ubuntu 母公司) 推广的跨发行版打包格式和运行时环境。
特点: 包包含所有依赖(沙盒化),自动更新,更安全(权限受限),但体积通常较大,启动稍慢,桌面集成有时不如原生包。
命令:
sudo snap install <snap名>,sudo snap remove <snap名>,snap find <关键词>,snap list。常见 Snap: VSCode, Spotify, Slack, Firefox (Ubuntu 默认)。
4. Flatpak: 另一个流行的跨发行版沙盒化应用分发框架(类似Snap)。由社区驱动(如GNOME项目支持)。使用
flatpak命令和Flathub仓库。5. 从源代码编译安装 (
./configure && make && sudo make install):灵活性最高,可定制编译选项。
过程复杂(需手动解决依赖),易出错,更新/卸载麻烦。
仅当软件没有预编译包可用或需要特定定制时才考虑。
6. 预编译二进制包 (
.deb,.rpm,.AppImage,.tar.gz等):下载特定格式文件手动安装(如
sudo dpkg -i package.deb/sudo rpm -i package.rpm)。需自行处理依赖(
.deb/.rpm可能提示缺少依赖)。AppImage: 单个可执行文件包含所有依赖,无需安装,双击运行(需赋予执行权限)。便携但更新需重新下载。
工作原理简述:
用户请求安装包X (
apt install X/dnf install X)。包管理器查询本地软件包数据库和仓库索引。
找到X及其依赖(A, B, C...)。
从配置的软件仓库下载X, A, B, C的包文件。
执行包中的预安装脚本。
解压文件到指定系统路径(
/usr/bin,/usr/lib,/etc等)。执行后安装脚本(如更新菜单、启动服务、更新配置文件)。
更新本地软件包数据库,记录X已安装及其文件位置。
第04课:使用 Vim 编辑器
什么是 Vim?
一个强大、高度可配置、基于键盘的文本编辑器。是
vi编辑器的增强版。几乎预装在所有Unix/Linux系统上,是系统管理员和开发者的必备工具(尤其远程服务器环境)。
陡峭的学习曲线,但掌握后编辑效率极高(手指不离键盘)。
核心理念:模式化编辑。
核心模式 & 最重要命令:
普通模式 (Normal Mode): 启动Vim后的默认模式。用于导航、复制、粘贴、删除等操作。按
Esc可随时返回此模式。导航:
h(左),j(下),k(上),l(右)w(跳到下一个单词开头),b(跳到上一个单词开头),e(跳到单词结尾)0(行首),$(行尾)gg(文件开头),G(文件末尾),:<行号>回车 (跳转到指定行)Ctrl+f(向下翻页),Ctrl+b(向上翻页)
编辑:
x(删除光标下字符),X(删除光标前字符)dd(删除/剪切当前行),yy(复制当前行),p(在光标后粘贴),P(在光标前粘贴)u(撤销),Ctrl+r(重做).(重复上一个编辑命令 - 非常强大!)
插入模式 (Insert Mode): 用于输入文本。从普通模式按以下键进入:
i(在光标前插入),a(在光标后插入)I(在行首插入),A(在行尾插入)o(在当前行下方新开一行并插入),O(在当前行上方新开一行并插入)按
Esc返回普通模式。
可视模式 (Visual Mode): 用于选择文本块。从普通模式按以下键进入:
v(字符可视模式)V(行可视模式)Ctrl+v(块可视模式 - 矩形选择)选中后,可用
y复制,d剪切/删除,p粘贴等命令。按
Esc返回普通模式。
命令行模式 (Command-line Mode): 用于执行保存、退出、搜索替换等命令。从普通模式按
:进入。:w(保存文件):q(退出Vim) - 如果文件未修改:q!(强制退出不保存) - 丢弃修改:wq或:x(保存并退出):s/old/new/(替换当前行第一个匹配的old为new):s/old/new/g(替换当前行所有匹配的old为new):%s/old/new/g(替换整个文件中所有匹配的old为new):/pattern回车 (向下搜索pattern),:?pattern回车 (向上搜索)n(查找下一个),N(查找上一个) - 在普通模式使用:set number(显示行号),:set nonumber(隐藏行号)
高效使用 Vim 的关键:
强制自己只用键盘! 忘记鼠标。
时刻清楚自己在哪个模式! 不确定就狂按
Esc回到普通模式。多练! 从编辑配置文件开始,遇到问题查命令。
学习组合命令:
d$(从光标删除到行尾),caw(删除整个单词并进入插入模式) 等。利用
.(重复命令)。探索配置 (
~/.vimrc) 和插件(如Vundle/vim-plug管理插件)提升体验。
第5课:用户与权限
1. Linux账户体系
| 概念 | 作用 | 关键命令/文件 |
|---|---|---|
| 用户 | 系统操作者身份标识 | useradd, usermod |
| 用户组 | 权限分配的集合单位 | groupadd, gpasswd |
| UID/GID | 用户/组的数字ID (UID 0=root) | /etc/passwd, /etc/group |
| sudo权限 | 普通用户临时获取root能力 | visudo (配置/etc/sudoers) |
2. 权限模型(三组9字符)
Copy
Download
-rwxr-xr-- 1 user group 4096 Jan 1 10:00 file.txt
字符解析:
rwx(所有者)r-x(所属组)r--(其他人)r=读(4)w=写(2)x=执行(1)数字表示:
chmod 754 file.txt→7(rwx) 5(r-x) 4(r--)
3. 关键操作
Copy
Download
# 用户管理
sudo useradd -m -s /bin/bash alice # 创建用户
sudo passwd alice # 设置密码
sudo usermod -aG sudo alice # 加入sudo组 # 权限修改
chown alice:developers file.txt # 修改所有者+组
chmod u+x script.sh # 给所有者增加执行权限
第6课:Linux文件系统
1. 核心目录结构
| 路径 | 用途 | 重要性 |
|---|---|---|
/ |
根目录 | ★★★ |
/bin |
基础命令 (ls, cp等) | ★★★ |
/etc |
配置文件 | ★★★ |
/home |
用户家目录 | ★★ |
/var |
动态数据 (日志,缓存) | ★★ |
/tmp |
临时文件 (重启清空) | ★ |
2. 文件系统特性
一切皆文件:设备、管道、目录都是文件
挂载机制:通过
mount将存储设备链接到目录inode机制:文件元数据存储(权限、大小、时间戳)
硬链接 vs 软链接:
bashCopy
Download
ln file.txt hardlink # 硬链接 (共用inode)
ln -s file.txt symlink # 软链接 (快捷方式)
第7课:基础Linux命令
1. 生存命令集
| 类型 | 命令示例 | 作用 |
|---|---|---|
| 导航 | cd ~, pwd, ls -l |
切换/显示目录 |
| 文件操作 | touch, cp -r, rm -rf️ |
创建/复制/删除 |
| 内容查看 | cat, less, head -n 5 |
查看文件 |
| 权限提升 | sudo command, su - root |
获取root权限 |
| 查找过滤 | grep "text" file, find / -name "*.log" |
搜索内容/文件 |
2. 高级技巧
管道:
ps aux | grep nginx(进程过滤)重定向:
echo "test" > file.txt(覆盖写入)dmesg >> log.txt(追加写入)组合命令:
tar -czf backup.tar.gz /var/log && scp backup.tar.gz user@remote:/backup
第8课:Shell脚本编程
1. 脚本基础
Copy
Download
#!/bin/bash # Shebang声明解释器
# 注释:这是一个脚本示例
echo "Hello, $1!" # $1 表示第一个参数
执行方式:
bash script.sh或chmod +x script.sh && ./script.sh
2. 核心编程元素
| 元素 | 语法示例 | 用途 |
|---|---|---|
| 变量 | name="Alice" |
存储数据 |
| 条件判断 | if [ -f "file.txt" ]; then ... fi |
文件检查 |
| 循环 | for i in {1..5}; do echo $i; done |
重复执行 |
| 函数 | greet() { echo "Hello, $1"; } |
代码复用 |
| 参数传递 | $0(脚本名) $1~$9(参数) |
外部输入 |
3. 实战脚本示例
Copy
Download
#!/bin/bash
# 备份脚本:带日期压缩目录
backup_dir="/data"
target_dir="$1" if [ -d "$target_dir" ]; then
tar -czf "${backup_dir}/backup_$(date +%F).tar.gz" "$target_dir"
echo "备份成功!"
else
echo "错误:目录不存在" >&2
exit 1
fi
关键学习建议
权限实验:在虚拟机中创建多用户,用
sudo和chmod模拟权限冲突场景文件系统探索:
ls -li查看inode →df -Th查看挂载点 →mount /dev/sdb1 /mnt实践挂载命令组合训练:
用管道统计日志:grep "ERROR" /var/log/syslog | wc -l脚本调试:
bash -x script.sh逐步执行查看变量变化
️ 避坑指南:
rm -rf /会摧毁系统!永远检查路径再执行Shell脚本中变量赋值等号两侧不能有空格
脚本开头务必写
#!/bin/bash避免兼容问题
这些知识是Linux系统管理的核心骨架,建议通过虚拟机反复实操强化记忆。第6课文件系统可扩展学习LVM逻辑卷管理和磁盘配额,这对服务器管理至关重要。
环境变量(Environment Variables)
1. 核心概念
| 术语 | 说明 | 示例 |
|---|---|---|
| 环境变量 | 全局键值对,影响进程行为 | PATH, HOME, USER |
| 查看变量 | printenv 或 echo $VAR |
echo $PATH |
| 临时设置 | export VAR=value |
当前Shell有效 |
| 永久生效 | 写入配置文件 | ~/.bashrc, /etc/profile |
2. 关键操作
Copy
Download
# 增/改变量 (临时)
export API_KEY="123abc" # 删除变量
unset API_KEY # 永久生效 → 编辑配置文件
echo 'export JAVA_HOME="/usr/lib/jvm/java-11"' >> ~/.bashrc
source ~/.bashrc # 立即生效
3. PATH 变量详解
作用:定义命令的搜索路径
查看:
echo $PATH→/usr/bin:/usr/local/bin:...添加自定义路径:
bashCopy
Download
export PATH="$PATH:/home/user/custom-bin" # 临时添加
echo 'export PATH="$PATH:/home/user/custom-bin"' >> ~/.bashrc # 永久
计算机网络基础
1. 核心组件
| 设备/概念 | 功能 | 关键特性 |
|---|---|---|
| 交换机 | 局域网(LAN)内设备通信 | 基于MAC地址转发 |
| 路由器 | 连接不同网络 (如LAN到Internet) | 基于IP地址路由 |
| 防火墙 | 控制网络流量进出 | 通过端口/IP过滤 |
| 网关 | 网络的出口点(通常是路由器) | 默认路由指向网关 |
| 子网 | IP地址的逻辑划分 | 192.168.1.0/24 |
2. IP与端口
IP地址:设备网络标识(IPv4如
192.168.1.10,IPv6如2001:db8::1)端口:应用程序的通信端点(0-65535)
知名端口:HTTP(80), HTTPS(443), SSH(22)
查看占用:
netstat -tuln或ss -tuln
3. DNS解析流程
Copy
Download
graph LR
A[浏览器输入 www.example.com] --> B[查询本地DNS缓存]
B --> C{缓存命中?}
C -->|否| D[请求递归DNS服务器]
D --> E[根DNS服务器]
E --> F[顶级域服务器 .com]
F --> G[权威DNS服务器 example.com]
G --> H[返回IP地址]
H --> A
4. 常用网络命令
Copy
Download
ping google.com # 测试连通性
traceroute google.com # 跟踪路由路径
nslookup google.com # DNS查询
dig google.com # 详细DNS解析
netstat -an \| grep 22 # 检查22端口状态
SSH(Secure Shell)
1. SSH工作原理
加密通信:通过非对称加密建立安全通道
认证方式:
密码认证:用户输入密码
密钥认证:使用公钥/私钥对(更安全)
2. 实战操作指南
步骤1:创建云服务器(以AWS为例)
登录AWS控制台 → EC2 → Launch Instance
选择Ubuntu镜像 → 配置密钥对(新建或使用现有)
下载私钥文件(
.pem)→ 设置安全组(开放SSH端口22)
步骤2:生成SSH密钥对
Copy
Download
# 本地机器生成密钥(默认保存到 ~/.ssh/)
ssh-keygen -t ed25519 -C "your_email@example.com" # 输出:
# 私钥:id_ed25519
# 公钥:id_ed25519.pub
步骤3:配置密钥登录远程服务器
Copy
Download
# 复制公钥到远程服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub ubuntu@server_ip # 手动方法(若无ssh-copy-id):
cat ~/.ssh/id_ed25519.pub | ssh ubuntu@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
步骤4:SSH连接与远程执行
Copy
Download
# 基础连接
ssh -i ~/.ssh/id_ed25519 ubuntu@server_ip # 执行单条命令(检查磁盘)
ssh ubuntu@server_ip "df -h" # 执行远程脚本
scp deploy.sh ubuntu@server_ip:/tmp/ # 先上传脚本
ssh ubuntu@server_ip "bash /tmp/deploy.sh"
3. 安全增强建议
Copy
Download
# 1. 修改默认SSH端口
sudo vim /etc/ssh/sshd_config # 修改 Port 2222
sudo systemctl restart sshd # 2. 禁用密码登录(仅密钥)
PasswordAuthentication no # 3. 使用Fail2Ban防暴力破解
sudo apt install fail2ban
关键学习地图
Copy
Download
graph TD
A[环境变量] --> B[PATH机制]
B --> C[网络基础]
C --> D[IP/端口/DNS]
D --> E[SSH协议]
E --> F[云服务器实践]
F --> G[自动化脚本部署]
️ 避坑指南:
权限问题:SSH私钥需设置
600权限:chmod 600 ~/.ssh/id_ed25519连接超时:检查安全组/防火墙是否放行SSH端口
脚本执行失败:远程命令用绝对路径(如
/usr/bin/bash而非bash)
通过组合环境变量、网络知识和SSH,可实现高效的远程管理自动化(如用脚本部署服务)。下一步可学习 Ansible 或 Shell脚本进阶 来完善技能树。
Git 核心知识地图
Copy
Download
graph LR
A[基础操作] --> B[分支管理]
A --> C[历史操作]
B --> D[高级工作流]
C --> D
D --> E[DevOps集成]
一、基础操作(对应课程01-05)
1. 仓库初始化
Copy
Download
# 本地初始化
git init
echo "# Project" >> README.md
git add . && git commit -m "Initial commit" # 连接远程仓库
git remote add origin https://github.com/user/repo.git
git push -u origin main
2. 日常工作流
| 命令 | 作用 | 高频参数 |
|---|---|---|
git status |
查看工作区状态 | -s (精简输出) |
git add [file] |
添加文件到暂存区 | . (所有文件) |
git commit -m "msg" |
提交变更 | --amend (修改上次提交) |
git push |
推送代码到远程 | -f (强制推送,慎用!) |
二、分支管理(对应课程06-08,15)
1. 分支操作
Copy
Download
# 创建分支
git branch feature/login # 仅创建
git checkout -b hotfix # 创建并切换 # 查看分支
git branch -a # 显示所有分支(含远程) # 删除分支
git branch -d old-branch # 安全删除(已合并)
git branch -D force-del # 强制删除未合并分支
git push origin --delete remote-branch # 删远程分支
2. 合并与冲突解决
Copy
Download
# 合并分支(产生合并提交)
git checkout main
git merge feature/login # 遇到冲突时:
# 1. 编辑冲突文件(<<< HEAD === >>>)
# 2. 标记解决:git add resolved-file
# 3. 完成合并:git commit
三、高级技巧(对应课程09,12-14)
1. Rebase(替代合并提交)
Copy
Download
# 将当前分支变基到目标分支
git checkout feature
git rebase main # 解决冲突后继续:
git add .
git rebase --continue # 黄金法则:只对本地未推送分支使用rebase!
2. 撤销操作
| 场景 | 命令 | 风险等级 |
|---|---|---|
| 丢弃工作区修改 | git checkout -- file |
低 |
| 取消暂存 | git reset HEAD file |
低 |
| 撤销上次提交(保留更改) | git reset --soft HEAD~1 |
中 |
| 彻底删除上次提交(丢弃更改) | git reset --hard HEAD~1 |
高 |
| 生成反向提交(已推送代码) | git revert <commit-hash> |
安全 |
3. 暂存工作现场
Copy
Download
git stash save "WIP: login feature" # 保存工作进度
git stash list # 查看暂存列表
git stash apply stash@{0} # 恢复进度(不删除)
git stash pop # 恢复并删除最新进度
四、工程化实践(对应课程11,16)
1. .gitignore 模板
Copy
Download
# 通用忽略规则
.DS_Store
*.log
node_modules/
.env # IDE文件
.idea/
.vscode/
2. Git in DevOps 流程
Copy
Download
sequenceDiagram
participant Dev as 开发者
participant CI as CI服务器
participant Repo as Git仓库
participant Prod as 生产环境 Dev->>Repo: git push feature
Repo->>CI: 触发流水线
CI->>CI: 运行测试/构建
CI->>Prod: 自动部署 (通过后)
典型集成场景:
自动测试:推送代码时触发Jest/Pytest
持续部署:合并到main分支自动发布
代码审查:通过PR/MR流程(GitLab/GitHub)
五、避坑指南
强制推送灾难
git push -f会覆盖远程历史 → 团队协作中绝对禁止对公共分支使用冲突解决雷区
合并冲突时勿直接提交冲突标记(<<< === >>>),必须人工解决敏感信息泄露
误提交密码/密钥的处理:bashCopy
Download
# 1. 彻底删除文件历史
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch secrets.txt" \
--prune-empty --tag-name-filter cat -- --all # 2. 强制推送覆盖
git push --forceRebase陷阱
避免对已推送分支rebase → 会导致本地和远程历史不一致
六、推荐工作流
Git Flow 经典模型:
Copy
Download
graph LR
M[main] --> R[release]
D[develop] --> R
D --> F[feature/*]
R --> H[hotfix/*]
简化实践(GitHub Flow):
从
main拉取新分支git checkout -b feat/xxx开发后推送到远程
git push origin feat/xxx创建Pull Request (PR)
Code Review通过后合并到
main立即部署
掌握这些核心技能后,你可进一步学习:
git bisect:二分法定位问题提交git cherry-pick:选择性移植提交git submodule:管理嵌套仓库Git Hooks:自定义自动化脚本(如提交前检查)
建议在Git官方沙盒练习分支操作,这是最好的可视化学习工具!
Linux (小企鹅)
- 它是什么? 一个开源的操作系统。
- 通俗解释: 就像电脑的 Windows 系统一样,但它是免费和开源的,是绝大多数服务器(网站和应用运行的地方)的首选系统。DevOps 工程师必须熟悉它。
Git (分支图标)
- 它是什么? 版本控制系统。
- 通俗解释: 把它想象成代码的“时光机”。程序员用它来保存代码的每一个版本,这样即使代码改错了,也能轻松回到之前的任何一个状态。它也是团队协作写代码的神器,能确保大家的工作不会互相冲突。
Jenkins (小管家)
- 它是什么? 自动化服务器。
- 通俗解释: 一个勤劳的机器人管家,专门负责自动化处理软件开发中的重复工作,比如编译代码、运行测试、打包和发布应用。它能让整个发布流程自动进行,无需人工干预。
AWS (Amazon Web Services)
- 它是什么? 云计算平台。
- 通俗解释: 亚马逊提供的“云端计算机房”。你不用自己买服务器、硬盘和网络设备,可以直接在 AWS 上租用这些资源,按需使用,非常灵活和强大。它是目前市场占有率最高的云服务商。
Docker (鲸鱼背着集装箱)
- 它是什么? 容器化平台。
- 通俗解释: 它能把一个应用和它运行所需要的所有环境(代码、库、配置文件等)一起打包到一个标准化的“集装箱”里。这样,这个“集装箱”无论被搬到哪台电脑或服务器上,都能保证里面的应用正常运行,解决了“在我电脑上明明是好的”这个经典难题。
Kubernetes (蓝色船舵)
- 它是什么? 容器编排工具。
- 通俗解释: 如果 Docker 是集装箱,那么 Kubernetes 就是管理这些集装箱的“船长”或“港口调度系统”。当你的应用由成百上千个集装箱组成时,Kubernetes 负责自动部署、扩展和管理它们,确保整个系统稳定高效地运行。
Python (两条蛇的图标)
- 它是什么? 一种编程语言。
- 通俗解释: 一门语法简单但功能强大的编程语言。在 DevOps 领域,它被广泛用于编写自动化脚本,用来连接和操作其他各种工具,是 DevOps 工程师的“瑞士军刀”。
Ansible (A 字母图标)
- 它是什么? 配置管理工具。
- 通俗解释: 一个自动化工具,可以帮你同时管理成百上千台服务器。你只需写一个简单的指令清单(剧本),告诉 Ansible 你希望服务器是什么样子(比如安装什么软件、修改什么配置),它就会自动帮你完成所有操作。
Terraform (立方体图标)
- 它是什么? 基础设施即代码 (IaC) 工具。
- 通俗解释: 让你像写代码一样来创建和管理云资源(如 AWS 上的服务器、网络、数据库)。你把想要的基础设施配置写在文件里,Terraform 就能自动帮你创建出来,这让基础设施的管理变得非常高效和可重复。
Prometheus (火焰图标)
- 它是什么? 监控和警报工具。
- 通俗解释: 一个“健康监测系统”。它会持续不断地从你的服务器和应用上收集各种性能数据(比如 CPU、内存使用情况),并把它们存储起来。当某个指标超过预设的阈值时(比如 CPU 使用率过高),它就会发出警报,提醒工程师及时处理。
中心:DevOps 路线图 这个无限循环的标志代表了 DevOps 的核心理念:持续集成、持续交付、持续部署和持续监控,形成一个永不停止的优化循环,旨在更快、更可靠地交付高质量的软件。
软件研发 --- devops是什么的更多相关文章
- 什么是云效 Projex,云效Projex企业级高效研发项目管理平台
云效项目协作Projects是一款企业级高效研发项目管理平台, 提供了快速实践的敏捷研发项目管理机制,提供对需求.迭代.缺陷各个维度的协同管理以及相关的统计报告,让研发团队高效协作.践行敏捷并持续交付 ...
- 翻译-DevOps究竟是什么?
原文地址:http://www.drdobbs.com/architecture-and-design/what-exactly-is-devops/240009147 作者:Neil Garnich ...
- 基于TFS的.net技术路线的云平台DevOps实践
DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. 说DevOps,不得不说DevOps的具体含义.那么,D ...
- [持续交付实践] 研发协作平台:DevOps背景下的组织结构
前言 今年以来做的事情越来越杂,负责的技术方向越来越广,精力越来越分散(创业公司的典型特点),编码的时间越来越少,有时候也会觉得很疲惫没办法专注一个事情. 除了技术方向上的实践,组织上如何组建一个最优 ...
- [转载]DevOps在传统企业的落地实践及案例分享
内容来源:2017年6月10日,优维科技高级解决方案架构师黄星玲在“DevOps&SRE 超越传统运维之道”进行<DevOps在传统企业的落地实践及案例分享>演讲分享.IT 大咖说 ...
- 在Azure DevOps Server(TFS系统)中部署回退/回滚方案(Rollback)
概述 Azure DevOps Server(之前名TFS)是微软公司实现软件研发.测试和部署一体化的全流程解决方案.在近几年的研发过程中,Azure DevOps Server 大幅增强了软件部署过 ...
- 数据库的DevOps实践
---------------------------------------------------------------------------------------------------- ...
- 为什么和什么是 DevOps?
原文地址 本文内容 为什么 DevOps 什么是 DevOps DevOps 所带来的好处 如何将 DevOps 落到实处? 关于 DevOps 的澄清 参考资料 编写软件之所以难,是因为没有哪两个软 ...
- [转载]DevOps建立全生命周期管理
全生命周期管理(ALM)领域作为企业DevOps实践的总体支撑,应该说是DevOps领域中最为重要的实践领域,也是所有其他实践的基础设施.现在很多企业都非常重视CI/CD自动化工具的引入和推广,但是对 ...
- [转载]持续交付和DevOps的前世今生
作者/分享人:乔梁,20年IT老兵,腾讯公司高级管理顾问,敏捷和精益开发专家,持续交付领域先行者.曾就职于百度,国内多个知名互联网公司的企业教练. 历年QCon技术大会的讲师和专题出品人. 这是一个新 ...
随机推荐
- IntelliJ IDEA插件IDE Feature Trainer
这个插件就是个关于IDEA的一些基础快捷键教学,很多快捷键都还没有,比如Ctrl+Alt+← 编辑器基础(Editor Basics) 选择,删除,复制,移动行,收缩和展开代码. Ctrl+Shift ...
- swagger注解文档
swagger 注解文档 1. @Api() 作用于类,放置于 controller 的一个类上,标志这个类是 swagger 资源 1.1 参数: 参数名称 参数介绍 备注 value 说明,可以使 ...
- Linux C编程之五 gdb调试
摘自:https://www.cnblogs.com/xuejiale/p/10788379.html 一.整体大纲 二.gdb调试 1. 启动gdb start -- 只执行一步 n -- n ...
- JS-向当前url追加参数
var newurl = updateQueryStringParameter(window.location.href, 'sp', '2'); //向当前url添加参数,没有历史记录 window ...
- PPT(二)-快捷键
一.shift家族 1.大家长 二.CTRL家族 CTRL的快捷键非常多,这里只说七个 CTRL+D:不仅有着复制与粘贴的功能,还有着复制上一次移动空间距离的功能. CTRL+G:组合,两个如果只是选 ...
- ABC 398 总结
前言 被交互题创死了. 题目 A ? B ? C ? shaber 翻译翻错给我吃一发罚时. D 题解. E 所以怎么交互啊. F 题解. G 怎么这么像 E 的非交互版? 总结 \(\Delta = ...
- HTML---用户注册使用的表单
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 有了解过ZGC吗
ZGC是一种垃圾回收器,由Oracle开发,主要用于Java虚拟机(JVM)中,以下是其相关介绍 特点### 低延迟:ZGC采用了多种优化技术,如染色指针.读屏障等,能够实现几乎停顿时间为零的垃圾回收 ...
- 上位机开发之假装有设备,使用 C# 模拟串口设备
前言 据说不会上位机和游戏开发,都不好意思说自己会 C# 正好这俩我都不太会 这不来点一下上位机的技能树 这次的需求很简单,用 C# 模拟一个设备协议,实现不用去现场对接设备,也能先开发和调试上位机程 ...
- 【PostgreSQL 17】2 使用pgAdmin初始化示例表
启动pgAdmin 从开始菜单启动 pgAdmin 这里默认有一个连接,点击后会让我们设置密码 新建连接 Servers → Register → Server General 因为在数据库服务器就在 ...