Restful API初学习
什么是RESTful APIRESTful API 是一种基于 REST(Representational State Transfer)架构风格设计的应用程序接口。它的概念包括:
资源: RESTful API 将一切事物都抽象为资源,比如一篇文章、一个用户、一个订单等。每个资源都有一个唯一的标识符(URI)来进行定位和访问,客户端通过操作这些 URI 来与资源进行交互。
HTTP: 对资源的增删改查是通过HTTP 协议定义的 GET、POST、PUT、DELETE 等方法来对资源进行操作实现的,并使用HTTP状态码来表示操作结果。GET 用于获取资源信息,POST 用于创建新资源,PUT 用于更新资源,DELETE 用于删除资源。 这种基于 HTTP 方法的操作方式使得接口的语义清晰,易于理解和使用。
无状态: RESTful API 是无状态的,即服务器不会在不同请求之间记住客户端的状态信息。每个请求都是独立的,客户端需要在请求中包含所有必要的信息,服务器根据接收到的请求进行相应处理并返回结果。
数据表示: 资源可以以多种格式进行表示,如 JSON、XML 等。客户端和服务器可 ...
算法笔记-贪心算法
贪心算法的难点:贪心的证明
区间问题例:最大不相交区间问题:给定一组区间,选择尽可能多的不相交区间。
已知通过贪心算法得到的区间数量为cnt,最大区间数量为ans,因此ans >= cnt;又因为不使用贪心算法的话,每选择一个区间后,为后续区间留下的长度l1较贪心算法相应步骤时留下的长度l2更短,因此ans <= cnt,故证明ans == cnt
1234567891011121314151617181920212223242526272829303132// 定义区间结构体struct Interval { int start, end;};// 比较函数,按右端点升序排序bool compareIntervals(const Interval& a, const Interval& b) { return a.end < b.end;}// 最少区间选点算法vector<int> minPoints(vector<Interval>& intervals) & ...
Git之.git目录
.git目录是 Git 用来存储项目版本控制信息的核心目录,下面是.git目录中重要文件和文件夹的作用:
HEADHEAD文件指向当前处于的分支。其内容通常为:
1ref: refs/heads/main
这表明当前分支为main。
如果内容为ref: refs/heads/feat,表明当前分支为feat
Git 的设计是基于引用(refs)体系的,所有引用都存储在 .git/refs 目录下,其中refs/heads/ 用于存储分支
config存储对应项目的 Git 配置信息,例如远程仓库地址、体验化选项等。文件内容大致为:
1234567891011121314151617[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true[remote "origin&quo ...
Git之基本用法(2)
在Git基本用法中,我们介绍了工作区,暂存区,版本库等概念,并介绍了本地git仓库中文件的各种状态,以及添加修改、创建提交以及相关的撤回的命令。接下来我们将继续介绍git的基本用法
git branch分支是Git中的一个重要概念,实际研发流程就是紧密依赖不同分支实现的。分支本质上是指向一系列提交的指针。它允许你从开发主线分离出来,在不影响主分支的情况下进行独立的开发工作。
分支改名我们在本地git init创建了一个本地仓库后,默认的主分支名是master。而为了避免敏感词汇,如今我们更推荐将主分支命名为main,因此我们可以使用命令git branch -M对当前分支进行改名:
1git branch -M main
创建分支有两种创建分支的方式:
使用git branch <branch-name>命令可以以当前分支为起点,创建一个分支
使用git checkout -b <branch-name>可以以当前分支为起点,创建并跳转到新的分支
这里以创建分支feat/feat1为例:
1git branch feat/feat1
跳转分支使用git s ...
Golang之Cobra基本使用
本博客通过构建命令行工具to-do-list来介绍cobra的基本使用方式。工具的功能参考Task Tracker
获取cobra1go get -u github.com/spf13/cobra@latest
cobra.Command创建工作目录,结构如下:
123456.├── cmd│ └── root.go├── go.mod├── go.sum└── main.go
cmd目录下编写和命令行处理相关的模块,其中cobra中的核心就是cobra.Command结构体,以下是其最基本的的几个字段
Use:当前命令的用法(根命令不需要),并取其第一个单词作为命令的标识符
Short:当前命令的简短说明
Long:当前命令的长说明
Run:当前命令的处理函数,类型为func(cmd *cobra.Command,args []string)
RunE:当前命令的处理函数,类型为func(cmd *cobra.Command, args []string) error,返回的错误能够被Execute()方法返回
常用的方法:
Execute() error,解析命令行,并 ...
算法笔记-动态规划
动态规划的核心为状态表示和状态计算:
状态表示
集合
属性
状态计算:递归式
背包问题
给定一组物品,每个物品都有重量和价值两个属性,同时给定一个容量有限的背包。要求选择一些物品放入背包中,使得放入背包的物品总价值最大,同时背包中物品的总重量不能超过背包的容量。
通用递归式:$$f[i][j] = max(f[i-1][j - k * w[i]] + v[i] * k) \quad k = 0, 1, \cdots, s[i]$$其中i表示前i个物品,j表示已占用的容量,s[i]表示每个物品的数量上限,w[i]和v[i]分别表示物品的重量和价值
01背包问题01背包问题要求每个物品只能选择放入或不放入背包,即不能选择物品的一部分。
123456789101112131415161718const int N = 1e3+5;int n, m;int v[N], w[N];int dp[N];int main() { cin >> n >> m; for (int i = 1; i <= n; i++) cin > ...
Golang 依赖管理
概述Golang发展至今,其依赖管理方式有了几次变革。本文对Golang的不同依赖管理方式进行总结。
GOPATH (最早的依赖管理方式)
Go vendor (v1.5)
Go Modules (v1.11至今,默认开启,适用于生产环境)
GOPATH (了解即可)最早Go通过GOPATH环境变量进行依赖管理。GOPATH是一个环境变量,存储着Go的工作目录(项目目录)。在该目录下,通常包含src、pkg和bin三个子目录,其中src存放项目源代码,pkg存放编译后的包对象文件,bin存放编译后生成的可执行文件。
Go 编译器在编译项目时,会在 GOPATH 下的src目录及其子目录中查找所需的依赖包。当多个 Go 项目需要使用相同的代码包时,可以将这些代码包统一放在 GOPATH 下的src目录中,实现代码的共享和复用。GOPATH模式下,执行go get命令下载依赖也是将依赖保存在GOPATH/src下。
如果GOPATH存在多个路径地址,go get会将依赖下载到第一个路径的src目录中
所以GOPATH模式下的依赖管理的缺点很明显:
go get会将依赖下载到src ...
算法笔记-基础数学应用
质数
定义:大于1的整数中,只有1和本身两个约数的数称作质数
质数的判断试除法,复杂度为$O(\sqrt{n})$
12345bool is_prime(int x) { for (int i = 2; i <= n / i; i++) // 推荐 i <= n / i表示边界 if (x % i == 0) return false; return true;}
分解质因数试除法,复杂度为$O(\sqrt{n})$
n中最多包含一个大于sqrt(n)的质因子
12345678910111213void print_x(int x) { for (int i = 2; i <= x / i; i++) if (x % i == 0) { int cnt = 0; while (x % i == 0) { x /= i; cnt++ } printf("%d %d", x, cnt); } if (x > 1) printf(&quo ...
Git之基本用法
git的工作目录|暂存区|版本库|远程仓库
工作目录:是用户在本地进行文件操作的实际目录,即项目所在的目录。用户可以在工作目录中创建、修改、删除文件等,这些操作都是在本地进行的,尚未被 Git 跟踪和管理。
暂存区:也称为索引(Index),是工作目录和版本库之间的中间区域。当使用git add命令将文件添加到暂存区后,这些文件就准备好被提交到版本库中了。暂存区可以让用户将多次的文件修改组合成一个逻辑上的提交。
版本库:也叫 Git 仓库,包含了项目的所有版本历史和相关的元数据,存储在隐藏的.git目录中。当执行git commit命令时,暂存区中的文件会被提交到版本库中,形成一个新的提交记录。
远程仓库:是位于网络上的共享版本库,用于团队成员之间共享和协作开发项目。远程仓库可以是自己搭建的服务器,也可以是像 GitHub、GitLab 这样的代码托管平台上的仓库。本地仓库可以与远程仓库进行同步,将本地的提交推送到远程仓库,或者从远程仓库拉取最新的提交。
git的文件状态git中文件有以下常见的4种状态:未跟踪、未修改、已修改、已暂存
未跟踪(Untracked)
含义:文件在工 ...
算法笔记-图论基础
定义图中,n为点数,m为边数
m= $O(n^2)$,则认为是稠密图m = $O(n)$,则认为是稀疏图
树与图的存储
邻接表,适用于稀疏图123456const int N = 1e6+5;int h[N], e[N], ne[N], idx = 0;void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx++;}
邻接矩阵,适用于稠密图12const int N = 1e6+5;int g[N][N];
深度优先搜索 DFS
用栈或函数递归来实现朴素DFS遍历图1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#include <cstdio>#include <cstring>#include <cstdlib>const int N = 1e6+5;int h[N], e[N ...