自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

2021wuwei

一个人

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

原创 表的操作.

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

2023-06-01 17:26:11 131

原创 视图和用户管理

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。MySQL中的用户,都存储在系统数据库mysql的user表中。刚创建的用户没有任何权限。root用户修改指定用户的密码。

2023-06-01 17:25:42 560

原创 表的内连和外连

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。如果联合查询,左侧的表完全显示我们就说是左外连接。如果联合查询,右侧的表完全显示我们就说是右外连接。外连接分为左外连接和右外连接。

2023-06-01 17:25:28 130

原创 事物管理.

在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务, MyISAM 不支持。查看数据库引擎。

2023-06-01 17:25:03 464

原创 索引特性.

当然, MySQL 除了默认会建立主键索引外,我们用户也有可能建立按照其他列信息建立的索引,一般这种索引可以叫做辅助(普通)索引。其中, MyISAM 最大的特点是,将索引Page和数据Page分离,也就是叶子节点没有数据,只有对应数据的地址。械设备,相比于计算机其他电子元件,磁盘效率是比较低的,在加上IO本身的特征,可以知道,如何提。所以通过辅助(普通)索引,找到目标记录,需要两遍索引:首先检索辅助索引获得主键,然后用主键。其中, InnoDB 这种用户数据与索引数据在一起索引方案,叫做聚簇索引。

2023-06-01 17:24:34 569

原创 表的约束.

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。

2023-06-01 17:24:30 201

原创 使用C语言链接

要使用C语言连接mysql,需要使用mysql官网提供的库,大家可以去官网下载我们使用C接口库来进行连接要正确使用,我们需要做一些准备工作:Connector/C 使用:其中 include 包含所有的方法声明, lib 包含所有的方法实现(打包成库)尝试链接mysql client通过 mysql_get_client_info() 函数,来验证我们的引入是否成功至此引入库的工作已经做完,接下来就是熟悉接口

2023-06-01 17:22:24 39

原创 复合查询.

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

2023-05-28 22:21:17 916

原创 表的增删改查

比较运算符:

2023-05-28 22:20:33 1139

原创 数据类型.

注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。

2023-05-28 22:19:39 1255

原创 库的操作.

use 数据库名;

2023-05-28 22:19:19 59

原创 MySQL函数

【代码】MySQL函数。

2023-05-28 22:19:02 1302

原创 数据库基础

存储数据用文件就可以了,为什么还要弄个数据库?

2023-05-28 22:17:28 807

原创 MySQL在Centos7环境安装

【代码】MySQL在Centos7环境安装。

2023-05-28 22:16:52 1050 2

原创 高级IO涉及的编程模型

非阻塞IO,纪录锁,系统V流机制, I/O多路转接(也叫I/O多路复用) ,readv和writev函数以及存储映射IO(mmap),这些统称为高级IO。. 我们定义的struct epoll_event是我们在用户空间中分配好的内存. 势必还是需要将内核的数据拷贝到这个用户空间的内存中的。内存映射机制: 内核直接将就绪队列通过mmap的方式映射到用户态. 避免了拷贝内存这样的额外性能开销.多进程多线程, 也提到同步和互斥. 这里的同步通信和进程之间的同步是完全不想干的概念.创建一个epoll的句柄.

2023-05-04 22:10:51 616

原创 负载均衡式在线OJ

此项目只实现类似 leetcode 的题目列表+在线编程功能;comm : 公共模块compile_server : 编译与运行模块oj_server : 获取题目列表,查看题目编写题目界面,负载均衡,其他功能。

2023-04-16 23:14:36 225

原创 网络编程套接字

基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位 的IP 地址但是我们通常用点分十进制的字符串表示IP 地址,以下函数可以在字符串表示 和in_addr表示之间转换;我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?那么问题来了, 如果我们调用多次这个函数, 会有什么样的效果呢?

2023-04-04 13:41:22 367

原创 网络传输层

讨论了确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段.这样做有一个比较大的缺点, 就是性能较差. 尤其是数据往返的时间较长的时候;接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送,就会造成丢包, 继而引起丢包重传等等一系列连锁反应.因此TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控。TCP和UDP之间的优点和缺点, 不能简单, 绝对的进行比较。

2023-04-04 13:38:34 324

