自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 隔离级别及验证

文章目录隔离级别隔离级别READ UNCOMMITTED(未提交读)在READ UNCOMMITED级别,事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,这也被称为脏读,性能不会比其他级别好很多,缺乏其他级别的好处,一般很少用READ COMMITED(提交读)大多数数据库系统的默认隔离级别都是READ COMMITED,但是MySQL不是,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的,这个级别有时候也叫做不可重复读,因为两个执行同样的查询,可能会

2021-03-22 10:59:49 195

原创 死锁和进程间通信

死锁和进程间通信死锁死锁满足上面四个条件不一定出现死锁,出现死锁,一定满足上面四个条件死锁预防死锁避免:不安全状态等于出现环。银行家算法:这时候可以找出一个安全序列p2,p1,p3,p4如果这时候p3需要申请资源r1是要拒绝的,因为如果分配出去就会出现死锁。死锁检测:死锁恢复:进程间通信:信号:管道:消息队列:共享内存:实现:把同一块物理内存映射到不同的进程的相同或者不同的地址空间里。然后通过虚地址访问的时候就能访问到

2021-03-22 09:33:45 181 2

原创 redis学习记录

redis学习记录redis-benchmark压力测试查看redis中的数据库总数:切换数据库和查看数据库大小:插入和获取值:查看所有的key清空当前库中所有key清空所有数据库判断某个key是否存在移除某个key查看当前key的类型String类型在字符串后面追加内容得到字符串的长度字符串的增和减字符串的截取和替换存在设置和不存在设置同时设置和同时获取多个值List类型存和取移除截取list中的部分内容rpoplpushset集合类型添加移除随机抽选移动集合的交并补hash哈希类型插入和获取删除获取长度

2021-03-20 20:32:24 334

原创 约束和分页

约束和分页NOT NULL 约束UNIQUE 约束FOREIGN KEY 约束limit实现分页什么是约束• 为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制。• 约束是表级的强制规定• 可以在创建表时规定约束(通过 CREATETABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)约 束• 有以下六种约束:– NOT NULL 非空约束,规定某个字段不能为空– UNIQUE 唯一约束,规定某个字段在整个表中是唯一的– PRIM

2021-03-06 20:46:23 106

原创 常见的数据类型

常见的数据类型整形小数位类型字符类型日期类型整形小数位类型字符类型日期类型datetime和timestamp的区别

2021-03-06 19:50:07 120

原创 创建和管理表

