自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(285)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 分布式概念:分布式互斥(临界资源访问)

分布式互斥(Distributed Mutual Exclusion),被互斥访问的共享资源就叫作临界资源(Critical Resource)。集中式算法:每个程序在需要访问临界资源时,先给协调者发送一个请求。如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,按照先来后到的顺序为请求程序“排一个号”。如果有程序使用完资源,则通知协调者,协调者从“排号”的队列里取出排在最前面的请求,并给它发送授权消息。拿到授权消息的程序,可以直接去访问临界资源。一个程序完成一次临界资源访问,需要如下

2020-05-25 14:00:00 1056

转载 B树与B+树

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值。如下图所示就是一棵二叉查找树,对该二叉树的节点进行查找发现深度为1的节点的查找次数为1,深...

2020-05-23 14:36:07 228 1

原创 重温算法Day23:B+树

树中的节点并不存储数据本身,而是只是作为索引。除此之外,我们把每个叶子节点串在一条链表上,链表中的数据是从小到大有序的。如果我们要求某个区间的数据。我们只需要拿区间的起始值,在树中进行查找,当查找到某个叶子节点之后,我们再顺着链表往后遍历,直到链表中的结点数据值大于区间的终止值为止。所有遍历到的数据,就是符合区间值的所有数据。当数据量很大的时候,如果将索引存储在内存中,尽管内存访问的速度非常快,查询的效率非常高,但是,占用的内存会非常多。如果把索引存储在硬盘中,而非内存中。但硬盘是一个非常.

2020-05-23 14:32:03 242

原创 arangodb的aql逻辑判断

arangodb的aql,如果做类似关系库的case when操作,可以使用三目运算符,如下两种casecase1:FOR c IN clientsRETURN {client: c.client,c.address: IS_NULL(c.mailing_address) ? c.physical_address :c.mailing_address}case2:FOR id IN [ 'xp/a-b' ] LET doc = DOCUMENT(id) LET ke

2020-05-21 14:34:14 421

原创 重温算法Day22:拓扑排序

拓扑排序:有向无环图如果 a 先于 b 执行,也就是说 b 依赖于 a,那么就在顶点 a 和顶点 b 之间,构建一条从 a 指向 b 的边。而且,还要是一个有向无环图,也就是不能存在像 a->b->c->a 这样的循环依赖关系。Kahn 算法如果 s 需要先于 t 执行,那就添加一条 s 指向 t 的边。所以,如果某个顶点入度为 0, 也就表示,没有任何顶点必须先于这个顶点执行,那么这个顶点就可以执行了。找出一个入度为 0 的顶点,将其输出到拓扑排序的结果序列中,且把这个顶点从

2020-05-21 00:30:04 129

原创 重温算法Day21:跳表

每两个(三个、五个)结点提取一个结点到上一级,我们把抽出来的那一级叫作索引或索引层。你可以看我画的图。图中的 down 表示 down 指针,指向下一级结点。在第一级索引的基础之上,每两个(三个、五个)结点就抽出一个结点到第二级索引。链表加多级索引的结构,就是跳表。每两个结点会抽出一个结点作为上一级索引的结点,那第一级索引的结点个数大约就是 n/2,第二级索引的结点个数大约就是 n/4,第三级索引的结点个数大约就是 n/8,依次类推,也就是说,第 k 级索引的结点个数是第 k-1 级索引的结点个数的

2020-05-20 23:25:39 130

原创 Go-自定义Error

