后端开发基础(五)- git
详细见文章
前端开发基础(五)- git
详细见文章
git
1. Git 介绍1.1 什么是 GitGit 是一个分布式版本控制系统,由 Linux 之父 Linus Torvalds 于 2005 年创建,用于跟踪文件的变化并协调多人共同开发项目。与传统的集中式版本控制系统(如 SVN)不同,Git 允许开发者在本地拥有完整的代码仓库,即使没有网络连接也能进行版本控制操作。
1.2 Git 的特点
分布式系统:每个开发者都拥有完整的代码仓库副本
高性能:Git 的设计注重速度和效率,即使处理大型项目也表现优异
数据完整性:Git 使用 SHA-1 哈希算法确保数据的完整性
分支管理:创建、合并分支操作轻量且快速
适应性强:支持各种开发工作流程
1.3 为什么使用 Git
可以跟踪代码的历史变更,了解谁在什么时候修改了什么内容
支持团队协作开发,多人同时进行开发而不互相干扰
可以回滚到之前的版本,便于错误恢复
支持代码分支管理,便于功能开发和实验
代码审查和质量控制
2. Git 的安装与配置2.1 安装 GitWindows:
从 Git 官网 下载安装包并运行
也可以通过 Chocolatey 包管理器安装:choco install ...
后端开发基础(四)- SQL
简介SQL(Structured Query Language),结构化查询语言,用于在关系数据库数据库中存储和处理信息。关系数据库以表格形式存储信息,行和列分别表示不同的数据属性和数据值之间的各种关系。
分类SQL 命令可以进行如下分类
DQL(Data Query Language,数据查询语言)数据查询语言 (DQL) 由用于检索存储在关系数据库中的数据的指令组成。软件应用程序使用 SELECT 命令从 SQL 表中筛选并返回特定结果。
DML(Data Manipulation Language,数据操作语言)数据操作语言 (DML) 语句用于在关系数据库中写入新信息或修改现有记录。例如,应用程序使用 INSERT 命令在数据库中存储新记录。
DDL(Data DefINition Language,数据定义语言)数据定义语言 (DDL) 是指设计数据库结构的 SQL 命令。数据库工程师使用 DDL 根据业务需求创建和修改数据库对象。例如,数据库工程师可以使用 CREATE 命令创建数据库对象,如表、视图和索引。
TCL(Transaction Control Language ...
前端开发基础(三)- javascript
前端开发导航 🌏前端开发基础(一)- 学习路线前端开发基础(二)- html前端开发基础(四)- typescript前端开发基础(三)- css前端开发基础(三)- javascript
JavaScript 简介JavaScript(JS)是一种具有函数优先特性的轻量级、解释型或者说即时编译型的编程语言。在 Web 网页中,JavaScript 代码可以修改 HTML 内容、样式和结构,响应用户操作,以及与服务器进行交互。除此之外,JavaScript 还被应用到了很多非浏览器环境中,例如 Node.js。进一步说,JavaScript 是一种基于原型、多范式、单线程的动态语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。
JavaScript 基础变量和数据类型JavaScript 中有三种声明变量的方式:var、let 和 const。
变量声明1234567891011121314151617// var - 函数作用域,可重复声明,可修改var name = "JavaScript";var name = "JS"; / ...
计算机系统漫游
计算机体系结构中的伟大思想
使用抽象简化设计隐层底层细节以提供给高层一个更简单的模型
加速经常性事件优化经常性事件远比优化罕见情形能够更好地提高性能
通过并行提高性能通过同时执行多个任务来提高性能
通过流水线提高性能通过将指令分解成多个阶段,并运行多条指令同时在不同阶段上执行来提高性能
通过预测提高性能假设从预测错误中恢复的代价并不高,且大多数时候预测相对准确,那么预测并开始工作要比明确结果后在执行要快
存储层次设计存储层次的目的是在性能、成本和容量之间找到平衡,使系统既能够快速访问数据,又具有足够的存储空间
通过冗余提高可靠性通过引入冗余组件来使得系统可靠
这些思想将会在后续中应用与体现。
程序表层之下计算机的硬件只能执行极其简单的低级指令,从复杂的应用程序到原始的指令涉及若干软件层次来将高层次操作解释或翻译成简单的计算机指令,这些软件层次结果为以下三层:
应用软件
系统软件
硬件
应用软件运行在系统软件之上,系统软件运行在硬件之上。
系统软件有很多种,其中对于现代计算机系统来说是必须的:操作系统和编译器。操作系统(operating system)是用户程序和硬件之间的接口, ...
处理器体系结构
前言了解了程序在机器级的表示方式和运作原理后,我们将进一步的研究处理器是如何实现指令集架构的,我们将从硬件电路开始,研究指令集架构在 cpu 内部是如何实现的。但是现在现代微处理器的体系结构是如此的精细复杂,可以称得上是人类创造出的最复杂的系统之一了,如果我们从相对熟悉的 x86-64 架构开始实现的话,可能会花上相当长的一段时间,所以我们将会实现一个受 x86-64 启发的架构,Y86-64,它是 x86-64 架构的精简版,可以让我们在实现上省去一些复杂精细的结构,在总体上对 cpu 的体系结构有个大致的了解。
Y86-64定义一个指令集体系架构(例如 Y86-64)包括定义各种状态单元、指令集和它们得编码、一组编程规范和异常事件处理体系。
状态在 Y86-64 中有几个可见状态,分别为:
RF:程序寄存器
CC:条件码
PC:程序计数器
Stat:程序状态
DMEM:内存
RF 中有 15 个程序寄存器:%rax、%rcx、%rdx、%rbx、%rsp、%rbp、%rsi、%rdi 和%r8 到%r14(省略了 x86-64 中的%r15 来简化指令编码)每个寄存器存储一个 ...
后端开发基础(三)- maven
前言在软件开发中,一个项目的依赖管理,项目结构以及项目构建流程对于不同的开发者来说可能有一套属于自己的方式,对于独立开发来说这不是什么大问题,但是一个人的力量往往是有限的,所以我们不可避免的要进行团队协作,如果每个开发者都坚守一套自己的规则,那是既不利于团队开发的。而 maven 就为我们提供了一套很好的解决方案,maven 是 apache 开源基金会的一个项目,它为 java 语言提供了一个很好的第三方依赖管理以及项目管理的解决方案。对于其他编程语言都有自己的第三方依赖管理,比如 python 的 pip,js 的 npm 等,这些依赖管理工具能让我们站在巨人的肩膀上生产出更好的作品来回馈社区。
maven 项目结构123456789101112项目文件夹├── src 源文件│ ├── main│ │ ├── java 主程序│ │ └── resources 静态资源│ └── test│ └── java 测试代码├── target 编译好的class文件和jar包等│ ├── classes│ ├── ... ...
程序的机器级表示
前言了解了基础的编码知识后,下一步我们开始研究程序是如何在计算机当中表示和执行,我们将会深入了解程序中的分支、循环还有函数调用等是如何在使用机器码(机器语言)来表示,但是我们不会直接研究机器语言,毕竟机器语言都是由 0、1 组成的,实在不利于阅读和理解,我们将会研究机器语言的助记符,汇编语言,它在底层是与机器语言等效的,所以研究它其实是等同于研究机器语言的。不同的 cpu 架构的指令集架构也不同,后续的研究中将会基于 Intel 的 x86-64 架构。
硬件抽象计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏具体的实现细节,即使是机器级代码也已经使用到了许多的抽象模型,其中两点尤为重要的。
指令集架构(ISA)
虚拟地址
指令集架构定义了处理器状态,指令的格式以及每条指令对状态的影响。大多数 ISA,比如 x86-64,arm 等,会将程序的行为描述成每条指令都是顺序执行的,一条指令执行完后,下一条才开始。可是处理器的硬件实际上要远比描述的更精密,硬件会并发的执行多条指令,但又会采取措施来保证整体行为和 ISA 指定的顺序执行的结果是一致的。
虚拟地址将机器级代码使 ...
三层架构和分层解耦
内聚和耦合在软件的设计开发中离不开两个词,内聚性和耦合性 🤔。内聚性是指机能相关的程序组合成一模块的程度,以下的情形会降低程序的内聚性:
许多机能封装在一类型内,可以借由方法供外界使用,但机能彼此类似之处不多。
在方法中进行许多不同的机能,使用的是相关性低或不相关的资料。
低内聚性的缺点如下:
增加理解模块的困难度。
增加维护系统的困难度,因为一个逻辑修改会影响许多模块,而一个模块的修改会使得一些相关模块也要修改。
增加模块复用困难度,因为大部分的应用程序无法复用一个由许多不一定相关的机能组成的模块。
耦合性是与耦合性是指一程序中模块及模块之间信息或参数依赖的程度。耦合性可以是低耦合性(或称为松散耦合),也可以是高耦合性(或称为紧密耦合)。
紧密耦合的系统在开发阶段有以下的缺点:
一个模块的修改会产生涟漪效应,其他模块也需随之修改。
由于模块之间的相依性,模块的组合会需要更多的精力及时间。
由于一个模块有许多的相依模块,模块的可复用性低。
一个优秀的应用程序应当是高内聚和松散耦合的。在开发 web 应用程序时,解决内聚性和耦合性是一个不得不面对的问题,而 spring 框 ...