自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL 事务一致性的实现

提供最基本的 PCC 机制,即基于锁的并发控制:在 PCC 的基础上使用 MVCC,默认查询使用非锁定一致性读,但读取的快照数据总是最新的;此外,对于范围查询不会使用 Next-Key Lock 算法;:默认查询使用非锁定一致性读,且总是读取事务开始时的快照数据版本;此外,对于范围查询使用了 Next-Key Lock 算法来避免幻读:默认使用一致性锁定读来查询数据。

2022-10-20 19:50:38 3343

原创 五种网络 I/O 模型

异步 I/O 与信号驱动式 I/O 的区别在于:信号驱动式 I/O 是由内核通知我们何时可以开始 I/O;即调用异步函数完成 I/O,这些函数告知内核完成某个操作(如将数据从内核缓冲区拷贝到用户空间),并让内核在操作完成后通知我们。调用并阻塞在`select()`/`poll()`上,而非阻塞在真正的 I/O 调用上,以一个系统调用监听多个套接字。其中前四种模型都属于同步 I/O,而异步 I/O 模型属于异步 I/O。同步 I/O 操作:读请求将导致进程阻塞,直到 I/O 操作完成;信号驱动式 I/O(

2023-07-06 22:35:43 250

原创 用户数据报协议 UDP

伪报头含有源地址、目的地址等信息,而UDP 数据报本身只包含目的端口号,故伪报头来自于 IP报头,在计算 UDP校验和之前,UDP必须先从IP层获取有关信息。此外,除了对报文提供可选的校验和之外,几乎没有其他保证数据传输可靠性的措施,若 UDP 检测到差错分组,会直接将分组丢弃。对应用程序提交的报文既不合并也不拆分,而是保留原报文的长度和格式,直接添加 UDP 协议头部后提交给下层 IP协议。计算时,先将检验和字段置为0,然后将伪报头与用户数据报作为整体计算,以16位为单位,依次相加,并将溢出的进位回卷。

2023-07-06 22:29:49 485

原创 传输控制协议 TCP

应用程序与 TCP 每次交互的数据长度可能都不相同,但 TCP 将应用程序提交的数据看作时一连串的、无结构的字节流,同时在发送方与接收方都维护一个缓存。发送方将几个写操作合并成一个报文段,提交给IP协议封装成IP分组后发送。接收方将接受的字节存储在接收缓存中,由应用程序的读操作取出。通信双方的应用程序在任何时候都可以发送数据。通信双方都有发送缓冲区与接收缓冲区,应用程序将要发送的数据字节提交给发送缓冲区,并在合适的时候从接收缓冲区读取数据,至于实际的发送接收过程则由 TCP 协议控制。

2023-07-05 13:17:09 1997 3

原创 Linux 文件系统

而有些设备则是虚拟的,并不存在相应的硬件设备,但内核可以通过设备驱动程序提供一种抽象设备,其携带的 API 与真实设备无二。文件系统在存储文件时,数据块通常采用离散存储的方式,这样做的好处在于能降低磁盘空间的碎片化程度,使得对磁盘空间的利用更为搞宵。对于传统的文件系统,在系统崩溃时,对文件的更新可能只完成了一部分,而文件系统元数据也将处于不一致状态,故为了确保文件系统的完整性,重启时必须对文件系统的一致性进行检查。对 i-node 的标识,采用的是 i-node 表中的顺序位置,以数字标识。

2023-07-05 12:41:06 776

原创 什么是 TCP 网络粘包

只要 TCP 接收数据的速度大于应用层从缓冲区中读取数据的速度,则应用层可能读取到多个首尾相接的包。TCP 粘包问题是指发送方多次发送的数据混合到了一起(具体体现为发送方多次 SEND 发送的数据,接收方一次 RECV 就能全部读取)。粘包问题的本质在于,TCP 本来就是面向字节流的协议,不会根据数据发送的次数保持数据的边界,导致接收方可能一下子读取到多个报文。发送方:发送方会使用 Nagle 算法,Nagle 算法会收集多个小分组,将它们合并发送;发送长度:发送每条数据时,将数据的长度一并发送。

2023-05-08 10:33:51 382 1

原创 Redis 缓存穿透、缓存击穿与缓存雪崩

对应的数据在数据源中并不存在,每次针对此数据的请求从缓存获取不到,请求都会落到数据源,从而给数据源带来巨大的负载。即恶意请求穿透了缓存,落到了数据源,使得 redis 的数据缓存作用失效。数据发起大量并发请求,当该数据在 redis 中过期时,这些请求会导致应用同时发起从数据源加载数据的请求,这时集中的大量并发请求可能会瞬间给数据源带来巨大负载。即使 redis 和数据源都不存在该资源,就将请求的数据作为空结果缓存一段时间,且为该数据设置一个较短的过期时间,否则数据的时效性会产生问题;

2023-05-08 10:16:59 516 1

原创 shared_ptr 的线程安全性

多线程环境下,调用不同的 shared_ptr 实例的成员函数是不需要额外的同步手段的,即使这些 shared_ptr 管理的是相同的对象。多线程对于同一个 shared_ptr 实例的读操作(访问)可以保证线程安全;但对于同一个 shared_ptr 实例的写操作(改变一个 shared_ptr 指向的对象)则需要同步,否则会发生 race condition。即多个线程可以同时读取一个 shared_ptr 对象;多个线程同时读写一个 shared_ptr 对象,则需要加锁。

2023-05-06 10:47:58 4051

原创 C++ 拷贝控制

当一个类需要定义析构函数时,几乎可以肯定它也需要一个拷贝构造函数与拷贝赋值运算符。(如对于动态分配内存的处理)通常情况下,对于析构函数的需求会更为明显。若一个类需要定义拷贝构造函数,则几乎可以肯定其需要一个拷贝赋值运算符,反之亦然。然而,无论需要这两者中的哪一个,都不意味着也需要析构函数。

2023-04-06 17:49:14 459

原创 并查集求无向图的桥

一、问题描述1. 桥的定义 在图论中,一条边被称为“桥”代表这条边一旦被删除,这张图的连通分量数量会增加。等价地说,一条边是一座桥当且仅当这条边不在任何环上。一张图可以有零或多座桥。2. 求解问题 找出一个无向图中所有的桥。3. 算法基准算法For every edge (u, v), do followinga) Remove (u, v) from graphb) See if the graph remains connected (We can either use BFS

2020-11-01 06:52:11 1487

原创 什么是 JWT(Json Web Token)

一、身份认证 常见的服务器端身份认证机制有两种,分别为:1.基于 session 的认证机制 HTTP 是一种无状态的协议,这意味着若无登录态维持机制,则每次请求时都需要提交用户名与密码进行身份验证,而 session 机制就是用于在服务器端记录用户的登录状态。 session 是一串在服务器生成的字符串,用以唯一地标识一个用户。第一次身份验证后,服务器生成一串字符串并将字符串保存在服务端,同时将该字符串写入返回的响应头(Cookie字段)。浏览器在收到字符串后,将该字符串保存为 Cookie。同一

2020-10-27 19:01:49 901 1

原创 uwsgi+nginx在ubuntu下部署django2项目

环境:Ubuntu18文章目录一、Python与虚拟环境1.升级python与pip2.安装并激活虚拟环境3.安装项目所需的包二、安装与配置MySql数据库一、Python与虚拟环境1.升级python与pip一、安装:sudo apt install python3.7sudo apt install python3-pip 二、环境配置:# 删除原来的软链接sudo...

2020-03-09 16:46:10 302

原创 Ubuntu18下安装配置MySql数据库

文章目录1. 安装mysql服务端与客户端2. 获取用于第一次登录的用户名与密码3. 登录mysql4. 创建自己的用户5. 用户授权6.修改数据库默认编码7.允许其他电脑连接 1. 安装mysql服务端与客户端sudo apt install mysql-server mysql-clientsudo apt-get install libmysqld-dev 2. 获取用于第一次...

2020-03-08 23:03:51 356

原创 「Django」利用缓存提高性能

 Django 中内置了一套缓存机制,通过将数据保存在IO性能较高的缓存上,可以提交网站的访问速度。Django 内置的缓存框架提供了以下几种常用的缓存:基于Memcached缓存;使用数据库进行缓存;使用文件系统进行缓存;使用本地内存进行缓存; 一、配置缓存创建缓存表:python manage.py createcachetable [table_name]在se...

2020-02-20 20:46:40 253

原创 Redis的安装与基本使用

文章目录一、什么是Redis二、Linux下的安装三、常见操作1.基本操作(字符串操作)2.列表操作3.集合操作4.哈希操作一、什么是Redis  Redis(全程:Remote Dictionary Server 即远程字典服务),是一个nosql(即非关系型数据库)。其将数据保存在内存中,同时支持将内存数据持久化到硬盘,且同时支持多种数据结构(string、list、set、sorted ...

2020-02-20 18:51:43 143

原创 「Django」内置模板过滤器

 在 Django 提供的前端模板语言中,可以通过过滤器对数据进行处理后显示。过滤器本质上就是一个函数,通过管道符|来标识,将管道符前的数据传入管道符后指定的过滤器。基本使用形式为:{{ value|filter:argument }} 以下介绍一些常用的过滤器。 文章目录1.add2.cut3.date4.default5.default_if_none6.first7.last8.f...

2020-02-18 05:23:53 176

原创 「Django框架」文件上传

文章目录一、前端实现二、后端实现1.基本方法2.通过模型处理上传文件指定 MEDIA_ROOT 与 MEDIA_URL三、限制上传的文件拓展名四、图片上传一、前端实现定义一个form表单,然后指定属性enctype="multipart/form-data",不然无法上传文件;在上述表单中填入input组件,指定属性type="file"。以上代码示例如下:<form acti...

2020-02-16 22:37:24 396

原创 Memcached的安装配置与基本使用

文章目录一、什么是memcached二、安装与启动memcached三、基本操作1.添加数据2.获取数据3.删除数据4. 递增、递减数据5.查看状态四、通过python操作 一、什么是memcached  Memcached是一个高性能的分布式的内存对象缓存系统,它通过在内存里维护一个统一的巨大的散列表来实现高速的IO操作。memcached能存储各种各样的数据,包括图像、视频、文件等二进制...

2020-02-10 17:20:03 303 1

原创 「Django框架」上下文处理器

 上下文处理器用来处理返回给全局模板的数据,可以通过全上下文处理器统一给上下文附加数据,这样一来,就无需在每个视图函数中实现重复的逻辑。文章目录一、内置上下文处理器二、自定义上下文处理器一、内置上下文处理器 在settings.TEMPLATES.OPTIONS.context_processors中,有许多内置额上下文处理器。这些上下文处理器的作用如下:django.template....

2020-02-06 04:37:56 294

原创 「Python爬虫」基础知识

URL:统一资源定位符URN:统一资源名称,其只命名资源而不指定如何定位资源,即URN可以唯一标识资源,但没有指定如何定位到资源URI:统一资源标志符URI = URL + URN,且几乎所有的URI都是URL HTTP:超文本传输协议,用于从网络传输超文本到本地浏览器的传送协议,能够保证高效而准确地传送超文本文档HTTPS:加入了SSL层的HTTP通道,其传输的内容都是经过SSL加...

2020-01-23 02:09:11 131

原创 「Django框架」类视图

 对于视图层,除了可以用函数作为视图(FBV),还可以用类作为视图(CBV),即在类中定义方法对应http的各种请求方法。使用CBV可以使用类具有的一些特性,如继承、多态等。所有类视图在映射到url时,都需调用视图的as_view()类方法。path("/index",views.MyView.as_view(),name="MyView")文章目录一、CBV的原理二、View三、Te...

2020-01-17 15:22:45 179

原创 「Django框架」QuerySet详解

 Django中用于数据查询的模型.objects是一个django.db.models.manager.Manager对象,而Manager类中的方法,全都来自于QuerySet类,以下介绍QuerySet上的一些常用的API。 返回新的QuerySet 使用QuerySetAPI进行数据筛选时,方法返回的仍是一个QuerySet对象,依此可以对API进行链式调用,对数据进行多层筛选。 ...

2020-01-15 21:43:19 731

原创 「Django框架」F表达式与Q表达式

 Django中的F/Q表达式用于数据库操作。文章目录1.F()表达式2.Q()表达式1.F()表达式 Django使用F()对象生成一个描述数据库级别操作所需的sql语句,使用F()对象可以直接引用模型字段的值并执行数据库操作而不用将它们导入到python的内存中,从而高效地完成批量数据操作。 如一般要操作数据,需:employees = Employee.objects.filter...

2020-01-15 13:08:15 585

原创 「Django框架」数据聚合函数

  对于ORM模型可以使用聚合函数,得到数据运算后的结果。Django的聚合函数都是通过aggregate与annotate方法调用的。所有聚合函数都位于django.db.models下。聚合函数不能单独执行,需放在可以执行聚合函数的aggregate与annotate方法中去执行。聚合函数以字符串的形式传入调用函数字段。aggregate不会返回一个QuerySet对象,而是返回一个...

2020-01-14 02:40:13 709

原创 「Django框架」数据查询条件

 数据查询时数据库操作中的重要技术。查询一般是通过filter、exclude以及get三个方法实现的。而在ORM层面,查询条件都是使用field+__+condition(查询条件)的方式来使用的。filter:返回符合条件的所有数据(多条数据);exclude:返回不符合条件的所有数据(多条数据);get:返回符合条件的第一条数据(单条数据)。以下介绍常用的查询条件。文章目录1....

2020-01-14 01:57:24 537

原创 查找算法

查找表:由同一类型的数据元素(或记录)构成的集合查找表的种类:静态查找表:仅作查询操作的查找表动态查找表:在查找的过程中同时插入表中不存在的元素,或从表中删除已存在的元素。 ASL:平均查找长度,用以衡量查找算法。 ASL定义为确定记录在表中的位置时进行的比较次数的平均值:ASL=∑i=1npici\sum_{i=1}^{n}p_ic_i∑i=1n​pi​ci​。...

2019-12-20 21:54:40 107

原创 常见排序算法

文章目录一、归并二、归并排序三、2-路归并排序一、归并  归并是将两个或两个以上的有序表合并为一个新的有序表的过程。 二、归并排序  在合并两个有序表的过程中,不断比较当前两个表中待操作元素,将其中较小(大)的放入新表,使得得到的新表也为有序。二路归并排序:void Merge(int left,int right,int mid){ int i=left,j=mid+1;k=l...

2019-12-12 11:41:25 480 1

原创 赫夫曼Huffman编码树

 可用一棵二叉编码树来表示一套具体的编码方案,其中每个节点的左右分支代表二进制中的0与1,用遍历经过的分支组成的二进制比特数列来表示信息。编码:将信息转换为二进制形式的过程解码:由二进制编码恢复原始信息的过程一、Huffman树原理 由于使用遍历编码树所得的二进制序列来表示信息,故所遍历到的层次越深(所经过树的分支越多),则得到二进制序列越长。而为了编码的效率,一般寻求得到最短的二进制...

2019-11-28 00:35:55 273

原创

文章目录一、多叉树1.父节点表示法2.孩子节点表示法一、多叉树 一般情况下,树中各节点的孩子数目并不确定,每个节点的孩子均不超过k个的树称为k叉树。以下介绍k叉树的不同表示方法:1.父节点表示法 将各节点组织为向量或者列表,其中每个元素保存节点的数据外,还保存父节点的位置信息,其中为根节点指定位置为-1的父节点。如此,此数据结构所占空间总量为o(n)o(n)o(n),线性正比于节点数n;...

2019-11-27 21:27:15 105

原创 串与KMP算法

文章目录一、存储结构Ⅰ.定长顺序存储Ⅱ.堆分配存储Ⅲ.块链存储二、匹配算法Ⅰ.蛮力算法Ⅱ.KMP算法一、存储结构字符串在计算机一般有三种表示方式:定长顺序存储:将串定义为字符数组,以这种方式表示的串的存储空间在编译时确定,其大小不能改变。堆分配存储:仍用一组地址连续的存储单元依次存储串中的字符序列,但串的存储空间是在程序运行时动态分配的,其使用的是程序的堆内存空间。块链存储:使用链式存...

2019-11-24 13:33:15 277

原创 图的最短路径(Dijkstra算法)

文章目录最短路径:最短路径是指从图(网)中某一顶点,到其余各顶点的最短路径。 最短路径与最小生成树主要有三点不同:最短路径操作对象是有向图(网),而最小生成树的操作对象是无向图(网)。最短路径有一个明确的始点,而最小生成树没有。最短路径更新的是始点到每个顶点的路径最短,而最小生成树关心的是整个支撑树的代价最小。实现:void ShortestPath(char Sta...

2019-11-22 22:52:35 915

原创 有向无环图与关键路径

文章目录一、有向无环图1.判断2.应用二、拓补排序1.拓补排序算法:2.数据结构的实现三、一、有向无环图  即Directed Acycline Graph,为图中无环的有向图。 1.判断①深度优先搜索: 可以使用DFS,找出是否存在环:从某个顶点v0v_0v0​出发,进行DFS,若存在一条从顶点到已访问顶点vvv的回边(即遍历到同一个点两次),则有向图中存在环。②拓补排序  ...

2019-11-21 12:46:35 983

原创 图的最小支撑树

连通性:若无向图的边有权值,则成该无向图为无向网;若无向网中每个顶点都相通,称为连通网。支撑树:连通图G的某一无环连通子图T若能覆盖G中所有顶点,则称T为G的一棵支撑树或生成树。最小支撑树:若图G为一带权网络,则每一棵支撑树的成本为其所拥有的各边的权重的总和。在G的所有支撑树中,成本最低的称为最小支撑树。一、普利姆算法  在图G=(V,E)G=(V,E)G=(V,E)中,顶点集VVV的任一...

2019-11-14 12:17:00 2325

原创 SQL基础

文章目录*基础知识*基础语句一. 运算符二. 查询1.SELECT 查询① AS 关键字② DESTINCT 关键字2. WHERE 选择三. 聚合查询*基础知识SQL语句种类:DDL(Data Definition Language):数据定义语言,用来创建或删除表或数据库。(CREATE、DROP、ALTER)DML(Data Manipulation Languahe):用来查询...

2019-11-09 11:03:24 472

原创 hackergame2019 write-up

文章目录签到题白与夜信息安全2077达拉崩吧大冒险不同寻常的python考试 签到题  检查网页元素,将对应按钮button元素的disable属性删去,即可点击按钮获取flag。  白与夜  将图片保存到本地,发现其为一张半透明的图片。  在浏览器中打开开发者工具,将body元素的background-color属性改为black即可获得flag。 信息安全2077 ...

2019-10-28 18:37:23 454

原创 「Django框架」常用模板标签

TDL使用标签来向模板中嵌入逻辑标签的基本样式:{{变量}}、{%语句%} 文章目录① if标签② for...in...标签-forloop对象③ for...in...empty 标签④ with 标签⑤ url 标签`url`标签传参⑥ spaceless 标签⑦ autoescape 标签⑧ verbatim 标签 ① if标签  if标签相当于Python中的if语句,同...

2019-10-25 17:40:50 213

原创 「Django框架」URL配置与命名空间

文章目录1.路由函数:path(),re_path()函数URL转换器(convert)2.URL模块化3.URL向视图函数传参向视图函数传参的两种方法URL映射时指定默认参数4.URL命名5.不同条件下URL的跳转6.应用命名空间7.实例命名空间8.`include()`函数补充9.`reverse()`函数补充 1.路由函数:path(),re_path()函数re_path()与pa...

2019-10-25 13:07:06 513

原创 正则表达式基础

模式:术语模式用来表示实际的正则表达式regex的作用:匹配一些文本,或者匹配然后替换一些文本regex的使用:大多数的软件,编程语言与IDE中已经内置了regexregex基本性质: 1. 匹配结果:大多数正则表达式只返回第一个匹配结果,且匹配到的结果为与某个模式串 2. 大小写问题: 正则表达式的匹配结果区分大小写,但正则表达式语法不区分大小写。 3. 匹配特殊字符:若需要匹配特...

2019-10-25 02:14:33 333

原创 2.http请求头中Referer的作用与伪造

文章目录一、Referer1.作用2.空Refer二、Referer的伪造1.伪造为ip地址2.伪造为URL一、RefererReferer是HTTP请求header中的一部分,其表示请求当前资源的客户端来源,当浏览器(或模拟浏览器行为)向web服务器发送请求的时候,头部信息里会携带Referer。例如:在 www.google.com 里有一个 www.baidu.com 超链接,当点击...

2019-10-22 17:40:20 10381

原创 1.使用GET与POST传递变量(传参)的方法

文章目录一、使用GET方法传递变量1.通过给URL添加参数2.通过将变量嵌入到超链接中3.通过form表单传递二、使用POST传递变量1.使用hackbar插件一、使用GET方法传递变量1.通过给URL添加参数在所需传递变量的URL后面加上 `/?变量1=值1&变量2=值2……`如:http://111.198.29.45:57307/?a=1 2.通过将变量嵌入到超链接...

2019-10-21 16:07:56 5861 2

空空如也

空空如也

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

TA关注的人

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