比较零散的一些笔记整理,有参考其他人的、有问ai的(不保真),仅用于学习&理解,记笔记的时候忘了贴链接了,如有被引用还请见谅(跪

RESTful API

有参考:
RESTful API 教程 | 菜鸟教程

RESTful API 的 URL 应该表示"资源"而不是"动作"。

url命名规范

使用名词而非动词:
✅ GET /api/books
使用复数形式:
✅ GET /api/users
使用小写字母
✅ GET /api/user-orders
使用连字符分隔单词:
✅ GET /api/user-profiles

查询参数(过滤、排序、分页)

javascript
// 分页
GET /api/users?page=1&limit=10

// 过滤
GET /api/users?status=active&city=beijing

// 排序
GET /api/users?sort=created_at&order=desc

// 搜索
GET /api/users?search=张三

请求和响应格式--JSON

// 请求
GET /api/users/123
Accept: application/json

// 响应
{
  "id": 123,
  "name": "张三",
  "email": "zhangsan@example.com",
  "createdAt": "2024-01-15T08:30:00Z"
}

// 请求
POST /api/users
Content-Type: application/json

{
  "name": "李四",
  "email": "lisi@example.com",
  "password": "securePassword123"
}

// 响应
{
  "id": 124,
  "name": "李四",
  "email": "lisi@example.com",
  "createdAt": "2024-01-15T09:00:00Z",
  "message": "用户创建成功"
}
//分页响应
{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "用户1"
    },
    {
      "id": 2,
      "name": "用户2"
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 10,
    "totalItems": 100,
    "itemsPerPage": 10
  }
}

//过滤
GET /api/users?fields=id,name,email

{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "张三",
      "email": "zhangsan@example.com"
      // 不返回其他不需要的字段
    }
  ]
}

使用JavaScript调用API示例

// 使用 fetch API 调用 RESTful API

// 1. 获取用户列表
async function getUsers() {
  try {
    const response = await fetch('/api/users');
    const result = await response.json();
    
    if (result.success) {
      console.log('用户列表:', result.data);
    } else {
      console.error('获取失败:', result.error.message);
    }
  } catch (error) {
    console.error('网络错误:', error);
  }
}

// 2. 创建新用户
async function createUser(userData) {
  try {
    const response = await fetch('/api/users', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(userData)
    });
    
    const result = await response.json();
    
    if (result.success) {
      console.log('用户创建成功:', result.data);
    } else {
      console.error('创建失败:', result.error.message);
    }
  } catch (error) {
    console.error('网络错误:', error);
  }
}

// 3. 更新用户信息
async function updateUser(userId, userData) {
  try {
    const response = await fetch(`/api/users/${userId}`, {
      method: 'PUT',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(userData)
    });
    
    const result = await response.json();
    
    if (result.success) {
      console.log('用户更新成功:', result.data);
    } else {
      console.error('更新失败:', result.error.message);
    }
  } catch (error) {
    console.error('网络错误:', error);
  }
}

// 4. 删除用户
async function deleteUser(userId) {
  try {
    const response = await fetch(`/api/users/${userId}`, {
      method: 'DELETE'
    });
    
    const result = await response.json();
    
    if (result.success) {
      console.log('用户删除成功');
    } else {
      console.error('删除失败:', result.error.message);
    }
  } catch (error) {
    console.error('网络错误:', error);
  }
}

一些?

SDK

software development kit
软件开发工具包
辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做SDK

API

即 Application Programming Interface,是一些预先定义的函数,可以帮助 app 开发者,无需访问源码或理解内部工作机制,就能实现相关功能。

一份完整的API应该包括:

  • 名字
  • 简述该API的作用
  • API原型:包含名字、参数
  • 详细描述:如何使用、注意事项、适用场景、调用时序、调用限制等
  • 参数的详细解释
  • 返回值的说明

SDK 与 API

二者都可以调用第三方程序/软件
但是API是前端调用后端数据的一个通道(接口),无须调用源代码直接访问
SDK相当于开发者集成的环境,API则是基于SDK之下的数据接口
想象:SDK是一个虚拟的封闭的程序包,其中某个功能提供了一个接口(API)供外界访问

WSL

