自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 3250.单调数组对的数目Ⅰ / 3251.单调数组对的数目Ⅱ

题记:根据参考写的自己的理解,自己认为可以比较直观的看懂,如果有错误可能是理解不到位,加油加油(ง •_•)ง继续学习。

2024-11-29 10:34:02 567

原创 leetcode.3206 交替组Ⅰ

模拟:题目描述整数数组成环,且只需要考虑相邻两个元素的关系(颜色时候相同)使用一个循环进行模拟,记录数组长度用于将数组模拟成环。然后将当前遍历的元素和左右下标节点对比,&&都不相同的时候进行一个结果计数。

2024-11-26 15:07:05 271

原创 删除缓存之后,浏览器显示登录新设备

当C盘缓存被清除时,这些存储的Token也会被删除,导致浏览器无法识别之前的登录状态,因此需要重新登录。清除缓存后,如果Refresh Token也丢失,用户可能需要重新登录以获取新的Token。综上所述,清除C盘缓存后需要重新登录并显示登录新设备,主要是因为浏览器中用于鉴权的Token被清除,以及系统可能将清除缓存后的变化识别为新设备登录。清除c盘缓存,浏览器所有页面都需要重新登录,并在登录之后显示登录了新设备是为什么,是因为鉴权更新了就算新设备吗?

2024-11-17 17:00:41 941

原创 cmu 15-445学习笔记-5 哈希表

用于记录局部深度填充数据时候的全局深度,当某一个桶满了,就会进行桶分裂,在当前的桶不能存放下四个元素的时候分裂为两个桶,同时deep+1,存放这四个元素的桶和全局深度一起加到了3,全局深度下对应二进制为000、001、010、011、100、101、110、111八个,这时候只需要将需要分裂的桶 重新整理就好了,其余的桶保持原来的深度不变,本地深度就是用来干这个的,因为没有整理本地深度确定了前面集为相同即可。删除的时候也要向下找,但是连续的碰撞中如果删除一个,可能会导致后面的数据找不到了。

2024-11-12 23:50:50 657

原创 MD5、加盐值、彩虹表和鸽巢原理

在忘记密码之后经常会通过短信等手段进行身份验证,但是为什么,系统不返回以前的密码?:因为在服务器中是不可以直接存储明文密码的:可能被非法读取直接获取用户密码,所以存储的时候一般都需要进行加密。MD5信息摘要算法,将密码哈希成一个16字节128位的短列,MD5主要的是算法的复杂性和不可逆性,但也因其不可逆性,所以就无法还原出以前的密码,所以在找回的时候一般都是重新设置。但是MD5加密过的信息仍然无法防止一些风险。所以存储一般使用其他的方式加密,

2024-11-04 15:21:56 310

原创 cmu 15-445学习笔记-4 缓存池

操作系统对于文件也也有缓存的,两份缓存,这个时候需要绕过操作系统缓存,不需要操作系统缓存我们数据库的文件,操作系统不知道数据库的东西需要什么缓存策略什么时候淘汰,需要保留多久操作系统都不知道,OS就是一个简单的缓存和自己本地的缓存还是冲突冗余的,所以对于操作系统 的缓存一般需要Bypass掉 Most DBMSs use direct I/O (O_DIRECT) to bypassthe OS’s page cache.【大多数的DBMS直接使用O_DIRECT去管理页缓存】

2024-11-03 17:14:07 959

原创 git记录(一部分一部分加)

关于 Git - GitHub 文档

2024-11-03 17:10:23 471

原创 cmu 15-445学习笔记-3 存储引擎

