自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库用户管理

用户管理如果我们只能使用root用户,这样将会存在安全隐患,这时就需要使用MySQL的用户管理张三只能操作mytest这个库,李四只能操作msg这个库,如果个他们root账户,那他门可以操作所有的库,那么风险就太大了。用户用户信息MySQL中的用户,都存储在系统数据库mysql的user表中字段解释:host:表示这个用户可以从哪个主机登录,如果是localhost,表示只能从本机登录user:用户名authentication_string:用户密码通过password函数加密后的

2020-06-28 09:28:03 318

原创 数据库视图特性

视图视图是一个虚拟表,其内容由查询定义,如同真实的表一样,视图包含一系列带有名称的列和行数据,视图的数据变化会影响到基表,基表的数据变化也会影响视图基本使用创建视图create view 视图名 as select 语句案例create view v_ename as select ename,dname from EMP,DEPT where EMP.depno=DEPT.deptno;select* from v_ename_dname;修改了视图,对基表数据有影响update

2020-06-26 17:49:34 1015

原创 数据库(事务管理)

事务管理事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果,事务还规定不同的客户端看到的数据是不相同的事务基本操作案例:银行转账的例子更需要考虑事务的问题创建一个测试表开始一个事务创建一个保存点事务操作的注意事项1.如果没有设置保存点,也可以回滚,只能回滚到事务的开始,直接使用rollback(前提是事务还没有提交)2.如果一个事务被提交了(commit),则不可以回退

2020-06-25 16:48:04 194

原创 数据库索引特性

索引特性索引:提高数据库的性能,索引是物美价廉的东西,不用加内存,不用改程序,不用调sql,只要执行正确的create index,查询速度就可能提高成百上千倍,但是这是有代价的,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO,所以他的价值,在于提高一个海量数据的检索速度。常见索引分为:1.主键索引2.唯一索引3.普通索引4.全文索引—解决中子文索引问题案例分析先整一个还量表,在查询的时候,看看是否有索引有什么问题?基本原理创建索引创建主键索引

2020-06-24 10:01:51 412

原创 表的内连和外连

表的链接分为内连和外连内连接:内连接实际上就是利用where子句对两种表形成的 笛卡尔积进行筛选语法:select 字段 from 表1inner join 表2 on 连接条件 and 其他条件案例:显示SMITH的名字和部门名称select ename,dname from EMP,DEPT where EMP.deptno and ename='SMITH';标准内连接写法:select ename,dname from EMP inner join DEPT on EMP.de

2020-06-23 09:08:00 220

原创 数据库的复合查询

复合查询之前所说的mysql表的查询都是对一张表进行查询,但是在实际开发中还远远不够。select * from where (sal>500 or job='MANAGER')and eame like 'J%'按照部门号升序而雇员的工资降序排序select * from EMP rorder by deptno,sal desc;按照年薪进行降序排序select ename,sal*12+ifnull(comm,0) as'年薪'from EMP order by 年薪 desc;

2020-06-22 10:43:58 1253

原创 数据库函数

函数日期函数获得年月日获得时分秒获得时间戳在日期的基础上加上日期在日期的基础上减去日期计算两个日期之间相差多少天案例1:创建一张表,记录生日添加当前 日期案例2:创建一个留言表插入数据显示所有留言信息,发布日期只显示日期,不用显示时间查询在2分钟内发布的帖子字符串函数案例:获取emp表的ename列的字符集select charset(ename) from EMP;要求显示student表中的信息,显示格式:“XX的语文是XX分,数学是

2020-06-21 11:55:49 469

原创 关于表的一些常用操作(增删改查)

表的增删改查CURD: Create,Retrieve,Update,DeleteCreate语法:INSERT [INTO] table_name [(column [,column]...)] VALUE (value_list) [,(value_list)]...value_list:value,[,value]...案例:创建一张学生表单行数据+全列插入插入两条记录,value_list数量必须和定义表的列的数量及顺序一致多行数据+指定列插入插入否则更新由于主

2020-06-20 17:57:54 299

原创 数据库综合案例(商店买商品)

有个商店的数据,记录客户及购物情况,有以下三个表组成:1.商品goods(商品编号goods_id,商品名goods_name,单价unitprice,商品类别category,供应商provider)2.客户customer(客户号cusomer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id)3.购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)要求:每个表的主外键客户的姓名不能

2020-06-18 15:16:46 1301

