自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 数据库:多表查询-连接查询,联合查询,子查询

这篇文章详细介绍了SQL中的连接查询和子查询技术。主要内容包括:1)内连接(隐式和显式)用于查询表交集数据;2)外连接(左外和右外)查询表的所有数据及交集;3)自连接实现表与自身的连接;4)联合查询(UNION/UNION ALL)合并多条查询结果;5)子查询分为标量、列、行和表子查询四种类型,分别对应不同返回结果形式。通过多个示例演示了各种查询语法的具体应用,涵盖了WHERE、JOIN、IN、ANY等常用操作符的使用场景,为复杂SQL查询提供了实用指导。

2026-05-04 15:10:08 350

原创 数据库:多表查询介绍

数据库表结构设计中存在三种主要关系:一对多(在"多"方建外键指向"一"方主键)、多对多(通过中间表实现)和一对一(单表拆分,外键加UNIQUE约束)。多表查询包括连接查询(内连接、外连接、自连接)和子查询,需注意消除笛卡尔积产生的无效数据。示例展示了学生-课程多对多关系表的设计实现。

2026-05-04 14:51:10 66

原创 数据库:约束

数据库约束概述 约束是用于限制表中数据的规则,确保数据的正确性、有效性和完整性。主要约束类型包括: 主键约束(PRIMARY KEY):唯一标识记录 非空约束(NOT NULL):禁止空值 唯一约束(UNIQUE):确保字段值唯一 检查约束(CHECK):限制值范围 默认值(DEFAULT):指定默认值 外键约束(FOREIGN KEY):建立表间关联 外键约束通过REFERENCES关键字实现,可以设置ON UPDATE/DELETE行为(如CASCADE级联操作)。约束通过CREATE TABLE或AL

2026-05-02 16:17:00 259

原创 数据库:函数

MySQL常用函数总结:字符串函数包括concat拼接、大小写转换、填充(lpad/rpad)、trim去空格、substring截取等;数值函数包含ceil/floor取整、mod求余、rand随机数、round四舍五入等;日期函数如curdate/curtime获取当前时间、year/month/day提取日期元素、date_add日期加减等;流程控制函数可通过case when实现条件判断。这些函数能有效处理字符串、数值、日期等数据类型,满足各类数据处理需求。

2026-05-02 14:47:52 278

原创 数据库:DCL

DCL(Data Control Language)是用于管理数据库用户和权限的控制语言。主要功能包括:创建用户(CREATE USER)、修改密码(ALTER USER)、删除用户(DROP USER)等用户管理操作;以及权限控制,如授予权限(GRANT)、撤销权限(REVOKE)和查询权限(SHOW GRANTS)。通过DCL可以控制不同用户对数据库的访问权限,例如指定用户只能访问特定数据库或表,确保数据安全。典型应用场景包括创建新用户并分配权限、修改现有用户权限或删除不再需要的用户账号等数据库安全管理

2026-05-01 20:45:13 60

原创 数据库:DQL

摘要:DQL(Data Query Language)是用于查询数据库中记录的语言,主要关键字为SELECT。文章详细介绍了DQL的5种查询方式:1)基本查询(SELECT字段/FROM表),包括别名设置(AS)和去重(DISTINCT);2)条件查询(WHERE),支持多种比较运算符和逻辑运算符;3)聚合函数(count/max/min/avg/sum)进行纵向计算;4)分组查询(GROUP BY)配合HAVING过滤;5)排序(ORDER BY)和分页查询(LIMIT)。通过员工表(emp)的实例演示了

2026-05-01 16:58:44 403

原创 数据库:DML

DML数据操作语言摘要 DML(数据操作语言)包含对数据库表记录的增删改操作:1)INSERT插入数据,支持单条和批量插入,需注意字段与值的对应关系;2)UPDATE修改数据,通过SET子句指定修改内容,WHERE条件限定修改范围;3)DELETE删除记录,无WHERE条件将清空整表。使用时需注意:字符串和日期需加引号,数据需符合字段约束条件。示例展示了三种操作的语法及实际应用场景,包括条件更新、批量插入和条件删除等常见操作方式。

