09 2025 档案

摘要:命名空间(Namespace)是用于解决命名冲突的核心机制。它通过将全局作用域划分为多个独立的子作用域(命名空间),允许不同子作用域中存在同名的变量、函数或类,而不会相互干扰。 在大型项目中,不同模块(如团队 A、团队 B)可能定义同名的函数或类(如add、Config),直接放在全局作用域会导致命 阅读全文
posted @ 2025-09-25 09:49 xclic 阅读(73) 评论(0) 推荐(0)
摘要:枚举(Enumeration)是一种用户定义的类型,用于将一组命名的整数常量(枚举值)组织起来,提高代码的可读性和可维护性。C++ 中的枚举分为传统枚举(Unscoped Enumeration) 和强类型枚举(Scoped Enumeration,C++11 引入),两者在语法、作用域和类型安全性 阅读全文
posted @ 2025-09-25 09:29 xclic 阅读(89) 评论(0) 推荐(0)
摘要:Python 并发编程是提升程序执行效率的核心技术,尤其在处理多任务场景(如网络请求、数据计算、文件 IO 等)时至关重要。 1、threading与线程池 多线程是 Python 中最常用的并发方式之一,通过创建多个线程实现任务并行执行。但受GIL(全局解释器锁) 限制,同一时刻只有一个线程执行 阅读全文
posted @ 2025-09-24 17:04 xclic 阅读(110) 评论(0) 推荐(0)
摘要:Python 异步编程是一种基于非阻塞 IO 模型的并发编程范式,核心目标是在处理 IO 密集型任务(如网络请求、文件读写、数据库交互)时,通过高效的任务调度减少等待时间,最大化 CPU 利用率。 异步编程通过事件循环实现任务调度:当一个任务因 IO 操作需要等待时,事件循环会暂停该任务,切换到其他 阅读全文
posted @ 2025-09-24 15:52 xclic 阅读(331) 评论(0) 推荐(1)
摘要:在多线程编程中,当多个线程同时访问共享资源时,可能会导致数据竞争(Data Race),产生不可预期的结果。锁提供了同步机制,确保在同一时间只有一个线程可以访问临界区。 锁的本质是通过互斥机制(Mutual Exclusion)确保: 同一时间只有一个线程能进入访问共享资源的代码段(临界区); 线程 阅读全文
posted @ 2025-09-23 16:28 xclic 阅读(92) 评论(0) 推荐(0)
摘要:1、三之法则 如果一个类需要显式定义以下三个特殊成员函数中的任意一个,通常需要同时定义全部三个: 析构函数(Destructor):释放资源(如 delete 动态内存)。 拷贝构造函数(Copy Constructor):定义深拷贝逻辑,避免多个对象共享同一资源。 拷贝赋值运算符(Copy Ass 阅读全文
posted @ 2025-09-23 11:02 xclic 阅读(243) 评论(0) 推荐(1)
摘要:迭代器(Iterator)是连接容器与算法的 “桥梁”,它提供了一种统一的方式访问容器中的元素,而无需暴露容器的内部实现。 不同容器的底层实现差异很大(如 vector 是动态数组,list 是双向链表),但迭代器屏蔽了这些差异,让算法(如 sort、for_each)可以用相同的方式处理任何容器。 阅读全文
posted @ 2025-09-22 15:16 xclic 阅读(157) 评论(0) 推荐(0)
摘要:1、左值与右值 左值和右值是表达式的属性,核心区别在于:能否取地址、是否有持久的存储。 1.1 左值:有名字、能取地址、可被修改(通常) 左值是 “可以放在赋值号左边” 的表达式(但并非绝对,如 const 左值不能被修改),它有明确的内存地址,生命周期较长(如变量)。 int a = 10; // 阅读全文
posted @ 2025-09-19 16:38 xclic 阅读(304) 评论(0) 推荐(2)
摘要:C++ 泛型编程(Generic Programming)是一种编写与具体类型无关的通用代码的范式,核心目标是代码复用和类型安全,通过模板(Template)机制实现。相比面向对象的 “运行时多态”,泛型编程实现 “编译期多态”,在保证灵活性的同时避免了虚函数的运行时开销。 1、函数模板 函数模板定 阅读全文
posted @ 2025-09-19 15:11 xclic 阅读(80) 评论(0) 推荐(0)
摘要:C++ 多重继承(Multiple Inheritance)是指一个派生类同时继承自多个基类的特性,允许派生类组合多个基类的功能。这一特性增强了代码复用的灵活性,但也带来了复杂性(如菱形继承问题)。 基本语法 class Base1 { public: void func1() { std::cou 阅读全文
posted @ 2025-09-19 11:17 xclic 阅读(60) 评论(0) 推荐(0)
摘要:C++ 标准库中的 std::string 是处理字符串的核心类,封装了字符串的存储、管理和操作,相比 C 风格的 char* 更安全、易用。 1、基本概念 1.1 基本特性 std::string 定义在 <string> 头文件中(属于 std 命名空间),本质是对动态字符数组的封装 动态大小: 阅读全文
posted @ 2025-09-19 10:10 xclic 阅读(154) 评论(0) 推荐(0)
摘要:C++ 面向对象编程(OOP)是语言的核心特性,通过封装、继承、多态三大支柱实现代码复用、模块化和可扩展性。 1、三大特性 1.1 封装 将数据(成员变量)和操作数据的方法(成员函数)捆绑在类中,通过访问控制符限制外部对内部数据的直接访问,仅暴露必要接口。 隐藏实现细节,确保数据安全性(避免意外修改 阅读全文
posted @ 2025-09-18 17:52 xclic 阅读(217) 评论(0) 推荐(0)
摘要:1. static 控制作用域、生命周期或类成员归属 // 1. 全局/命名空间:仅当前文件可见(避免跨文件重定义) static int global_static = 10; // 其他文件无法通过 extern 访问 // 2. 局部变量:生命周期延长至程序结束(仅初始化1次) void co 阅读全文
posted @ 2025-09-18 16:03 xclic 阅读(67) 评论(0) 推荐(0)
摘要:C++ 标准模板库(STL)提供了丰富的算法库(定义在 <algorithm> 头文件中),这些算法多为通用函数模板,可配合容器和迭代器高效操作数据。 1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value) 阅读全文
posted @ 2025-09-18 10:06 xclic 阅读(267) 评论(0) 推荐(0)
摘要:1、基本介绍 C++11 引入的 lambda 匿名函数(Lambda Expression)是一种轻量级的函数对象,可在需要函数的地方直接定义,无需单独声明,极大简化了代码编写(尤其是回调函数、算法谓词等场景)。 基本语法: [capture-list] (parameter-list) muta 阅读全文
posted @ 2025-09-17 23:08 xclic 阅读(257) 评论(0) 推荐(0)
摘要:C++ 并发编程是现代软件开发中的核心技术,主要用于利用多核处理器提升程序性能。C++11 及后续标准引入了完善的并发库(<thread>、<mutex>、<condition_variable> 等),使开发者能更安全地编写多线程程序。 1、std::thread std::thread 是 C+ 阅读全文
posted @ 2025-09-17 17:48 xclic 阅读(31) 评论(0) 推荐(0)
摘要:C++ 内存管理是程序设计的核心环节,直接影响程序的性能、稳定性和安全性。C++ 不像 Java、Python 等语言有自动垃圾回收机制,而是需要开发者手动管理动态内存(或通过智能指针等机制自动管理)。 1、C++ 内存分区 内存区域 存储内容 生命周期 管理方式 栈 (Stack) 函数参数、局部 阅读全文
posted @ 2025-09-17 16:34 xclic 阅读(237) 评论(0) 推荐(0)
摘要:C++ 智能指针(Smart Pointer)是 C++11 引入的用于自动管理动态内存的模板类,其核心作用是通过RAII(资源获取即初始化)机制,在智能指针生命周期结束时自动释放所管理的内存,从而避免传统裸指针(Raw Pointer)可能导致的内存泄漏、重复释放、悬垂指针等问题。 智能指针通过 阅读全文
posted @ 2025-09-17 15:34 xclic 阅读(94) 评论(0) 推荐(0)
摘要:构造函数是 C++ 类中的特殊成员函数,其核心作用是在创建对象时初始化对象的状态(如成员变量赋值、分配资源等)。它的名字与类名完全相同,无返回值(包括 void),且在对象创建时由编译器自动调用,无需手动触发。 1、构造函数的核心特性 名称与类名一致:必须与所属类的名字完全相同(大小写敏感),例如 阅读全文
posted @ 2025-09-17 11:27 xclic 阅读(100) 评论(0) 推荐(0)
摘要:C++ 提供了四种显式强制类型转换运算符(static_cast、dynamic_cast、const_cast、reinterpret_cast),相比 C 风格的强制转换((类型)表达式),它们更具针对性、可读性和安全性,能让转换意图更清晰,且编译器可提供更严格的检查。 1、static_cas 阅读全文
posted @ 2025-09-17 10:40 xclic 阅读(67) 评论(0) 推荐(0)
摘要:指针和引用是 C++ 中用于间接访问变量的重要机制,两者都能提高代码的灵活性和效率,但在语法、语义和使用场景上有显著区别。 1、指针 指针是存储另一个变量内存地址的变量,其本质是一个独立的变量,拥有自己的内存空间,存储的内容是目标变量的地址(通常为 4 字节或 8 字节,取决于系统位数)。 1.1 阅读全文
posted @ 2025-09-17 10:07 xclic 阅读(211) 评论(0) 推荐(0)
摘要:多态(Polymorphism)是面向对象编程的三大核心特性(封装、继承、多态)之一。它允许使用统一的接口来处理不同的派生类对象,从而在运行时根据对象的实际类型来调用相应的方法。 1、原理 虚函数表 (vTable) 和虚函数指针 (vPtr) 虚函数 (Virtual Function): 使用 阅读全文
posted @ 2025-09-16 23:29 xclic 阅读(143) 评论(1) 推荐(0)
摘要:Meyers' Singleton(迈耶斯单例)是 C++ 中实现单例模式的一种简洁高效的方法,由 C++ 专家 Scott Meyers 提出。其核心原理是利用局部静态变量的初始化特性保证单例的唯一性和线程安全性(C++11 及以后标准)。 1、核心原理 局部静态变量的初始化特性 在 C++ 中, 阅读全文
posted @ 2025-09-16 22:19 xclic 阅读(68) 评论(0) 推荐(1)
摘要:std::unordered_map 是 C++ STL 中无序键值对容器的核心成员,底层基于哈希表实现,存储唯一键(key)与对应值(value)的映射关系,且不保证键的顺序。其最大优势是插入、查找、删除操作的平均时间复杂度为 O(1),适合对效率敏感且无需键有序的场景。 1、底层数据结构与特性 阅读全文
posted @ 2025-09-16 15:36 xclic 阅读(258) 评论(0) 推荐(0)
摘要:std::unordered_set 是 C++ STL 中的无序关联容器,其核心特性是存储唯一元素且不保证元素顺序,底层基于哈希表实现,因此插入、查找、删除操作的平均时间复杂度为 O(1)。与 std::set(红黑树实现)相比,它更适合对查找速度有高要求且无需元素有序的场景。 1、底层数据结构与 阅读全文
posted @ 2025-09-16 11:42 xclic 阅读(117) 评论(0) 推荐(1)
摘要:std::map 是 C++ STL 中最常用的有序键值对容器,其核心功能是存储唯一键(key)与对应值(value)的映射关系,并自动按键的顺序排序。底层基于红黑树(自平衡二叉搜索树)实现,这使得它在键的查找、插入、删除等操作上保持稳定的高效性。 1、底层数据结构与核心特性 1.1 底层数据结构 阅读全文
posted @ 2025-09-16 11:30 xclic 阅读(186) 评论(0) 推荐(0)
摘要:std::set 是 C++ STL 中的有序关联容器,其核心特性是存储唯一元素并自动按指定规则排序。底层通常基于红黑树(自平衡二叉搜索树)实现,这使得它在查找、插入、删除操作上具有稳定的高效性。 1、底层数据结构与核心概念 1.1 底层数据结构 底层结构:通常实现为红黑树(Red-Black Tr 阅读全文
posted @ 2025-09-16 11:05 xclic 阅读(41) 评论(0) 推荐(0)
摘要:std::list 是 C++ STL 中基于双向链表实现的序列容器,其设计目标是提供高效的任意位置插入 / 删除操作。 1、底层结构与核心原理 1.1 节点与链表结构 节点组成:每个元素存储在独立的节点中,节点包含三部分 template <typename T> struct ListNode 阅读全文
posted @ 2025-09-16 10:13 xclic 阅读(78) 评论(0) 推荐(0)
摘要:std::vector 是 C++ STL 中最常用的序列容器之一,它提供了动态数组的功能,结合了数组的高效访问和链表的动态扩展能力。 1、底层结构与核心原理 1.1 内存布局 连续内存空间:vector 底层是一块连续的动态分配内存,这使得它支持 随机访问(通过下标 [] 或 at() 方法,时间 阅读全文
posted @ 2025-09-16 09:36 xclic 阅读(184) 评论(0) 推荐(0)
摘要:1. 启动实例(start) 场景:启动处于 SHUTOFF 状态的实例 源码路径: API 层:nova/compute/api.py → start() RPC 层:nova/compute/rpcapi.py → start_instance() 执行层:nova/compute/manage 阅读全文
posted @ 2025-09-15 18:03 xclic 阅读(25) 评论(0) 推荐(0)
摘要:Cinder 的卷创建(create volume)是块存储服务的核心操作,涉及从请求接收、调度决策到存储后端实际创建的完整流程。 1、流程概览 创建卷的完整流程涉及 Cinder 多个组件的协同工作,整体流程如下: 客户端 → cinder-api → 消息队列 → cinder-schedule 阅读全文
posted @ 2025-09-15 17:01 xclic 阅读(126) 评论(0) 推荐(1)
摘要:Cinder 是 OpenStack 的 块存储 (Block Storage) 服务,其核心功能是为虚拟机实例提供持久化的块存储设备(即云硬盘 Volume)。这些云硬盘可以被挂载到虚拟机实例上,就像给物理服务器插上一块新的硬盘一样,用于扩展实例的存储空间或持久化保存数据,即使实例本身被终止,数据 阅读全文
posted @ 2025-09-15 16:22 xclic 阅读(36) 评论(0) 推荐(0)
摘要:Nova Scheduler 的核心任务是解决“虚拟机实例在哪个计算节点上启动”的问题,它根据用户通过 flavor 提出的资源需求(如 CPU、内存、磁盘)来做出决策。其默认的调度器是 Filter Scheduler,工作流程主要分为过滤 (Filtering) 和称重 (Weighting) 阅读全文
posted @ 2025-09-15 15:35 xclic 阅读(35) 评论(0) 推荐(0)
摘要:创建虚拟机的过程是一个经典的分布式、异步、状态驱动的工作流。其核心设计哲学是:API 接收请求 -> 调度决策 -> 资源分配 -> 虚拟化层执行。整个过程涉及多个 Nova 服务以及外部组件(Glance, Neutron, Cinder, Keystone)。 1、基本流程 sequenceDi 阅读全文
posted @ 2025-09-12 16:51 xclic 阅读(186) 评论(0) 推荐(0)
摘要:Nova 是 OpenStack 最核心的服务之一,负责虚拟机(VM)实例的全生命周期管理,包括创建、调度、运行、终止等操作。它是 OpenStack 实现计算即服务(IaaS)的核心组件,支持多种虚拟化技术和硬件平台。 1 架构图 + + + + + + | 客户端 | | Horizon Das 阅读全文
posted @ 2025-09-12 16:03 xclic 阅读(44) 评论(0) 推荐(0)
摘要:Glance 是 OpenStack 的镜像服务(Image Service),它负责虚拟机镜像的发现、注册、检索和交付。它提供了一个 RESTful API,允许用户查询虚拟机镜像元数据并检索实际镜像。 1、概述 1.1 核心概念 镜像(Image):虚拟机的模板,包含操作系统和必要的软件 镜像元 阅读全文
posted @ 2025-09-12 15:08 xclic 阅读(66) 评论(0) 推荐(0)
摘要:Keystone 是 OpenStack 的核心组件之一,作为身份认证服务(Identity Service),它为整个 OpenStack 生态系统提供统一的身份验证、授权和服务目录管理。 三大核心功能: 身份认证(Authentication):验证用户身份(如用户名 / 密码、令牌等) 授权( 阅读全文
posted @ 2025-09-12 11:47 xclic 阅读(77) 评论(0) 推荐(0)
摘要:OpenStack 是一个开源的云计算管理平台项目,它提供了一整套软件工具,用于构建和管理公有云和私有云环境中的基础设施即服务(IaaS)。简单来说,它就像一个云操作系统,能够通过 API 或管理界面,池化大量的计算、存储和网络资源,并按需分配给用户。 1、逻辑架构图 flowchart TD su 阅读全文
posted @ 2025-09-12 09:40 xclic 阅读(76) 评论(0) 推荐(0)
摘要:在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes引入了Volume的概念。 Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod 阅读全文
posted @ 2025-09-11 17:41 xclic 阅读(19) 评论(0) 推荐(0)
摘要:1、介绍 Service对集群之外暴露服务的主要方式有两种:NotePort和LoadBalancer,但是这两种方式,都有一定的缺点: NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显 LB方式的缺点是每个service需要一个LB,浪费、麻烦,并 阅读全文
posted @ 2025-09-11 17:07 xclic 阅读(23) 评论(0) 推荐(0)
摘要:1、概念 1.1 定义 Service 是一种 Kubernetes 资源,用于定义一组 Pod 的访问规则,主要解决以下问题: Pod 是临时的,IP 地址会随着 Pod 重建而变化 需要在动态变化的 Pod 集合上实现负载均衡 需要提供稳定的网络端点供内部或外部访问 1.2 Service 的工 阅读全文
posted @ 2025-09-11 16:32 xclic 阅读(13) 评论(0) 推荐(0)
摘要:1、Pod控制器介绍 1.1 什么是 Pod 控制器? Pod 控制器是一种 Kubernetes 资源,用于管理一组 Pod 的创建、运行和终止,实现以下核心功能: 确保 Pod 数量与期望状态一致(自愈能力) 提供 Pod 的扩缩容机制 实现 Pod 的更新策略(如滚动更新) 为 Pod 提供统 阅读全文
posted @ 2025-09-11 15:54 xclic 阅读(17) 评论(0) 推荐(0)
摘要:Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。 1、Pod介绍 1.1 定义与特性 一个 Pod 代表集群上一个正在运行的进程。它可以包含一个或多个紧密耦合的容器,以及这些容器共享的存储和网络资源。 1.2 共享资源 Pod 内的所有容器共 阅读全文
posted @ 2025-09-11 14:25 xclic 阅读(238) 评论(0) 推荐(0)
摘要:标签(Labels)是 Kubernetes 中用于对资源进行标识和分类的键值对,是实现资源管理、筛选和关联的核心机制。它们不直接影响资源的功能,但为集群中的资源组织、查询和操作提供了强大的灵活性。 1、概念 1.1 定义与作用 标签是附加在 Kubernetes 资源(如 Pod、Node、Ser 阅读全文
posted @ 2025-09-11 10:18 xclic 阅读(21) 评论(0) 推荐(0)
摘要:Namespace 是 Kubernetes 中用于实现资源隔离和多租户管理的核心机制。它通过将集群资源划分为逻辑上的不同分组,实现了不同团队、项目或环境之间的资源隔离与管理。 1、默认的 Namespace Kubernetes 集群初始化时会自动创建 4 个默认 Namespace: defau 阅读全文
posted @ 2025-09-10 17:54 xclic 阅读(34) 评论(0) 推荐(0)
摘要:命令式对象管理:直接使用命令去操作kubernetes资源 kubectl run nginx-pod --image=nginx:1.17.1 --port=80 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源 kubectl create/patch -f nginx-po 阅读全文
posted @ 2025-09-10 17:11 xclic 阅读(10) 评论(0) 推荐(0)
摘要:Kubernetes(K8s) 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。其架构设计体现了分层解耦和模块化协作的理念,能够灵活支撑大规模容器化应用的运维管理。 1、核心架构 Kubernetes 采用经典的主从(Master-Slave)架构,现在更普遍地称为控制平面(Co 阅读全文
posted @ 2025-09-10 16:55 xclic 阅读(39) 评论(0) 推荐(0)
摘要:Docker 容器是 Docker 镜像的一个运行实例。它包含了运行某个软件所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器与虚拟机不同,它不需要包含完整的操作系统,而是共享主机系统的内核,这使得容器更加轻量和高效 容器本质上是一个被隔离的进程,它拥有自己的文件系统、网络空间和进程树, 阅读全文
posted @ 2025-09-10 15:28 xclic 阅读(28) 评论(0) 推荐(0)
摘要:Docker 存储是容器化应用中数据持久化的关键部分,它解决了容器生命周期与数据生命周期不一致的问题。 1、概念 Docker 提供了两种主要的存储资源类型: 1.1 由 Storage Driver 管理的存储 用于管理容器运行时产生的临时数据。容器由最顶层的可写容器层和下面的只读镜像层组成。这种 阅读全文
posted @ 2025-09-10 14:40 xclic 阅读(322) 评论(0) 推荐(1)
摘要:Docker 网络是容器通信的基础,它提供了灵活的网络模型,使容器能够相互通信以及与外部网络交互。 1、核心概念 Docker 网络的核心目标是提供隔离和连通性。它利用 Linux 的 网络命名空间(Network Namespaces 为每个容器提供独立的网络栈(包括网卡、路由表、iptables 阅读全文
posted @ 2025-09-10 11:32 xclic 阅读(133) 评论(0) 推荐(1)
摘要:Docker 镜像是一个轻量级、可执行的独立软件包,它包含了运行某个软件所需的一切:代码、运行时环境、库、环境变量和配置文件。它是一切容器运行的基石。 1、核心概念 1.1 分层存储 (Union File System) 这是 Docker 镜像最核心的特性。 只读层 (Read-only Lay 阅读全文
posted @ 2025-09-09 17:35 xclic 阅读(359) 评论(0) 推荐(1)
摘要:Docker 采用了客户端-服务器 (Client-Server) 架构模型,主要由 Docker 客户端、Docker 守护进程、Docker 镜像、Docker 容器、Docker 注册中心等核心组件构成。 flowchart TD subgraph A [用户操作侧] direction LR 阅读全文
posted @ 2025-09-09 16:51 xclic 阅读(43) 评论(0) 推荐(0)
摘要:MySQL 锁(Lock)是数据库保证并发操作时数据一致性的核心机制,通过控制多个事务对资源的访问顺序,避免出现脏读、数据冲突等问题。合理理解和使用锁机制,对提升数据库并发性能至关重要。 锁级别 锁类型 描述 适用场景 存储引擎支持 全局锁 FTWRL 锁定整个数据库实例 全库备份 所有引擎 表级锁 阅读全文
posted @ 2025-09-09 16:19 xclic 阅读(25) 评论(0) 推荐(0)
摘要:MySQL 触发器(Trigger)是与表关联的特殊存储过程,当表发生特定事件(如 INSERT、UPDATE、DELETE)时自动执行。触发器可用于实现数据校验、日志记录、数据同步等功能,是保证数据完整性和自动化业务逻辑的重要工具。 1、触发器的基本概念 自动执行:无需手动调用,当触发事件发生时自 阅读全文
posted @ 2025-09-09 15:02 xclic 阅读(152) 评论(0) 推荐(0)
摘要:MySQL 存储过程(Stored Procedure)是一组预编译的 SQL 语句集合,保存在数据库中,可通过名称直接调用。它能封装复杂业务逻辑、提高执行效率、增强代码复用性,是数据库编程的重要工具。 预编译:存储过程创建时被编译,后续调用无需重新编译,比动态 SQL 执行更快。 封装性:将多步 阅读全文
posted @ 2025-09-09 14:47 xclic 阅读(22) 评论(0) 推荐(0)
摘要:视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。 1、语法 1.1 创建 CRE 阅读全文
posted @ 2025-09-09 14:35 xclic 阅读(27) 评论(0) 推荐(0)
摘要:SQL 优化是数据库性能调优的核心环节。合理的 SQL 优化可以显著提升数据库性能,减少资源消耗。 1、查询性能分析 1.1 识别慢查询 -- 开启慢查询日志 SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2; -- 超 阅读全文
posted @ 2025-09-09 14:04 xclic 阅读(32) 评论(0) 推荐(0)
摘要:索引是数据库中的排序数据结构,类似于书籍的目录,用于快速定位数据,避免全表扫描(Full Table Scan) 优点:提高查询速度、加速排序和分组操作、确保数据唯一性 缺点:占用额外存储空间、降低数据写入速度(因为需要维护索引) 1、分类 1.1 按功能逻辑划分 索引类型 说明 适用场景 主键索引 阅读全文
posted @ 2025-09-09 10:51 xclic 阅读(257) 评论(1) 推荐(0)
摘要:1、概述 MySQL 的存储引擎是数据库的底层核心组件,它决定了数据如何存储、索引如何组织、事务是否支持以及并发控制机制等关键特性。选择合适的存储引擎对数据库的性能、可靠性和功能实现至关重要。 查看支持的存储引擎 SHOW ENGINES; 设置默认存储引擎 在 MySQL 配置文件 my.cnf 阅读全文
posted @ 2025-09-09 09:47 xclic 阅读(46) 评论(0) 推荐(0)
摘要:事务是数据库管理系统的核心特性,它确保数据库操作要么完全成功,要么完全失败,保持数据的一致性和完整性。 1、事务基础概念 1.1 什么是事务? 事务是一组原子性的 SQL 操作,这些操作要么全部执行成功,要么全部失败回滚。事务将数据库从一种一致状态转换为另一种一致状态。 1.2 ACID 特性 特性 阅读全文
posted @ 2025-09-08 17:58 xclic 阅读(27) 评论(0) 推荐(0)
摘要:MySQL 多表查询是指同时从两个或多个关联表中检索数据,通过表之间的关系(如外键关联)将分散的数据整合起来。这是实际开发中最常用的查询方式之一,尤其在关系型数据库中,数据通常按业务逻辑拆分到不同表中存储。 1、核心概念 1.1 多表关系 一对多(多对一) 多对多 一对一 1.2 多表查询分类 连接 阅读全文
posted @ 2025-09-08 17:35 xclic 阅读(472) 评论(0) 推荐(1)
摘要:MySQL 提供了丰富的内置函数,用于数据处理、转换、计算和聚合。这些函数可以极大地简化 SQL 查询并提高数据处理效率。 1、字符串函数 函数 功能 CONCAT (S1,S2, ...Sn) 字符串拼接,将 S1 , S2 , ··· Sn 拼接成一个字符串 LOWER(str) 将字符串str 阅读全文
posted @ 2025-09-08 16:37 xclic 阅读(22) 评论(0) 推荐(0)
摘要:MySQL 约束是用于强制表中数据规则的机制,它们确保数据的准确性和可靠性。如果存在违反约束的数据操作,MySQL 会阻止该操作。 约束 描述 关键字 非空约束 限制该字段的数据不能为null NOT NULL 唯一约束 保证该字段的所有数据都是唯一、不重复的 UNIQUE 主键约束 主键是一行数据 阅读全文
posted @ 2025-09-08 16:09 xclic 阅读(11) 评论(0) 推荐(0)
摘要:MySQL 中的 DQL(Data Query Language,数据查询语言)主要用于从数据库表中检索数据,核心命令是 SELECT。DQL 是 SQL 中最灵活、使用最频繁的部分,支持复杂的条件过滤、排序、分组、连接等操作。 1、基本语法 SELECT [DISTINCT] 字段1 [AS 别名 阅读全文
posted @ 2025-09-08 15:31 xclic 阅读(39) 评论(0) 推荐(0)
摘要:DML 是用于操作数据库中实际数据的 SQL 语句集合,主要包括四大操作:插入(INSERT)、查询(SELECT)、更新(UPDATE)和删除(DELETE)。 1、INSERT - 插入数据 1.1 基本语法 INSERT INTO table_name (column1, column2, c 阅读全文
posted @ 2025-09-08 14:09 xclic 阅读(19) 评论(0) 推荐(0)
摘要:DDL(Data Definition Language)是用于定义和管理数据库结构的语言,主要包括创建、修改和删除数据库对象的操作。 表相关的 DDL 主要围绕以下对象展开: 表(Table):数据存储的基本单位 字段(Column):表中的列,包含数据类型和约束 约束(Constraint):保 阅读全文
posted @ 2025-09-08 11:29 xclic 阅读(36) 评论(0) 推荐(0)
摘要:Redis 缓存一致性指的是缓存数据与数据库数据保持同步,避免出现缓存数据过时、与数据库数据不匹配的情况。 策略 核心思想 一致性强度 性能影响 实现复杂度 适用场景 Cache-Aside 应用层主动管理缓存:读时延后加载,写时更新DB并删除缓存 最终一致性 读操作可能延迟 低 最常用,读多写少, 阅读全文
posted @ 2025-09-08 10:17 xclic 阅读(509) 评论(0) 推荐(0)
摘要:内存淘汰策略(Eviction Policies),这是 Redis 作为缓存或内存数据库的核心机制,用于在内存不足时,决定如何删除一些数据以腾出空间存储新数据。 一、核心概念:为什么需要内存淘汰? Redis 是一个基于内存的数据库,所有数据都存放在内存中。而内存是有限且昂贵的资源。当 Redis 阅读全文
posted @ 2025-09-05 18:07 xclic 阅读(36) 评论(0) 推荐(0)
摘要:Redis 哨兵(Sentinel)机制是 Redis 官方提供的 高可用解决方案,核心目标是解决主从复制架构中 “主节点(Master)故障后无法自动切换” 的问题,实现故障检测、自动故障转移、配置更新和客户端通知,确保 Redis 服务在主节点宕机时仍能持续可用。 1、哨兵的核心功能 监控(Mo 阅读全文
posted @ 2025-09-05 17:53 xclic 阅读(44) 评论(0) 推荐(0)
摘要:缓存雪崩、缓存击穿、缓存穿透 这三个问题都发生在缓存失效或不存在时,大量请求直接涌向后端数据库,导致数据库压力激增甚至崩溃。 一、缓存雪崩 (Cache Avalanche) 1. 问题描述 同一时间,大量的缓存Key集体失效(例如,设置了相同的过期时间),导致所有对这些数据的请求同时无法命中缓存( 阅读全文
posted @ 2025-09-05 17:30 xclic 阅读(96) 评论(0) 推荐(0)
摘要:Redis 持久化是确保数据安全的关键机制,它能将内存中的数据保存到磁盘,防止服务重启或宕机时数据丢失。 1、RDB(Redis Database)持久化:定时快照 RDB 持久化是在指定的时间间隔内,生成内存中整个数据集的一个快照(Snapshot),并将其保存到一个二进制文件中(默认文件名为 d 阅读全文
posted @ 2025-09-05 17:19 xclic 阅读(48) 评论(0) 推荐(0)
摘要:1、概念 Redis 事务的本质是将多个命令打包,然后按顺序、一次性、隔离地执行。它通过 MULTI, EXEC, DISCARD, WATCH 四个核心命令实现。 MULTI:开启一个事务,之后的命令都会放入队列,而不是立即执行。 EXEC:执行事务队列中的所有命令。 DISCARD:取消事务,清 阅读全文
posted @ 2025-09-05 16:36 xclic 阅读(42) 评论(0) 推荐(0)
摘要:Redis 凭借其高性能、低延迟和丰富的数据结构,常被用来实现轻量级消息队列。 1、List实现简单队列 List 是 Redis 最基础的消息队列实现方式,利用其 有序、可重复 的特性,通过 LPUSH(生产者推送)和 BRPOP(消费者拉取)实现消息传递。 原理 生产者:使用 LPUSH 将消息 阅读全文
posted @ 2025-09-05 15:15 xclic 阅读(87) 评论(0) 推荐(0)
摘要:Redis 的所有数据都是以 key-value(键值对)的形式存储的,我们所说的数据类型指的是 value 的数据类型。key 永远都是一个字符串(String)。 0、通用命令 keys:查看当前库所有key (匹配:keys *1) exists key:判断某个key是否存在 type ke 阅读全文
posted @ 2025-09-05 14:31 xclic 阅读(371) 评论(0) 推荐(0)
摘要:Django 提供了强大的国际化 (i18n) 和本地化 (l10n) 支持,让开发者能够轻松创建多语言网站。 1、核心概念与配置 1.1 基本配置 在 settings.py中启用国际化支持: # settings.py # 启用国际化 USE_I18N = True USE_L10N = Tru 阅读全文
posted @ 2025-09-04 17:51 xclic 阅读(20) 评论(0) 推荐(0)
摘要:Django REST Framework 提供了强大的过滤功能,允许客户端通过查询参数对 API 结果进行过滤、搜索和排序。 1、过滤器工作流程 ListModelMixin的 list() -> GenericAPIView filter_queryset() # rest_framework/ 阅读全文
posted @ 2025-09-04 17:01 xclic 阅读(23) 评论(0) 推荐(0)
摘要:Django 提供了一个强大的会话(Session)系统,用于在多个请求之间存储和检索用户特定的数据。 1、系统结构 1.1 代码结构 django.contrib.sessions ├── middleware.py │ └── SessionMiddleware (处理请求/响应周期) ├── 阅读全文
posted @ 2025-09-04 15:32 xclic 阅读(23) 评论(0) 推荐(0)
摘要:Django 提供了一个强大且灵活的认证和权限系统,可以轻松处理用户认证、授权和权限管理。 1、认证系统架构 启用配置 # settings.py INSTALLED_APPS = [ # ... 'django.contrib.auth', # 核心认证框架 'django.contrib.con 阅读全文
posted @ 2025-09-04 14:44 xclic 阅读(57) 评论(0) 推荐(0)
摘要:1、基本概念 Django 信号是一种观察者模式的实现,用于在框架内部或应用之间传递信息,实现解耦的组件通信。当特定事件发生时(如模型保存、删除等),信号系统会通知所有已注册的接收器。 组成: 发送者 (Sender):触发信号的对象,通常是模型类,但也可以是任何 Python 对象。 信号 (Si 阅读全文
posted @ 2025-09-04 10:34 xclic 阅读(26) 评论(0) 推荐(0)
摘要:Django REST Framework 提供了强大的分页功能,可以帮助你处理大量数据的展示问题。 1、基础概念 分页是将大量数据分割成多个小块(页面)的过程,每个页面包含有限数量的数据项。这样做的好处: 减少单次请求的数据量,提高响应速度 降低客户端内存占用 提供更好的用户体验 分页基类Base 阅读全文
posted @ 2025-09-03 16:56 xclic 阅读(20) 评论(0) 推荐(0)
摘要:Django 的数据库操作(ORM)虽然方便,但如果使用不当,很容易出现性能问题(比如查询缓慢、数据库压力大)。数据库优化的核心目标是:减少不必要的查询、减少数据传输量、让查询跑得更快。 1、N+1查询问题 当查询包含外键关联的数据时,如果循环获取关联对象,会产生 “1 次主查询 + N 次关联查询 阅读全文
posted @ 2025-09-03 16:12 xclic 阅读(31) 评论(0) 推荐(0)
摘要:Django提供了强大的缓存框架,可以帮助你提高网站性能。 1、缓存配置 Django 支持多种缓存后端,你可以根据项目规模、性能需求和基础设施来灵活选择。配置在 settings.py的 CACHES设置中完成 # settings.py CACHES = { 'default': { 'BACK 阅读全文
posted @ 2025-09-03 15:00 xclic 阅读(31) 评论(0) 推荐(0)
摘要:1. 事务基础概念 1.1 什么是事务? 事务是具有以下特性(ACID)的数据库操作单元: 原子性 (Atomicity):事务是一个不可分割的工作单位,事务中的操作要么全部发生,要么全部不发生。 一致性 (Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。例如,转账 阅读全文
posted @ 2025-09-03 14:19 xclic 阅读(180) 评论(0) 推荐(0)