自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 遗漏知识点

RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。通过构造函数获取资源,通过析构函数释放资源。 进程简说:进程就是程序的一次执行。弄懂“进程”(上):3个组成部分、4个基本特征、

2024-07-05 22:54:40 441

原创 raft111

为什么选举超时的时候需要上锁,如果不上锁会怎么样?为什么选举时间未到 线程进入睡眠状态 为什么是线程?线程具体是什么。。。。。选举的时候为什么要上锁?会有别的线程干扰他选举吗是因为多个raft使用的是一个全局变量所以才加锁的吗 怎么模拟多个raft的选举的时候为什么也要加锁 保护的是什么变量 是防止多个raft一起选举导致变量冲突??我知道m_nextIndex是leader下次同步日志的时候需要从哪个日志开始发送但是这个for循环没理解啥意思。

2024-07-03 00:55:34 407

原创 排序算法。

选标准值,将比标准值小的放在其左侧,将比标准值大的放在其右侧,左右两部分分别重复以上操作1.挖坑填补法拆东墙补西墙先把第一个数拿出来用temp储存 然后从最后面遍历 找到比temp小的放到第一个位置 然后再从前面第二个开始遍历找比temp大的放在后面的空位上 重复操作 直到end和begin在一块 然后再在temp两边分别重复操作2.区间分割法small指向begin-1 begin从前向后遍历 遇见比end小的 就交换small+1与begin 最终将小于10的全放在一边。

2024-06-24 20:12:42 468

原创 111111

mmap主要用来做内存映射的,可以将虚拟内存和磁盘上的文件直接映射。共享映射中有一种机制叫做sync同步机制,对一端的修改会实时同步到另一端,这也是通过文件共享映射实现进程通信的基础。9.1 什么是零拷贝? | 小林coding (xiaolincoding.com)

2024-05-16 22:39:01 129

原创 238. 除自身以外数组的乘积 54. 螺旋矩阵

【代码】238. 除自身以外数组的乘积 54. 螺旋矩阵。

2024-05-12 21:48:10 209

原创 线程池复习

线程池线程都是后台线程。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务呢?

2024-05-08 16:24:02 270

原创 283. 移动零 11. 盛最多水的容器 3. 无重复字符的最长子串 560. 和为 K 的子数组

计算两个边的盛水量并更新数值。双指针一个在头 一个在尾部。左右两边 哪边矮就移动哪边。把非零的数全交换到前面去。

2024-05-01 16:57:25 112

原创 49. 字母异位词分组 128. 最长连续序列

然后接着找集合里面有没有比这个元素大1的 while一直找。如果没有 说明这个元素就是序列的第一个元素。把集合里面的所有元素都放入set容器里面。先判断集合里面有没有比这个元素小1的。定义结果最大连续数量 ans。ans保存最大子序列差长度。for循环遍历每个元素。

2024-04-30 22:38:12 79

原创 STL复习

映射,相当于字典,把⼀个值映射成另⼀个值,可以创建字典。:⽤来判断某⼀个元素是不是在⼀个组⾥⾯。

2024-04-27 18:15:35 317

原创 搜索二维矩阵2 合并两个有序链表

【代码】搜索二维矩阵2。

2024-04-07 21:43:22 250

原创 操作系统复习

电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽,为了解决这个问题,Windows 运用了虚拟内存技术。如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会冲突了。内存(memory)资源永远都是稀缺的,当越来越多的进程需要越来越来内存时,某些进程会因为得不到内存而无法运行;内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存,而实际上,

2024-04-07 21:01:49 162

原创 回文子串 每日温度 接雨水

用result记录一下 把栈顶元素pop掉 while继续与下一个栈顶元素比较。因为要接雨水 要在左边和右边选一个矮的高度再减去槽底的高度 就是雨水的高。然后把栈顶pop出去 新的栈顶就是槽的左边 现在的i是槽的右边。如果等于栈顶元素 把之前的数pop出去 新的数push进来。如果这个数小于等于栈顶元素 就把这个数的下表放进栈。如果大于栈顶元素 说明找到凹槽了 可以接雨水了。就说明这个元素是第一个比栈顶元素大的数。槽的右边减去槽的左边再减1就是槽的宽度。先把第一个元素的下标放进栈。如果这个数大于栈顶元素。

2024-03-24 19:46:41 443

原创 网络瞎复习

应用进程。

2024-03-22 14:36:11 103

原创 最长递增子序列,最长。。。

dp[i][j] :以下标i 为结尾的A,和以下标j 为结尾的B,最长重复子数组长度为dp[i][j]。如果nums【i】=nums【j】那么 dp[i][j] = dp[i-1][j-1] +1。nums【i】的可以拼接到dp【j】上形成一个新的递增子序列,长度加一。dp[i][j]是以他的左上角dp[i-1][j-1]推倒出来的。nums[i]与nums[j]比较。i每到一个新的位置 j都会从头开始。如果nums[i]>nums[j]因为nums[i]>nums[j]