2026-04-29 14:36:36 256

原创 future其他成员函数,shared_future,atomic

本文介绍了C++多线程编程中的三个关键概念:1. std::future的状态检测方法,包括timeout、ready和deferred三种状态;2. std::shared_future的共享特性,允许多次调用get()获取结果;3. 原子操作std::atomic的使用,相比互斥锁能更高效地保证变量操作的线程安全。通过代码示例展示了如何检测异步任务状态、共享future对象以及使用原子变量避免多线程竞争问题,这些技术能有效提升多线程程序的可靠性和性能。

2026-04-20 13:46:55 554

原创 async,future,packaged_task,promise

摘要: 本文介绍了C++11中三种异步编程工具的使用方法:1) std::async和std::future组合,可自动创建线程并获取返回值,支持普通函数和成员函数调用,通过get()获取结果;2) std::packaged_task类模板,用于包装可调用对象,可作为线程入口函数,支持移动语义存储到容器;3) std::promise用于线程间传值,通过set_value()设置值并在其他线程中通过future获取。三种方法都提供了示例代码,展示了如何创建异步任务、管理线程返回值以及实现线程间通信。

2026-04-19 18:41:10 236

原创 condition_variable、wait()、notify_one()、notify_all()

C++条件变量使用指南 摘要:std::condition_variable是C++中实现线程同步的重要工具,通常与std::mutex配合使用。核心功能包括wait()使线程休眠,notify_one()/notify_all()唤醒等待线程。典型应用场景包括生产者-消费者模型,其中wait()必须与unique_lock配合使用,并注意处理虚假唤醒问题。生产者示例展示了如何通过条件变量通知消费者有新数据,消费者则使用带谓词的wait()自动检查条件。使用中需注意:必须使用unique_lock而非loc

2026-04-19 16:25:48 402

原创 unique_lock详解

unique_lock是一个类模板,功能和lock_guard类似但更灵活,效率差一点,内存占用大一些。语法:std::unique_lock<std::mutex>对象名(mutex对象名);class GAMEpublic://把收到的玩家命令写入一个队列的线程i < 10;i++)cout << "存入一个命令" << endl;//假设数字i就是收到的命令//把数据从队列中取出的线程i < 10;i++)if (!//从队列最前面取元素//移除第一个元素//处理数据。

2026-04-18 14:56:29 219

原创 保护共享数据,互斥量概念,用法,死锁演示及解决详解

文章摘要:本文介绍了多线程编程中共享数据的保护机制,重点讲解了互斥量(mutex)的使用方法。通过代码示例展示了手动上锁解锁(lock/unlock)和自动管理锁(lock_guard)两种方式,并分析了死锁产生的四个必要条件。针对死锁问题,提出了三种解决方案:固定加锁顺序、使用std::lock/scoped_lock同步锁定多个互斥量,以及采用try_lock的非阻塞尝试机制。文中包含C++实现代码,演示了如何安全地操作共享数据队列,并避免线程间的死锁情况。

2026-04-18 13:39:56 494

原创 创建多个线程,数据共享问题

本文介绍了C++多线程编程中的线程管理和数据共享问题。首先展示了使用vector容器管理多个线程的方法,通过创建thread对象并存入vector,可以方便地批量创建和join线程,但线程执行顺序是随机的。其次分析了数据共享问题:对于只读数据,多线程访问是安全的;对于读写操作,必须确保读写互斥,避免同时读写导致程序崩溃。文中通过示例代码演示了线程创建和共享数据访问的实现方式,强调了线程安全的重要性。

2026-04-18 11:48:00 36

原创 线程传参详解,detach()大坑

摘要: 本文探讨了C++多线程编程中传递临时对象作为参数的注意事项。安全做法包括直接传递临时对象(支持移动语义避免拷贝)、使用const引用绑定临时对象。特别警告:绝对不要对临时对象使用std::ref/cref,这会导致悬空引用。同时分析了detach()的陷阱:主线程结束后,子线程访问已销毁的局部变量(通过引用或指针传递)将引发未定义行为。安全实践建议:对于detach线程,应传递值类型参数或独立构造的对象,避免依赖主线程生命周期。

