- 博客(67)
- 收藏
- 关注
原创 【MySQL】用户管理详解
要点建议安全性避免使用 root 执行日常操作最小权限原则每个用户只授予必要权限密码复杂度符合 MySQL 的安全策略要求权限管理定期检查并清理无用用户或权限备份修改前建议备份用户与权限表。
2025-10-28 14:27:23
892
原创 【MySQL】视图详解
视图(View)是一个虚拟表(Virtual Table),它的内容由一个查询语句(SELECT)定义。与真实表不同,视图本身并不存储数据,而是动态地从基表(Base Table)中获取数据。修改视图的数据,会影响基表。修改基表的数据,也会影响视图。特性说明定义虚拟表,由查询定义作用简化复杂查询、提高安全性修改视图与基表数据实时联动限制无法创建索引、触发器或默认值应用场景报表统计、权限隔离、逻辑复用通过本文的讲解,相信你已经对MySQL 视图的定义、使用方式与限制有了全面了解。
2025-10-21 12:09:48
675
原创 【MySQL】 索引特性详解
索引是数据库性能优化的核心;Page 机制有效减少磁盘 IO;InnoDB 采用 B+ 树管理索引;聚簇索引与非聚簇索引在数据存储上存在根本差异;合理设计与使用索引能极大提升查询效率。“索引不是越多越好,而是用对地方,事半功倍。
2025-10-06 17:41:47
952
原创 【MySQL】内外连接
内连接:返回匹配的数据,是最常见的连接方式。左外连接:保留左表的所有数据,即使右表没有匹配。右外连接:保留右表的所有数据,即使左表没有匹配。合理使用内外连接,可以帮助我们实现更灵活的数据整合和分析。
2025-09-20 13:44:06
305
原创 【Mysql】复合查询
多表查询:用于整合不同表的数据。自连接:处理表内层级或递归关系。子查询:可分为单行、多行、多列和from子查询。合并查询union去重,union all保留重复。复合查询是 SQL 的核心技能,熟练掌握能大幅提升数据分析和业务处理能力。
2025-09-19 15:29:59
277
原创 【Mysql】数据库的内置函数
日期函数:用于获取当前时间、日期加减、差值计算。字符串函数:可实现拼接、替换、截取、字节长度统计。数学函数:常用于取整、格式化、生成随机数。其它函数:包括系统信息、加密与空值处理。熟练掌握这些 MySQL 内置函数,可以让你在写 SQL 时更加灵活、高效。
2025-09-10 20:04:23
240
原创 【MySQL】基本查询
Create:插入单条、多条数据,支持冲突更新与替换。Retrieve:利用SELECT搭配WHEREORDER BYLIMIT实现各种查询。Update:可更新单列、多列,支持表达式运算。Delete:可删除部分或全部数据,TRUNCATE更高效但不可回滚。聚合与分组:结合COUNTSUMAVGMAXMIN与GROUP BY实现统计分析。熟练掌握这些基本操作,就能为复杂的 SQL 开发打下坚实基础。
2025-09-10 19:58:47
763
2
原创 【Mysql】数据类型
数值类型:根据范围选择tinyintbigint;精度要求高时用decimal。字符串类型:固定长度选char,不固定长度选varchar。时间类型:历史数据用datetime,实时操作用timestamp。特殊类型enum用于单选,set用于多选。合理选择数据类型,不仅能提升存储效率,还能优化查询性能,是数据库设计中的核心功课。
2025-09-10 19:55:54
503
原创 【从网络基础到实战】理解TCP/IP协议体系的核心要点(包含ARP协议等其他协议介绍)
学习计算机网络不仅是软件开发的基础功,更是成为一名合格后端工程师、网络工程师的重要门槛。本文将基于 TCP/IP 协议体系,系统梳理网络层、数据链路层、以及相关协议的核心知识,并结合实际案例与代码示例帮助理解。数据链路层:关注MAC地址、MTU、以太网标准、ARP。网络层:理解IP地址结构、路由机制、NAT原理、ICMP功能。传输层:掌握端口号概念、TCP/UDP特性。应用层:了解HTTP、DNS、代理等技术的工作流程。
2025-08-13 21:12:41
854
原创 【数据库】 MySQL 表的操作详解
创建表及指定存储引擎查看表结构修改表(添加、修改、删除字段以及修改表名)删除表掌握这些操作后,便能在日常开发与数据库维护中更加灵活、高效地管理数据表。
2025-08-12 18:03:48
341
原创 【网络基础】深入理解 TCP/IP 协议体系
在网络编程的世界里,TCP/IP 协议是构建一切网络应用的基石。本节将从应用层到传输层,逐步拆解 HTTP、UDP、TCP 等核心协议,并结合实践案例帮助你建立系统的理解。这不仅是网络编程的理论基础,也是服务端开发的必备技能,更是各大公司笔试、面试的高频考点。应用层是用户与网络通信最直接的接口。程序员编写的各种网络应用(浏览器、聊天软件、在线游戏等)都工作在这一层。请求格式:首行(方法、URL、版本)、Header(键值对)、Body(可为空)。响应格式。
2025-08-11 17:29:33
619
原创 【数据库】MySQL库的操作
在信息化时代,数据已经成为企业和个人的重要资产。而数据库(Database)正是管理这些数据的核心工具。MySQL 作为全球使用最广泛的开源关系型数据库之一,具有高性能、易用性强、跨平台等优点,非常适合初学者入门以及企业级开发。本文将结合 MySQL 数据库的基础概念与常用操作,带你从零开始掌握数据库的创建、修改、删除、备份及恢复等技巧。数据库(Database)是按照一定数据结构组织、存储和管理数据的仓库。它不仅可以存储大量数据,还能保证数据的完整性安全性和高效查询。MySQL 属于关系型数据库。
2025-08-08 14:10:14
388
原创 【网络基础】socket套接字的使用
从基础概念到实际代码实现,掌握网络编程中套接字的使用方法。理解 TCP/UDP 协议的工作方式和 Socket API 的调用流程,是写出高效稳定网络程序的关键。
2025-08-08 13:51:44
702
原创 【网络】HTTP的基本思路
HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0。
2025-08-07 10:18:54
508
原创 【网络基础】计算机网络发展背景及传输数据过程介绍
协议”就是通信时大家要遵守的规则和格式,就像人类语言中的语法。本文通过对网络基本概念、协议分层模型、数据传输流程和地址体系的介绍,帮助你构建计算机网络的初步认知结构。建议在今后的学习中深入理解每一层协议的作用,并动手搭建简单网络或编写应用层程序来巩固知识。
2025-08-06 12:21:37
686
原创 【Linux】高级I/O
等待数据准备好(Ready);将数据从内核复制到用户区(Copy)。不同的 I/O 模型在这两个阶段的处理方式不同。高级 I/O 是构建高性能 Linux 系统的基础。通过掌握不同 I/O 模型的原理与适用场景,合理选择 select、poll、epoll、aio 或 io_uring 等机制,我们可以根据业务需求与并发规模,实现资源占用最小、响应最迅速的 I/O 方案。理解这些底层机制不仅有助于写出更高效的程序,也为调试与优化提供了坚实的理论基础。
2025-08-04 16:13:01
629
原创 【Linux】多线程
线程是程序中的一个执行流,是进程的基本调度单位。每个进程至少包含一个线程。Linux 多线程编程不仅是掌握 pthread API,更是对系统资源调度与同步机制的深入理解。通过合理使用线程、互斥锁、条件变量、信号量等工具,我们可以构建出性能优越且稳定的并发程序。在真实项目中,配合线程池、生产消费模型和设计模式的使用,将进一步增强系统的可扩展性和健壮性。
2025-08-04 16:08:11
823
原创 【Linux】进程信号
信号是进程间用于事件通知的一种机制,本质上属于“软中断”,用于通知目标进程发生了某个事件。当进程异常终止时,将内存内容保存为文件core,可用于调试分析。需使用ulimit -c命令允许生成 core 文件。信号机制的设计体现了操作系统对异步事件控制的精巧思路。通过信号,进程得以与系统高效交互,也为开发者提供了强大的编程工具。
2025-08-04 16:04:28
570
原创 进程控制(Linux)
子进程刚被创建时,与父进程共享代码和数据,但当子进程需要进行进程程序替换时,也就意味着子进程需要对其数据和代码进行写入操作,这时便需要将父子进程共享的代码和数据进行写时拷贝,此后父子进程的代码和数据也就分离了,因此子进程进行程序替换后不会影响父进程的代码和数据。因此,对于子进程来说,父进程是不需要被标识的;进程程序替换之后,该进程对应的PCB、进程地址空间以及页表等数据结构都没有发生改变,只是进程在物理内存当中的数据和代码发生了改变,所以并没有创建新的进程,而且进程程序替换前后该进程的pid并没有改变。
2025-06-23 11:10:31
744
原创 进程概念(Linux)
进程退出的信息(例如退出码),是暂时被保存在其进程控制块当中的,在Linux操作系统中也就是保存在该进程的task_struct当中。
2025-06-10 16:15:40
757
原创 进程地址空间(比特课总结)
通过⼩学同桌划分课桌的案例,⽣动说明区域划分的概念。:如同课桌刻度需要唯⼀编号,内存中每个字节都必须有唯⼀地址(:操作系统管理进程的核⼼数据结构,包含进程所有运⾏时信息。:地址空间是内核维护的数据结构,区域调整即修改各区域的。类⽐员⼯管理:进程需要管理,其地址空间同样需要管理。:地址的最⼤价值在于其唯⼀标识性,具体数值形式不重要。打印的地址不是物理地址,⽽是虚拟地址(线性地址。:地址空间本质是内核的⼀种数据结构,具体表现为。厘⽶的桌⼦划分区域,每个厘⽶刻度对应⼀个地址。
2025-06-09 21:27:42
1025
原创 [Linux]在学习中遇到的一些简单的操作系统知识总结
本文仅仅涉及一些操作系统的初步认识,写这篇的文章的目的主要是作者在Linux的进程的学习过程中遇到了一些有关操作系统方面的知识;因为认为这部分知识有必要学习且容易忘记,姑且写一篇博客进行记录。
2025-05-23 00:21:46
691
原创 [Linux]调试工具gdb的简单介绍
引入:我们在平时的代码通常都会在特定的编译器内进行调试,如java常在idea中,C/C++则常在VS或VSCode中;然而在Linux中,我们常常使用来调试我们所书写的代码。虽然在Linux上面调试代码的情况很少,但是我们必须了解它以应对各种环境。
2025-05-20 00:31:02
966
原创 在linux学习中经常用到的常用命令总结
1)-p dirname可以是一个路径名称,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。3)-r 或 -R 递归处理,将指定目录下的文件与子目录一并处理,若源文件或目录的形态不属于目录或符号链接,则一律视为普通文件处理。2)-a 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。上面说到,cat指令仅适用于查看内容较少的文件,我们若是要查看海量信息文件,则可以适用more指令。
2025-04-27 21:34:36
682
转载 List模版的模拟实现
对于 end() 函数,它返回一个指向链表尾后位置的迭代器。同样地,由于该函数是在常量函数中定义的,因此返回的是一个 const_iterator 类型的常量迭代器。它通过 _head 获取头结点的地址,并将其传递给 const_iterator 类的构造函数,返回一个指向尾后位置的常量迭代器。对于非常量版本的 begin() 和 end() 函数,它们的实现方法与常量版本相似,只不过返回的是一个 iterator 类型的迭代器,用于修改链表元素的值。
2025-03-15 21:23:53
80
原创 C++模版vector模拟实现
begin()和end():返回迭代器,用于指向vector的起始和结束位置。cbegin()和cend():返回常量迭代器,用于指向vector的起始和结束位置。capacity():返回vector的容量,即分配的内存空间大小。size():返回vector中元素的个数。resize():调整vector的大小,如果n小于当前容量,则直接修改size()的值;如果n大于当前容量,则先通过reserve()函数进行内存的重新分配,再插入新的元素。
2025-03-09 13:22:02
824
原创 面向对象的三大特性之一(继承)
在前面的博客中,我简单介绍了类与对象的概念及其三大特性;而在本次博客中,我将用C++语言实现面向对象语言的三大特性之一继承。继承的概念继承是一种机制,该机制是面向对象程序设计中使代码可以复用的最重要的手段。有了该机制,让我们能够在保持原有类特性(基类)的基础上进行扩展,扩展产生的类,我们称作为派生类继承呈现了面向对象程序设计中的层次结构,体现了由简单到复杂的认知过程。
2025-03-08 18:17:28
855
原创 键值对(C++实现)
键值对(Key-Value Pair)是一种数据结构用于存储和表示两个相关联的值。在键值对中,一个值被关联到一个唯一的键上,通过键可以快速地访问和获取对应的值。
2025-03-06 23:29:57
1823
原创 C++语言实现unordered_map和unordered_set的模拟实现
unordered_map和unordered_set的模拟实现是通过封装哈希表来实现的。
2025-03-06 21:42:20
1039
原创 用C++语言实现set和map的封装
在C++标准模板库(STL)中,容器是用于存储和管理数据的类模板,它们可以分为两大类:序列式容器和关联式容器。序列式容器:底层为线性序列的数据结构,里面存储的是元素本身。动态数组,支持随机访问,尾部插入和删除效率高,但中间插入和删除效率低。双端队列,支持在两端快速插入和删除,内部由多个数组片段组成,不连续。双向链表,支持在任意位置快速插入和删除,不支持随机访问。单链表,只支持向前遍历,用于只需要单向遍历的场景。固定大小的数组,支持随机访问,大小在编译时确定。
2025-02-02 18:34:45
892
原创 C++中迭代器的介绍
在C++中,迭代器是一种对象,它能够用来遍历容器(如std::liststd::set等)中的元素。迭代器提供了一种统一的方式来访问容器中的元素,而不管容器的内部实现细节如何。迭代器的行为类似于指针,可以使用运算符来解引用,获取当前指向的元素的值,也可以使用++运算符来移动到下一个元素。迭代器也是一个变量,相当于容器和操纵容器的算法之间的中介。通过迭代器可以读取它指向的元素,*迭代器名就表示迭代器指向的元素。通过非常迭代器还能修改器指向的元素。迭代器都可以使用++操作。
2025-01-17 22:47:17
753
原创 布隆过滤器的简单介绍
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它由一个位数组和一组哈希函数组成。布隆过滤器的主要优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误判率和删除困难。布隆过滤器的原理基于位数组和哈希函数。当一个元素被加入集合时,通过多个哈希函数计算出多个哈希值,并将位数组中对应的位置置为1。查询时,同样通过这些哈希函数计算哈希值,然后检查位数组中对应的位置是否都为1。如果有任何一个位置为0,则该元素一定不在集合中;
2025-01-13 20:45:35
434
原创 简单实现哈希表
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
2025-01-13 20:02:24
542
原创 C++类与对象基础概念
/ 定义一个名为Rectangle的类public:// 成员变量(属性)// 成员函数(方法)// 创建Rectangle类的对象// 设置对象的属性// 调用对象的方法std::cout << "矩形的面积: " << rect.getArea() << std::endl;std::cout << "矩形的周长: " << rect.getPerimeter() << std::endl;return 0;类里定义的函数最好是定义和声明分离,在定义处要指明类域。
2025-01-04 17:03:34
987
原创 (C++)命名空间
从上面可知命名空间的作用,既然命名空间能够有效防止命名冲突,那该如何定义命名空间?命名空间的定义使用关键字namespace,后跟命名空间的名称,然后是一对花括号,其中包含了命名空间的内容。//展开std命名空间namespace A1 {//定义一个名为A1的命名空间int a = 0;int b = 20;//变量void Add()//函数struct TestNode//结构体int test1;namespace A2 {//定义一个名为A2的命名空间。
2024-12-19 09:37:37
708
原创 数据结构—图
在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。而图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。图(Graph)是由顶点的有穷非空集合V(G)和顶点之间边的集合E(G)组成,通常表示为: G=(V,E),其中,G表示个图,V是图G中顶点的集合,E是图G中边的集合。
2024-12-17 11:37:50
1165
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