数据库相关概念

参考

数据库相关概念

  • 主键:唯一标识表中的一行数据,不能为空,且不能重复。确保每行数据唯一。
  • 索引:是一种数据结构,用于加快数据库查询的速度和性能。添加索引就是为字段添加目录,方便查阅。
    • 索引能加快字段的查询速度。
    • 索引要额外占用空间。
    • 索引会增加数据插入,更新,删除操作的时间。
  • 存储过程:是一组SQL语句的集合,用来实现一些复杂的功能,比如增删改查,或者一些业务逻辑。
    • 性能快。
    • 存储过程可以提高安全性。
    • 调试困难。
    • 移植性差。
    • 版本管理控制麻烦。

权限管理系统

基本概念

  • 用户:有时候也叫账号,代表这个系统的使用者,也就是现实中的人员。
  • 权限:代表你有没有权利干这件事,比如查看软件的收入,上传代码。
  • 角色权限的集合,一般一个员工他们工作需要好几个权限,但是都是程序员或者都是财务这些,那么同一类人要的权限就一样,把这些权限集合下就是角色。
  • 用户组用户的集合,员工少时候用不到,但是员工多时候就需要,比如有10个员工,他们需要做同样的事情,那么就建一个组,把这10个员工都放在这个组里面,这样以后就不用再管这10个员工了,直接给组权限就行了。

六大设计原则

参考

六大设计原则

  • 单一职责原则:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
  • 开闭原则: 一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
  • 里氏代换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
  • 依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象,其核心思想是:要面向接口编程,不要面向实现编程。
  • 接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
  • 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用。

23种设计模式

参考

设计模式分类

  • 创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。
  • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
  • 行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interperter模式)、状态模式、策略模式、职责链模式(责任链模式)。

23种设计模式

代理模式

  • 关键代码:

    • 真实对象:实际执行任务的对象。
    • 代理类:实现与真实对象相同的接口,并添加额外的控制逻辑。比如持有好几个真实对象,通过逻辑判断使用哪个对象合适。
  • 优点:

    1. 职责分离:将访问控制与业务逻辑分离。
    2. 扩展性:可以灵活地添加额外的功能或控制。
  • 缺点:

    1. 性能开销:增加了代理层可能会影响请求的处理速度。
    2. 实现复杂性:某些类型的代理模式实现起来可能较为复杂。
  • 注意事项:

    • 与装饰器模式的区别:装饰器模式用于增强功能,代理模式用于控制访问。
      • 装饰器模式:是对现有的一个真实对象功能的加强
      • 代理模式:决定你能不能访问真实对象,访问那个真实对象。

外观模式

  • 意图:为一个复杂的子系统提供一个一致的高层接口。这样,客户端代码就可以通过这个简化的接口与子系统交互,而不需要了解子系统内部的复杂性。
  • 使用场景
    • 不需要了解系统内部的复杂逻辑和组件交互时。
    • 整个系统定义一个清晰的入口点时。
  • 关键代码:
    • 外观类:将复杂的子系统操作封装成简单的方法,提供接口给客户端调用。
    • 子系统类:实现子系统功能,被外观类调用

享元模式

就是对象池和线程池了。

迭代器模式

用迭代器访问数组,不用暴露数组的实现细节。

  • 意图:允许顺序访问一个聚合对象中的元素,同时不暴露对象的内部表示。

Dockerfile编写

参考

限制容器对

1
2
3
4
5
6
7
8
9
10
11
services:
myservice:
image: myimage:latest
deploy:
resources:
limits:
cpus: '1.5' # 限制 CPU 使用量为 1.5 核
memory: 500M # 限制内存使用量为 500 MB
reservations:
cpus: '0.5' # 保证最少有 0.5 核 CPU 可用
memory: 200M # 保证最少有 200 MB 内存可用

Docker常用命令

参考

镜像命令

  • docker images:查看所有镜像
  • docker save -o nginx.tar nginx:1.27.3:导出镜像为文件
  • docker load:导入(本地)镜像 -i <文件地址> 例如:docker load -i E:\registry.tar
  • docker rmi:删除镜像
  • docker image prune:删除未使用的镜像
  • docker image inspect:镜像详情

仓库命令

  • docker tag mysql:latest localhost:5000/mysql:latest 给镜像打上私有仓库的标签
  • docker push your-private-registry-ip:5000/your-repo-name:tag 推送镜像到私有仓库

容器命令

  • docker ps 查看容器(运行中的) -a 查看所有容器

docker compose 常用命令

  • docker-compose up 启动容器
  • docker info 查看docker信息
  • docker stats:查看Docker容器占用的CPU,内存资源状态
  • docker exec -it [容器ID或者容器名称] /bin/bash 进入到运行的容器中

Docker网络模式

参考

Docker网络模式

