自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程管理(超级详细!)

程序段、数据段、PCB三部分组成了进程实体(进程映像我们一般把进程实体简称为进程。PCB是进程存在的唯一标志如:创建进程,是创建进程实体中的PCB;撤销实体是撤销PCB。从不同的角度,进程可以有不同的定义:1.进程是程序的一次执行过程2.进程是一个程序及其数据在处理机上顺序执行时所发生的活动。3.进程是具有独立功能的程序在数据集合上运行的过程(强调“动态性”它是系统进行资源分配和调度的一个独立单位。

2024-04-09 18:03:33 569

原创 手写mini-HashMap

在本节中,我们将深入研究手写的HashMap实现,名为MyHashMap。我们将逐步解释其结构和工作原理,并对关键方法进行讲解。Node类用于表示链表节点,存储键、值、哈希码,以及指向下一个节点的引用。int hash;K key;V value;Node next;// 构造方法和toString方法在本节中,我们深入了解了MyHashMap的实现。我们介绍了其基本结构、put和get方法的实现,以及特殊情况下的处理。

2024-03-06 10:16:17 945

原创 还迷糊事务的并发问题以及隔离级别?

MySQL 服务端是允许多个客户端连接的,这意味着 MySQL 会出现同时处理多个事务的情况。那么。因为A回滚, B读取的内容出现问题因为B修改后提交事务, A读取的内容出现问题解决了不可重复读问题之后,前后读的内容一样,导致在别的事务提交修改后,出现幻读。

2024-02-20 10:42:36 440

原创 JVM常见问题笔记分享

难易程度:☆☆☆出现频率:☆☆☆☆程序计数器:线程私有的(每一个线程内部都有一个程序计数器),内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。javap -verbose xx.class 打印堆栈大小,局部变量的数量和方法的参数。java虚拟机对于多线程是通过线程轮流切换并且分配线程执行时间。在任何的一个时间点上,一个处理器只会处理执行一个线程,如果当前被执行的这个线程它所分配的执行时间用完了【挂起】。处理器会切换到另外的一个线程上来进行执行。

2024-02-17 16:48:04 1393

原创 爱上JVM——常见问题(一):JVM组成

难易程度:☆☆☆出现频率:☆☆☆☆程序计数器:线程私有的(每一个线程内部都有一个程序计数器),内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。javap -verbose xx.class 打印堆栈大小,局部变量的数量和方法的参数。java虚拟机对于多线程是通过线程轮流切换并且分配线程执行时间。在任何的一个时间点上,一个处理器只会处理执行一个线程,如果当前被执行的这个线程它所分配的执行时间用完了【挂起】。处理器会切换到另外的一个线程上来进行执行。

2024-02-15 23:43:14 1206

原创 泛型在项目中不怎么用?这次结合实战!

泛型在项目中用的确实相对没有那么多,但是也可以提供一些便捷,本文先从基础介绍,然后在文章最后讲解项目实战中的一些使用,超级详细!

2024-02-14 22:27:24 908

原创 爱上算法:每日算法(24-2月5号)

🌟坚持每日刷算法,😃将其变为习惯🤛让我们一起坚持吧💪。

2024-02-05 23:18:16 568

原创 爱上JUC: 面试常考题大总结(线程安全篇)

全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架,它是构建锁或者其他同步组件的基础框架。

2024-02-05 22:45:22 841

原创 爱上算法:每日算法(24-2月3号)

🌟坚持每日刷算法,😃将其变为习惯🤛让我们一起坚持吧💪。

2024-02-03 23:15:50 296

原创 爱上算法:每日算法(24-2月2号)

🌟坚持每日刷算法,将其变为习惯🤛。

2024-02-02 20:08:38 194

原创 爱上JVM(二): JVM垃圾回收笔记分享(附参考学习视频!)

调用以后,该对象就可以被垃圾回收了。在CMS的并发标记和并发清理阶段, 用户线程是还在继续运行的, 程序在运行自然就还会伴随有新的垃圾对象不断产生, 但这一部分垃圾对象是出现在标记过程结束以后, CMS无法在当次收集中处理掉它们, 只好留待下一次垃圾收集时再清理掉。如果当用户需要存入一个很大的对象时,新生代放不下去,老年代由于浮动垃圾过多,就会退化为 serial Old 收集器,将老年代垃圾进行标记-整理,很耗费时间,本来是响应优先的垃圾回收器,响应时间变得更长了,这也是CMS存在的问题。

2024-01-30 10:58:47 1140

原创 爱上JVM(一):JVM内存结构学习笔记分享

垃圾回收是否涉及栈内存?不涉及,因为方法执行完之后,对应的栈帧就会自己弹出回收,并没有进行垃圾回收机制。垃圾回收一般是对堆内存的处理栈分配内存越大越好嘛?并不是,因为内存是固定的,帧分配内存的增多,也代表着线程占有的内存就减少,线程数量减少,也会减少一定的性能。方法内的局部变量是否线程安全?需要看变量是否是线程共享的。还要看是否逃离方法作用范围。//限制限制:-Xms 规定的空间大小方法区是各个线程共享。

2024-01-26 23:54:13 1078

原创 MySQL索引

索引是帮助MySQL高效获取数据的数据结构(有序)没有索引查询是这样的: 全表扫描MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点 的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能,利于排序。通过hash算法, 将键值映射为新的值 = >映射到对应的槽位上=> 然后存储在Hash表中特点A. Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,< ,…)B. 无法利用索引完成排序操作C. 查询效率

2023-10-22 16:07:46 40

原创 TypeScript知识点

【代码】TypeScript知识点。

2023-10-14 23:15:43 38

原创 算法60天训练–10-04-day25

回溯是递归的副产品,只要有递归就会有回溯,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯算法能解决如下问题:组合问题题目链接: https://leetcode.cn/problems/combinations/description/通过列举10086层搜索的过程:for循环横向遍历,递归纵向遍历,回溯不断调整结果集,这个理念贯穿整个回溯法系列可以通过思考在哪一步不需要继续往下遍历了. 然后进行剪枝优化剪枝精髓是:for循环在寻找起点的时候要有一个范围,如果这个起

2023-10-08 00:55:48 43

原创 算法60天训练–10-04-day25

因为同一树层,used[i - 1] == false 才能表示,当前取的 candidates[i] 是从 candidates[i - 1] 回溯而来的。对于sum已经大于target的情况,其实是依然进入了下一层递归,只是下一层递归结束判断的时候,会判断sum > target的话就返回。组合问题可以抽象为树形结构,那么“使用过”在这个树形结构上是有两个维度的,一个维度是同一树枝上使用过,一个维度是同一树层上使用过。回看一下题目,元素在同一个组合内是可以重复的,怎么重复都没事,但两个组合不能相同。

2023-10-04 23:16:30 48

原创 算法60天训练–10-03-day24

思考这段代码的时候,暂时不要去考虑backtracking里面的过程,直接到。补充一下: 回溯算法递归的参数很难一次确定,需要用到什么参数,填什么参数。,然后进行下一层for循环,这两个相当于是清理战场了,然后换一个。跟组合一样,遍历到第k层其实就已经将树的深度遍历完了。层呢,for循环是并不可能的. 这是和。多了一个判断找出的集合之和等于n的判断。每一层都是遍历的数都是上一层的数。了,那么也没有必要继续往下遍历了。,因为集合中不能出现重复的数。本题一眼看可以暴力,因为如果。, 或者定义一个二维数组,

2023-10-03 19:42:43 66

原创 算法60天训练–10-02-day23

path数组的大小等于k时,找到了一个子集大小为k的组合,在path存的就是根节点到叶子结点的路径。​ 当n = 9, k = 9, 那么 起始从2开始到9也不到9个数,对于一个集合,相当于是递归树的宽度,而k相当于是递归的深度。n, 集合大小. k 组合集合的大小(树的深度)递归来做层叠嵌套(可以理解是开k层for循环),回溯法虽然是暴力搜索,但有时候也是可以剪枝优化的。比如1,2,3,4下一层就要从2开始。就直接可以用两层for循环可以解决。for循环, => 横向遍历集合。

2023-10-02 16:29:15 53

原创 算法60天训练–9-21-day16

对于求深度,和求高度.都可以用后序遍历,因为一个二叉树的最大深度和最大的高度是相等的。可以使用递归,即递归的求左右两节点的长度, 并将左右两节点的长度取最大值.但因为是一个完全二叉树,根据完全二叉树的性质,我们又可以采用另一种方法。比较容易想到的就是后序遍历,做法跟前两道是一样的.求最大深度, 首先可以想到,前序遍历和后序遍历。因为当在根结点有空的子节点的时候就会出现错误。类似,但还是有很多细节的区别的。那么如何求最大深度呢?

2023-09-24 19:49:21 41

原创 算法60天训练–9-19-day14

int value;

2023-09-20 00:26:42 29

原创 算法60天训练–9-18-day13

因为要求滑动窗口中的最大值,

2023-09-19 01:09:48 29

原创 算法60天训练–9-15-day10

时间复杂度: push和empty为O(1), pop和peek为O(n)而栈是先进后出,而如果想用栈实现队列,就可以尝试用两个栈。满足先进后出的方法就是;入队列之后,就将这个数放到队首。首先应该先明确队列是先进先出,因此,可以使用两个队列来实现栈。空间复杂度: O(n)队列是先进先出原则,

2023-09-17 18:53:00 42

原创 Cookie和Session区别

每次用户进行操作时,服务器使用Session ID(通常存储在Cookie中)来查找并还原用户的购物车内容,而用户无法直接修改Session数据,因为它们位于服务器上,更加安全。:当用户登录后,服务器可以创建一个包含用户ID和购物车内容的Cookie,并在用户的浏览器中存储。每次用户浏览不同商品或查看购物车时,浏览器都会自动将Cookie信息发送到服务器,服务器通过Cookie中的用户ID来识别用户,并获取购物车内容。然而,由于Cookie易于修改,用户可能尝试篡改购物车中的商品数量。

2023-09-17 00:22:16 32

原创 算法60天训练–9-11-day6

第四步:否则继续向下判断:在set中是否出现过,如果出现过,说明这个数永远不能到1, 即不是一个快乐数. 如果没出现过,那么就将这个和。当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。第二步: 然后再while(true)中无限循环,先求出一个数各单数平方的和相加。因为本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,简单的两层for循环,同时记录字符是否重复出现,很明显时间复杂度是。这样就将字符串s中字符出现的次数,统计出来了。

2023-09-14 22:37:23 49

原创 算法60天训练–9-13-day8

这是因为,这一步边界的判断是为了操作最后剩余的数,事实上,在for循环里,循环条件便是i < ch.length,所以到最后一步后,操作是统一的,都是。可以定义两个指针,从新数组最后往前遍历,和从老数组后往前遍历,这样可以省去从前往后每次遇到空格需要挪动数组的操作。个字符,所以可以定义一个指针 i ,来从起点,以2k的长度来遍历,数组的长度是需要扩大的,可以在原数组增大,或者创建一个新的数组。在遍历的同时,需要判断此时的位置是否超出字符串的长度。定义两个指针,分别初始化为指向左端点和指向右端点,

2023-09-14 01:11:16 78 1

原创 算法60天训练–9-9-day4

让index1和index2同时移动,每次移动一个节点, 那么他们相遇的地方就是 环形入口的节点。让fast先移动n位,然后再往后移动一位,之后和slow一起移动,直到fast指向为空。注意这里n一定是大于等于1的,因为 fast指针至少要多走一圈才能相遇slow指针。n为fast指针在环内走了n圈才遇到slow指针, (y+z)为 一圈内节点的个数A。也就是在相遇节点处,定义一个指针index1,在头结点处定一个指针index2。因为y+z是一圈,所以, 可将(n - 1) (y + z)看作0,

2023-09-13 00:35:55 74 1

原创 算法60天训练–9-6-day1

以right == left(两边顶点)为终止条件,根据左闭又开或左闭右闭来调整每一轮循环之后right和left两边端点的位置.始终将target在端点之间,直到right = left.,很满足二分法的使用条件,所以使用二分法来解决这道题,同时二分有两种情况,一种是左闭右闭,一种是左闭右开,而这两种情况在代码的形式上是不一样的.,如此循环,直到最右边,达到前面的等于2的元素被删除的目的.但是如果要减小时间复杂度,可以采用双指针解法。那么slow不动,fast向右移动,从题目中可以看出,数组中的元素是。

2023-09-10 15:54:06 92 1

原创 算法60天训练–9-8-day3

(画图有些不规范)

2023-09-10 02:04:31 66 1

原创 算法60天训练–9.7(day2)

是因为最后循环结束的时候StartX一定是在相对于第一条边中间的位置,那么循环了多少圈就可以由这个点对两边的竖边的条数进行分割.两边的条数一定是相等的,有就是转了多少圈.在数组两边定义两个指针,当左边的平方小于右边的平方,就往一个新数组放,放在最大索引处,然后左边++,同理,右边–.直到左边小于右边。本题无非就是遍历二维数组,一层层向里遍历,但是不统一规定遍历每一条边的边界,会非常的混乱。,在两边的平方要么是最大,要么是最小,一定是在两边,所以这时候可以用双指针,两层for循环,比较简单,不做演示。

2023-09-07 22:23:11 255

原创 算法60天训练:9.6 day1(数组)----二分查找

Problem: 704. 二分查找文章目录思路解题方法复杂度Code[JAVA]Code[C++]思路从题目中可以看出,数组中的元素是有序的,而且是不重复的,很满足二分法的使用条件,所以使用二分法来解决这道题,同时二分有两种情况,一种是左闭右闭,一种是左闭右开,而这两种情况在代码的形式上是不一样的.解题方法以right == left(两边顶点)为终止条件,根据左闭又开或左闭右闭来调整每一轮循环之后right和left两边端点的位置.始终将target在端点之间,直到right = l

2023-09-07 09:40:39 44

原创 拦截器Interceptor

实现HandlerInterceptor接口,并重写其所有方法//自定义拦截器@Component//目标资源方法执行前执行。返回true:放行 返回false:不放行@Override//true表示放行//目标资源方法执行后执行@Override//视图渲染完毕后执行,最后执行@Override注意: preHandle方法:目标资源方法执行前执行。

2023-08-26 18:20:32 68

原创 JWT令牌详解

---title: JWT令牌详解date: 2023-08-26 15:21:01tags:- 后端categories:- JAVA---

2023-08-26 15:44:55 342

原创 java动态代理

如果在一个类对象上方法太多,可以通过代理来减轻自己的负担,就比如黑马阿玮PPT的一张图对于代理如何知道对象的方法.可以让对象和代理都实现一个接口来达成目的代理可以无侵入式的给对象增加其他的共能调用者 -> 代理 -> 对象就是对象要被代理的方法通过接口保证,后面的对象和代理需要实现同一个接口,接口中就是要被代理的方法。

2023-08-09 19:52:42 48 1

原创 力扣:删除倒数第n个结点

---title: 删除倒数第n个结点date: 2023-08-08 23:40:39tags:- 链表- 双指针categories:- 算法---

2023-08-08 23:48:32 35

原创 力扣:反转链表

Problem: 206. 反转链表文章目录思路解题方法复杂度CodeCode思路双指针算法,定义pre,和cur,来遍历链表.然后进行反转解题方法定义一个temp记录cur->next的位置,当反转通过cur->next=pre来完成,所以之后pre = cur, cur=tmep(向后移动),直到cur为空,即达到遍历完成的效果复杂度时间复杂度:O(n)O(n)O(n)空间复杂度:O(n)O(n)O(n)Code/** * Defin

2023-08-06 20:59:27 24

原创 报错信息“Unable to resolve column ‘id’” ​

报错信息“Unable to resolve column ‘id’”​

2023-08-05 19:45:41 638 1

原创 什么是主键?

---title: 主键date: 2023-08-05 15:33:48tags:- 主键categories:- MySql---

2023-08-05 16:09:50 196 1

原创 力扣:移除链表元素

Problem: 203. 移除链表元素文章目录思路解题方法复杂度Code(java)Code(C++)思路遍历链表,如果相等,需要删除的元素的左边节点指向删除元素的右边节点.如果删除的是表头元素,为了统一,建立一个虚拟头结点解题方法定义一个虚拟头结点dummyHead,和遍历需要的指针cur,进入循环,遍历链表元素,如果相等就将删除的元素的左边节点指向删除元素的右边节点.如果删除的是表头元素,为了统一,建立一个虚拟头结点.直到cur->next != null.因为cur =

2023-08-04 22:53:30 72 1

原创 螺旋矩阵||

Problem: 59. 螺旋矩阵 II文章目录思路解题方法复杂度Code思路本体采用循环不变量,对于判断每次螺旋的边界麻烦,不妨都采取左闭又开的原则解题方法第一个不太好理解的地方就是为什么循环n/2圈?是因为最后循环结束的时候StartX一定是在相对于第一条边中间的位置,那么循环了多少圈就可以由这个点对两边的竖边的条数进行分割.两边的条数一定是相等的,有就是转了多少圈.第二个地方就是左开右闭,每到一个节点就进入下一个边的循环.在每个圈数结束后,更新起点,横纵坐标都加一.startX

2023-08-04 00:01:40 35 1

原创 Vue3全家桶(学习笔记)

---title: Vue3date: 2023-07-30 23:10:20tags:- Vue3categories:- 前端---

2023-08-03 16:39:46 77

空空如也

空空如也

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

TA关注的人

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