2024-03-21 20:33:39 302

原创 买卖股票的最佳时机1,2,3

max(和前一天一样已经持有了第二张股票,在前一天已经的卖出第一张股票的基础上买入第二张股票)max(和前一天一样已经卖出了第一支股票了,在前一天持有第一支股票的基础上卖出这只股票)max(和前一天一样已经持有了第一张股票,在前一天不操作的基础上今天买入股票)解决方法不同的就是 如果第i天买入股票的时候 价值是i-1天不持有股票的钱数加上这只股票的价值。第i天持有股票:两种情况 第一种是昨天就已经持有股票了 所以跟昨天一样就好。初始化:第0天持有股票 第0天不持有股票。4 表示第二次不持有股票。

2024-03-20 14:48:16 496

原创 分割等和子集 最后一块石头的重量II 目标和

力扣题目链接(opens new window)那么分成两堆石头,一堆石头的总重量是dp[target],另一堆就是sum - dp[target]。在计算target的时候,target = sum / 2 因为是向下取整,所以sum - dp[target] 一定是大于等于dp[target]的。那么相撞之后剩下的最小石头重量就是 (sum - dp[target]) - dp[target]。public:i++) { // 遍历物品j--) { // 遍历背包。

2024-03-16 02:07:24 840

原创 不同的二叉搜索树 01背包

举例,n 为 7,那么当头结点是 5 的时候,将 1,2,3,4,6,7 这几个数字放进去,根据二叉搜索树定义,左子树小右子树大,那么 1,2,3,4只能在左子树,6,7在右子树中,也就是说 左子树由四个数构成一颗二叉搜索树,右子树有两个数构成一颗二叉搜索树,这里右子树的 6,7 可以看成 1,2,因为把头结点 5 不看的话,1,2 构成的二叉搜索树和 6,7 构成的二叉搜索树的个数是一样的。在一维dp数组中,dp[j]表示:容量为j的背包,所背的物品价值可以最大为dp[j]。去练习,题意是一样的。

2024-03-12 18:18:36 543

原创 不同路径 不同路径 II 整数拆分

此时在回顾一下 dp[i - 1][j] 表示啥,是从(0, 0)的位置到(i - 1, j)有几条路径,dp[i][j - 1]同理。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。可以想 dp[i]最大乘积是怎么得到的呢?

2024-03-10 21:41:49 847

原创 斐波那契数 爬楼梯 使用最小花费爬楼梯

力扣题目链接(opens new window)斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n) 。状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];n+1:0-n有n+1个数字只需要维护数组的两个数即可,不用维护整个数组: 力扣题目链接(ope

2024-03-09 13:39:11 672

原创 划分字母区间 合并区间 单调递增的数字

我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x

2024-03-08 14:12:49 366

原创 根据身高重建队列 用最少数量的箭引爆气球 无重叠区间

在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]

2024-03-06 11:45:30 877

原创 K次取反后最大化的数组和 加油站 分发糖果 柠檬水找零

给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。题意在下标2的加油站会给你2的油量 去到三会消耗8的油量并加上3的油量。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

2024-03-05 22:07:46 934

原创 贪心:分发饼干 最大子序和 买卖股票的最佳时机 II 跳跃游戏 跳跃游戏 II

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。

2024-03-03 23:38:12 412

原创 全排列 全排列 II N皇后

递归终止条件:当收集元素的数组path的大小达到和nums数组一样大的时候,说明找到了一个全排列,也表示到达了叶子节点。先排序,树层去重,123,132可以出现所以不用index,一次排列用过的元素不能再用了 所以设置used数组。(1)确定参数及返回值:返回类型为void型,参数n为棋盘大小,row记录到第几层。给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。(2)返回条件:当遍历到棋盘的最后一层,就可以收集结果并返回。

2024-03-01 21:54:18 479

原创 分割回文串 复原IP地址 子集 递增子序列

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]

2024-02-29 19:14:55 303

原创 Mysql锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。MySQL全局锁:锁定数据库中的所有表。表级锁:每次操作锁住整张表。行级锁:每次操作锁住对应的行数据。

2024-02-25 16:41:19 1844

原创 Mysql索引

索引是帮助 MySQL的。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。

2024-02-24 20:30:11 828

原创 Mysql存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎。默认存储引擎是InnoDB。InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB 是默认的 MySQL 引擎。

2024-02-23 11:57:53 423

原创 数据库事物复习

幻读:事物A查询id为3的数据发现没有,此时事物B插入了id为3的数据并commit提交了,事物A插入id为3的数据发现数据已经存在,但是再次查询的时候还是没有这个数据,出现了幻觉。比如说将张三的银行账户拿出一千给李四,首先需要查询张三的账户余额,扣除1000,然后如果给李四加上1000的过程中出现异常会回滚事务,临时修改的数据会回复回去。不可重复读:事物A先查询一遍数据,事物B把数据更改了并commit提交事物了,事物A再查询,发现数据更改了。一致性的理解,执行完程序后张三和李四的余额之和是不变的。