2026-04-17 14:47:35 186

原创 线程启动、结束,创建线程多法、join,detach,线程的移动语义

本文介绍了C++多线程编程的基本概念和使用方法。主要内容包括:1.线程生命周期管理,主线程结束会强制终止子线程;2.使用std::thread创建线程的多种方式(普通函数、lambda、成员函数);3.参数传递方法(值传递、引用传递需用ref);4.join()和detach()的使用场景;5.线程对象的移动语义(可移动不可复制)。重点强调了线程安全注意事项,如避免访问已销毁资源和正确处理线程生命周期。

2026-04-17 12:42:53 904

原创 C++并发基本概念及实现、进程、基本概念

以往计算机,单核cpu(中央处理器):某一个时刻只能执行一个任务:由操作系统调度,每秒钟进行多次所谓的“任务切换”。磁盘上的一个文件,例如windows下.exe,linux,1s-la,rwxrwxrwx(x执行权限);每个进程都有一个主线程,这个主线程是唯一的,产生了一个进程后这个主线程就随着这个进程启动起来了。两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务。每个线程都有自己独立的运行路径,但是一个进程中的所有线程共享地址空间(共享内存)进程:运行起来了的可执行程序。

2026-04-16 15:26:58 180

原创 lambda表达式理解

摘要:C++中的Lambda表达式是一种匿名函数语法糖,用于创建临时函数对象。主要特点包括:1)捕获列表([])允许访问上下文变量,支持值捕获(=)和引用捕获(&);2)可选的参数列表;3)mutable修饰符可取消常量性;4)自动类型推导的返回类型。Lambda表达式常用于算法参数传递,简化代码并提高可读性。典型应用场景包括排序规则定义、异步操作等需要临时函数的场合。其语法灵活,可根据需求组合不同特性,是C++11及后续版本中重要的现代语法特性。

2026-04-16 14:17:16 388

原创 HTTP协议基础知识

HTTP协议是超文本传输协议,用于客户端和服务器之间的数据传输。它通过URL定位网络资源,由协议名、域名、端口等组成。HTTP报文包含请求报文(请求行、头部和主体)和响应报文(状态行、头部和主体)。常用请求方法包括GET(获取资源)、POST(提交数据)等。响应状态码如200表示成功,404表示未找到资源。HTTP支持传输多种数据类型,是Web通信的基础协议。

2026-04-15 13:36:36 398

原创 Linux上一个简单的echo服务器搭建

这篇文章详细介绍了如何实现一个简单的阻塞式echo服务器。主要内容包括: 定义了TcpStream类处理TCP数据流,实现了发送/接收完整消息的功能,包含长度头和消息体以防止粘包。关键方法包括send_message()和recv_message(),使用辅助函数send_all()和receive_all()确保完整数据传输。 实现了TcpServer类处理服务器端操作,包括创建监听socket、设置端口重用、绑定地址和监听连接。accept_()方法接受新连接并返回客户端socket描述符。 提供了完整

2026-04-14 15:28:23 628

原创 epoll的用法

本文摘要:Linux epoll机制详解,包括核心数据结构(eventpoll、epitem、epoll_event)和三个关键系统调用:epoll_create创建实例、epoll_ctl管理监控事件、epoll_wait等待事件。重点解析了两种触发模式:水平触发(LT)会重复通知就绪事件,编程简单;边缘触发(ET)仅在状态变化时通知,需配合非阻塞IO循环处理,性能更优。还介绍了fcntl设置非阻塞标志及EAGAIN/EWOULDBLOCK错误处理。epoll通过红黑树管理事件、就绪列表高效返回事件,适合

2026-04-14 14:33:11 449

原创 io多路复用

IO模型对比:阻塞IO会一直等待数据就绪,但会阻塞线程;非阻塞IO虽不阻塞线程,但需主动检测数据状态,编程复杂。两者均不适合网络编程。IO多路复用通过select/poll/epoll系统调用,用一个线程监控多个连接状态,当数据就绪时通知应用程序读取。其优势在于能高效管理多个连接,但数据准备和拷贝阶段仍存在短暂阻塞。这种模型显著提升了网络IO的处理效率。

