自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Stark的博客

向大家分享我的学习笔记,请看VCR(欢迎大家互粉/三连,支持长期互访)

  • 博客(115)
  • 收藏
  • 关注

原创 【MySQL数据库】锁机制

表级锁:每次操作都会锁住数据所在的整张表。锁的粒度大,发生锁冲突的概率最高,并发度最低。在MyISAM、InnoDB、BDB等存储引擎中都支持。并发度比较低。表级锁也有细化的分类:表锁、元数据锁(MDL - meta data lock)、意向锁。

2025-04-04 22:38:03 603

原创 【MySQL数据库】“一篇通过演示带你深刻理解事务的优质好文“(事务特性ACID;并发事务带来的脏读、不可重复读、幻读问题;隔离等级:未提交读、提交读、可重复读、可串行化)

事务是一个不可分割的最小单元,要么全部成功,要么全部失败回滚。不存在部分执行的状态。事务具有ACID特性,本文会对并行事务中的三个问题【脏读、不可重复读、幻读】进行演示,设置隔离等级解决不同的问题。最后在文章末尾给出相关的一些语句。

2025-04-04 11:43:18 582

原创 【MySQL数据库】视图 + 三范式

MySQL中的视图(View)是一种虚拟的表,其内容是从一个或多个基本表中检索出来的。视图可以简化复杂的查询操作,提高查询效率,同时也可以对敏感数据进行安全性控制。虽然设计上有三大范式,但是我们要避免过度范化导致性能问题,或者理解上的偏差。三范式的坏处就是查询语句比较复杂时,需要多表查询,多表之间不存在索引对应关系,所以效率上会降低。所以根据实际应用的权衡利弊,我们还有一些反范式化的情况。

2025-03-26 20:23:48 938

原创 【MySQL数据库】触发器与事件

trigger,在表的插入insert、更新update、删除delete操作发生时自动执行MySQL语句。学过Qt的都知道信号槽,一旦发出某个信号,那么就会触发关联的信号槽函数。触发器就类似于这个操作。创建触发器时需要给出一些信息:触发器名在操作前还是操作后触发(before/after)被什么操作触发(insert/update/delete)被哪个表的操作触发每当表table_name进行操作时,在这之前(之后)执行器会自动执行myTrigger触发器内部的coding。

2025-03-23 22:53:53 780 1

原创 【MySQL数据库】索引(索引分类及数据结构:哈希、B+树;聚簇索引、非聚簇索引;索引覆盖、索引失效;最左前缀原则、索引设计原则、索引使用策略)

本文包含以下干货内容:索引分类:哈希索引、全文索引、B+树索引;聚簇索引、非聚簇索引;索引覆盖现象、索引失效现象;最左前缀原则、索引设计原则、索引使用策略。【包含面试常问内容分析】

2025-03-23 00:27:51 1014

原创 使用C++在Qt框架下调用DeepSeek的API接口实现自己的简易桌面小助手

随着DeepSeek的爆火,最近的DeepSeek也进行了新一轮技术的更新,为了拥抱新时代,我们也要不断学习新的知识,难的底层原理我们接触不到,简单的调用还能难住我们?因为在网络上搜集到的资源都是用Python语言来进行调用,提供C++调用接口的教程较少,所以我就打算出一节关于整个流程的分析,供大家闲暇之余整来玩玩。废话不多说,我们直接开始:首先:创建一个Qt项目,为项目命名,此时自动生成五个文件。

2025-03-22 12:41:11 1265 1

原创 【MySQL数据库】存储过程与自定义函数(含: SQL变量、分支语句、循环语句 和 游标、异常处理 等内容)

本文主讲:存储过程、自定义函数;SQL中变量的定义、使用;分支语句、循环语句; 游标、异常处理:错误处理(句柄机制) 等

2025-03-19 23:51:58 1026 1

原创 【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

本文我们将系统的讲解多表查询。包括面试可能问到的笛卡尔积现象,以及多种多表查询的类型:联合查询、内连接、左外连接、右外连接、子查询,通过练习的方式快速掌握知识。每次练习都可能设计新的知识盲区,都会进行补充,欢迎阅读。