2024-02-22 21:03:44 443

原创 数据库增删改查

表操作创建表: 例: 例:修改字段名和字段类型:例:将emp表的nickname字段修改为username,类型为varchar(30)删除字段:修改表名:删除表:删除表,并重新创建该表,重新创建的是一个空表指定字段:全部字段:批量添加数据:修改数据:例: 删除数据: 基础查询查询多个字段:设置别名:去除重复记录:例:聚合函数 whe

2024-02-22 13:01:53 2844

原创 设计模式复习

确保一个类最多只有一个实例,并提供一个全局访问点。

2024-02-18 20:49:40 816

原创 IO多路复用机制——select、poll、epoll的原理和区别

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。问题:如果我们先前创建的几个进程承载不了目前快速发展的业务的话,是不是还得增加进程数?我们都知道系统创建进程是需要消耗大量资源的,所以这样就会导致系统资源不足的情况。那么有没有一种方式可以让一个进程同时为多个客户端端提供服务?

2024-02-01 20:28:00 2037

原创 套接字小结

接收客户端的连接,第二个参数客户端的网络结构体,accept成功后可以通过第二个参数,获取客户端的ip。hton: host to net //主机 -> 网络 小端转大端。1、定义sockaddr_in结构体 并对里面的成员进行初始化。sin_family IPV4还是IPV6。ip是代表哪个主机,端口号是主机里面的某个进程。把刚才定义的 结构体 与 套接字 绑定。sin_port 端口号。3、将IP与端口号绑定。

2024-01-29 21:19:32 162

原创 Linux线程相关复习

pthread_create的第二个参数就是线程属性,传入NULL代表默认系统给出的线程属性线程属性是一个结构体,用法为 pthread_attr_t 变量名线程属性结构体中的成员分别有:线程的警戒缓冲区、线程的优先级指针、线程的退出状态、线程栈地址、线程栈大小步骤:1.定义线程属性2.初始属性(默认)3.修改属性4.创建线程并使用自定义属性 pthread(&tid,&attr用到的函数:int main()//1.初始化线程属性//2.检测线程属性中的线程退出状态。

2024-01-29 11:20:57 890

原创 智能指针简单总结

C++标准库提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr 和weak_ptr使用智能指针的目的是为了更安全,更容易的管理动态内存。在c++中,动态内存的管理式通过一对运算符来完成的:new,在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象进行初始化;delete,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。动态内存的使用很容易出现问题,因为确保在正确的时间释放内存是极其困难的。有时使用完对象后,忘记释放内存,的问题。

2024-01-25 14:03:37 885

原创 Linux进程相关复习

子进程退出后,资源没有释放完毕,PCB残留,这时的子进程称为僵尸进程,结果为内存泄漏,系统内所有进程结束后都会变成僵尸进程

2024-01-23 15:45:00 866

原创 static复习

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员静态成员分为:静态成员变量所有对象共享同一份数据在编译阶段分配内存类内声明,类外初始化静态成员函数所有对象共享同一个函数静态成员函数只能访问静态成员变量普通成员函数隐含this指针在第一个参数,它指向对象本身,因而可以访问对象的成员;定义静态局部变量和静态全局变量创建时可以不给初值,默认初始值为0成员函数可以定义在类内部,也可以在外部定义(在外部定义时不能加static关键字)

2024-01-20 14:45:10 393

原创 const复习

成员函数后加const后我们称为这个函数为常函数内不可以修改成员属性成员属性声明时加关键字mutable后,在常函数中依然可以修改声明对象前加const称该对象为常对象常对象只能调用常函数。

2024-01-20 10:45:09 344

原创 拷贝构造复习笔记

个人理解拷贝构造 :就是构造函数里面接收的参数是另一个已经创建完毕的对象Person(const Person& p),然后把另一个对象里面的值复制到自己的对象里面,自己不写系统也会默认提供此函数。因为p1和p2里面的 int* m_Height指针指向的是同一块堆区的空间,当执行到析构函数释放内存的时候会把同一块空间释放两次 此时系统就会报错。p2类会把p1类里面的东西照搬到自己的类里面 包括p1类里面指向堆区的指针int* m_Height。深拷贝:在堆区重新申请空间,进行拷贝操作。

2024-01-19 14:59:20 428

原创 多态复习笔记 虚函数

​ 多态的概念:通俗来说,就是多种形态,具体点就是基类动物类里有一个speak函数,函数前面加了virtua成了虚函数,子类猫和狗都继承了动物类并对speak函数进行了重写(子类和父类中的虚函数拥有相同的名字,返回值,参数列表)。父类的指针或者引用指向子类:会产生不同的效果,就构成了多态多态满足条件有继承关系子类重写父类中的虚函数多态使用条件父类指针或引用指向子类对象重写:函数返回值类型 函数名 参数列表 完全一致称为重写。

2024-01-14 14:40:04 950

空空如也

空空如也

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

TA关注的人

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