RPC与多线程 为什么使用Go不使用C++等语言 因为Go语言有go程,可以方便创建以及使用线程 Go是类型安全和内存安全的,不需要像c++一样处理复杂的内存问题 同时,这门语言比C++简单 分布式下的多线程操作在分布式下,客户端可能需要对多个进行处理,这时候就要使用多线程对其进行操作。 IO多路复用并行性 2023-09-04 #分布式系统
MySql-索引 没有索引的情况在一个页中的查找假设目前表中的记录比较少,所有的记录都可以被存放到一个页中,在查找记录的时候可以根据搜索条件的不同分为两种情况: 以主键为搜索条件 在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。 以其他列作为搜索条件 对非主键列的查找的过程可就不这么幸运了,因为在数据页中并没有对非主键列建立所谓的页目录,所以我们无法通过二分法快 2023-07-17 #MySQL #数据库
算法设计课程期末考试笔记 逆序对计算的分治算法12345678910111213141516171819202122232425262728293031323334353637383940# 逆序对计算的分治算法def count_inversions_dc(A): lenA = len(A) if lenA <= 1: return 0, A middle = lenA // 2 2023-06-28 #算法
MySQL InnoDB存储引擎 MySQL 存储引擎存储引擎的概念MySQL服务器把数据的存储和提取操作都封装到了一个叫存储引擎的模块里。为了实现不同的功能,MySQL提供了各式各样的存储引擎,不同存储引擎管理的表具体的存储结构可能不同,采用的存取算法也可能不同。 为了管理方便,人们把连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存储的功能划分为MySQL server的功能,把真实存取数据的功能划分为存储引擎的功能 2023-06-19 #MySQL #数据库
设计模式 设计模式设计模式的目的是帮助我们编写可复用的代码,提高代码的耦合性。降低对其他组件的修改 单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该 2023-05-08 #设计模式
计算机组成与设计-第二章-笔记 2.1 引言计算机语言中的单词称为指令,其词汇表称为指令系统 RISV-V 指令系统 做pa时候的risv32参考手册 2.2 计算机硬件的操作下面就是一个基础的risv指令,固定使用三个变量进行操作; 1add a, b, c 设计原则1 :简单源于规整 操作数数量可变的硬件比固定数拭的硬件更复杂。 riscv指令主要包含一下几几种指令 2.3 计算机硬件的操作数在RISC-V 体系结构中, 2023-04-28 #计算机组成与设计
南大 pa2 理解YEMU如何执行程序 YEMU可以看成是一个简化版的NEMU, 它们的原理是相通的, 因此你需要理解YEMU是如何执行程序的. 具体地, 你需要画出在YEMU上执行的加法程序的状态机通过RTFSC理解YEMU如何执行一条指令思考一下, 以上两者有什么联系? YEMU执行指令通过 取值->译码->执行->更新pc操作. 首先从M( 2023-04-23 #操作系统
校园内vpn模拟登录 前言使用学校webvpn时候,访问内网地址被加密为一串字符串, 例如:https://webvpn.gdou.edu.cn/http/77726476706e69737468656265737421a1a70fce77602606305adcf9/ 加密流程通过前端js代码,可以很清楚的找到加密函数 12345678910111213141516171819202122232425var text 2023-04-23 #协议分析
github page 自动部署服务器 起因这个博客是同时部署在github page 和 我自己的服务器上,通常在更新博客内容时,会产生数据同步问题。即使用hexo d指令后,上传到 Github page 仓库,不同时更新自己服务器上的内容。在更新完成仓库后,需要手动登录服务器进行拉取仓库。 解决方法首先,在上传到github仓库时,所产生的网页文件已经是被打包好的了,因此在部署到服务器只需要拉取仓库。因此,可以使用github中W 2023-04-22 #博客,部署
线段树入门 简介线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 线段树是中常用的用来维护区间信息的数据结构。对于其每一个子节点而言,都表示整个序列中的一段子区间;对于每个叶子节点而言,都表示序列中的单个元素信息;子节点不断向自己的父亲节点传递信息,而父节点存储的信息则是他的每一个子节点信息的整合。 线段树的基本形态线段树每个区间所管理的关系图 线段 2023-03-28 #算法
srun网络协议分析 前言校园网最近更新,登录方式改用深澜网络协议进行登录。本文根据登录时数据包,对深澜网络协议进行分析。 请求分析获取api请求使用抓包软件对srun协议登录请求进行抓包 登录操作时候主要使用了以下几个请求 GET /cgi-bin/get_challenge?callback=jQuery1124038630846526307305_1678337618278&username=202144 2023-03-08 #网络分析
记录给网站添加cdn cdn介绍内容分发网络(Content Delivery Network,简称 CDN)是利用最靠近每一位用户的服务器,更快、更可靠地将文件发送给用户分发网络。 总而言之,cdn可以加速不同地区的用户的访问,同时将网站中的静态资源缓存,以此减轻服务器的负担。 graph LR; USER1[用户1] -->|访问|CDN[CDN] USER2[用户2] -->|访问|CDN CDN -->| 2023-02-12 #运维,CDN
Redis消息队列 Redis消息队列7.1 Redis消息队列-认识消息队列什么是消息队列:字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色: 消息队列:存储和管理消息,也被称为消息代理(Message Broker) 生产者:发送消息到消息队列 消费者:从消息队列获取消息并处理消息 使用队列的好处在于 解耦:所谓解耦,举一个生活中的例子就是:快递员(生产者)把快递放到快递柜里边(Message Q 2022-12-08 #Redis
Redisson入门 Redis中利用setnx实现的分布式锁存在以下问题重入问题 重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的 2022-11-26
hexo基础指令 简写指令:hexo n “我的第一篇文章” 等价于 hexo new “我的第一篇文章” 还等价于 hexo new post “我的第一篇文章”hexo p 等价于 hexo publishhexo g 等价于 hexo generatehexo s等价于 hexo serverhexo d 等价于 hexo deployhexo deploy -g 等价于 hexo deploy –gener 2022-11-26 #入门
Redis缓存查询 缓存的概念什么是缓存缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据。在后端开发中,缓存通常会储存在内存之中 缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力 实际开发过程中,可能一个应用的数据量非常大,如果没有缓存来作为”避震器”,系统是几乎撑不住的,所以会大量运用到缓存技术; 但是缓存也会增加代码复杂度 2022-11-16 #Redis #后端
第一篇博客 终于把github上面的github page大概搞了,大概去年这个时候创的仓库,拖到今年才开始,都快一年了了。 未来可能会把手头上做过的一些笔记整理一波扔上去。 2022-11-16 #建站
dijkstra算法 dijkstra算法Dijkstra 算法,用于对有权图进行搜索,找出图中两点的最短距离,既不是DFS搜索,也不是BFS搜索。把Dijkstra 算法应用于无权图,或者所有边的权都相等的图,Dijkstra 算法等同于BFS搜索。dijkstra算法时间复杂度为$O(n^2)$ 算法的思路:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组第一组为已求出最短路径的顶点集合(用S表 2022-10-08 #算法
背包入门 背包笔记大部分内容参考来自这篇文章[1]和wiki上的内容[2]。 01背包问题 题目:有N件物品和一个容量为V的背包。第i件物品的费用是v[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 这是最基础的背包问题,后面的背包问题都由01背包问题衍生。问题的特点是:每种物品仅有一件,只能选择放或不放。 如果这个问题采用枚举的思想,他的时间复杂度 2022-07-16
Floyd算法入门 所有顶点对间的最短路径问题(Floyd算法)Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法。简称Floyed(弗洛伊德)算法,是最简单的最短路径算法,可以计算图中任意两点间的最短路径。 Floyd的时间复杂度是$O (N^3)$,适用于出现负边权的情况。 算法的基本思想:开始时,以任意两个顶点之间的有向边的权值作为路径长度,没有有向边时,路径长度为∞以后 2022-05-16 #算法