在 Ubuntu 22.04 上安装 MySQL 安装前请切换至 root 账户! 1. 第一步:检查是否已安装 MySQL / MariaDB12dpkg -l | grep -i mysqldpkg -l | grep -i mariadb 如果有输出(比如 mysql-common, mariadb-client-core 等),建议清理。 2. 第二步:彻底卸载旧版本(安全执行,无残留)123456789101112# 停止服务(如果存在)sudo systemctl stop mysql mariadb 2>/dev/null# 卸载所有相关包sudo apt remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* mariadb-client mariadb-server mariadb-common -y# 清理依赖和配置sudo apt autoremove -ysudo apt autoclean# 删除残留数据目录(谨 ...
Linux
未读HTTPS 协议原理 Linux:HTTPS 协议原理 | CSDN(荐) LINUX 网络基础 [六] - HTTPS 协议 | CSDN 先简单回顾一下 TCP/IP 四层模型(视频剩余部分可作为了解):http 和 https 有什么区别吗?(SSL 协议) | B 站。 1. 概念准备1. HTTPS 是什么?HTTPS(HyperText Transfer Protocol Secure)是一个 应用层协议,可以理解为是 HTTP 协议的“安全版”。 核心区别:在 HTTP 协议的基础上引入了一个 加密层。 原因:标准的 HTTP 协议是 明文传输 的,这意味着传输的数据(如账号、密码、个人信息)在经过路由器、运营商等网络设备时,很容易被“劫持”或“篡改”(例如“运营商劫持”下载链接)。 目的:通过加密,保证用户的信息安全,防止数据在传输过程中被窃取或篡改。 2. 什么是加密? 加密:将要传输的原始信息(称为 明文)通过一系列数学变换,生成一段不可读的、看似随机的文本(称为 密文)的过程。 解密:将 密文 通过一系列变换,还原成原始 明文 的过程。 密钥:在加 ...
Linux
未读HTTP 协议 HTTP 协议详解 | CSDN HTTP 协议(超级详细) | CSDN 1. HTTP 是什么虽然我们说应用层协议是我们程序猿自己定的,但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用。HTTP 就是其中之一,HTTP 全称 HyperText Transfer Protocol(超文本传输协议),它是一个 应用层协议,专门规定了浏览器和服务器之间怎么对话。简单来说,就是: 浏览器(客户端):“我要资源 A。” 服务器:“好的,给你资源 A。” HTTP 负责 传输规则,至于你传的是 HTML、图片、视频、JSON,它根本不管。 2. 工作流程HTTP 基本流程就是 请求-响应模型: 客户端发起请求(Request)。 服务器返回响应(Response)。 请求和响应里,都是一堆 报文(Headers + Body),有点像两个人通信时带着信封和正文。 3. 认识 URLURL(统一资源定位符,Uniform Resource Locator)其实就是“网络上的地址”,就像现实生活中的“国家 → 城市 → 街道 → 门牌号 ...
网络传输基础:TCP 连接建立与数据序列化1. TCP 协议通信流程 一条视频讲清楚 TCP 协议与 UDP 协议-什么是三次握手与四次挥手 | B 站 TCP 三次握手和四次挥手 | B 站 为什么 TCP 是三次握手四次挥手,其他次数不行吗 | B 站 1. 通讯流程总览下图是基于 TCP 协议的客户端/服务器程序的一般流程: 2. TCP 的“三次握手”和“四次挥手”1. 三次握手——建立连接目的:确保客户端和服务器都能正常收发数据,建立双向通信连接。 1. 过程描述 第一次握手(SYN) 客户端发送一个 SYN 报文:SYN = 1(同步序列号),挑个初始序号 seq = x 给服务器。 表示“我想建立连接”,这边的起始序号是 x。 客户端进入 SYN_SENT 状态。 第二次握手(SYN+ACK) 服务器收到 SYN 后,回复一个 SYN+ACK 报文(SYN = 1, ACK = 1, 确认号 ack = x+1,挑个自己的序号 seq = y)。 表示“我收到了你的请求,我也准备好了 ...
Linux
未读网络编程套接字1. 预备知识1. 源 IP 地址 & 目的 IP 地址 是什么: 负责 跨网络 的全球寻址,由 路由器 使用。 源 IP:发件人所在的“城市 + 街道”的网络位置。 目的 IP:收件人所在的网络位置。 理解: 在互联网中,IP 就是定位“哪台主机”。 源 IP 说的是 “我是从哪里发的”,目的 IP 说的是 “我要送到哪去”。 2. 源 MAC 地址 & 目的 MAC 地址 是什么: MAC 是网卡的身份证,唯一标识一块网卡。负责 局域网内 的设备寻址,由 交换机 使用。 源 MAC:是当前发出这个数据帧的设备(比如你家的路由器或你的电脑)的网卡物理地址。 目的 MAC:是 当前这一跳 要送达的设备(比如你家的路由器,或者下一个网络的交换机)的网卡物理地址。 理解: MAC 负责在 同一个局域网 里找到对方机器。即使两个设备的 IP 地址在不同网段,中间的路由器也会逐跳修改 MAC 地址来转发数据。 示例:MAC 地址只在“本地”有效。就像快递从你家送到小区快递站,靠的是小区内部的三轮车(车牌号 A),这时“目的 MAC”是快递站;当快递从 ...
网络基础 网络入门基础 | 博客园 1. 计算机网络背景1. 网络发展计算机网络的发展是技术迭代与需求驱动共同作用出的历史必然结果,据搜索:可大致分为以下 5 个关键阶段: 1. 起源:军事科研的 “抗毁通信” 需求(20 世纪 60 年代末) 核心事件:1969 年,美国国防部高级研究计划局(ARPA)启动了 ARPANET(阿帕网)项目。当时正值冷战,美国军方需要一种 “去中心化” 的通信网络 —— 即使部分节点被摧毁,其余节点仍能正常通信。 技术特点:ARPANET 最初仅连接了加州大学洛杉矶分校、斯坦福研究院等 4 个节点,采用 “分组交换” 技术(将数据拆分成小数据包传输,提高效率和抗毁性),这是现代网络的核心底层逻辑雏形。 2. 互联基础:TCP/IP 协议的诞生(20 世纪 70 年代) 核心问题:随着网络节点增多,不同网络(如 ARPANET 与其他科研网络)因 “语言不通” 无法互通。 关键突破:1974 年,文顿 ・ 瑟夫(Vinton Cerf)和罗伯特 ・ 卡恩(Robert Kahn)提出了 TCP/IP 协议族(传输控制协议 ...
深入线程安全:单例、智能指针与同步原语1. 线程安全的单例模式1. 什么是设计模式? 设计模式详解:单例、线程安全、反模式 | B 站 设计模式 是一套经过总结、优化的 代码设计经验,它解决的是软件中 可复用性、可维护性、可扩展性 问题。需要注意的是:它不是具体代码,而是解决特定问题的通用模板。 设计模式分为三类: 分类 说明 举例 创建型 处理对象创建 单例、工厂、建造者 结构型 处理类/对象组合 适配器、装饰器、组合、代理 行为型 处理对象交互 观察者、策略、状态机、职责链等 2. 什么是单例模式定义: 单例模式是一种 创建型设计模式,它保证 某个类在整个程序运行过程中只有一个实例,并提供全局访问点。其核心思想是: 通过私有构造函数和静态实例控制对象创建。 例如:数据库连接池、配置管理类、线程池、日志管理器等,通常用单例实现。 3. 单例模式的特点 唯一性:类只能有一个实例。 全局访问:提供统一的访问接口,无需重复创建对象。 自行实例化:单例类自己负责创建唯一实例。 4. 饿汉 VS 懒汉(实现方式) 吃完饭,立刻洗碗,这种就是饿汉方式 ...
Linux
未读线程池与线程封装1. 线程池1. ThreadPool.hpp123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191#pra ...
Linux
未读生产者 - 消费者模型(CP 问题)1. 生产者-消费者模型(CP 问题)是什么?这是并发编程中最经典的问题之一,主要描述 两个线程/进程之间的数据交换协作问题: 生产者:不断生产数据,放入缓冲区(仓库、通道)。 消费者:不断从缓冲区中取出数据进行处理。 但问题在于: 缓冲区有 容量限制。 多线程并发会导致 竞争访问资源。 所以需要设计好 同步机制(比如互斥锁、条件变量、信号量等)保证: 生产者不能在缓冲区满的时候继续放; 消费者不能在缓冲区空的时候继续取; 多个线程操作共享资源不会冲突。 2. 什么是“解耦”?为什么要解耦?1. 解耦的本质解耦指的是将系统中的不同组件或模块之间的依赖关系降低,使它们能够独立地进行开发、修改和维护。在生产者 - 消费者模型中,解耦就是要让生产者和消费者之间的直接关联尽可能减少,各自可以独立地运行和变化,而不会因为一方的改变对另一方造成过大的影响。简单来说 解耦就是降低模块之间的依赖性,提高系统的可扩展性和灵活性。 在 CP 问题中,供货商和消费者通过缓冲区(超市)进行 间接通信,实现了解耦。 2. 为什么要解耦? 不解耦 ...
Linux
未读深入理解线程间同步与互斥1. 什么是线程互斥? 简单来说,线程互斥就是当一个线程在访问某个共享资源时,其他线程不能同时访问。就好像多个线程都想去用一台打印机,为了避免打印乱套,得保证同一时间只有一个线程能使用,这就是互斥。 线程互斥 就是为了防止多个线程 同时访问某个共享资源(如变量、文件、临界区),导致数据错误或冲突。 先来看一段代码: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475#include <iostream>#include <stdio.h>#include <pthread.h>#include <vector>#include <string>#include <unistd.h>using namespace std;#define NUM 5 ...











