自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程间关系与守护进程

之前我们提到了进程的概念, 其实每一个进程除了有一个进程 ID(PID)之外 还属于一个进程组。进程组是一个或者多个进程的集合, 一个进程组可以包含多个进程。每一个进程组也有一个唯一的进程组ID(PGID), 并且这个 PGID 类似于进程 ID, 同样是一个正整数, 可以存放在 pid_t 数据类型中。刚刚我们谈到了进程组的概念, 那么会话又是什么呢?会话其实和进程组息息相关,会话可以看成是一个或多个进程组的集合, 一个会话可以包含多个进程组。每一个会话也有一个会话 ID(SID)

2025-03-03 18:06:41 776

原创 MySQL视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

2025-03-03 16:31:06 307

原创 表的内连和外连

表的连接分为内连和外连。

2025-03-03 16:05:15 247

原创 MySQL复合查询

实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询。多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。返回多行记录的子查询。

2025-02-28 01:18:08 630

原创 MySOL内置函数

注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值。md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串。password()函数,MySQL数据库使用该函数对用户加密。database()显示当前正在使用的数据库。user() 查询当前用户。

2025-02-28 00:59:37 270

原创 MySQL聚合函数与group by的用法

函数 说明([DISTINCT] expr) 返回查询到的数据的 数量([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义([DISTINCT] expr) 返回查询到的数据的 平均值,不是数字没有意义([DISTINCT] expr) 返回查询到的数据的 最大值,不是数字没有意义([DISTINCT] expr) 返回查询到的数据的 最小值,不是数字没有意义。

2025-02-26 23:32:14 336

转载 MySQL表的增删查改

CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

2025-02-26 23:10:08 711

原创 MySQL表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。

2025-02-21 22:26:33 1012

原创 MySQL的数据类型

2.当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。

2025-02-21 17:21:41 785

原创 MySQL 表的操作

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准。collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。注意:删除字段一定要小心,删除字段及其对应的列数据都没了。在users表添加一个字段,用于保存图片路径。插入新字段后,对原来表中的数据没有影响。不同的存储引擎,创建表的文件不一样。

2025-01-24 22:57:39 372

原创 MySQL---库的操作

1.备份# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径示例:将mytest库备份到文件(退出连接)这时,可以打开看看 mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。再vim看一下这个文件可以发现我们之前对这个库的有效操作都备份到了这里面,再drop掉这个数据库 test1,我们来用·这个sql文件来进行恢复。2.还原又重新回复出来了注意事项。

2025-01-23 17:34:21 642

原创 MySQL 数据库基础

存储数据用文件就可以了,为什么还要弄个数据库?文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便磁盘内存为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

2025-01-22 22:55:30 792

原创 特殊类设计

为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。孙子兵法也是类似。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

2025-01-21 17:32:38 974

原创 进程间通信

• 数据传输:⼀个进程需要将它的数据发送给另⼀个进程• 资源共享:多个进程之间共享同样的资源。• 通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发⽣了某种事件(如进程终⽌时要通知⽗进程)。• 进程控制:有些进程希望完全控制另⼀个进程的执⾏(如Debug进程),此时控制进程希望能够拦截另⼀个进程的所有陷⼊和异常,并能够及时知道它的状态改变。

2025-01-20 20:29:58 1139

原创 fd与FILE---基础文件IO(关注我,教我写博客 -- 今天带了点颜色)

openpathname:要打开或创建的⽬标⽂件flags:打开⽂件时,可以传⼊多个参数选项,⽤下⾯的⼀个或者多个常量进⾏“或”运算,构成flags。参数:O_RDONLY:只读打开O_WRONLY:只写打开O_RDWR:读,写打开这三个常量,必须指定⼀个且只能指定⼀个O_CREAT:若⽂件不存在,则创建它。需要使⽤mode选项,来指明新⽂件的访问权限O_APPEND:追加写返回值:成功:新打开的⽂件描述符失败:-1。

2025-01-19 13:59:59 1003

原创 进程控制,程序替换,fork(),shell的实现(看这一篇就够了,看完这篇博客,教我写博客)

本节重点:•学习进程创建,fork/vfork•学习到进程终⽌,认识$?•学习到进程等待•学习到进程程序替换•微型shell,重新认识shell运⾏原理。

2025-01-18 15:15:03 974

原创 进程概念(详细讲解)

那当程序同时运⾏多个程序时,操作系统是如何为这些程序分配内存的呢?在早期的计算机中,要运⾏⼀个程序,会把这些程序全都装⼊内存,程序都是直接运⾏在内存上的, 也就是说程序中访问的内存地址都是实际的物理内存地址。• 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪 ⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相关环境变量帮助编译器进⾏查找。需要强调⼀点的是,进程的nice值不是进程的优先级,他们不是⼀个概念,但是进程nice值会影响到进程的优先级变化。

2025-01-14 21:15:37 893

原创 二叉树进阶

这里写目录标题1. 内容安排说明2. 二叉搜索树实现2.1 二叉搜索树概念2.2 二叉搜索树操作2.3二叉搜索树的实现2.4 二叉搜索树的应用2.5 二叉搜索树的性能分析1. 内容安排说明二叉树在前面C数据结构阶段已经讲过,本节取名二叉树进阶是因为:map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一种树形结构二叉搜索树的特性了解,有助于更好的理解map和set的特性二叉树中部分面试题稍微有点难度,在前面讲解大家不容易接受,且时间长容易忘有些OJ题使用C语言方式实现比较麻烦,比如有些地方

2024-09-25 15:30:19 929 1

原创 C++ 多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。

2024-09-22 23:52:57 1069

原创 C++ 继承(详细)

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。// 学号protected:int _jobid;// 工号int main()Student s;

2024-09-21 15:34:59 1098

原创 系统1.1 Linux权限

目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录由于j*用户对aa.c没有x权限,所以无法进入aa.c即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

2024-09-21 01:36:21 1258

原创 系统1 常见指令

head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前。功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极。

2024-09-13 15:57:29 555

原创 C++ 异常

一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了//服务器开发中通常使用的异常继承体系public:, _id(id){}protected:int _id;return str;

2024-09-13 15:16:30 1111

原创 11day-C++list容器使用

list的文档介绍。

2024-07-30 23:18:24 473

原创 10day-C++ 学习vector模拟实现(详细版)

reverse的模拟实现,记录原来的vector容器中的capacity与size(),保存旧值所对应的size大小,方便数据的导入。可能有些函数的模拟实现还没有实现,但我们要学会举一反三,那么实现该容器其他函数也就没有什么问题了。当用范围for遍历数组时,要用到迭代器的begin(),与end(),所以也要自己实现。这里的T(),同resize中的道理相同。,也就是要在多出来的size。,而需要被赋值的对象,同insert差不多。

2024-07-29 11:07:06 512

原创 09-day vector的使用

因此删除vector中。

2024-07-28 21:52:23 758

原创 09day-C++学习STL string类的使用

**

2024-07-28 09:03:26 679

原创 C的程序环境和预处理

这些预定义符号都是语言内置的。举个栗子:FILELINE语法:1000register//为 register这个关键字,创建一个简短的名字for;;# define MAX 1000 # define reg register //为 register这个关键字,创建一个简短的名字 # define do_forever for(;;) //用更形象的符号来替换一种实现 # define CASE break;case //在写case语句的时候自动把 break写上。

2024-07-19 22:10:24 656

原创 08day_C++模板(初阶)

class 类模板名// 类内成员定义//类模板public:, _size(0){}~Stack()private:T* _array;//类外生命成员函数也要加模板,否则编译器不认识//直接new异地扩,再拷贝过来//释放原来的空间++_size;

2024-07-18 09:14:05 828

原创 07day-C++内存管理

int main()//new/delete和malloc/free最大的区别就是new/delete对于【自定义】类型//除了开空间还会调用构造与析构函数//调用构造//调用析构//内置类型是几乎是一样的free(p3);delete p4;//数组中的每个元素都会调用一次构造与析构free(p5);delete[]p6;return 0;注意。

2024-07-17 08:53:35 1367

原创 指针(进阶)

可见数组名和&数组名打印的地址是一样的。难道两个是一样的吗?

2024-07-16 12:06:08 943

原创 指针(初阶)

指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。那这里的问题是:一个小的单元到底是多大?(1个字节)如何编址?经过仔细的计算和权衡我们发现一个字节给一个对应的地址是比较合适的。对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电平(低电压)就是(1或者0);那么32根地址线产生的地址就会是:这里就有2的32次方个地址。

2024-07-16 11:24:41 774

原创 C文件操作

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。根据文件指针的位置和偏移量来定位文件指针。

2024-07-15 14:58:01 963

原创 06day-C++类和对象(下)

• 尽量使⽤初始化列表初始化,因为那些你不在初始化列表初始化的成员也会⾛初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会⽤这个缺省值初始化。• 之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。• 引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始化,否则会编译报错。

2024-07-14 13:33:20 1398

原创 05day--C++日期类的实现与取地址运算符的重载

• const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进⾏修改。const 修饰Date类的Print成员函数,Print隐含的this指针由 Date* const this 变为 const Date* const this。• 将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后⾯。取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载,⼀般这两个函数编译器⾃动。⽣成的就可以够我们⽤了,不需要去显⽰实现。

2024-07-13 19:27:27 501

原创 04day-C++类与对象(中)

析构函数与构造函数功能相反,析构函数不是完成对对象本⾝的销毁,⽐如局部对象是存在栈帧的,函数结束栈帧销毁,他就释放了,不需要我们管,C++规定对象在销毁时会⾃动调⽤析构函数,完成对象中资源的清理释放⼯作。我们不写,编译器默认⽣成的构造,对内置类型成员变量的初始化没有要求,也就是说是是否初始化是不确定的,看编译器。构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象(我们常使⽤的局部对象是栈帧创建时,空间就开好了),⽽是对象实例化时初始化对象。

2024-07-12 18:16:46 1963

原创 03day-C++类和对象

• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。

2024-07-11 15:13:21 829

原创 02day-C++学习(const 指针与引用的关系 inline nullptr)

注意事项• 可以引⽤⼀个const对象,但是必须⽤const引⽤。const引⽤也可以引⽤普通对象,因为对象的访问权限在引⽤过程中可以缩⼩,但是不能放⼤。• 不需要注意的是类似 int& rb = a3;这样⼀些场景下a3的和结果保存在⼀个临时对象中, int& rd = d 也是类似,在类型转换中会产⽣临时对象存储中间值,也就是时,rb和rd引⽤的都是临时对象,⽽C++规定临时对象具有常性,所以这⾥就触发了权限放⼤,必须要⽤常引⽤才可以。

2024-07-09 23:01:20 623

原创 01day C++初入学习

在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。c语⾔项⽬类似下⾯程序这样的命名冲突是普遍存在的问题,C++引⼊namespace就是为了更好的解决这样的问题int main()// 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数”return 0;

2024-07-08 18:23:48 755 1

原创 队列的链表实现

【代码】队列的链表实现。

2024-05-14 17:13:13 197

空空如也

空空如也

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

TA关注的人

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