原创 数据库中关于表的约束

表的约束真正约束字段的是数据类型,但是数据类型约束很单一,需要一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性,比如有一个字段是name,要求是唯一的。表的约束有很多:null/not null,default,comment,zerofill,primary key,auto_increment,unique key**空属性**两个值:null(默认的)和not null(不为空)数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办

2020-06-18 10:18:19 380

原创 来看看共享内存是如何删除的吧

ipcrm [-m -s -q] shmidvoid* shmat(int shmid,const void* shmaddr,int shmflg)shmid:创建共享内存返回的句柄shmaddr:置空—映射首地址由操作系统分配shmfg:映射成功后的操作权限SHM_RDONLY 只读O 默认可读可写返回值:映射首地址 失败:(void*) -1解除映射:shmdt(const void* shmaddr)删除:int shmctl(int shmid,i

2020-06-17 17:39:08 846

原创 一起来学习共享内存吧

共享内存: 是所有进程间通信最快的一种,因为共享内存直接通过虚拟地址映射访问物理内存,而其他方式因为都是内核中的缓冲区,因此通信时都会涉及用户态与内核态之间的两次数据拷贝。因此通信速度最快。为什么最快?(从各个进程间通信方式的原理说起) 少了两次数据内存拷贝 内核-》用户-》内核共享内存的原理通过将同一块内存映射到自己的虚拟地址空间,实现对相同的一块物理内存进行操作,通过这种方式实现多个进程间的数据共享功能,因为共享内存是直接通过虚拟地址操作内存实现共享,相较于其他方式,少了两步用户态、内

2020-06-17 17:33:00 156

原创 关于管道你需要知道的

**管道原理**:操作系统在内核提供的一块缓冲区(只要进程能够访问到这块缓冲区就可以实现通信)创建管道时,操作系统会提供两个操作句柄(文件描述符),其中一个用于从管道读取数据,一个向管道写入数据子进程通过复制父进程的方式,获取到管道的操作句柄,进而实现访问同一个管道通信匿名管道:内核中的缓冲区没有明确标识符,其他进程无法直接访问管道,匿名管道只能用于具有亲缘关系的进程间通信,因为匿名管道在创建的时候操作系统返回了两个句柄,因此只能通过创建子进程,子进程复制父进程的方式获取到这个管道的操作句柄,

2020-06-17 17:29:04 546

原创 数据库的数据类型

数据类型分类数值类型:数值类型:tinyint类型数值越界测试create table tt1(num tinyint);insert into tt2 values(128);--数组越界,报错说明:在MyAQL中,整型可以指定是由符号和无符号的,默认是有符号的可以通过UNSIGNED来说明某个字段是无符号的无符号案例create table tt2(num tinyint unsigned);其他类型自己推导尽量不使用unsigned ,对于int 类型可能存放不下

2020-06-17 10:54:31 227

原创 数据库表的操作

创建表语法:CREATE TABLE table_name( field1 datatype, field2 datatype, field3 datatype)说明:field表示列名datatype表示列的类型character set字符集,如果没有指定字符集,则以所在数据集的字符集为准collate校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准创建表案例create table users( id int, name varchar(20) commen

2020-06-17 08:37:14 98

原创 关于数据库的一些操作

1.创建数据库案例分析进入数据库环境:mysql -h 127.0.0.1 -P 3306 -u root -p输入密码:***创建名为db1的数据库create database db1;说明:当创建数据库没有指定字符集和校验规则时,系统默认使用utf8字符集,校验规则是:utf8_general_ci创建一个使用utf8字符集的db2数据集create database db2 charset=utf8;创建一个使用utf字符集,并带校验规则的db3数据集create dat

2020-06-16 10:41:25 221

原创 命名管道/匿名管道

命名管道/匿名管道:“有名字”则可以通过“名字”打开相同的管道进行通信,没有名字(在内核中没有明确标识)只能通过:#子进程复制父进程的方式实现通信,复制了文件描述符#匿名管道只能用于具有亲缘关系的进程间通信。只要在创建进程之前创建管道,后边的进程都可以实现通信。#命名管道可用于同一主机任意进程间通信管道原理:操作系统在内核提供的一块缓冲区(只要进程能够访问到这块缓冲区就可以实现通信)创建管道时,操作系统会提供两个操作句柄(文件描述符),其中一个用于从管道读取数据,一个向管道写入数据子进程通过

2020-06-12 16:36:17 126

原创 进程间通信(多种通信方式详解)

进程间通信:(IPC)进程间通信:是操作系统为用户提供的进程间通信方式及接口。进程间难道自己不能通信吗?不能。因为每个进程都有自己的虚拟地址空间,通过页表映射到物理内存中,并且在页表中进行内存访问控制,因此它是没办法访问到其他进程的物理内存的,它访问的都是自己的虚拟地址空间,因此进程间无法直接通信。因此需要操作系统来提供进程间通信方式,并且因为通信场景不同,提供的方式也有多种通信的本质:双方拥有共同的访问空间进程间通信是干什么的?进程的独立性(都有自己的虚拟地址空间)—提供一个公共的媒介是干

2020-06-12 16:34:23 197

原创 动态链接库:生成、使用

动态链接库:生成、使用生成:(代码打包)命名:lib是前缀 .so是后缀 中间是库名称gcc 编译过程(预处理、编译、汇编、链接)Vnew child.c 回车 Ctrl+w 跳转分屏-fpic:产生位置无关代码gcc -fpic -c child.c -o child.o编译选项gcc – share child.o vibmychild .sols -i :查看inode结点号。Inode结点号是可以用完的,每个文件都有一个inode结点,如果好多文件吧inode结点占完了

2020-06-12 16:32:23 213

原创 软连接与硬链接(相同点及不同点)

软链接和硬链接:目的:访问源文件ln tmp.hardln -s tmp.txt tmp.softls -i 查看一个文件的inode节点号软链接文件:是一个独立的文件(相当于一个文件的快捷方式),有自己的inode结点,软连接文件中存的是文件的路径。通过路径访问到源文件硬链接文件:与源文件共用一个inode结点,类似于源文件的别名,其实与源文件没有什么不同。区别:删除源文件,软链接文件失效,硬链接文件无影响(链接数-1);软链接可以对目录创建,硬链接不可以;软链接可以跨分区建立,硬链接不可

2020-06-12 16:31:00 1054

原创 文件系统及文件存储

文件系统:组织管理文件存储的系统,每一个磁盘分区都有一个系统,除了交换分区。磁盘块:4096个字节。内存大小小于等于8G交换分区一般是它的2倍,大于8G,交换分区通常与内存一样大。每个磁盘都有一个文件系统,并且可能每个磁盘系统都不相同,但是在操作系统中有一个虚拟的文件系统去统筹管理。超级块:统筹管理Inode结点位图:数据块位图:Inode表:存放inode结点数据块区:存储数据如果通过inode表和数据块区找到空闲的inode结点,就是采用inode结点位图以及数据块位图。(空闲标记)

2020-06-12 16:27:37 411

原创 关于内核态与用户态以及重定向

内核态与用户态:用户态如何切换到内核态?发起系统调用。fwrite write read memcpy(中间两个是系统调用)重定向:改变数据流向,将写入指定文件的数据,改变之后写入到另外一个文件重定向指的是描述符的重定向—因为描述符并没有改变,改变的是描述符所对应的文件信息(1号座位的故事)如何实现重定向:1)通过close实现2)还可以通过重定向接口实现:dup2(int oldfd ,int newfd)。 让newfd也指向了oldfd所指的文件,如果newfd本身也打开了一个文件,则关