2025-03-16 17:06:43 2126

原创 正则表达式(可用于MySQL、C++、Python)

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述文本模式的字符串。它通过特定的语法规则,允许你匹配、搜索和操作字符串中的内容。

2025-03-15 17:04:28 777

原创 【MySQL数据库】函数

MySQL是一个广泛使用的关系数据库管理系统,它提供了许多内置函数,可以帮助用户实现复杂的查询和数据处理。除此以外,我们还可以自定义一些函数用来使用。

2025-03-15 16:46:32 261

原创 【MySQL数据库】约束

在MySQL数据库中,约束(Constraint)是用于限制表中数据的一种规则,目的是为了确保数据的完整性以及一致性。下面我们就从建表时的约束、建表后如何添加约束等几个方面,讲解MySQL中常用的几种约束。

2025-03-15 16:24:23 566

原创 【MySQL数据库】SQL语法基础--DML(入门级)

DML(Data Manipulation Language)即数据操作语言,主要用于数据库操作的一组语法。主要包括插入(INSERT)、更新(UPDATE)、删除(DROP)。主要是操作表中的数据(又称记录)

2025-03-15 15:41:42 319

原创 【MySQL数据库】SQL语法基础--DQL(入门级)

在学习数据库的数据操作之前,我们应该先学习查询操作,只有学会了查询,后面操作我们才能看到操作后的反馈。

2025-03-03 20:11:43 1099

原创 【MySQL数据库】SQL语法基础--DDL(入门级)

本文主要包含内容:DDL语言的数据库的增删查,数据表的增删查,数据表结构的修改。以及介绍了mysql的一些数据类型,sql语句的一些基本定义内容等。非常适合入门选手。

2025-02-19 11:21:43 684

原创 【MySQL数据库】保姆级教程:MySQL安装教程、MySQL-Font安装以及8.0适配问题分析,解决方案:使用其它图形化软件(Navicat Premium Lite)

MySQL是一种开源的关系型数据库管理系统,广泛应用于各种场景,尤其是在Web应用、数据处理和企业管理中。其优点包括支持SQL语言、良好的性能、较高的可靠性和易于维护。此外,MySQL具备强大的社区支持和丰富的文档,适合用于小型到大型数据存储解决方案。我们本章需要进行MySQL数据库的安装,包括图形化软件MySQL-Font的安装等。如果MySQL-Font出现不支持问题(mysql-front不支持MySQL8.0等),可以选择安装Navicat 免费的Lite版本。

2025-02-15 11:00:00 857

原创 【Linux系统编程】多线程编程:semaphore(信号量)实现生产者消费者模型

信号量是操作系统提供的一种协调共享资源访问的方法。信号量是由内核维护的整型变量(sem),它的值表示可用资源的数量。【重点:信号量的值 -- 表示可用资源的数量】核心作用:互斥访问:控制邻接区的独占访问(类似于互斥锁)【场景一】资源计数:管理有限数量资源(如数据库连接池等)【场景二】线程同步:协调多线程执行顺序(生产者消费者模型) 【场景三】信号量的类型:二进制信号量:信号量只取0或1,功能类似于互斥锁(Mutex)计数型信号量:信号量值为非负整数,表示资源数量,用于管理多个同类资源。

2025-02-15 10:30:00 1091

原创 【Linux系统编程】多线程编程:cond(条件变量)实现生产者消费者模型

线程同步典型的案例即为生产者消费者模型,而借助条件变量来实现这一模型,是比较常见的一种方法。假定有两个线程,一个模拟生产者行为,一个模拟消费者行为。两个线程同时操作一个共享资源(一般称之为汇聚),生产者向其中添加产品,消费者从中消费掉产品。相较于互斥量而言,条件变量可以减少竞争。如直接使用互斥量,除了生产者、消费者之间要竞争互斥量以外,消费者之间也需要竞争互斥量,但如果汇聚(链表)中没有数据,消费者之间竞争互斥量是无意义的。有了条件变量机制以后,只有生产者完成生产,才会引起消费者之间的竞争。