Host

  • 简介:
    • 容器没有自己的任何独立的网络资源(比如:容器的IP、网卡和端口),完全和宿主机共享网络空间。
    • 简单的讲,容器就像安装在电脑上的应用一样,它和宿主机共享网络资源。
  • 优点
    • 共享宿主机网络,性能最高

None

  • 简介:
    • 容器没有网络资源,即容器无法访问网络。

Bridge

  • 简介:
    • 默认模式:桥接到宿主机的Docker0网络上。

注意

  • 不同网络的容器不能相互访问。
  • 在同一个网络的容器可以相互访问。他们的关系相当于:连接同一个WIFI的手机,
  • 同一个网络的容器可以通过服务名相关访问,http://服务名:端口号。例如:http://mysql:3306,http://nginx
  • 一个容器可以同时加入多个网络。
  • 容器通过服务名查找服务时候,默认从当前容器最先加入的网络中查找。

Docker网络相关命令

  • docker network ls:查看所有网络
  • docker network --help:查看网络帮助
  • docker network connect mynetwork mycontainer:将将容器加入网络
    • --alias:指定容器别名

Docker网络的服务发现机制

  • Docker Compose创建容器时候,为这个容器注册一个DNS名称(服务名/域名/别名),同一个网络的其他服务可以通过这个DNS名称访问到这个容器。
  • 使用docker network connect加入网络后,如果这个容器没有注册DNS名称,那么新网络其他容器无法通过DNS名称访问到这个容器。

Docker部署本地仓库

使用Docker镜像部署registry

  1. 拉取镜像

    • docker pull registry:2 拉取镜像
    • docker load E:\registry.tar 加载本地镜像文件
  2. 创建容器

    • 使用compose-registry文件夹中的docker-compose配置直接运行
  3. 检查容器时正常运行

  4. 镜像同步

    • Skopeo:这是一个强大的命令行工具,能够用于复制容器镜像。

安装 Docker

参考

Linux安装Docker

常用命令

  1. apt-get update 更新包索引
  2. apt-get install apt-transport-https ca-certificates curl software-properties-common 安装必要的依赖
  3. 添加阿里云源到您的实例中,这个源包含Docker软件包,方便您使用命令来安装和更新Docker。(二选一)

    如果您的实例网络可以访问公网。

    apt-get -y install apt-transport-https ca-certificates curl software-properties-common
    1
    2
    3
    sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo apt-key add -
    sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] https://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable"
    sudo apt-get update

    使用VPC网络访问地址。
    1
    2
    3
    4
    sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
    sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/debian/gpg | sudo apt-key add -
    sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/debian $(lsb_release -cs) stable"
    sudo apt-get update

  4. sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 安装Docker社区版本,容器运行时containerd.io,以及Docker构建和Compose插件。
  5. sudo systemctl start docker sudo systemctl enable docker 设置Docker自动启动
  6. docker -v 查看Docker 是否正常安装

安装Docker Compose

  1. docker compose version 查看是否已经安装-按上面是已经安装

Windows安装Docker

Docker Engine stopped问题

  • 检查服务是否开启
    1. Windows + R 输入services.msc
    2. 查找Docker Desktop Service服务,如果状态为停止,则需要重新启动服务。
  • 检查CPU是否正常开启虚拟化
    1. Ctrl + Shift + Esc 打开任务管理器
    2. 查看CPU的虚拟化是否正常开启。
  • 检查Hyper-V是否正常。
    1. 打开启用或关闭Windows功能
    2. 找到Hyper-V,全部正常勾选

Docker配置镜像仓库

  1. 查找Docker配置文件。
    • Debian/etc/docker/daemon.json,没有则创建文件。
    • Windows:直接在 设置 -> Docker Engine 处进行修改
  2. 添加配置信息。
    1
    2
    3
    {
    "registry-mirrors": ["https://你的镜像加速器地址"]
    }
  3. 重启Docker服务,使配置生效。
  • Debiansudo systemctl daemon-reload:重新加载配置文件。sudo systemctl restart docker: 重启docker服务。
  1. docker info:查看Docker信息,查看是否生效。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
    "builder": {
    "gc": {
    "defaultKeepStorage": "20GB",
    "enabled": true
    }
    },
    "experimental": false,
    "registry-mirrors": [
    "https://mirrors.tuna.tsinghua.edu.cn"
    ]
    }

Git Lfs 使用

参考

Git Lfs 使用

  1. 初始化 Git Lfs 仓库
    1. 新建Git仓库
    2. 在Git仓库根目录下执行git lfs install
      1
      2
      3
      $ git lfs install
      Updated Git hooks.
      Git LFS initialized.
  2. 使用 Git LFS 跟踪大文件。git lfs track "*.tar"
    • 注意"*.tar"的引号很重要。
    • 类似例子,"Assets/","Assets/Audio/*.ogg","**/Music/*.ogg","*xxdpi*.png"
  3. 执行git lfs track命令后,会生成.gitattributes文件。
  4. 正常按照原来的Git使用流程就好了。