2020-06-12 16:25:13 160

原创 关于文件描述符你确定不来学习一下?

文件描述符(open的返回值):进程通过struct file(结构体数组)结构体来描述打开的文件—使用了struct file*fd_array[],文件件描述符就是这个数组的下标—用户打开文件,通过系统通过file结构体描述符文件,并且 将指针添加进fd_array中,向用户返回这个文件描述信息在数组中的位置(下标),用户操作文件的时候,将这个下标传递给操作系统,操作系统通过下标找到文件描述信息进而操作文件。进程的文件描述符是有上限的。文件是存在硬盘中的,操作文件就是要操作硬盘,只是操作的位置不同

2020-06-12 16:23:36 556

原创 系统调用的IO接口

学习系统调用的IO接口:open write read lseek close;1)int open(const char* pathname, int flags, int mode_t mode);pathname:要打开的文件路径名flags:选项参数必选其一:O_RDONLY 只读O_WRONLY 只写O_RDWR 读写可选项O_CREAT 文件存在则打开,不存在则创建O_TRUNC 将文件长度截断为0(清空原有内容)O_APPEND 追加方式

2020-06-12 16:21:52 114

原创 关于基础IO部分你需要知道的

基础IO(C语言学的)标准库的IO 接口(就是文件操作):fopen ,fseek(跳转读写位置) fwrite, fread, fclose(关闭文件) fprintf, sprintffopen(file,"r ")fget():从一个文件流中读取一行数据File Fopen(const charfilename,const char* mode)mode:打开方式r:若文件存在则以只读打开,不存在报错r+:若文件存在则以读写打开,不存在报错w:若文件不存在则创建,否则清空原有内容,以只写