2026-04-12 15:09:27 184

原创 Socket基础入门(Linux 版)

Socket通信原理与Linux实现摘要 本文详细介绍了Socket网络通信的基本原理和Linux环境下的实现方法。主要内容包括: Socket基础 通过IP地址和端口号建立主机间通信通道 TCP(可靠传输)和UDP(无连接)两种主要类型 TCP的自动重传和顺序保证机制 核心函数实现 socket()创建通信端点 bind()绑定地址 listen()/accept()服务端监听 connect()客户端连接 send()/recv()数据传输 close()关闭连接 关键技术细节 地址结构sockaddr

2026-04-12 14:09:59 329

原创 图形化界面datagrip

本文介绍了JetBrains数据库工具的安装与基础操作。安装时只需勾选创建桌面快捷方式,安装后可免费非商业使用。主要功能包括:连接MySQL数据库、创建数据库(支持creat database/schema语法)、创建表(可右键添加列并自动生成代码)、修改表结构(右键选择修改)。操作指南包含如何查看数据库/表结构,以及通过新建查询控制台执行SQL语句(可单独选中特定语句执行)。

2026-04-06 12:51:33 51

原创 数据库基础:DDL

本文介绍了MySQL数据库的基本操作命令,主要包括数据库和表的管理操作。数据库操作部分包含创建、查询、删除和使用数据库的命令;表操作部分详细说明了表的创建、查询结构、修改和删除等操作,包括字段的增删改、数据类型选择建议(如char与varchar的区别)以及表名修改等实用命令。文中还提供了多个具体示例,帮助理解各命令的使用方法和注意事项,如注释写法、数据类型选择原则等。这些基础命令是进行MySQL数据库管理的重要工具。

2026-04-06 12:25:37 249

原创 C++函数对象(仿函数)

本文介绍了C++中的函数对象(仿函数)概念及其应用。函数对象通过重载()运算符实现,行为类似函数调用但本质是类对象。文章详细说明了函数对象的特点:可以像普通函数一样使用,能维护自身状态,并可作为参数传递。重点讲解了谓词(返回bool的仿函数)的分类:一元谓词和二元谓词,并给出实际应用示例。此外,还介绍了标准库中预定义的常用仿函数,包括算术、关系和逻辑三类,通过代码示例展示了negate、plus、greater和logical_not等仿函数的具体用法。

2026-03-16 10:58:28 290

原创 在CentOS Stream 9上安装VScode

本文介绍了在Linux系统上安装Visual Studio Code的步骤:1)首先更新系统包;2)导入微软GPG密钥验证软件包;3)创建并配置VSCode仓库文件;4)执行安装命令;5)最后验证安装版本。整个过程通过终端命令完成,确保安全可靠地获取最新版VSCode。

2026-03-03 19:40:26 215

原创 在CentOS Stream 9上进行C++编译

本文介绍了Linux环境下C/C++开发工具链的安装与使用指南。主要内容包括:1)通过dnf命令安装GCC、GDB和CMake等开发工具;2)详细讲解GCC/G++编译过程(预处理、编译、汇编、链接)及常用编译参数;3)静态库和动态库的创建方法;4)GDB调试器的核心功能与常用命令,包括断点设置、单步执行、变量查看等;5)通过实际示例演示调试过程,包括命令行参数传递等技巧。文章为Linux平台C/C++开发者提供了从环境搭建到调试优化的完整工作流程指导。

2026-03-03 19:28:03 523

原创 Linux系统(centos)中MySQL的安装

ALTER USER 'root'@'localhost' IDENTIFIED BY '这里填设置的密码';因为MySQL不在centos的官方仓库中,所以要导入MySQL仓库的密钥,然后配置MySQL的仓库。ALTER USER'root'@'LocaLhost' IDENTIFIED BY‘简单密码';密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc。如果想设置简单密码,需要降低MysqL的密码安全级别。进入root:mysql -uroot -p。

2026-02-02 16:57:14 58

原创 Linux实用操作

