自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【分布式】分布式事务:2PC

2PC的性能由于有多轮消息,非常慢由于存在Block,很慢。与Raft对比Raft目标高可用,而2PC并不是高可用的。原因在于,Raft中的每台机器做一样的事情;而2PC中的机器在做不一样的事情(为了完成一个事务)Raft+2PL实现高可用+ 分布式事务 原子提交?

2023-09-08 21:36:57 618

原创 【Golang入门】Golang第一天心得

gpt这么解释: Go语言中的接口实现是隐式的,而不是明确的。这意味着你不需要显式声明一个类型实现了某个接口,只要这个类型提供了接口中定义的所有方法,它就被认为实现了该接口。这是Go语言的一种灵活而简洁的设计。go channel:在两个go routine之间传递数据。select等待多个channel:select +case ,只有一个会执行。4 . 奇葩第五点:错误处理。这一点也是早有耳闻了。生活所迫,入门一下Go。

2023-09-08 21:25:38 529

原创 【分布式】Zookeeper

的要求)这个位置也就是Log对应的条目号zxid,每次读请求的响应中会带上zxid给client, 当client再次发出请求到一个相同或者不同的副本时,会在请求中带上最高的zxid,这样副本就会知道,至少要在Log中的这个点或之后执行读请求。副本中的数据,并不一定是最新的,因为append entries只要求大多数节点收到并响应,我们需要读的节点也许为少数节点,此时数据是落后的。对于读请求,如果第一个读请求在Log中的一个位置执行,那么第二个读请求只允许在第一个读请求对应的位置或者更后的位置执行。

2023-08-27 22:00:01 1093 2

原创 【分布式】VMware FT概要

讨论了1primary + 1backup的情况,比较好理解, 6.824中以该论文为例,介绍了分布式系统中复制的概念,复制的方式。以下简要讲述一些关键点,来源于MIT6.824课程,翻译版本 https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/lecture-04-vmware-ft。

2023-08-24 23:22:20 1276

原创 【分布式】Viewstamped Replication Revisited

篇前感悟:阅读分布式系统文章的意义其实并不在于你个人真正地去开发这样一个基于这种协议的系统,因为真正去开发一个高可用的分布式系统实在是太难了(对我来说…)更多的还是汲取其中的思想,包括设计思路,优化思路等等。简单地举个例子,比如说这篇优化中的witness角色引入,也许也可以在其他系统中得到应用。真正能在工程实践中使用到的并非是完整的一篇论文,而是其中的一个点、两个点。

2023-08-12 23:24:58 781

原创 【分布式系统】前言

争取写一下阅读笔记,更新有关分布式系统的一切,先开个坑。

2023-08-05 19:47:39 403 5

原创 【毕设写作】LaTex 相关用法

导入宏包注:如果已经导入了宏包 amsmath, 则跳过这一步骤,因为 amsmath 中包含了 amsthm定义在 preamble(usepackage后面)中定义:使用...

2023-07-22 17:52:44 259

原创 【2023保研夏令营】网安、CS(西交、华师、科、南等)

如果你和我一样是社恐、自闭人,可以报几个开营早、准备东西少的练手,会逐渐进入状态。

2023-02-18 15:00:25 3409 1

原创 假如remake...普通人的碎碎念

我想,这个blog即将迎来新一届的学弟学妹,于是写下这一篇文章。深入学好一门编程语言,推荐CPP。参与算法竞赛,而不是ctf。多看国外的课程和配套经典。不要碰学校的创新创业。

2022-09-17 11:53:14 870 9

原创 【前端】Vue实现个人空间

AcWing Web应用课 (y总yyds)

2022-08-23 01:09:53 1039

原创 【前端】JavaScript

AcWing Web应用课 (y总yyds)

2022-08-13 23:46:22 588

原创 再做螺旋矩阵AcWing753 756【写法妙】

在题解去看到一个非常妙非常好理解的写法!!!

2022-08-02 16:27:11 155

原创 【软件与系统安全】堆溢出

