- 博客(75)
- 收藏
- 关注
原创 Python 搭配Python环境
《Python开发环境搭建指南》摘要 本文详细介绍了Python开发环境的搭建步骤:1)安装Python运行环境,包括官网下载、版本选择(推荐Python3)、勾选PATH配置及验证安装;2)安装PyCharm开发工具,重点说明社区版下载、关联Python解释器及创建Hello World项目的过程;3)提供基础配置建议,如调整字体大小和行距。文章强调通过官网获取软件、注意中英文符号差异等关键细节,帮助初学者快速完成环境部署。、
2025-06-06 17:23:44
905
原创 MySQL 表的内连和外连
SQL连接查询主要包括内连接和外连接。内连接(INNER JOIN)通过WHERE子句筛选两表的笛卡尔积,是最常用的查询方式。外连接分为左外连接(LEFT JOIN)和右外连接(RIGHT JOIN):左外连接会完全显示左侧表数据,即使右侧无匹配;右外连接则完全显示右侧表数据。练习示例包括显示员工信息及部门名称,以及查询所有学生成绩(包含无成绩学生)和所有部门信息(包含无员工部门)。这些连接方式满足不同场景的数据查询需求。
2025-06-04 19:29:52
408
原创 MySQL 复合查询
本文介绍了SQL查询练习案例,包含单表查询和多表查询两部分。单表查询部分演示了筛选工资/岗位条件、排序、显示最高工资员工、部门统计等基础操作(7个案例)。多表查询部分通过emp、dept、salgrade三表示范了联合查询(3个案例),重点说明如何消除笛卡尔积。最后介绍了自连接查询方法,通过子查询和表别名两种方式实现员工领导信息查询。这些案例涵盖了SQL基础查询的核心语法,包括WHERE、GROUP BY、HAVING、ORDER BY等子句的使用。
2025-06-04 10:25:22
1013
原创 MySQL 内置函数
本文摘要:本文系统介绍了MySQL常用函数的使用方法,分为四大部分:1)日期函数(获取日期时间、时间戳计算、日期加减等),2)字符串函数(字符集获取、格式显示、字节计算、字符处理等),3)数学函数(绝对值、进制转换、取整、随机数等),4)其他函数(用户信息、加密函数、空值处理等)。每个函数都配有具体语法示例,并包含实际应用练习(如记录生日、留言查询等),帮助掌握数据库操作中的数据处理技巧。
2025-05-29 10:24:28
497
原创 MySQL 基本查询 (表的增删查改)
本文主要介绍了SQL的基本操作语句,包括增删改查四大类。在插入操作(Create)部分,讲解了全列插入、指定列插入以及主键冲突时的处理方式。查询操作(Retrieve)部分详细说明了列选择、WHERE条件、结果排序和分页显示的用法。更新操作(Update)演示了单列和多列修改以及带条件的更新。删除操作(Delete)介绍了delete和truncate的区别。此外还讲解了聚合函数、GROUP BY分组、HAVING筛选以及SQL语句执行顺序等重要概念。全文通过丰富示例演示了各语句的用法和注意事项,为数据库操
2025-05-27 15:09:21
866
原创 MySQL 表的约束
本文介绍了MySQL中几种常见的约束条件及其应用场景。主要内容包括:非空约束(NOT NULL)确保字段不为空;默认值约束(DEFAULT)为字段设置默认值;列描述(COMMENT)用于字段说明;零填充(ZEROFILL)格式化数字显示;主键约束(PRIMARY KEY)保证记录唯一性;自增长(AUTO_INCREMENT)实现自动编号;唯一键约束(UNIQUE)确保字段值不重复但允许为空;外键约束(FOREIGN KEY)建立表间关联关系。这些约束共同作用,保障数据的完整性和业务逻辑的正确性,其中主键和唯
2025-05-26 11:42:52
1116
原创 MySQL 数据类型
文章主要介绍了MySQL中的数据类型及其特性。数值类型包括整型(如tinyint、bit)和小数类型(如float、decimal),其中整型可以指定有符号或无符号,小数类型则涉及精度和范围的问题。字符串类型包括定长(char)和变长(varchar)两种,选择依据是数据的长度是否固定。日期和时间类型如date、datetime和timestamp,分别用于存储日期、日期时间及时间戳。此外,还介绍了枚举(enum)和集合(set)类型,用于存储预定义的选项值。文章强调了数据类型在数据库设计中的重要性,合理选
2025-05-22 12:00:25
793
原创 MySQL 数据库基础
数据库是一种专门用于存储、管理和操作数据的系统,相较于普通文件,数据库在数据管理、安全性、查询效率和海量数据处理方面具有显著优势。文件存储存在安全性低、查询不便、管理困难等问题,而数据库通过结构化存储和高效查询机制解决了这些问题。常见的数据库包括MySQL、Oracle、SQL Server等,其中MySQL因其并发性好、易用性强而广泛应用于电商、社交等领域。数据库的核心功能包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)。MySQL采用客户端-服务器架构,支持多种存储引擎
2025-05-14 14:27:53
939
原创 C语言模糊不清的知识
\为一个转义字符算1个字节,123456算6个字节,\123是一个八进制的转移字符算1一个字节,剩下的456\t算4个字节,总共是12个字节。用于创建类型别名的关键字,仅定义类型别名,不分配内存。这是编译器的行为,有类型的检查,作用域受限。malloc底层实现:是调用系统的接口,小内存块利用堆扩展高效管理,大内存用mmap,减少碎片。static修饰的全局变量的链接属性为内部链接,仅限当前文件可见,禁止跨文件访问。数组名是以单个元素为单位,&数组名是以整个数组为单位,他们的数组首地址相同。
2025-05-10 16:27:54
1041
原创 滑动窗口算法(一)
这里我们要移除一个数并且将这个数组完整相当困难,我们可以转变一下思想,这道题想让我们移除的数相加等于这个X,那我们可不可以先算一下这个数组每个元素相加的总数是多少,再把这个总数减去X,所以就转化成数组内相加的数等于sum-X的,并使这个窗口包含的数字够多。right不断遍历,并把right指向的字符记录在hash中,当遇到图上的情况,此时hash中的‘a'字符存在2次,说明这个窗口内有重复的字符,此时的left右移一位,并且更新这个窗口内的字符串的数量。这个算法思想是不是很熟悉,没错,就是滑动窗口。
2025-04-23 20:16:35
768
原创 Linux 网络基础(三) TCP/IP协议
遍历路由表。目的 IP & 子网掩码,找到要去的目标网络,没找到就走默认网关。通过 Iface 发送。注意:IP 没有解决设备转发的具体功能,IP 提供的是转发的策略,核心不是转发,而是路径选择。
2025-04-21 12:44:49
456
原创 Linux 网络基础(二) (传输协议层:UDP、TCP)
因为 TCP 是面向字节流的,所以需要应用层来分开这些报文,如果处理的不好就会出现多读了或者少读了影响到了后续报文,这种问题就叫做粘包。首先要明确,粘包问题中的 “包” 是指的应用层的数据包。在 TCP 的协议头中,没有如同 UDP 一样的 “报文长度” 这样的字段,但是有一个序号这样的字段。站在传输层的角度,TCP 是一个个报文过来的,按照序号排好序放在缓冲区中。站在应用层的角度,看到的只是一串连续的字节数据。
2025-04-20 18:31:46
1811
原创 双指针算法(二)
题目如下:这里我们先认识如何判断是个三角形,a+b>c,a+c>b,b+c>a即为三角形这里我们假设a<=b<=c,这里我们c是最大的,c加任何一个正数都比a或b大,所以我们只需要判断a+b是否>c就可以了。所以我们这里算法思想是固定7后,再固定第二大的数,继续上面的算法逻辑就行。
2025-04-17 15:51:20
975
转载 Linux HTTPS协议完整流程和握手细节
概述HTTPS(Hypertext Transfer Protocol Secure)即超文本传输安全协议,是在HTTP协议基础上加入SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议层,用于在网络传输中保障数据的安全性和隐私性,确保信息在客户端与服务器之间传输时不会被窃取、篡改等。握手目的HTTPS握手过程的核心目的是在客户端和服务器之间建立起一个安全的通信通道,这个通道基于加密算法实现,使得后续双方传输的数据都是加密的。
2025-04-14 12:50:25
45
原创 Linux 网络基础二 ——应用层HTTP\HTTPS协议
网络版计算器例如,我们需要实现一个服务器版的加法器。我们需要客户端把要计算的两个加数发过去,然后由服务器进行计算,最后再把结果返回给客户端。(1)约定方案A. 约定方案一客户端发送一个形如 "1+1" 的字符串。这个字符串中有两个操作数,都是整形。两个数字之间会有一个字符是运算符,运算符只能是 +。数字和运算符之间没有空格。... ...B. 约定方案二定义结构体来表示我们需要交互的信息。
2025-04-14 12:43:34
436
原创 高并发内存池
在说内存池之前,我们得先了解一下“池化技术”。所谓“池化技术”,就是程序先向系统申请过量的资源,然后自己进行管理,以备不时之需。之所以要申请过量的资源,是因为申请和释放资源都有较大的开销,不如提前申请一些资源放入“池”中,当需要资源时直接从“池”中获取,不需要时就将该资源重新放回“池”中即可。这样使用时就会变得非常快捷,可以大大提高程序的运行效率。在计算机中,有很多使用“池”这种技术的地方,除了内存池之外,还有连接池、线程池、对象池等。
2025-04-10 18:02:29
1019
原创 Linux TCP网络套接字
对比 UDP 服务器,TCP 服务器多了获取新链接和监听的操作,而因为 TCP 是面向字节流的,所以接收和发送数据都是 IO 操作,也就是文件操作。
2025-04-01 10:37:49
1084
原创 Linux 云服务器开放端口
这里先点手动添加,再看自己是UDP还是TCP协议,找到对应的协议,目的就填你想开放的端口,源填所有IP/4 0.0.0.0 添加备注点击保存就开放好了。首先找到你买服务器的官网,我这里是阿里云。
2025-03-26 21:53:36
268
原创 Linux UDP网络编程套接字sockets
在学校我们用学号,相比于身份证更简便,假如我的学号是2211211023,这样就能看到我是22级的,方便阅读信息。但是,这两个结构体都不用,我们用 sockaddr。网络通信的本质是进程间通信,有了 IP 就可以标识公网内唯一的一台主机,想要完成网络通信我们还需要一个东西来标识一台主机上的某个进程,这个标识就是端口号(port)。三种应用场景:网络套接字主要运用于跨主机之间的通信,也能支持本地通信,而域间套接字只能在本地通信,而原始套接字可以跨过传输层(TCP/IP 协议)访问底层的数据。
2025-03-25 20:27:17
823
原创 Linux 网络预备知识
在计算机网络通信中,报头(Header)是一部分数据包的固定结构,它包含了关于该数据包的元信息和控制信息。报头位于数据包的前部,用于标识和管理数据包的传输。报头通常由多个字段组成,每个字段用于存储特定类型的信息。下面是一些常见的报头字段及其功能:目标地址字段:指示接收数据包的目标设备或主机的地址。这个地址可以是物理地址(如:MAC 地址)或逻辑地址(如:IP 地址)。源地址字段:标识发送数据包的源设备或主机的地址。
2025-03-23 17:40:42
976
原创 Linux 多线程-生产消费者模型&线程池&线程单例模式&其他
目录一、生产消费者模型1、模型概念2、基于 BlockingQueue 的生产者消费者模型3、C++ queue 模拟阻塞队列的生产消费模型【代码】(1)单纯生产数据1.0版本(2)加入任务结构体2.0版本 (3)wait误唤醒(4)多生产多消费3.0版本4、POSIX信号量(1)初始化信号量(2)销毁信号量(3)等待信号量(4)发布信号量 5、基于环形队列的生产消费模型并入信号量(1)架构(2)单生产单消费代码1.0(3)多生产多消费代码2.0(4)结论二、线程池1、概念2、线程池的应用场景3、代码三、线
2025-03-22 14:07:06
1298
原创 Linux 线程控制
而这些都是线程库在做的事情,也就是线程的概念是库给我们维护的,我们用的原生线程库,也要加载到内存中,因为都是基于内存的。我们的线程库只需要维护线程的概念即可,不用维护线程的执行流,不过线程库注定了要维护多个线程属性集合,线程也要管理这些线程,先描述在组织。这是因为新线程内部执行进程替换函数,这看起来像是把新线程中的代码替换了,但实际会把主线程中的代码也替换了,因为主线程和新线程共享地址空间,所以新线程内部进程替换后,所有的线程包括主线程都会被影响。参数是void*,和这个函数的返回值的含义是一样的。
2025-03-16 23:31:59
1287
1
原创 Linux 线程概念
如上是是一个用户级页表,在我们学习进程的时候,我们知道进程=PCB+mm_struct+页表,进程通过用户级页表映射物理内存的方式来找到磁盘或内存中的数据。如果我们再创建一个进程,那么这个进程也有属于自己的PCB、地址空间、页表。
2025-03-15 09:35:41
696
原创 Linux 进程信号的捕捉&&信号补充内容
从内核态返回到用户态之前,OS 会做一系列的检测捕捉工作,它会检测当前进程是否有信号需要处理,如果没有就会返回系统调用,如果有,那就先处理(具体它会遍历识别位图: 假如信号 pending 了,且没有被 block,那就会执行 handler 方法,比如说终止进程,那就会释放这个进程,如果是暂停,那就不用返回系统调用,然后再把进程 pcb 放在暂停队列中,如果是忽略那就把 pending 中对应的比特位由 1 变为 0,然后返回系统调用)。用户态和内核态的权限级别不同,那么自然能看到的资源是不一样的。
2025-03-12 18:21:29
890
原创 Linux 进程信号
提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数)我们在上面写的Ctrl+c实际是给该进程发2号信号。我们接下来写个代码测试一下。我们先认识一个接口。
2025-03-11 19:39:33
1190
1
原创 Linux 消息队列&&信号量
我们讲进程通信,本质是让不同的进程看到同一份资源。我们已经给大家介绍了管道,共享内存,接下来我们给大家简单的介绍一下消息队列。
2025-03-04 11:27:35
1089
原创 Linux 共享内存
我们之前提到过,进程通信是让两个不同的进程看到同一份资源,所以我们给大家讲解了匿名管道和命名管道。今天我们还有一种方式两个不同的进程看到同一份资源。那就是共享内存!二、共享内存原理我们先来看这张图,我们在物理内存创建一个共享区,我们再让两个不同的进程通过页表分别映射到对应的共享区里,然后返回虚拟地址的起始地址。这就是共享内存,我们总结分为三步申请内存。将该内存挂接到进程地址空间的共享区。返回虚拟地址首地址。以上我们就创建好共享内存了,那我们该如何释放共享内存呢?
2025-03-01 14:20:30
1180
原创 Linux 日志系统·
当我们写一个函数,例如打开文件open,当我们打开失败的时候,会调用perror看到错误信息。接下来我们将带大家了解日志,并自主实现一个日志系统。这个就是我们定义的日志类的对象。
2025-02-26 17:41:31
1105
原创 Linux 管道的应用场景
我们之前写过一段指令,这是我们之前用的管道。当我们用管道级联起这些命令的时候,每一个命令最终都会被变为一个进程。这些进程的父进程都是同一个,我们可以去看一下这个父进程是什么东西这些sleep进程,他们的父进程是bash进程。有血缘关系,能够进行通信。那我们也可以通过这样的例子,写一个简易版的进程池。
2025-02-25 13:16:52
1003
原创 Linux 进程通信——管道
进程通信是两个或多个进程实现数据层面的交互。因为进程具有独立性,导致进程通信的成本比较高,因为要打破进程的独立性。
2025-02-22 15:01:32
1559
原创 Linux 进程地址空间第二讲&&动态库地址
当我们创建一个进程的时候,进程里有一个进程地址空间,也会创建一个页表,页表里储存虚拟地址和物理地址的映射。那什么是虚拟地址,什么是物理地址呢?文件加载到内存时,CPU的作用是什么呢?
2025-02-20 16:44:50
1100
原创 Linux 动静态库
动态库:libc.so libc++.so。静态库: libc.a libc++.a。在命名的前缀lib和后缀so/a去掉就是库名,所以这是C/C++的动静态库。C/C++ 体系中如何使用别人的功能?生成可执行的方式有静态链接和动态链接,对应的是静态库和动态库。比如,张三是一名大一新生,他在写作业时突然有了一个上网的需求,但因为周边环境不熟悉,所以找了学长询问附近网吧的地点,随后就跑去玩了几个小时,然后回来后接着继续写作业,这就叫作动态链接。
2025-02-19 19:29:03
1281
原创 Linux 内存管理与文件页缓冲区
总之上面的过程其实就是下面的这张图也就是说,操作系统里面也有一个文件缓冲区,最后它会被刷新到磁盘上去上面的过程,我们就把打开文件和文件系统的文件 产生关联了!我们也可以发现,这里一共要经历三次拷贝,第一次将数据写入到C语言缓冲区中,第二次将数据从C语言缓冲区写入到文件缓冲区中,第三次是写在磁盘当中去。
2025-02-17 20:03:34
995
原创 Linux 文件系统&&inode&&软硬链接
在我们电脑文件里,分为打开的文件和未打开的文件,我们在上几篇文章给大家介绍了打开的文件,现在我们重点介绍。我们知道打开的文件是通过操作系统被进程打开,一旦打开,操作系统就要维护多个文件,所以它是需要被操作系统管理的。也就是说这种方式,磁盘上和内存上都有这个文件,它们不是完全一样的,;而普通的未打开的文件在磁盘上,未被加载到内存中,它当然也要被管理;其中管理打开的文件和管理未打开的文件在操作系统中有一个功能模块叫做。
2025-02-17 13:28:59
826
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人