Linux常用操作技巧快捷键:Ctrl+C强制停止程序 Ctrl+D退出登录 历史命令查询软件管理:yum安装卸载软件 systemctl服务管理系统配置:软链接创建 日期时区设置 IP地址和主机名配置网络操作:ping测试 wget/curl下载 端口概念进程管理:ps查看进程 kill终止进程系统监控:top查看资源 磁盘网络状态检查环境变量:临时与永久配置方法文件传输:FinalShell工具 rz/sz命令压缩解压:tar/zip命令语法与示例适合初学者快速掌握基础运维技能

2026-02-01 14:24:59 554

原创 Linux用户和权限

本文介绍了Linux系统中的用户权限管理。首先讲解了root用户与普通用户的区别,以及使用su和sudo命令切换用户权限的方法。其次详细说明了用户和用户组的创建、删除、查看等管理操作,包括groupadd、useradd等命令的使用。最后重点阐述了权限控制机制,通过ls-l查看权限信息,使用chmod修改权限(包括符号和数字两种方式),以及chown修改文件所属用户/用户组。这些内容涵盖了Linux系统权限管理的基础知识,帮助用户理解并掌握系统权限配置的基本操作。

2026-01-27 23:01:09 564

原创 Linux学习1

本文摘要: Linux系统学习指南主要介绍了虚拟机快照功能和基础命令操作。通过VMware快照功能可保存虚拟机状态,便于恢复系统。重点讲解了Linux目录结构、路径表示方法及常用命令:ls查看目录、cd切换路径、pwd显示当前路径、mkdir创建目录、touch创建文件、cat/more查看文件、cp/mv/rm操作文件、find/grep查找内容等。同时介绍了管道符、重定向符的使用技巧,以及vi/vim编辑器的三种工作模式和快捷键操作。这些基础知识为Linux系统学习提供了实用工具和方法。

2026-01-09 22:01:44 868

原创 STL—list(链表)容器

摘要:链表是一种非连续存储结构,通过指针实现数据元素的逻辑连接。STL中的list是双向循环链表,具有动态存储分配、高效插入删除的优点,但存在空间和时间开销较大的缺点。主要操作包括:构造函数、赋值交换、大小调整、插入删除、数据存取以及反转排序。使用时需包含<list>头文件,注意链表不支持随机访问,所有插入删除操作都通过修改指针实现,无需移动元素。list容器提供了丰富的成员函数如push_back、insert、remove等,以及排序和反转功能。

2026-01-08 16:36:30 472

原创 STL—deque容器

deque是C++中的双端队列容器,支持高效的头尾插入删除操作。与vector相比,deque在头部操作效率更高,但访问速度稍慢。主要操作包括:构造(默认/区间/拷贝)、赋值、大小调整、插入删除(push/pop/insert/erase)、数据存取(at/operator[]/front/back)以及排序(sort)。使用时需包含<deque>头文件,注意deque没有容量限制但迭代器支持随机访问。这些特性使deque适合需要频繁两端操作的场景。

2026-01-08 16:20:32 707

原创 STL—vector容器

vector是C++中的动态数组容器,支持随机访问迭代器。与静态数组不同,vector可动态扩展。主要功能包括:多种构造函数(默认、区间、拷贝等);赋值操作(operator=、assign);容量管理(size、resize、capacity);元素操作(push_back、insert、erase);数据存取(at、operator[]、front、back);容器互换(swap)及预留空间(reserve)。vector还支持自定义数据类型和嵌套使用(类似二维数组)。其动态特性使其比普通数组更灵活。

2025-12-26 19:43:15 905

原创 STL—string容器

本文介绍了C++中string类的特性与常用操作。string是封装了char的类,提供内存管理功能,避免了越界问题。主要功能包括:构造函数、赋值操作、字符串拼接、查找替换、比较、字符存取、插入删除以及获取子串。重点讲解了各种成员方法的使用,如find()查找字符串位置、replace()替换内容、compare()比较字符串等。通过示例展示了如何安全高效地操作字符串,相比char指针更加方便可靠。

2025-12-25 19:51:58 723

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除