堆与栈的区别:分配器 glibc malloc 分配器起初数据段之上是没有堆的,进程运行在栈上;malloc才创造堆多线程情况下arena的分配主线程分配arena,线程1、2分别分配arena,那么线程3需要需要重复使用已经分配好的arena分配器循环遍历arena,如果lock成功(也就是有线程如果没有使用堆空间),那么该线程的arena供线程3使用。若没有找到可用arena,则将线程3阻塞,直到找到可用的位置。(个人思考: 所以对于多线程编程,是一定要及时free堆空间的,否则内存泄露,有线程会

2022-06-22 23:27:18 1014 1

原创 【软件与系统安全】整数溢出、格式化字符串、数组越界访问漏洞

文章目录一、整数溢出整数表示举例防护二、格式化字符串漏洞三、数组越界访问漏洞产生举例一、整数溢出整数表示原码、反码、补码表示:对于正数原码、反码以及补码是其本身。负数的原码是其本身,反码是对原码除符号位之外的各位取反,补码则是反码加1。CF是无符号溢出标志,OF是有符号溢出标志。即使有符号数相加/相减导致了CF=1也没什么意义,不能说明结果的正确与否。此时,OF=1,则说明结果溢出,出现错误;OF=0,说明结果正确。这个过程根本和CF没关系,CF=1/0,都不会影响。这说明指针类型不同,对

2022-05-20 23:08:34 1324

原创 【软件与系统安全】栈溢出

一、进程的内存布局代码段、初始化的变量和未初始化的变量在编译时就已经确定空间。而栈和堆区则在程序运行时才确定。堆:从低地址空间到高地址空间增长栈:从高地址空间到低地址空间增长。二、栈的工作原理esp:帧指针,始终指向栈帧顶部eip:指令执行的地方ebp:栈基指针,指向当前栈帧的底部。栈的作用:为函数的调用和执行维护存储结构EBP存放当前栈的栈基地址,减可以访问当前函数的一些局部变量,加可以访问foo(某)函数局部变量三、栈溢出从缓冲区开始缓冲区是内存的一部分空间,用来缓冲输入

2022-05-19 16:25:22 867

原创 【SimpleDB】Part 9 - Binary Search and Duplicate Keys

增加功能: 按照主键有序排列; 消除主键冲突一、概述现在我们插入记录时依旧是在表的最后插入,因此数据记录是无序的。在这一节中,我们要找到table中正确的位置去插入。如果这个位置已经有要插入的key,报错(说明主键已经存在)...

2022-05-18 14:22:49 89

原创 【SimpleDB】Part 7-8 - Introduction to the B-Tree

一、概述为什么树对于DB是一个好的数据结构?查找数据更快插入/删除数据更快范围查找更快(这是比哈希表更优的地方)二、B-tree vs B+ tree在sqlite中,索引使用B树,而存储表格使用B+树B+树的非叶子结点只存keys,而不存values;B树则存k-v,叶子结点和非叶子结点的结构是一致的。B+树的非叶子节点vs叶子节点三、改造成B-树叶子结点不止存储一行数据,因此一个node可能需要包含元数据、主键、记录本身。对原来的设计(数组存储),每个page只存储r

2022-05-18 13:57:04 107

原创 【SimpleDB】Part 6 - The Cursor Abstraction

在这一节中,我们要增加一个“游标 Cursor”属性游标出现场景:在表的开始创建Cursor在表的结尾创建Cursor通过指定Cursor访问数据增加一行数据时Cursor值也要增加具体如下:删除游标指向的记录修改游标指向的记录搜索游标指向的记录数据结构定义以及初始化:typedef struct { Table* table; uint32_t row_num; bool end_of_table; // Indicates a position one pas

2022-05-15 11:55:37 79

原创 【SimpleDB】Part 5 - Persistence to Disk

之前的一通insert、select的操作范围还仅仅只停留在程序运行时的内存中。当结束运行后,我们的insert数据就会丢失。这节就是将我们的数据写到文件中。之前已经完成了Core部分,然后是Backend部分。就像sqlite一样,我们将整个数据库保存到文件中。我们已经将记录serialize到内存页中,为了持久化,我们的思路如下:将这些内存页写入到文件中在程序启动时,将内容从文件中读出来。方便起见,我们定义(抽象)一个结构pager。从pager中可以获得page number x,pag

2022-05-15 11:30:05 225

原创 【SimpleDB】Part 4 - Our First Tests (and Bugs)

本节主要是修复一些bug:row定义时存储结构的处理+ char username[COLUMN_USERNAME_SIZE + 1];+ char email[COLUMN_EMAIL_SIZE + 1];因为在C字符串尾部会有一个’\0’结束符,所以分配空间的时候需要多分配一个byte增加字段长度过长时的报错;id不能为负修改我们的菜鸟compiler:使用strtokstrtok用法:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符(如果传入字符串,则传

2022-05-14 12:36:43 88

原创 【SimpleDB】Part 3 - An In-Memory, Append-Only, Single-Table Database

一、概述论这个DB为啥是个toyDB><有以下限制:只支持两个操作:插入一行/打印全表表只放在内存中支持单个、硬编码的表支持的语法:insert 1 cstack [email protected] 字段1 字段2 字段3因此要对我们的“ttttoy compiler”补充一些内容:...

2022-05-14 00:03:39 197

原创 【SimpleDB】Part2 - World‘s Simplest SQL Compiler and Virtual Machine

一、概述sqlite的前端是一个SQL 编译器,能够将我们的字符串解析成字节码,传给VM;VM负责字节码的执行。将编译,执行分离的优点:减少了每一步的复杂性(VM不用处理语法错误啦)编译一次,执行多次(缓存字节码)二、代码实现类似于.exit的非SQL语句我们将它称为“meta-commands”,实现的时候先检查这些非SQL语句,然后用单独模块处理。第二步,将我们输入的语句进行预处理。(显然之后还要处理)最后,我们将上述锁的的预处理语句传给execute_statemen

2022-05-13 09:46:36 106

原创 【SimpleDB】Part 1 - Introduction and Setting up the REPL

开始写一个简单的db,https://cstack.github.io/db_tutorial/parts/part1.html,参考。可以算是toy了,不过希望能借此开始db生涯。一、总览查询语句经过的部件前端有Tokenizer、Parser、Code Generator后端有virtual machine、B-Tree、Pager、OSInterfacevirtual machine接收前端生成查询计划后的字节码,生成指令,可以对表或者索引进行操作,表和索引存在B+树的结点中。VM本质

2022-05-12 20:26:16 166

原创 天梯22模拟 L3-2 拼题A打卡奖励 (30 分)

L3-2 拼题A打卡奖励 (30 分)拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 m i 分钟做完,完成后可获得 c i 枚奖励的金币。活动规定每张打卡卷最多只能做一次,并且不允许提前交卷。活动总时长为 M 分钟。请你算出最多可以赢得多少枚金币?输入格式:输入首先在第一行中给出两个正整数 N(≤10^3) 和 M(≤365×24×60),分别对应打卡卷的数量和以“分钟”为单位的活动总时长(不超过一年)。随后一行给出 N 张打卡卷要花费的时间 m i(≤600),最后一行给出

2022-04-21 14:44:00 1228

原创 【DB-4】行锁-两阶段锁协议/死锁

回顾:全局锁表级锁: 表锁,MDL元数据锁参考:极客时间 mysql实战45讲行锁MySQL的行锁是在引擎层由各个引擎实现的,但并非各个引擎都支持行锁,比如MyISAM引擎不支持行锁(InnoDB支持) ,所以只能用表锁,同一张表上任何时刻只能有一个更新在执行,影响到业务并发度。两阶段锁协议加锁时间:语句执行的时候加上,而不是事务开始的时候就加上释放锁时间:统一在事务结束后再释放启发:如果一个事务中需要锁多个行,那么把最可能造成锁冲突、最可能影响并发度的锁往后放,以减少锁的等待时间,

2022-04-13 21:38:44 489

原创 天梯L2-029 特立独行的幸福

L2-1 特立独行的幸福 (25 分)对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;

2022-04-13 15:11:19 287

原创 天梯 L2-028 秀恩爱分得快

题目描述古人云:秀恩爱,分得快。互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度。如果一张照片上出现了 K 个人,这些人两两间的亲密度就被定义为 1/K。任意两个人如果同时出现在若干张照片里,他们之间的亲密度就是所有这些同框照片对应的亲密度之和。下面给定一批照片,请你分析一对给定的情侣,看看他们分别有没有亲密度更高的异性朋友?输入格式:输入在第一行给出 2 个正整数:N(不超过1000,为总人数——简单起见,我们把所有人从 0 到 N-1 编号。为了区分性别,我们

2022-04-13 15:07:43 197

原创 【DB-3】全局锁和表锁

文章目录全局锁表级锁表锁MDL元数据锁锁和索引一样也是一种数据结构,索引是为了加快数据的访问速度而设计的,锁是为了控制并发访问而设计的。数据库事多用户共享的资源,所以要考虑并发访问。分类:全局锁、表锁、行锁全局锁全局锁是对整个数据库实例加锁。加全局读锁:Flush tables with read lock FTWRL设置全局变量也可以,但客户端异常时不会自动断开 set global readonly=true,而且readonly可能要用于判断主备用于需要让整个库处于只读状态的时候,使

2022-04-11 23:37:28 450

原创 【DB-2】DBMS索引技术

文章目录DBMS索引技术顺序索引DBMS索引技术Q:为什么要引入索引?执行器要向存储引擎要数据,存储引擎要知道“数据”在哪里。(页表? 页表并不知道页面内容是什么)此时如果不用索引,则要进行顺序查找,复杂度O(n) 索引可以降低复杂度,争取降低到O(logn) 甚至O(1)索引的目标帮助我们快速定位目标所在的内存地址,定位目标所在的磁盘页面。分类:基于索引所用的数据结构,可以分为哈希表索引、基于树的索引。要考虑的问题: 数据组织问题,存储何种信息;并发访问问题索引数据结构一个索引项=

2022-04-11 14:22:17 801

原创 【DB-1】DBMS存储技术

文章目录一、物理存储介质二、DBMS存储系统三、磁盘上的文件存储四、缓冲池(内存和磁盘间数据如何交换?)缓冲池管理器结构帧分配一、物理存储介质易失性存储DRAM随机访问、字节寻址非易失性存储SSD顺序访问块/页寻址对于非易失磁盘HDD,顺序访问的效率显然更高,因为只要访问连续的磁盘块,只需要对第一个磁盘块的寻道时间;而随机访问每次都要进行重新寻道。对于SSD,理论上随机访问和顺序访问是一样的,但实际上顺序访问仍然有明显优势(缓存友好、预读友好)二、DBMS存储系统核心设计目标:

2022-04-08 22:32:37 828

原创 【JVM-8】类加载器(双亲委派模型)

文章目录一、类加载器概述二、双亲委派模式一、类加载器概述加载类时会先询问上级:这个类是否加载过了;如果没有,还会再委托上级查看有无加载过这个类。只有上级两个加载器都没有加载过,才会轮到应用程序类加载器加载。——双亲委派的类加载模式:先由下到上询问,后由上到下加载启动类加载器可以用一些虚拟机参数,将自己编写的参数交给启动类加载器加载。启动类加载器是由cpp程序编写的。(了解)AppClassLoader ExtClassLoader NULL(没找到加载器 也就是启动类加载器)

2022-04-02 22:58:43 277

原创 【JVM-7】类的几个加载阶段

文章目录一、加载二、链接一、加载java类变成字节码以后,要运行的话需要类加载器,将将类的字节码载入方法区中,内部采用C++的instanceKlass描述java类(底层)。java无法直接访问instanceKlass,所以中间需要一系列的转换。内部重要的field(域)有:_java_mirror 即 java 的类镜像,例如对 String 来说,就是 String.class(这就是instanceKlass的镜像),作用是把 klass 暴露给 java 使用—桥梁作用_super

2022-04-02 21:14:02 393

原创 【JVM-6】字节码技术

文章目录一、概述二、类文件结构一、概述常用字节码指令、源代码到字节码过程中的优化处理;字节码文件要运行,那么要经过一个类加载器二、类文件结构

2022-04-01 22:23:05 409

原创 【状压dp】AcWing 91. 最短Hamilton路径

最难想到的是状态表示…f[i][j]表示的是所有从0走到j,走过的所有点是i的所有路径属性:0到终点j的最短路径状态计算:转移方程:dp[i][j]=min(dp[i][j],dp[i-(1<<j)][k]+g[k][j])初始值 dp[1][0]=0 其他赋值为INF(求的是最小值)所求值dp[(1<<n)-1][n-1] 注意括号遍历方向:先遍历i(所有路径状态),然后才是终点j和中间步k而不是j->i->k原因是如果先遍历的是j,那么用k的时候

2022-03-31 11:03:21 327

原创 【状压dp】AcWing 291. 蒙德里安的梦想

状态压缩dp的模版题…就要死要活的,555真不知道是咋想出来的QAQ。注意点:确定了横着摆放的格子就等于确定了竖着的。所以最后的方案数也就是横着格子的摆法数量。状态表示dp[i][j] i代表第i列,而j是一个二进制数,指的是可能的状态。如果一位等于1表示上一列有横放格子,该列有格子捅出来。状态转移方程。此题要求的是方案数。那么状态dp[i][j]+=dp[i-1][k] 也就是上一列的所有合法状态转移而来状态合法性的判断。列数是0~m-1初始化条件f[0][0] = 1,第0列只能是状.

2022-03-30 21:26:07 226

原创 【JVM-5】GC调优

文章目录垃圾回收调优1. 调优领域2. 确定目标3. 最快的gc是不发生gc4. 新生代调优垃圾回收调优1. 调优领域内存锁竞争cpu占用io2. 确定目标如果应用程序主要做科学运算,那么追求【高吞吐量】如果做互联网项目 追求【低延迟】 提升用户体验然后选择合适的回收器。追求高吞吐量:ParallelGC响应时间优先:CMS(jdk9不推荐,推荐G1),G1,ZGC(目标超低延迟)当然,也可以不选择hotSpot虚拟机ahhhh3. 最快的gc是不发生gc数据是否太多? 数

2022-03-30 16:18:58 578

原创 【JVM-4】G1垃圾回收器

文章目录一、G1(Garbage First)1. G1垃圾回收阶段概述2. Young Collection 新生代垃圾回收3. Young Collection+ CM4. Mixed Collection接上篇的垃圾收集器~一、G1(Garbage First)2012 JDK 7u4官方支持2017 JDK9默认同时注重吞吐量、低延迟,默认的暂停目标是200ms(追求低延迟)超大堆内存,会将堆划分为多个大小相等的Region整体上是标记+整理算法,两个区域之间是复制算法1. G1

2022-03-29 22:59:46 499

原创 【JVM-3】垃圾回收

文章目录一、如何判断对象可以回收1. 引用计数法一、如何判断对象可以回收1. 引用计数法只要一个对象被其他变量所引用,那么这个对象计数+1;如果某一个变量不再引用它了,计数-1当对象的引用计数变为0,那么就可以被当做垃圾回收。存在的问题:循环引用这两个对象的引用计数不能归零(其他对象都无法引用它们了) 所以不能被当做垃圾回收掉垃圾回收算法分代垃圾回收垃圾回收器垃圾回收调优...

2022-03-28 18:53:29 693

原创 【JVM-2】StringTable垃圾回收和调优&直接内存

2022-03-26 23:40:54 410

原创 最短路问题模版总结(Dijkstra/BF/SPFA/Floyd)

文章目录AcWing 849. Dijkstra求最短路 IAcWing 850. Dijkstra求最短路 IIAcWing 853. 有边数限制的最短路AcWing 851. spfa求最短路AcWing 852. spfa判断负环AcWing 854. Floyd求最短路以下的模版题都是求从1到n的最短路AcWing 849. Dijkstra求最短路 I朴素写法邻接矩阵表示,注意重边。重边处理:留下最小的即可#include<bits/stdc++.h>using n

2022-03-25 22:09:40 525

空空如也

空空如也

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

TA关注的人

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