package commonimport ( "fmt")type ErrCode stringvar ( //common api err message SUCCESS ErrCode = "0" DB_UNKNOW_ERR ErrCode = "1001")var errCodeName = map[ErrCode]string{ SUCCESS: "Success return", DB_UNKNOW_ERR: "Db unknow erro.

2020-05-20 18:34:34 700

原创 重温算法Day20:动态规划

背包问题对于一组不同重量、不可分割的物品,我们需要选择一些装入背包,在满足背包最大重量限制的前提下,背包中物品总重量的最大值。把整个求解过程分为 n 个阶段,每个阶段会决策一个物品是否放到背包中。每个物品决策(放入或者不放入背包)完之后,背包中的物品的重量会有多种情况,也就是说,会达到多种不同的状态,对应到递归树中,就是有很多不同的节点。我们把每一层重复的状态(节点)合并,只记录不同的状态,然后基于上一层的状态集合,来推导下一层的状态集合。我们可以通过合并每一层重复的状态,这样就保证每一层不同

2020-05-16 18:01:11 174

原创 linux学习2:进程

用系统调用创建进程 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> extern int create_process (char* program, char** arg_list); int create_process (char* program, char*...

2020-05-13 13:43:11 176

原创 linux学习0:内核初始化

内核初始化内核的启动从入口函数 start_kernel() 开始。在 init/main.c 文件中,start_kernel 相当于内核的 main 函数。在操作系统里面,先要有个创始进程,有一行指令 set_task_stack_end_magic(&init_task)。这里面有一个参数 init_task,它的定义是 struct task_struct init_task = INIT_TASK(init_task)。它是系统创建的第一个进程,我们称为 0 号进程。这是唯

2020-05-13 01:13:49 263

原创 linux系统学习1:系统调用

glibc 对系统调用的封装在用户态进程里面调用 open 函数int open(const char *pathname, int flags, mode_t mode)64 位系统调用过程:x86_64 下的 sysdep.h 文件/* The Linux/x86-64 kernel expects the system call parameters in registers according to the following table: syscall nu...

2020-05-13 00:41:35 905 3

原创 http笔记整理:数字签名与证书

实现完整性的手段主要是摘要算法(Digest Algorithm),也就是常说的散列函数、哈希函数(Hash Function)。摘要算法理解成特殊的“单向”加密算法,它只有算法,没有密钥,加密后的数据无法解密,不能从摘要逆推出原文。摘要算法实际上是把数据从一个“大空间”映射到了“小空间”,所以就存在“冲突”(collision,也叫碰撞)的可能性,就如同现实中的指纹一样,可能会有两份不同的原文对应相同的摘要。MD5(Message-Digest 5)、SHA-1(Secure Hash A

2020-05-12 23:01:23 247

原创 重温算法Day19:分治思想

分治算法是一种处理问题的思想,递归是一种编程技巧。实际上,分治算法一般都比较适合用递归来实现。分治算法的递归实现中,每一层递归都会涉及这样三个操作:分解:将原问题分解成一系列子问题;解决:递归地求解各个子问题,若子问题足够小,则直接求解;合并:将子问题的结果合并成原问题。分治算法能解决的问题,一般需要满足下面这几个条件:原问题与分解成的小问题具有相同的模式;原问题分解成的子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别,等我们讲到动态规划的时候,会详细对比这两种算法;

2020-05-12 13:42:13 156

原创 重温算法Day18:贪心算法

分糖果我们有 m 个糖果和 n 个孩子。我们现在要把糖果分给这些孩子吃,但是糖果少,(m<n),所以糖果只能分配给一部分孩子。每个糖果的大小不等,这 m 个糖果的大小分别是 s1,s2,s3,……,sm。除此之外,每个孩子对糖果大小的需求也是不一样的,只有糖果的大小大于等于孩子的对糖果大小的需求的时候,孩子才得到满足。假设这 n 个孩子对糖果大小的需求分别是 g1,g2,g3,……,gn。我的问题是,如何分配糖果,能尽可能满足最多数量的孩子?对于一个孩子来说,如果小的糖果可以满足,我们就没必

2020-05-12 13:29:26 297

原创 重温算法Day17:图及图的遍历

如何在内存中存储图这种数据结构邻接矩阵(Adjacency Matrix)邻接矩阵的底层依赖一个二维数组。对于无向图来说,如果顶点 i 与顶点 j 之间有边,我们就将 A[i][j]和 A[j][i]标记为 1;对于有向图来说,如果顶点 i 到顶点 j 之间,有一条箭头从顶点 i 指向顶点 j 的边,那我们就将 A[i][j]标记为 1。同理,如果有一条箭头从顶点 j 指向顶点 i 的边,我们就将 A[j][i]标记为 1。对于带权图,数组中就存储相应的权重。缺点:浪费空间。无向图会浪费一半,

2020-05-12 00:02:03 236

原创 http笔记整理:对称和非对称加密

加密前的消息叫“明文”(plain text/clear text),加密后的乱码叫“密文”(cipher text),使用密钥还原明文的过程叫“解密”(decrypt),是加密的反操作,加密解密的操作过程就是“加密算法”。说密钥长度是 128,就是 16 字节的二进制串,密钥长度 1024,就是 128 字节的二进制串。对称加密算法:不安全: RC4、DES、3DES、安全:AES、ChaCha20AES 是“高级加密标准”(Advanced Encryption S.

2020-05-11 23:59:51 792

原创 http笔记整理:https

安全:如果通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认。SSL 即安全套接层(Secure Sockets Layer),目前应用的最广泛的 TLS 是 1.2。TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术实验环境使用的 TLS 是 1.2,客户端和服务器都支持非常多的密码套件,而最后协商选定的是“ECDHE-RSA-AES25.

2020-05-11 23:49:12 249

原创 http笔记整理:缓存代理

HTTP 的服务器缓存功能主要由代理服务器来实现(即缓存代理),源服务器系统内部虽然也经常有各种缓存(如 Memcache、Redis、Varnish 等),但与 HTTP 没有太多关系。在没有缓存的时候,代理服务器每次都是直接转发客户端和服务器的报文,中间不会存储任何数据,只有最简单的中转功能。代理服务收到源服务器发来的响应数据后需要做两件事。第一个当然是把报文转发给客户端,而第二个就是把报文存入自己的 Cache 里。下一次再有相同的请求,代理服务器就可以直接发送 304 或者缓存数据,不必

2020-05-11 23:46:26 182

原创 http笔记整理:代理服务

链条的起点还是客户端(也就是浏览器),中间的角色被称为代理服务器(proxy server),链条的终点被称为源服务器(origin server)“代理服务”就是指服务本身不生产内容,而是处于中间位置转发上下游的请求和响应,具有双重身份:面向下游的用户时,表现为服务器,代表源服务器响应客户端的请求;而面向上游的源服务器时,又表现为客户端,代表客户端发送请求。“计算机科学领域里的任何问题,都可以通过引入一个中间层来解决。如果一个中间层解决不了问题,那就再加一个中间层。”代理最基本的.

2020-05-11 23:42:56 1151

原创 http笔记整理:缓存控制

1.服务器缓存1.浏览器发现缓存无数据,于是发送请求,向服务器获取资源;2.服务器响应请求,返回资源,同时标记资源的有效期;3.浏览器缓存资源,等待下次重用。服务器标记资源有效期使用的头字段是“Cache-Control”,里面的值“max-age=30”就是资源的有效时间,相当于告诉浏览器,“这个页面只能缓存 30 秒,之后就算是过期,不能用。”这里的 max-age 是“生存时间”(又叫“新鲜度”“缓存寿命”,类似 TTL,Time-To-Live),时间的计算起点是响应报.

2020-05-11 23:34:56 195

原创 重温算法Day16:Trie树

Trie树:搜索引擎的搜索关键词提示功能一种专门处理字符串匹配的数据结构,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。英语的单词的话,就是26个字母,也就是树有26个叉。两个操作:一个是将字符串集合构造成 Trie 树。一个是在 Trie 树中查询一个字符串。通过一个下标与字符一一映射的数组,来存储子节点的指针。假设我们的字符串中只有从 a 到 z 这 26 个小写字母,我们在数组中下标为 0 的位置,存储指向子节点 a 的指针,下标为 1 的位置存储指向子节点 b 的指针,以

2020-05-11 13:00:12 149

原创 重温算法Day15:字符串匹配

BF 算法和 RK 算法BF算法(朴素匹配算法)(暴力匹配):在主串中,检查起始位置分别是 0、1、2…n-m 且长度为 m 的 n-m+1 个子串,看有没有跟模式串匹配的。RK算法:通过哈希算法对主串中的 n-m+1 个子串分别求哈希值,然后逐个与模式串的哈希值比较大小。如果某个子串的哈希值与模式串相等,那就说明对应的子串和模式串匹配了。因为哈希值是一个数字,数字之间比较是否相等是非常快速的,所以模式串和子串比较的效率就提高了。假设要匹配的字符串的字符集中只包含 K 个字符,我们可以用一个 .

2020-05-10 17:18:40 226

原创 重温算法Day14:堆

堆”(Heap)堆是一个完全二叉树;堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。堆存储:数组中下标为 i 的节点的左子节点,就是下标为 i∗2 的节点,右子节点就是下标为 i∗2+1 的节点,父节点就是下标为 2i​ 的节点。堆排序:大致分解成两个大的步骤,建堆和排序。建堆:方式1:从下往上堆化:在堆中插入一个元素的思路。尽管数组中包含 n 个数据,但是我们可以假设,起初堆中只包含一个数据,就是下标为 1 的数据。然后,我们调用前面讲的插入操作,将下标从 2 到 n 的数据依.

2020-05-08 22:47:27 162

原创 重温算法Day13:二叉树

在计算机科学中,数据的相对大小比绝对的数值重要,出于很多数据比大小的需求以及其他一些需求,就产生了一个抽象的数据结构——二叉树二叉树可以做很多事情,比如排序、快速查找到某一个数值、根据网站目录结构下载所有网页、组织里的管理结构。所有能够对应到二叉树的问题,都有一些共性,解决它们之间问题的方法是可以触类旁通的。排序二叉树可以直接完成排序,因为它有一个很好的性质,就是它左右两个分叉可以和比较...

2020-05-07 17:45:48 202

转载 信号量介绍

地址:https://colobu.com/2015/10/09/Linux-Signals/信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方式。一个信号就是一个异步的通知,发送给某个进程,或者同进程的某个线程,告诉它们某个事件发生了。当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中...

2020-04-30 17:49:38 454

原创 golang:监听信号量

package mainimport ( "log" "os" "os/signal" "syscall" "time")func main() { // 监听退出信号 shutdown := make(chan os.Signal, 1) signal.Notify(shutdown, syscall.SIGTERM, syscall.SIGINT, syscall....

2020-04-30 17:36:41 893

原创 开窗函数应用

1.编写一个 SQL 查询,查找所有至少连续出现三次的数字。leetcode:https://leetcode-cn.com/problems/consecutive-numbers/+----+-----+| Id | Num |+----+-----+| 1 | 1 || 2 | 1 || 3 | 1 || 4 | 2 || 5 | 1 |...

2020-04-29 00:30:06 407

原创 http笔记整理:cookie机制

HTTP 的 Cookie 机制,既然服务器记不住,那就在外部想办法记住。相当于是服务器给每个客户端都贴上一张小纸条,上面写了一些只有服务器才能理解的数据,需要的时候客户端把这些信息发给服务器,服务器看到 Cookie,就能够认出对方是谁了。响应头字段 Set-Cookie 和请求头字段 Cookie。当用户通过浏览器第一次访问服务器的时候,服务器肯定是不知道他的身份的。所以,就要创...

2020-04-28 00:00:01 180

原创 http笔记整理:重定向和跳转

1.重定向是服务器发起的跳转,要求客户端改用新的 URI 重新发送请求,通常会自动进行,用户是无感知的;2.301/302 是最常用的重定向状态码,分别是“永久重定向”和“临时重定向”;3.响应头字段 Location 指示了要跳转的 URI,可以用绝对或相对的形式;5.重定向可以把一个 URI 指向另一个 URI,也可以把多个 URI 指向同一个 URI,用途很多;6.使用重定向...

2020-04-27 23:54:38 240

原创 http笔记整理:连接管理

短连接的缺点相当严重,因为在 TCP 协议里,建立连接和关闭连接都是非常“昂贵”的操作。TCP 建立连接要有“三次握手”,发送 3 个数据包,需要 1 个 RTT;关闭连接是“四次挥手”,4 个数据包需要 2 个 RTT。而 HTTP 的一次简单“请求 - 响应”通常只需要 4 个包,如果不算服务器内部的处理时间,最多是 2 个 RTT。这么算下来,浪费的时间就是“3÷5=60%”,有三分之二的时...

2020-04-27 23:52:58 241

原创 重温算法Day12:散列表

散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。散列表两个核心问题是散列函数设计和散列冲突解决。散列冲突有两种常用的解决方法,开放寻址法(线性探测、二次探测、双重散列)和链表法(常用)。散列函数设计的好坏决定了散列冲突的概率,也就决定散列表的性能。链表法是一种更加常用的散列冲突解决办法每个“桶(bucket)”或者“槽(slot)”会...

2020-04-27 22:41:42 302

原创 重温算法Day11:二分查找

二分查找依赖的是数组,找针对的是有序数据,数据量太小或太大都不适合二分查找。没找到二分查找有什么应用场景实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去func mySqrt(x int) int { left, right := 1, x for left...

2020-04-26 23:29:22 167

原创 重温算法Day10:线性排序-桶排序、计数排序、基数排序

桶排序(Bucket sort)将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。如果要排序的数据有 n 个,我们把它们均匀地划分到 m 个桶内,每个桶里就有 k=n/m 个元素。每个桶内部使用快速排序,时间复杂度为 O(k * logk)。m 个桶排序的时间复杂度就是 O(m * k * logk)。...

2020-04-23 23:02:10 177

原创 重温算法Day9:归并和快排

归并排序:先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。先是自顶向下细分,再自底向上合并。复杂度相当于N乘以log(N)。参考:https://blog.csdn.net/Linzhongyilisha/article/details/100110826假设对 n 个元素进行归并排序需要的时间是 T(n),那分解成两个子数...

2020-04-22 23:16:37 146

原创 http笔记整理:传输大文件

数据压缩gzip 等压缩算法通常只对文本文件有较好的压缩率,而图片、音频视频等多媒体数据本身就已经是高度压缩的,再用 gzip 处理也不会变小(甚至还有可能会增大一点),所以它就失效了分块传输“化整为零”的思路在 HTTP 协议里就是“chunked”分块传输编码,在响应报文里用头字段“Transfer-Encoding: chunked”来表示,意思是报文里的 body 部分不是一次...

2020-04-22 00:08:27 267

原创 http笔记整理:http实体数据

数据类型与编码HTTP 协议它是应用层的协议,数据到达之后工作只能说是完成了一半,还必须要告诉上层应用这是什么数据才行在 HTTP 里经常遇到的几个类别:1.text:即文本格式的可读数据,我们最熟悉的应该就是 text/html 了,表示超文本文档,此外还有纯文本 text/plain、样式表 text/css 等。2.image:即图像文件,有 image/gif、image/...

2020-04-22 00:04:00 157

原创 http笔记整理:http优点与缺点

1.HTTP 最重要也是最突出的优点是“简单、灵活、易于扩展”header + body 结构HTTP 协议里的请求方法、URI、状态码、原因短语、头字段等每一个核心组成要素都没有被“写死”,允许开发者任意定制、扩充或解释,给予了浏览器和服务器最大程度的信任和自由,也正好符合了互联网“自由与平等”的精神——缺什么功能自己加个字段或者错误码什么的补上就是了2.“无状态”,它对于 HTTP...

2020-04-21 23:59:50 370

原创 http笔记整理:http特点

1.HTTP 是灵活可扩展的,可以任意添加头字段实现任意功能;2,.HTTP 是可靠传输协议,基于 TCP/IP 协议“尽量”保证数据的送达;3.HTTP 是应用层协议,比 FTP、SSH 等更通用功能更多,能够传输任意数据;4.HTTP 使用了请求 - 应答模式,客户端主动发起请求,服务器被动回复请求;5.HTTP 本质上是无状态的,每个请求都是互相独立、毫无关联的,协议不要求客...

2020-04-21 23:57:42 232

原创 http笔记整理:状态码

状态码目前 RFC 标准里规定的状态码是三位数,所以取值范围就是从 000 到 999。但如果把代码简单地从 000 开始顺序编下去就显得有点太“low”,不灵活、不利于扩展,所以状态码也被设计成有一定的格式。RFC 标准把状态码分成了五类,用数字的第一位表示分类,而 0~99 不用,这样状态码的实际可用范围就大大缩小了,由 000~999 变成了 100~599。1××:...

2020-04-21 23:53:51 379

原创 http笔记整理:正确的网址

1.URI 是用来唯一标记服务器上资源的一个字符串,通常也称为 URL;URI,也就是统一资源标识符(Uniform Resource Identifier)URL——统一资源定位符(Uniform Resource Locator)2.URI 通常由 scheme、host:port、path 和 query 四个部分组成,有的可以省略;3.scheme 叫“方案名”或...

2020-04-21 23:51:27 3918

德哥的Postgresql数据库优化的培训视频(网盘链接)

德哥的Postgresql数据库优化的培训视频,从Postgtesql的安装,配置,到数据库配置文件postgresql.conf的讲解,执行计划的查看,非常详细。

2018-01-30

struts2.3API-chm

struts 2.3-12 API chm格式

2013-03-17

局域网聊天程序chat

学完java SE后的一个简单的课程设计,用于多人聊天的程序。

2012-11-23

C#网络版掷骰子源代码

C# 网络版掷骰子游戏源代码,代码详细,方便学习

2012-08-31

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

TA关注的人

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