Windows Subsystem for Linux,也就是“适用于 Linux 的 Windows 子系统”
比传统虚拟机更轻量、更高效,能让你在 Windows 上无缝地运行原生的 Linux 命令行工具和应用程序
!!!可以直接运行 Docker、Redis、Nginx、PostgreSQL 等服务器软件

  • WSL 1:通过一个转换层将 Linux 系统调用实时翻译成 Windows 能理解的指令。优点是文件系统性能好,与 Windows 交互流畅。

  • WSL 2:基于 Hyper-V 技术的轻量级虚拟机,运行一个完整的 Linux 内核。优点完全的系统调用兼容性和更高的性能(尤其是在磁盘I/O和运行Docker时)。推荐使用 WSL 2

【如果你同时在一台机器上为了docker开这个&&用模拟器打游戏,会有冲突,具体问题以后再研究orz,总之蓝屏过,挖个坑先】

Chocolatey

我直呼卡密
在 Linux 和 macOS 上,包管理器早已成为标配,例如 apt-get、yum、brew 等,它们可以方便地安装、更新和卸载软件。然而,Windows 系统却一直缺乏一个官方的包管理工具,用户往往需要手动下载安装程序,繁琐且容易出错。

Chocolatey 是一个基于 NuGet 的 Windows 包管理器

安装:
以管理员身份运行 PowerShell,运行下列语句

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

关闭新开一个powershell,验证

choco -?

访问官方仓库查询可以安装哪些安装包

https://community.chocolatey.org/packages

直接在shell中键入 choco install jdk8 来安装 JDK8 了,并且会自动将Java加入到环境变量中!

一些操作命令

- choco search xxx,查找 xxx 安装包
    
- choco info xxx,查看 xxx 安装包信息
    
- choco install xxx,安装 xxx 软件
    
- choco upgrade xxx,升级 xxx 软件
    
- choco uninstall xxx, 卸载 xxx 软件

ARM64和X86-64

ARM是英国ARM公司提供一种CPU架构的知识产权,目前主流的手机和平板电脑都采用ARM架构,但 ARM 不生产芯片,只是从各种嵌入式设备、智能手机、平板电脑、智能穿戴和物联网设备体内的上亿颗处理器中“抽成”。
Apple M1 是苹果公司的第一款基于ARM架构的自研处理器单片系统

X86_X64 源于英特尔几十年前出品的CPU型号8086,包括后续型号8088/80286/80386/80486/80586等等,8086以及8088被当时的IBM采用,制造出了名噪一时的IBM PC机,从此个人电脑风靡一时。

主流的手机品牌大都采取ARM架构
安卓apk/lib 目录下的几个文件夹,代表不同的架构:

  • arm64-v8a
  • armeabi-v7a
  • x86

X64是X86_X64的简称;之所以叫X86,是因为实在应用得过于广泛导致X86直接成为了其代名词

X32和X64------这两个概念你可以大致的认为它们是居于X86之下(之内)的两个子概念。

它们指的不是CPU架构,而是CPU寄存器、运算器能访问、处理的数据位宽,以及与此相关的一整套CPU设计规范。
X32 CPU------32位的CPU(32bit的CPU); X64 CPU------64位的CPU(64bit的CPU)
简单的说,X32的X86 CPU只能处理32位的数据、运行32位的操作系统;X64的 CPU则可以处理64位以及32位的数据、运行32位以及64位的操作系统------X64向下兼容X32。

JPA 与Mybatis

JPA
本质:一套操作数据库的标准规范(如Hibernate是其实现)
核心:面向对象,操作Java对象就等于操作数据库表
SQL:由框架自动生成,开发人员无需编写大部分SQL
优点:开发效率高、数据库移植性好
缺点:对复杂SQL的控制力和优化能力较弱

MyBatis
本质:一个持久层框架
核心:面向SQL,将Java方法与SQL语句映射
SQL:需要开发人员手动编写所有SQL
优点:SQL控制力极强、灵活性高、便于性能优化
缺点:开发效率相对较低,需要编写更多代码

关系:两者是解决同一问题(数据持久化)的不同技术选型,是竞争与替代关系,而非从属关系。

JPA是一个ORM规范,它让你以面向对象的方式操作数据库,框架会自动生成SQL,适合业务驱动、快速开发的场景。而MyBatis是一个持久层框架,它要求你亲自编写SQL,再将结果映射到对象,提供了完全的SQL控制权,适合对性能要求高、有复杂查询的系统。