2025-02-14 10:54:49 1135

原创 【Linux系统编程】多线程编程:线程同步机制-rwlock(读写锁)

读写锁(Readers-Writer Lock)是一种多线程同步机制,用于控制对共享资源的访问。与传统的互斥锁(Mutex)不同,它允许多个读操作同时进行,但写操作必须独占访问。这可能比普通的互斥锁更高效,特别是在读多写少的场景下。使用读写锁的场景通常包括共享数据结构如缓存、数据库等。比如,一个数据库系统中,如果读请求(如查询)远大于写请求(如更新),使用读写锁可以让多个查询线程并行访问数据,从而提升系统的响应速度。

2025-02-14 09:19:09 697

原创 【Linux项目实战】多线程编程- 模拟选座系统

本项目主要通过在Linux(Ubuntu)环境下使用多线程编程,利用互斥量(互斥锁)的线程同步机制,避免了多个用户同时竞争资源时造成的资源不同步问题。从而完成了对用户选取座位的功能,使用srand使随机种子以当前系统时间为准,使得随机函数rand生成的随机数不是伪随机数。选座时涉及到一个简单算法:交换尾数据与序列任一数据,长度计数减一,从而达到尾删的效果,因为尾数据无用,所以不交换,直接选择填充覆盖。拓展:选座系统、抢票系统、抢课系统、限量抢购系统等均可以采用该项目形式完成基本功能架构

2025-02-09 11:07:54 777

原创 【Linux系统编程】多线程编程:线程同步机制-SpinLock(自旋锁)

自旋锁(Spinlock)是一种 同步机制,用于多线程或多核环境中保护共享资源。其核心特点是:当一个线程尝试获取锁时,若锁已被占用,该线程会通过 循环忙等待(Busy-Waiting) 持续检查锁状态,而非进入阻塞状态。这种机制避免了上下文切换的开销,但会占用 CPU 资源。对比互斥锁互斥锁在获取不到锁的时候会让线程进入睡眠状态,而自旋锁则是让线程一直循环检查锁的状态,直到获取到锁为止。这样在等待锁的时候不会让出CPU,所以适用于锁持有时间非常短的场景,避免上下文切换的开销。

2025-02-08 11:31:40 763

原创 【Linux系统编程】多线程编程:线程同步机制-mutex(互斥量/互斥锁)

线程同步是指多线程通过特定的设置(如互斥量,条件变量等)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的!线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。子线程没有独立的地址空间,大部分数据都是共享的,如果同时访问数据,就会造成混乱,所以要进行控制,线程之间要协调好先后执行的顺序。

2025-02-08 11:06:38 1164 1

原创 【Linux系统编程】多线程编程-POSIX线程

在Linux中,线程是系统调度的基本单位,是进程中的一个执行流。线程共享进程的资源(如内存空间、文件描述符等),但拥有独立的执行上下文(如栈、寄存器等)。

2025-02-06 11:18:43 1128 1

原创 【Linux系统编程】进程间通信(内存映射、消息队列)

mmap()函数:在内存中创建一段磁盘的映射,返回值是(void*)类型的指针,需要根据实际类型进行强转传入参数依次为:①内存地址的起始地址(一般传NULL,让系统自己分配,因为自己不知道哪块的内存是可用的)②内存映射的长度len③prot保护权限:PROT_WRITE写权限、PROT_READ读权限;通过位或运算符 | 可以同时设置权限。(其它还有PROT_EXCL执行权限、PROT_NONE无任何权限)

2025-02-06 10:13:07 967

原创 【Linux系统编程】进程间通信(管道:匿名管道、命名管道、实战练习)

进程间通信是不同进程间交换信息的一种机制。进程可能在同一台计算机上,也可能在网络中的不同计算机上。

2025-02-03 20:02:44 795

原创 【Linux底层探究】一步一图带你理解虚拟内存与物理内存的映射过程