2020-06-12 16:18:51 101

原创 进程控制部分(包括自己实现minishell)

进程控制部分:面试题:创建一个进程的流程进程创建:(理解)流程: fork,vfork,clone-》复制-》修改-》创建完毕fork(具有写时拷贝)写时拷贝技术:初始阶段父进程和子进程指向的是同一个位置,只有当数据发生改变时,才给子进程重新开辟一块物理内存数据独有,代码共享的理解: 各自有各自的虚拟地址空间和页表,并且当数据发生改变时,子进程重新开辟物理内存,所以数据独有,代码段具有只读特性,代码段的数据不可更改,因此父子进程几乎一直指向同一块内存。vfork(父进程阻塞):与父进程共用同一

2020-06-12 16:15:39 198

原创 进程概念2

进程优先级:(主要针对cpu密集型)优先级:决定了资源的优先分配权的等级划分问: 为什么要有优先级?答:让操作系统运行的更加合理。让用户体验更好交互式进程:一旦有操作要优先处理(优先级要比较高才行)批处理进程:一直处理数据,但是对CPU要求并不是太高设置:ps -efPRI 优先级 NI nice值:PRI无法直接设置,但是可以通过设置NI值,进而调整PRI值renice -n size -p pid nice -n size ./mainIO密集型程序 :这个程序内部是大量的io操

2020-06-12 16:12:53 108

原创 想知道系统编程如何学习吗?(来这)

系统编程阶段:需要学哪些?进程概念-》进程控制-》基础IO-》进程间通信–》进程间通信-》进程信号-》多线程进程概念:首先要知道冯诺依曼体系结构:如果输入设备直接把数据产能送到CPU中的话,在传输数据的时候,可能要花很长时间,结果送到CPU中一下就处理好了,然后再花好长时间把数据送到输出设备,这样就是对CPU的浪费,因此,输入设备先把数据送到存储器中,CPU处理完了直接从存储器中拿数据,增大CPU的利用率。ps:硬件结构决定软件行为。操作系统:目的:让计算机更好用功能:一款搞管理的软件–管

2020-06-12 16:00:45 191

原创 Linux常用工具大全

Linux常用工具:yum:应用商店,管理安装,连接服务器,软件包管理工具软件安装方法:1.手动源码安装2.使用工具安装Yum list:查看可以安装什么yum list|grep gcc:过滤掉,得到你想安装的Rrdtool:安装一个可以出现图形的Yum list installed:查看已经安装的Yum源配置vim:编辑器普通模式:光标移动0Vim配置:https://www.cnblogs.com/highway-9/p/5984285.html底行: q w wq q

2020-06-12 15:58:13 457

原创 Linux常见命令大全

Linux命令详解 :文件类型:d:目录类型文件-:普通文件c:字符设备文件(键盘)l:符号链接文件b:块设备文件(硬盘)s:网络通信文件文件权限:linux是多用户操作(分三类)目录相关命令:ls 列出当前目录下的文件列表信息 目录:就是文件夹ls +目录名/ 浏览指定文件夹中的内容-a:显示隐藏文件-l:显示目录下文件详细信息 也可以写成ll-rwxrwxr-x. 1(链接数) test(属于哪个用户) test(用户组) 8512(文件大小) 3月 18

2020-06-12 15:56:28 85

原创 单例模式(饿汉+懒汉)详细代码