创建和管理表创建表修改表追加一个新列修改一个列删除一个列重命名一个列删除表清空表改变表, 视图的名称创建表CREATE TABLE dept(deptno INT(2),dname VARCHAR(14),loc VARCHAR(13));DESCRIBE dept创建表CREATE TABLE emp (#int类型,自增emp_id INT AUTO_INCREMENT,#最多保存20个中英文字符emp_name CHAR (20),#总位数不超过15位salary

2021-03-06 19:31:18 129

原创 子查询

子查询概念:出现在其他语句内部的select语句,称为子查询或内查询内部嵌套其他select语句的查询,称为外查询或主查询注意事项• 子查询要包含在括号内。• 将子查询放在比较条件的右侧。• 单行操作符对应单行子查询,多行操作符对应多行子查询。• 子查询 (内查询) 在主查询之前一次执行完成。• 子查询的结果被主查询(外查询)使用 。SELECT last_nameFROM employeesWHERE salary >(SELECT salaryFROM emplo

2021-03-06 19:01:59 75

原创 数据处理之增删改

数据处理之增删改插入数据更新数据删除数据插入数据字符和日期型数据应包含在单引号中。INSERT INTOemployees(employee_id,last_name,email,hire_date,job_id)VALUES (300,’Tom’,’[email protected]’,to_date(‘2012-3-21’,’yyyy-mm-dd’),’SA_RAP’);从其它表中拷贝数据INSERT INTO sales_reps(id, name, salary, commission_pct

2021-03-06 17:27:46 75 1

原创 MySQL__常见函数

MySQL__常见函数大小写控制函数大小写控制函数日期函数:SELECT last_name, job_id, salary,CASE job_id WHEN 'IT_PROG' THEN 1.10*salaryWHEN 'ST_CLERK' THEN 1.15*salaryWHEN 'SA_REP' THEN 1.20*salaryELSE salary END "REVISED_SALARY"FROM employees;...

2021-03-06 17:07:35 45

原创 MySQL__数据处理之查询

MySQL的基本知识回顾,增删改查等基本操作这篇文章所用的sql脚本在:https://pan.baidu.com/s/1nM2-xSsTnPqQXdwXCvHrSw提取码:kqed#查询操作:查询整个表的语句:select * from departments;

2021-03-06 16:56:58 203

原创 虚拟专用网络与网络地址转换NAT

虚拟专用网络与网络地址转换NAT私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信,私有地址只能用于本地地址,而不能用于全球地址,在因特网上的所有路由器,对目的地址是私有地址的IP数据报一律不进行转发。部门A和B至少需要一个路由器具有合法的全球IP地址,这样它们各自的专用网才能利用公用的因特网进行通信部门A中的某台主机给部门B中的某台主机发送数据,它会将待发送的数据封装成内部IP数据报发送给路由器R1,R1收到该数据报后,发现目的网络必须通过因特网才能到达,就将该内部IP数据

2021-03-06 13:29:06 375

原创 域名系统DNS

域名系统DNS当用户在浏览器中输入某个域名时,用户主机首先在自己的DNS高速缓存中查找该域名所对应的IP地址,如果没有找到,则会向网络中的DNS服务器查询,DNS服务器中有域名和IP地址映射关系的数据库。之后会将查询结果发送给用户主机,用户主机的浏览器就可以通过web服务器的IP地址对其进行访问了因特网是否可以只使用一台DNS服务器呢?域名结构:DNS报文使用运输层的UDP协议进行封装,运输层的端口号为53。...

2021-03-06 10:33:03 74

原创 万维网WWW

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码

2021-03-06 09:59:48 97 1

原创 进程管理

进程管理前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport

2021-03-03 22:09:38 73 1

原创 redis的数据结构

redis的数据结构动态字符串跳跃表动态字符串动态字符串的存储结构:上面只是最普通的一种情况,对于不同的字符串长度redis中也设计了不同的数据结构来存储。对于第一种sdshdr的存储结构:第三位表示数据结构的类型,用来区分结构体的类型,高五位用来表示字符串的长度,所以是sdshdr能表示长度0-31的字符串,sdshdr16的内存方式:这里__attribute__ ((packed))的作用是用来1字节的内存对齐,所以才会存在上述结构,否则由于内存对齐会多用三字节,这里属于节约内存的

2021-03-03 18:31:49 52

原创 虚拟内存

虚拟内存存储器的层次结构:覆盖技术:一个程序的不同部分在不同的时刻共享同一块内存区域。什么时候换入换出是由常驻内存的代码段决定的。例子:左边的是程序的调用关系,A会调用B,B调用D,A也可以调用C,C可以调用E,F。A就属于常驻内存的部分,BC属于可选的部分,DEF属于不存在调用关系的模块。当然还有另一种覆盖方法:交换技术:交换技术解决中的几个问题:覆盖技术与交换技术的比较:虚存技术:虚存技术是通过操作系统和MMU(内存管理单元)来实现内存的管理,并且降低了换入换出的粒

2021-03-02 22:01:50 78

原创 网络编程基础知识

网络编程基础知识现代CPU的累加器一次都能装载4字节(32位机),即一个整数。那么这4字节在内存中的排列顺序将影响它被累加器装载成的整数值,这就是字节序,大端字节序是指一个整数的高位字节(21-23)存储在内存的低地址出,低位字节(0-7)存储在内存高的地址处。代码判断:#include <iostream>#include <stdio.h>using namespace std;void byteorder(){ union { s

2021-03-02 21:14:01 53

原创 工厂方法和抽象工厂

工厂方法和抽象工厂工厂方法工厂方法首先看一下为什么需要工厂方法:class ISplitter{public: virtual void split()=0; virtual ~ISplitter(){}};class BinarySplitter : public ISplitter{ };class TxtSplitter: public ISplitter{ };class PictureSplitter: public ISplitter{

2021-02-28 15:43:21 47

原创 IP协议学习记录

IP协议学习记录IPV4头部结构:上面的是学习DNS查询所抓的DNS查询数据包,里面的字段对应起来看就很清楚了。个字段的详细解释:IP的分片的基本原理:具体的抓包流程:执行如下命令开启抓包使用ping命令发送icmp数据包第一个报的内容主要看是否分片,偏移,IP数据报的长度,基本和上面讲的差不多,有点差别的就是ICMP的头部被放在了第二个ip数据包的数据部分。...

2021-02-25 14:41:48 54

原创 MAC地址,IP地址,ARP协议

MAC地址,IP地址,ARP协议MAC地址IP地址MAC地址MAC地址属于数据链路层:MAC地址的单播和多播:单播帧的例子:首先可以看见源MAC地址的第一个字节为00,所以是全球管理的单播帧,当A,C收到该单播帧时检查与自己的MAC地址是否匹配,匹配则接受,不匹配则丢弃。B发送该广播帧后,所有的主机都会收到该广播帧,当A,C发现目的MAC地址是广播地址也就是全1后,接受该帧。当B,C,D收到该数据帧后,发现该帧的源MAC地址是一个多播MAC地址,如果自己的多播列表中有该帧的目的MA

2021-02-25 14:20:32 172

原创 路由器(网关)的相关知识

@TOC路由器的基本结构:路由器的工作原理方式参考视频:https://www.bilibili.com/video/BV1CJ411i7p8路由信息的协议rip的基本工作原理:rip的基本工作过程:也就是开始各路由器中的路由表中只有直连条目,随着和相邻路由器周期性地交换并更新路由信息,最终路由表中到达其他路由器的距离都收敛到最小了。AS是自治系统内。RIP的路由条目的更新规则:路由器C把自己的路由表信息发送给路由器D,路由器D改造该路由表,把下一条的路由器改为C并且距离加1,想想

2021-02-25 14:17:31 199

原创 IP数据报的发送和转发过程

IP数据报的发送和转发过程源主机如何知道目的主机是否与自己在同一网络中?同一个网络中的主机可以直接通信,这属于直接交付。不同网络中的主机不能直接通信,需要路由器的中转,这属于间接交付。现假设主机C给主机F发送ip数据报,主机C将自己的IP地址和子网掩码相与,就可以的到主机C所在网络的网络地址,然后主机C将主机F的IP地址与自己的子网掩码相与,如果结果和主机C的网络地址相同则就在同一网络地址中。主机C如何知道路由器R的存在:每个网络中会指定一个默认路由器,也叫作默认网关如下图路由器收到ip数

2021-02-24 22:27:35 2045

原创 IP地址学习记录

IP地址学习记录分类编址的ipv4地址:A类网络地址详解:B类网络地址详解:C类网络地址详解:例题:上图中有四个网络,红黄蓝绿分别属于一个网络需要注意的是黄色网络一共需要65535个ipv4地址,因为路由器也需要分配一个IP地址,蓝色网络和绿色的网络也是一样的分别需要分配255,和41个ipv4地址。小结:...

2021-02-24 19:12:29 135 1

原创 交换机自学习和转发帧

交换机自学习和转发帧主机A给主机B发送帧,首先假设已经通过arp协议得到主机B的MAC地址,当交换机1收到该帧后将源MAC地址和接口登记,然后在帧交换表中查到目的MAC地址,没有找到就进行盲目转发(泛洪),交换机2收该帧后,做相同的动作。主机B给主机A发送帧,首先交换机1收到该帧,然后登记源MAC地址和接口号,然后查找帧交换表,找到后,就从对应的接口转发出去。接下来就一直重复上述的动作,例如主机E给主机A发送帧丢弃帧的情况:当主机G给主机发送帧时,A和交换机1都会收到该帧,交换机1首先将G

2021-02-24 13:44:37 1694

原创 路由器和集线器的区别

路由器和集线器的区别集线器的特点:集线器的扩展以太网:这样扩展以太网后一系,二系,三系的主机能够通信,但是形成了一个更大的冲突域,也就是一个时刻只有一个数据在总线上传输,不然不同的信号就会在总线上产生冲突。路由器的特点:单播帧的区别:对于使用集线器的共享总线型以太网,单播帧会传送到总线上的其他各主机,各主机的网卡根据该帧上的目的MAC决定是否接受该帧,对于使用交换机式的交换以太网,交换机收到该单播帧后,根据帧的目的MAC地址和自身的帧交换表,将帧转发给目的主机。发送广播帧的情况:对

2021-02-24 13:08:02 938

原创 非连续内存的管理

非连续内存的管理分段分页页表连续内存分配的缺点:非连续分配的优点:分段一个应用程序逻辑地址本生是由不同的段来组成的,我们可以根据不同段的属性将他们分离开来。分段寻址方案:cpu先读取段号,然后段表中查找该段的起始地址和段内最大偏移量,然后先比较逻辑地址的偏移量是否小于该段内最大偏移量,如果是则加上其实地址变成了物理地址,如果超过该段内最大偏移则报内存异常。分页逻辑地址划分后叫做页,物理地址划分后叫做帧。TLB:转换后备缓冲区。如何的到真实的物理地址:具体的例子:

2021-02-23 17:56:19 146

原创 操作系统的连续内存管理

操作系统的连续内存管理内存管理的目的或者方法:地址空间与地址生成:逻辑地址与物理地址的定义:逻辑地址的生成:内存碎片的问题:内碎片和外碎片是相对于应用程序来讲的,内碎片就是在一个应用程序分配的内存区域内,产生了很多小的无法内利用的内存空间,外部碎片就是在不同应用程序之间分配的内存空间之间存在的小的无法被利用的内存碎片。分区的动态分配还是相对于应用程序来说的:首次适配:首次适配就是从低地址到高地址寻找一个能够满足的内存块分配出去,如下图就分配在1Kbytes空闲区域,优势:简单,

2021-02-23 11:46:55 91

原创 中断,异常,系统调用

中断,异常,系统调用定义:为什么应用程序不能直接访问外设:三者来源:外设:键盘,鼠标,网络包,声卡。意想不到的行为:除0,访问非法的地址空间。提供的服务:打开文件,关闭文件,读写文件,发送网络包处理时间:系统调用:系统调用的同步和异步是可以设置的。根据自己的需求。响应:...

2021-02-23 10:09:17 55

原创 设计模式学习记录

一些设计模式中介者模式二、适配器模式门面模式代理模式自言自语:感觉设计模式学完后什么都不记得,哈哈中介者模式中介者模式也是在解决耦合的问题,可以从左边几个对象的引用关系看出,多个对象相互引用使得对象之间的关系变得比较复杂。当使用中介者模式改造后如右边所示,所有的对象都和中介者之间是直接依赖关系,而对象与对象之间是相互独立的,这样修改起来就变得放心很多,不用担心相互的影响。感觉和mvc有点像,view层直接依赖于controller层,model层也是直接依赖于controller层,从而实现界面效果

2021-02-22 22:04:58 49

原创 DNS原理学习记录

DNS原理学习记录DNS完成的工作就是将域名转化为IP地址。先执行下面命令抓包:执行host命令:将抓到的包在wireshark中分析:第一个DNS查询数据包中的内容:字段含义分别与下面对应:具体的可以参考:linux高性能服务器13页...

2021-02-22 17:35:32 37

原创 arp协议的验证学习

arp协议的验证学习基本知识基本知识ARP协议的用途:ARP(地址解析协议)和RARP(逆地址解析协议)协议它们实现了IP地址和机器物理地址(通常是Mac地址)之间的转换,网络层使用IP地址寻找一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化成物理地址,才能使用数据链路层提供的服务。工作原理:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。此网络上的其他机器都将受到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理

2021-02-22 13:56:34 596

原创 观察者模式

观察者模式学完观察者模式并没有领悟到观察者模式的真谛,但是想到了一个小例子,在这里记录一下,感觉能够对应下面的一段话。就是比如说我们在看视频的时候,点击了暂停,那么这时候就会触发几个动作,声音要关闭,视频要暂停在当前帧,还有可能弹出广告,那么又能在暂停按钮这个类里面就需要定义视频类的对象,声音类的对象,广告类的对象,这样耦合关系就很紧密了,我以前看过一个处理是这样,c#语言做的就是事件的注册于派发,跟这个差不多,就是定义一个单例类eventlistener,里面有一个dictionary(c++中的m

2021-02-21 20:06:15 54

原创 策略模式(c++)

策略模式背景:假如现在要做一个税收的算法,这个税收的功能要支持多个国家,未来可能需要支持更多的国家。enum TaxBase { CN_Tax, US_Tax, DE_Tax, FR_Tax //更改};class SalesOrder{ TaxBase tax;public: double CalculateTax(){ //... if (tax == CN_Tax){ //CN**

2021-02-19 21:50:26 47

原创 select poll epoll

I/O复用selectpoll系统调用epoll系统调用selectI/O复用是使一个进程能够监听多个文件描述符的技术,对提高程序的性能至关重要需要使用I/O复用技术的情况:1.客户端要同时处理多个socket。2.客户端要同时处理用户输入和网络连接3.tcp服务器要同时处理监听socket和连接socket(这个I/O复用最多的场合)4.服务器要同时监听多个端口,或者处理多种服务。select系统调用的原型:#include <sys/select>int select(i

2021-02-19 20:29:11 74

原创 验证tcp的全连接队列和tcp三次握手

验证tcp的全连接队列和tcp三次握手先给出服务端可客户端的程序:server#include <stdio.h>#include <netdb.h>#include <netinet/in.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/socket.h>#include <sys/types.h&g

2021-02-17 22:35:19 103

原创 decltype,initializer_list,variadic templates学习记录(c++)

decltype,initializer_list,variadic templatesdecltypelnitializer_listVariadic Templatesdecltypedecltype的作用就是的到一个表达式或者变量的类型#include <iostream>using namespace std;int getSize(){ cout << "call getSize()" << endl;}int main(){

2021-02-16 17:11:50 108 1

原创 红黑树c++

红黑树具体的参考资料:链接:https://pan.baidu.com/s/1Vgqo7_-yL_6hbxKknqaWRA提取码:ozw6#define BLACK 1#define RED 0#include <iostream>using namespace std;class bst{private: struct Node { //节点的值 int value; bool color; N

2021-02-14 21:26:07 55

原创 查找算法总结

查找算法总结顺序查找初始版:#include <iostream>using namespace std;int Sequential_Search(int* array, int n, int key){ int i; for(i = 0; i < n; i++) { if(array[i] == key) { return i; } } return -1;}

2021-02-13 21:23:03 69

原创 常见的排序算法总结

常见的排序算法总结冒泡排序最常见版:void BubbleSort(int* array, size_t len){ for (size_t i = 0; i < len; i++) { for (size_t j = i; j < len - i -1; j++) { if(array[j] > array[j + 1]) { int temp = arr

2021-02-10 21:21:09 61

原创 sizeof()数组名的问题

void func(int array[]){ cout << sizeof(array) << endl;}int main(){ int array[] = { 3, 4, 5 }; func(array); cout << sizeof(array) << endl; cout << sizeof(&array) << endl; char str[] = "1234567"; const char*

2021-02-09 18:24:59 106

空空如也

空空如也

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

TA关注的人

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