上述方法 说的就是tuple存的不是数据是块的时候,在插入的时候就可以将随机的写转化为顺序的写(以前存数据的时候就是在需要改数据的时候把数据从页中加载进来,然后修改,然后将修改的数据协会去,之后在需要修改这个数据,就再从磁盘中页加载,修改,然后再写回去。查询走索引找到行,然后将数据取出。但是这样存储日志的数据库会比较大(就需要周期性的压缩日志),压缩之后应该保留当页操作之后的数据结果(但是仅仅可以压缩当前页的数据,如果该页中没有出现某个数据的插入只记录了数据的删除,那么这个操作就是不能压缩的)

2024-10-28 22:14:31 2203

原创 一些MySQL的知识

在这一部分执行的过程中,依然可能出现断电的状态,这时候的机制是这样的:在出现断电的时候回去检查redolog的状态,如果redolog处于prepare状态证明redolog已经写完了,断电发生在redolog之后,这时就回去对比redolog和binlog的是否记录了相同的操作,如果不相同证明断电发生在binlog完成之前,这时候已经prepare的redolog中的数据将被。这里就涉及到,先写谁后写谁?为什么是三到四层,因为和你存储的key有关系,你的key占用的空间越小,存储的数据量越多,树越矮;

2024-10-28 22:06:18 771

原创 leetcode.3158 xor值(亦或运算)

排序+一次遍历+判断。

2024-10-12 15:30:44 288

原创 cmu 15-445学习笔记-2

通过聚合函数将想要的结果输出为一个结果(col:列),聚合函数一列的值有很多个,当使用聚合函数之后变成一个值了,如果只是单单查询聚合函数结果没有问题,如果带别的列就会给你报错(错误应该是聚合函数不包含XXX列),因为聚合函数聚合了就是一列了,但是对应的其他字段有很多个就没法输出(这是使用聚合函数的场见问题),如果需要将两个字段相同的(如相同id)进行一个聚合函数的取值,就需要使用group by.分组。CONACT(LOWER(str), ‘@cs’):字符串拼接。高端的数据库一般都会有一个及其复杂的。

2024-10-11 23:59:13 1015

原创 cmu 15-445学习笔记-1

关系型数据库的一个常用搞法就是在外键进行两个表的映射时使用一个中间表存储映射关系,来防止一对多的混乱(在做业务的时候如果某两个数据表的主键或者对应列是多对多的关系就可以使用一个中间表,使用中间表的化一般外键就直接干掉就可以了)一组属性关系被称为一个元组,值通常是原子(不可再分,原子性)或标量(vector和scalar对应,vector是向量,一般都是标量的数据,好进行标量进行运算),特殊值NULL是每个域的成员。十个数据可以拆成两个列族,例如十个数存在二维数组的两行在数据库中这是不同的数据库表。

2024-10-11 11:20:29 773

原创 学学vue-2

1.7 指令修饰符@keyup.enter:监听键盘回车事件,回车触发事件@keyup.enter代码v-model修饰符:v-model.trim:去首尾空格v-model.number:变数字(如果是数字的话,转变为数字)@事件名.stop:阻止冒泡现象,如果在大盒子中嵌套小盒子,点击小盒子之后,小盒子响应,之后大盒子也会相应,因为小盒子在大盒子所包含的区域当中,使用stop可以阻止这种冒泡行为 (可以通过在小盒子中添加e.stopPropagation()解决但是太长了)在小

2024-09-12 08:54:28 1085

原创 学学vue-1

vue0 安装装node.js,以及cnpm(npm超时或者被屏蔽,安装cnpm国内镜像)查看安装版本(是否安装成功)node -v安装成功之后也会安装npmnpm -vcnpm镜像npm install -g cnpm --registry=http://registry.npm.taobao.org在vscode中装vue-offical扩展,点击install之后浏览器跳转到vscode注:需要vscode,试验创建文件是.html后缀1 基础1.1 创建一个

2024-09-04 08:32:17 2712

原创 哈希表+树单节点(leetcode.690)

其实就是遍历树找到,以某个节点为根节点的子树,然后便利这颗子树,树中元素存储的都是一个结构体,包含id、价值、和子树节点,因为子树中的子树节点给出,所以使用哈希表存储给定数组中的根节点即可,然后根据子树节点找到对应的子树,构建的过程中在每个子树中取出其价值累加就可以。

2024-08-26 08:39:05 337

原创 一个很奇怪的递归方式(难道是数学推导???)(leetcode.600)

map集合存放的n=map.first的时候,[0, map.first]中符合题意要求的数个数也就是map.second。(蚌埠的状态,思路是似懂非懂的,代码是通过的,现在只能理解自己这一种找规律的思路)看起来像是左面都是n/2,右面都是(n-1)/4(然后除法交给位运算就可以了)范围的非负整数中,有多少个整数的二进制表示中不存在。我从4列到了13感觉这个公式可能找规律出来的?但是感觉这个公式不应该是这么出来的。还是没懂那个公式是怎么来的QAQ。

2024-08-20 15:41:12 299

原创 划分数组得到最小值之和(leetcde.3117)

明确:题目中得到的可能的子数组之和。表示的应该是每个子数组最后一个元素值的和。这样比较符合给出的测试用例。思路:从nums[0]开始考虑某一个元素是否可以作为最后一个元素,并且计算and&结果正好等于val[j],然后依次递推,当等于val[j]的时候,就需要考虑,以当前元素结尾,不以当前元素结尾,两种情况。

2024-08-17 10:34:58 270

原创 二进制运算练习(leetcode.3151)

因为需要考虑单双数,但是不想使用%2取余的方式,所以直接考虑二进制位,因为单数二进制位最后是1,双数二进制位最后一位是0。所以按照题目要求首先判断数组是否只有一个元素,如果只有一个元素直接返回(相当于给了一个得出结果的快速通道,判断在前特殊情况之后再执行逻辑)。然后使用数组第一个元素&1得出第一位数的单双,&1单数返回1,双数返回0。

2024-08-13 08:45:37 437 1

原创 function+lambda(leetcde.676)

本题其实直接使用一个容器存储输入的数组中的字符串(甚至直接赋值也可以)然后逐一和输入的字符串比对,保证修改字符不超过1(diff

2024-08-12 20:36:48 297

原创 快速幂理解

因为涉及到对指数的多次取模,所以在取模的时候先取模和后取模结果一定是一样的,所以采用快速幂的方法,现将指数的底数增大次数变小(方便计算出指数也就是快速幂的方法,因为在次数很大的时候暴力计算的方法不利于直接计算出指数结果。通过快速幂的方式可以提升底数,降低次数这样可以通过相乘几个大一点的底数来计算)。在此基础之上,本体多了取模一说,取模因为计算出的结果是不变的早取模和晚取模一样,所以可以在快速幂的时候就对底数进行取模,这样保持一直在较小数中进行计算。

2024-07-30 09:54:16 381

原创 二维数组前缀和

思路就是使用前缀和,前缀和表示的是面积,每一个位置对应的前缀和都表示以当前坐标为右下角所计算的“面积”中的前缀和,也就是当前面积覆盖所有区域的累加和。在初始化过程中创建一个前缀和数组,前缀和数组的长度和宽度都比原数组大1,然后计算当前[i,j]位置的前缀和的时候,使用一种前缀面积的方式去获取前缀前缀和数组的面积计算。得到前缀和数组之后,在传入参数的时候左上角和右下角相应的+1因为前缀和数组从(1, 1)开始有意义值,然后同样通过面积相减的方式来得到所取范围的。

2024-07-26 16:07:36 344

原创 KMP算法

为什么可以相等,因为只计算相同子串的部分,后面那部分不相等的不去计算,也正是因为仅仅记录的当前位置的最长公共前后缀,所以可以模拟一个B串的所有最长公共前后缀长度情况,组成一个最长公共前后缀数组,供A串匹配的时候使用(这里说的是假如前五个元素相等,第六个元素不相等,这时候前五个元素一定相等,A串的后缀{这五个元素的后缀}与B串的前缀{这五个元素的前缀}可以看作都是B串的,所以是B串中的最长公共前后缀。B串自己与自己匹配 B[1]~B[i]的前缀与它的后缀匹配 后缀为主串,前缀为模式串。

2023-07-06 19:54:25 175

原创 类静态变量私有化问题

今天在看两种单例模式的时候有一点疑惑查了点资料,记录一下。在看这个单例模式的时候一些关于类静态私有的想法

2023-07-02 11:48:27 429 1

原创 近期刷题的一些感受

近期刷题的一些感受

2023-05-21 13:34:55 190 1

原创 01背包二维数组转一维数组

二维数组变为一维数组,使用滚动数组实现,滚动数组是动态规划中一种用于空间优化的技巧,具体来说就是在计算当前状态的时候,只使用前一阶段的状态值,因此不需要保留全部的状态,只保留一部分即可,通过这种方式可以将多维转化为一维,从而大幅减小占用空间。01背包是一种经典的动态规划问题,是指在给定容量的情况下,选择一些物品放入背包,使得物品的总价值最大,且不能超过背包的总重量,01表示选或不选两种状态,每种物品只有这两种状态。定义一个二维数组dp[i][j],表示前i个物品放入容量为j的背包中所能获得的最大价值。

2023-04-01 17:03:10 705

原创 C/C++字节对齐规则

现代计算机中,内存空间按照字节划分,理论可以从任何骑术地址访问任意类型的变量。但是实际访问中特定类型的变量经常在特定的内存地址访问,这就需要各种类型数据按照一定规则在空间上排列,而不是一个接一个地存放,这就是对齐。

2023-01-13 16:26:36 942

原创 构造和析构

将一个类的构造函数私有化,可以使该类不能被实例化,同时不能被继承。但是在类内可以访问自身的private字段,所以我们可以通过static函数创建class对象,以引用或者指针的形式返回。这样就可以使用这个类的对象了构造函数私有化的类的设计保证了其他类不能从这个类派生或者创建类的实例。

2023-01-11 16:49:12 430

原创 类静态变量的初始化

静态成员变量是一种特殊的成员变量,他被关键字static修饰,这个变量会被当前类所有,无论创建多少A对象内存中都只有一个value变量。

2023-01-11 11:28:24 4264

原创 STL中vector怎么扩容

vector被称为向量容器,该容器擅长在尾部插入或删除元素,时间复杂度为O(1);而对于在vector容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)。使用vector容器,需要包含,注意这里无扩展名。STL中规定容器的区间遵循前闭后开原则,即容器中的一对迭代器start和finish标识的前闭后开区间,从start开始,直到finish-1.迭代器finish所指的是“最后一个元素的下一位置”。

2023-01-08 11:17:47 781

原创 new和malloc的区别以及底层实现原理

在Linux环境下从操作系统角度看,进程分配内存有两种方式,分别由两个系统调用完成:brk 和 mmap (不考虑共享内存)这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。malloc基本的实现原理就是维护一个内存空闲链表,当申请内存空间时,搜索内存空闲链表,找到适配的空闲内存空间,然后将空间分割成两个内存块,一个变成分配块,一个变成新的空闲块。

2023-01-07 11:09:17 1068 1

原创 C++多态实现

多态是同一个行为具有多个不同表现形式或者形态的能力,简单的概括为“一个接口,多种方法”,是面向对象领域的核心概念c++支持两种多态性:编译时多态,运行时多态c++运行时多态是通过虚函数来实现的,虚函数允许子类重新定义函数,而子类重新定义父类的做法称为覆盖/重写(Override),或者称为重写。

2023-01-06 10:53:03 1021

原创 死锁相关内容

由于两个或以上的线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法执行。

2023-01-05 19:06:59 180

原创 C语言实现C++对象和私有成员

解决方案:将结构体放进源文件中,头文件只放声明这其实跟C的编译有关,当结构体定义在头文件中时,因为我们主函数所在的源文件(main.cpp)会include这个头文件,而编译时相当于将该头文件的内容直接替换掉inlcude,那么main中或者其他include了该头文件的函数都可以访问结构体成员;但当结构体定义在源文件中时,编译时没有将结构体的定义复制过来,因此结构体成员在main中不可用,但因为在源文件中定义了结构体,因此该源文件下的所有函数均可以访问结构体成员。obj.h。

2023-01-05 15:57:12 1201

原创 关于makefile

伪目标不是一个文件,只是一个标签,所以make无法生成它的依赖关系和是否执行,我们只有显示的指明这个目标才能让其生效,为了避免和文件重名我们可以使用一个特殊符号.PHONY来显式指明一个目标就是伪目标,向make说明不管是否有这个文件这个目标就是伪目标,只要有这个声明不管是否有这个文件要运行clean就可以make clean使用。object的值将会是*.c,并不会是*.c文件的展开,如果需要表示.c文件基于需要使用wildcard函数这样就能使object表示为.c文件的名的集合。

2022-09-25 16:45:10 258

原创 KMP算法

为什么要使用kmp算法?减少字串(T)在主串(S)中不必要的查找暴力查找逐个查找每次发现有字符不相符,主串就返回到最初字符的下一个字符,字串返回到最开始在图中可以发现字符串中某一段是重复的回到最初就加大了搜索难度,所以引入一个next数组来记录子串,用于在指针返回的时候不用回到最开头。...

2022-07-30 18:00:34 127

原创 c++模板

每一个容器都有一个单一的定义,使用模板可以定义许多不同类型。type是占位符类型名称,可以在类被实例化的时候进行指定。

2022-07-30 14:29:35 202

原创 basename

函数dirname()和basename()将中断以null结尾的路径名字符串到目录和文件名组件中。在通常情况下,dirname()返回字符串,直到但不包括最后的“/”,和basename()返回最后一个“/”后面的组件。如果路径不包含斜杠,则dirname()返回字符串“”而basename()返回路径的副本。如果路径是字符串“/”,然后,dirname()和basename()都返回字符串“/”。连接由dirname()返回的字符串、一个“/”和字符串由basename()返回,生成完整的路径名。...

2022-07-24 17:11:56 250

原创 网络编程学习笔记

网络编程1、网络编程入门1.1网络编程概述计算机网络:是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程*在网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换1.2网络编程三要素IP地址*要想让网络中的计算机能够互相通信必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设

2021-07-10 11:01:35 119

原创 3、生产者消费者

3.1生产者消费者模式的概述生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻所谓生产者消费者问题,实际上主要是包含了两类线程:*一类是生产者线程用于生产数据*一类是消费者线程用于消费数据为了解耦生产者和消费者之间的关系,通常会采用共享的数据区域,就像是一个仓库*生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为*消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为为了体现生产和消费过程中的等待和唤醒

2021-07-07 16:03:18 113

原创 2、线程同步

买票案例 package com.it_06;/* 需求: 某电影院目前正在上映国产大片,共有100张票,而他有三个窗口买票请设计一个程序模拟该电影院买票 思路: 1、定义一个类SellTicket实现Runnable接口,里面定义一个成员变量:private int tickets = 100; 2、在SellTicket类中重写run()方法实现买票,代码步骤如下 A:判断票数大于0,就买票,并告知是那个

2021-07-07 15:58:09 110

空空如也

空空如也

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

TA关注的人

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