之前我们学过虚拟内存的布局模型,今天我们来了解一下虚拟内存于物理内存的映射过程。

2025-01-21 20:13:56 1303 1

原创 【Linux系统编程】进程管理(一篇入门-进程:基本概念、PCB进程块、进程的创建、等待、终止、状态,exec函数族的使用)

本节主要内容:进程的一些基本概念,进程控制块PCB,以及如何在一个C程序里创建进程、终止进程、等待进程,包括孤儿进程、僵尸进程等特殊状态的进程,并涉及回收进程的概念。最终是exec函数族的函数使用方法及用途。程序与进程:程序是已经写好的并经过编译后得到的二进制文件;进程是运行起来的二进制文件。所以在这里,我们可以浅显的将程序理解为死的,而进程是活的。比较形象的类比是:程序是一个剧本,进程是一场演出。一方面:剧本只占用一张纸的资源,而演出需要耗费人力、物物力、时间、场地等等资源。

2025-01-21 18:29:52 985

原创 【Linux系统编程】文件系统--文件存储/软硬链接/inode/dentry

在当今的计算机世界中,文件系统是操作系统中至关重要的一部分,它负责管理数据的存储和访问。尤其是在Linux系统中,,还影响了系统的性能和安全性。了解Linux文件系统的结构和工作原理,可以帮助我们更有效地管理文件、优化系统性能,并解决潜在的问题。接下来,我们将深入探讨Linux文件系统的基本概念、常见类型以及它们的特点。

2025-01-08 10:50:15 965 2

原创 【Linux系统编程】文件IO--fcntl/lseek/阻塞与非阻塞/文件偏移

本文主讲:阻塞与非阻塞、文件偏移量、fcntl函数与lseek函数,中间会涉及一些其他的概念:例如,位图、位或运算符在linux中的用法等。

2024-12-22 18:41:42 826 10

原创 【Linux系统编程】文件IO--read/write/缓冲区(详)

本文主要将文件IO的第二部分:read和write,以及使用read和write实现简单的cp功能,从Linux命令行向main函数中传递参数,额外会有缓冲区的相关知识。

2024-12-20 21:10:24 2192 63

原创 【Linux系统编程】文件IO--open/close/文件描述符(详)

文件描述符是Unix/Linux系统中进程与文件、设备之间的接口,是操作系统中分配给每个打开文件或资源的一个非负整数。本文包括:文件描述符、open/close函数。在文件描述符部分,我们将拓展PCB进程控制块、文件描述符、最大打开文件数、FILE结构体的认识。

2024-12-20 20:43:01 1667 29

原创 【Linux系统编程】基本概念

本文主要介绍一些系统编程阶段的一些常见概念:操作系统、内核、系统调用(详细讲解)、中断、程序和进程、虚拟内存、并发(通俗讲解)。

2024-12-19 23:27:05 1223 35

原创 【Linux项目实战】进度条

在C语言和Linux环境中,\r是回车符,\n是换行符,用于控制文本格式和输出。在创建进度条小程序前我们应该理解这两个字符的含义。进度条是一个什么样子的呢?首先有一个待填充进度槽,有填充内容,有进度百分比显示,有加载动画。

2024-12-16 22:45:50 2144 69

原创 【Linux开发工具】makefile项目管理

在Shell编程中,变量是用于存储数据值的名称。注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不太一样。同时,变量命名需要遵循以下规则:1.只含字母、数字、下划线:字母大小写敏感,不能以数字开头,这条和C/C++一样,注意一下即可。2.避免使用关键字:C/C++也是需要避免关键字的,Shell也一样,需要避免的关键字例如:(if,then,else,fi,for,while)3.使用大写字母表示常量:Shell的常量就类似于宏了,一般使用全大写字母命名,如PI=3.14等。

2024-12-15 20:16:53 1911 46

原创 【Linux开发工具】gdb调试器