单例模式:单例模式有两种实现方式:饿汉模式:就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象class Singleton{public:static Singleton* GetInstance(){ return &m_instance;}private:// 构造函数私有 Singleton(){};// C++98 防拷贝 Singleton(Singleton const&); Singleton& operator=(Singlet

2020-06-12 11:23:55 671

原创 8大排序算法(超详细,算法步骤+代码)

排序的分类按照排序过程中所依据的原则的不同可以分类为:►插入排序:直接插入排序 希尔排序►交换排序:冒泡排序 快速排序►选择排序:简单选择排序 堆排序►归并排序►基数排序排序算法比较从平均情况看:堆排序、归并排序、快速排序胜过希尔排序。从最好情况看:冒泡排序和直接插入排序更胜一筹。从最差情况看:堆排序和归并排序强过快速排序。虽然直接插入排序和冒泡排序速度比较慢,但是当初始序列整体或局部有序是,这两种算法的效率比较高。当初始序列整体或局部有序时,快速排序算法效率会下降。当排.

2020-06-12 11:19:42 2325 1

原创 编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)

要求:编程实现:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)思路:这里也采用异或的方法,如果数组中的数与其他任意一个数异或为0的话,就说明还有与这个数相同的数,相反,如果与剩下任意数异或结果为1的话,就说明这个数只出现了一次。//int main()//{// int arr[5] = { 1, 5, 1, 2, 2 };// int ...

2020-06-12 11:05:16 245

原创 c++红黑树

什么是红黑树?也是一种二叉搜索树,但是每个结点上增加一个存储位表示结点的颜色,可以是RED或BLACK,它是接近平衡的红黑树的性质也是很关键的1)每个结点不是红的就是黑的2)每条路径上黑色的数量必须相等3)根结点必须是黑的4)两个红色的不能连续5)每个叶子结点都是黑的(指的是空节点)思考题1在节点的定义中,为什么要将节点的默认颜色给成红色的?答:因为要保证每条路径上黑色结点数目...

2020-06-12 10:53:05 79

原创 基于Http的share服务器

Server类首先得有个Start()函数,这个函数的作用是让服务器跑起来bool Start()这里边主要首先是各种初始化,包括套接字初始化,线程池的初始化以及epoll的初始化。初始化完毕之后要将epoll添加进去,开始监听,epoll要的是一个列表,然后就开始获取就绪的列表,但是在获取之前先判断这个套接字是不是监听套接字,如果是监听套接字,直接将它接收一下,,并且把客户端的这个套接字...

2019-12-19 16:52:23 1200

原创 用两个栈实现一个队列(c++)

从今天开始正式进入撸题之旅啊,想想不免觉得头有点疼,不过没办法啊,下次找工作就轮到我了,希望与各位小伙伴们互相激励把。本人比较low,欢迎指点迷津。用两个栈实现一个队列,其实思路比较容易,首先我们需要知道栈和队列的特性。栈:先进后出队列:先进先出用一幅图来看就比较明显了绿色的表示栈1,红色的表示栈2现在我们来看,如果将要进栈的数据是abc,如果是一个栈的话那么出栈的顺序肯定就是cba...

2019-12-12 15:47:39 238

原创 c++位图-布隆

说起位图和布隆,也是一把辛酸泪了。毕竟智商受限啊,今天研究了一下午,终于明白了些许,赶紧整理起来。什么是位图:1) 其实它也是一种哈希表,只不过它是以位(bit)为单位的,我们平常都是以字节(也是内存中可操作的最小单位)·相当于一个二维数组,一维相当于是字节,二维就要定义到位了假设是用int来说,一个int是4个字节,一个字节是8位,因此一个整型就是32位。那么我们要定义到一个具体的位应该怎...

2019-08-24 20:07:58 84

原创 c++类型转换

1.c语言中的类型转换我们知道c语言中的类型转换包括隐式类型转换和强制类型转换,如下:void Test() { int i = 0; double d = i;//隐式类型转换 printf("%d,%.2f", i, d); int* p = &i; int address = (int)p;//强制类型转换 printf("%x,%d\n", p, address);...

2019-08-07 17:28:38 60

原创 c++智能指针

异常安全:如果在malloc和free之间如果存在抛异常,还是会有内存泄漏问题,这种问题就叫做异常安全。智能指针的使用及原理:RAIIRAII:是一种利用对象的生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等)的技术在对象构造时获取资源,接着控制资源的访问,使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源,实际上是把管理资源的责任托管给了一个对象,我们可以把这...

2019-08-07 15:08:46 70

原创 c++异常

1.c语言传统的处理错误的方式1)终止程序,如assert,缺陷:用户难以接受,如发生错误,除0错误时就会终止程序。2)返回错误码,缺陷:需要程序员去查找对应的错误,如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误2 c++异常概念异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误throw:当问题出现时,...

2019-08-04 13:17:09 72

空空如也

空空如也

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

TA关注的人

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