原创 网络层IP协议和数据链路层

可以参考 相关章节。

2023-04-04 13:37:56 706 1

原创 网络应用层

之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。应用之间交互的信息叫消息,应用协议定义这些消息的格式以及消息的控制或操作的规则。守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。

2023-04-04 13:37:49 578

原创 https

加密就是把明文(要传输的信息)进行一系列变换, 生成密文解密就是把密文再进行一系列变换,还原成明文在这个加密和解密的过程中,往往需要一个或者 多个中间的数据,辅助进行这个过程,这样的数据称为密钥(正确发音yue四声,不过大家平时都读作yao四声) .数字指纹(数据摘要),其基 本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一-种加密机制,但可以用来判断数据有没有被窜改。摘要常见算法:有MD5。

2023-04-04 13:37:05 505

原创 STL与其空间配置器

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架stl有容器,空间配置器,适配器,迭代器,仿函数以及算法这6个组件,它们六者关系大概如下:容器通过配置器取得数据存储空间,算法通过迭代器获取容器内容,仿函数可以协助算法完成不同的策略变化,配接器可以修饰或套界仿函数。空间配置器为各个容器高效的管理空间(空间的申请与回收)

2023-03-18 14:59:08 407

原创 高并发内存池

当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free)。

2023-03-06 13:50:17 288

原创 FILE文件操作

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

2023-02-17 16:30:21 651

原创 BIT.8_Linux 多线程

进程的多个线程共享 同一地址空间,因此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境进程和线程的关系如下图:如何看待之前学习的单进程?具有一个线程执行流的进程错误检查:线程ID及进程地址空间布局thread_ create函数会产生一个线程ID,存放在第一个参数指向的地址中。该线程ID和前面说的线程ID不是一回事。前面讲的线程ID属于进程调度的范畴。

2023-02-17 16:30:03 728

原创 栈 和 队列

使用数组来实现循环队列,因为数组的存储空间是连续的可以通过下标访问,容易找到某一个元素它的前一个元素,而队列需要循环找前一个元素,栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数。实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型。时可以就会使用循环队列。环形队列可以使用数组实现,也可以使用循环链表实现。组头上出数据,效率会比较低。

2023-02-17 16:21:35 61

原创 BIT.7_ 进程信号

每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定 义 #define SIGINT 2编号34以上的是实时信号,本章只讨论编号34以下的信号,不讨论实时信号。这些信号各自在什么条件下产生,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal。

2023-02-03 12:42:51 173

原创 BIT.6_进程间通信

管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”

2023-01-27 13:22:48 73

原创 BIT.5_基础IO

【代码】BIT.5_基础IO。

2023-01-10 18:53:15 151

原创 C++的类型转换

在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。

2022-12-25 14:15:41 119

原创 特殊类设计

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。

2022-12-25 14:15:21 217

原创 C++智能指针

借此,我们实际上把管理一份资源的责任托管给了一个对象。

2022-12-25 14:13:35 280

原创 c++异常

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系 class Exception {public :// 错误信息 int _id;// 错误码 };

2022-12-25 14:12:15 58

原创 C++11

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。

2022-12-25 14:11:41 176

原创 哈希知识点

最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对unordered_map和unordered_set进行介绍,unordered_multimap和unordered_multiset可查看文档介绍。注意:布隆过滤器如果说某个元素不存在时,该元素一定不存在,如果该元素存在时,该元素可能存在,因为有些哈希函数存在一定的误判。

2022-12-25 14:11:11 281

原创 map和set

根据应用场景的不桶,STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。下面一依次介绍每一个容器。set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。

2022-12-25 14:10:03 241

原创 二叉树进阶

对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。那能否进行改进,不论按照什么次序插入关键码,二叉搜索树的性能都能达到最优?那么我们学习的AVL树和红黑树就可以上场了。二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。b. 树不空,按二叉搜索树性质查找插入位置,插入新节点。

2022-12-24 20:07:13 35

原创 stack和queue

stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作。

2022-12-24 20:06:48 154

原创 c++多态知识

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

2022-12-24 20:06:44 183

原创 c++继承知识点

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public :// 姓名 int _age = 18;// 年龄 };// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。

2022-12-24 20:06:18 209

空空如也

空空如也

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

TA关注的人

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