【list number】【l number】:list或小写L,用于查看代码,从number开始往下十行,如果不输入number,那么默认从未读的第一行开始,比如:刚开始调试时,我输入了一个l,那么他会向你展示文件的从第1行开始的10行代码,然后紧接着输入l,那么它将从第11行开始往下10行。我们通过list查看当前位置(应该是第10行)附近的十行内容:我们看到,第8行为int main,第9行为花括号{,所以第10行才是真正的main函数内的第一条语句所在行。【run】【r】:输入后,开始执行代码。

2024-12-12 22:05:57 883 5

原创 【Linux底层探究】虚拟空间布局模型&地址回填&数据段合并(万字详解)

包括上节的动态库与静态库,加上本节后面两个内容其实都是对gcc的扩展与补充知识,也是需要了解和掌握的知识。在开讲之前,我们先来说一下在32位x86的Linux系统中,虚拟地址空间布局模型:(系统编程阶段有重要意义)①text段:用来存放程序执行的内存区域。这部分区域的大小在程序运行前确定,并且内存区域通常是只读(某些架构也允许代码段为可写,即允许修改程序)。②rodata段:read only data segment,即只读数据段。存放一些,例如字符串常量等。③data段:用来存放程序中。

2024-12-12 12:18:03 1152

原创 【Linux系统编程】动态库&静态库

库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译成库文件;在链接步骤中,链接器从库文件取得所需的代码,复制到生成的可执行文件中。Linux中常见的库文件有两种,一种以.a为后缀,为静态库,另一种以.so为后缀,为动态库,动态库也称为共享库。

2024-12-11 18:01:23 1057

原创 【Linux开发工具】gcc编译器

在预处理阶段,预处理器会读取C语言源代码,对其中的预编译指令(如#include,#define,#pragma等)进行处理。这一步会展开宏定义、处理条件编译指令、插入头文件内容、删除注释等。处理后的代码文件通常以.i为拓展名,但该文件还是C代码。:在编译阶段,编译器将预处理后的代码转换为机器可识别的语言,也就是汇编代码。这一步包括语法分析、语义分析、检查代码的规范性,确保没有语法错误。处理后的代码通常以.s为扩展名。

2024-12-10 23:44:17 1271 1

原创 【Linux开发工具】vim编辑器

本文包括Linux中的vim编辑器的:配置、基本命令。以及命令模式、末行模式、编辑模式这三种模式的切换方法,命令模式的基本命令、末行模式的基本命令,最后还有vim的分屏操作。文章末尾附上一张vim键盘图。

2024-12-10 22:41:36 1241

原创 【Linux基础命令】补充总结

本文包括一些其他的基本的指令。主要可以帮助大家:ifconfig:查看ip地址、hostname:重命名主机名、alias:为命令起别名、使用指令关机重启、观察系统资源、查看用户信息和系统信息等

2024-12-06 09:11:46 590 1

原创 【Linux基础命令】压缩与解压

为了使传输的文件大小尽可能地小,我们采用压缩的方式生成压缩文件,然后将压缩包传输过去就可以了。衡量压缩方法地好坏主要有两点综合考量:一是压缩速度,二是压缩程度。很好理解,压缩一个文件,我当然不能一直等他压缩吧,不然还赶不上直接传输呢。另外,压缩程度不够的话,文件还是那么大,这跟我们的诉求不一样啊,我们就是为了尽可能地小,它压缩一下就压缩了百分之一,这还不如不压缩,毫无意义。不知道大家学过数据结构中地哈夫曼树吗,哈夫曼编码就是一种压缩算法。

2024-12-03 10:44:15 1217 15

实践项目-图书馆管理系统(C#.NET)

项目简介:本项目基于Microsoft Visual Studio开发平台,SQL Server数据库,C/S开发模式。使用三层架构,完成了图书馆管理系统的设计与开发。实现了用户登录/注册,密码修改、图书管理、借阅记录查看修改、借书还书等功能。 适合人群:大学生新生或刚刚入门C#急需项目实战的小白。以及初步了解数据库,想要运用Sql语句的人群。无工作经验要求 建议:先自学基础知识,再做项目实战。遇到困难时再借鉴本项目。

2024-06-15

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

TA关注的人

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