自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计网(部分在session学习章)

TCP:面向连接,先三次握手建立连接,可靠传输。UDP:无连接,不可靠,传递的快。

2024-05-21 21:24:28 514

原创 【mysql】锁+引擎+日志

我们看到,在RR隔离级别下,只是在事务中第一次快照读时生成ReadView,后续都是复用该ReadView,那么既然ReadView都一样, ReadView的版本链匹配规则也一样, 那么最终快照读返回的结果也是一样的。其中的原子性、一致性、持久化,实际上是由InnoDB中的两份日志来保证的,一份是redo log日志,一份是undo log日志。区,表空间的单元结构,每个区的大小为1M。简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。

2024-05-16 18:22:00 896

原创 session

session

2024-05-14 15:39:40 908

原创 spring中常用注解

spring

2024-05-12 18:52:42 248

原创 并发问题系统学习

并发面试问题系统梳理

2024-05-09 00:30:53 906

原创 黑马点评项目总结及个人优化

黑马点评学习及个人优化

2024-05-07 17:32:58 868 1

原创 redis原生命令及项目使用

redis

2024-05-07 14:45:23 221

原创 IDEA中 @SpringBootApplication 多个注解无法引入依赖

已解决

2024-02-27 11:35:37 321 1

原创 【leetcode刷题】51.N皇后+37.解数独【附代码】

也就是说在我们的回溯方法部分,跟前面的排列组合问题存在区别。我们需要用row控制纵向的深入,同时用col控制横向延申。同时在叶子节点处收集结果。同时从这个回溯逻辑部分,回顾之前排列组合中回溯逻辑,会发现其实这里的col可以帮助去更好的理解前面的回溯到底是写i+1还是i。这道题的难点在于读懂题意。可以看到列举的过程也就是纵向深入和横向延申的过程其实可以分开来控制。2.判断是否满足皇后要求。

2024-02-21 15:03:54 357 1

原创 【leetcode刷题】 93.复原IP地址单层逻辑特殊点总结

这个跟131分割回文串比较类似,但是这里的回溯过程需要注意两个事项,一个是横向深入时要考虑到原字符串中加入“.”所以计数的idx从i+2开始。纵向回退时要把用来控制结束时机的pointnum减掉1,再把这时已经加入了“.”的字符串去掉“.”。判断合法过程可以做模板多写+记忆。

2024-02-20 16:25:24 162

原创 [leetcode刷题] 组合

1.通常情况下返回值都是void,参数的话根据实际需求设计,如果设置了全局变量那输入参数就可以少写几个,如果没有写全局变量输入参数就需要多写几个,一般就是存储结果的res,存放每条路径元素的path,然后如果要求和就要再加上sum,目标对比的target,基本就是这些。3.单层逻辑,这部分我觉得主要分成两个模块,一个是往path中添加元素,也就是深度上的遍历,或者说树枝的遍历,另外一部分是横向上的遍历,也就是往res中添加元素。总之就是当前的path中的元素满足条件了,就执行res.add的操作。

2024-02-16 13:16:25 313 1

原创 【二叉树8】二叉树的最近公共祖先

记这道题的思路

2024-02-02 23:06:56 118

原创 【二叉树7】最大二叉树+二叉搜索树相关题目【附代码】

二叉搜索树:根节点比左子树的值都大,根节点比右子树的值都小。验证二叉搜索树:中序遍历可以得到有序数组。元素单调递增。中序遍历过程复习

2024-01-28 18:32:27 364

原创 【二叉树6】二叉树所有路径+路经总和【力扣刷题】【附代码】

我觉得这个思路更好理解一些,new一个队列,存储节点以及根到该节点的路径。一开始这个队列里只有根节点。在每一步迭代中,我们取出队列中的首节点,如果它是叶子节点,则将它对应的路径加入到答案中。如果它不是叶子节点,则将它的所有孩子节点加入到队列的末尾。当队列为空时广度优先搜索结束,我们即能得到答案。

2024-01-26 15:42:53 234

原创 【二叉树5】二叉树深度+节点个数+平衡总结

求二叉树深度思路:我们知道求深度是从上往下的计算深度,或者从下往上计算高度,这里使用后续计算高度,也就是说根节点高度就是最大深度。而高度就是一层一层节点的高度的叠加。代码分析:这里对于左子树和右子树求高度容易理解,return是返回当前中节点高度,这就是为什么要用后序遍历求高度的原因。递归法和迭代法是两种不同的问题解决方法,它们之间的主要区别在于解决问题的方式和控制流结构。每次放入根节点的左右子节点就将depth+1,记录高度也就是深度。高度就像楼房,节点在几层楼,深度就像地下室,在地下几层。

2024-01-24 16:14:46 353

原创 【二叉树4】层序遍历

那么它的循环过程其实就是输入当前层的所有节点,每输入一个deep就作为计数器进行+1的过程,有几个check本层就应该有加了多少次deep,如果当前的reslist存储的元素的个数是小于deep的,就依次添加item,每个item都是一个节点的结构体。设计一个列表用来存放一整个层的节点reslist,再设计一个列表作为reslist的子列表,作为矩阵的行,当当前深度deep超过了reslist的大小时,子列表作为整体加入reslist。按照每一层的遍历输出,使用队列完成遍历。最终输出应该是二维数组。

2024-01-22 18:00:11 379

原创 【二叉树3】二叉树遍历-迭代法【附代码】

迭代法的思路是这样的,先把树的节点按照顺序放入栈,再pop出值并放入存放结果的数组中。但是因为栈的形式是先进后出,所以push入栈的顺序需要调换。

2024-01-22 11:26:51 328

原创 【二叉树2】递归遍历【附代码及分析】

写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。解读一下代码,首先是定义部分,在上一篇文章中解释了java中对left和right的理解,剩下部分就是构造函数的书写,记得复习,可能会有提问。剩下的就是在数组中添加下一个节点数据的过程,首先是根节点/中节点,然后是左节点,但是这里对左节点又做了一次传入前序遍历的过程,传入两个参数,根节点/中节点和存放结果的数组。

2024-01-21 21:38:31 356

原创 【二叉树1】基础知识学习笔记1【附代码】

2.完全二叉树,在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。BFS 的基本思想是从起始节点开始,先访问起始节点的所有邻居节点,然后逐层扩展,依次访问每一层的节点,直到遍历完所有节点。DFS 的基本思想是从起始节点开始,沿着一条路径一直深入到最后一个节点,然后回溯,再深入下一条路径,直到遍历完所有节点。3.二叉搜索树,节点有顺序,左子树所有节点小于中间节点,右边所有子树节点都大于中间节点。值,左指针,右指针,相当于定义一个链表。

2024-01-21 20:43:04 369

原创 [leetcode刷题】20.有效的括号【附代码】

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。每个右括号都有一个对应的相同类型的左括号。情况分析:如果跟我自己写代码的情况联系起来,就很容易理解这里的不匹配一共就3种情况,1.左边多了;3.括号个数对的上,但是有类型没对上的。第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配。第二种情况:遍历字符串匹配的过程中,栈已经为空了,说明右括号没有找到对应的左括号。第三种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。

2024-01-20 16:48:11 380

原创 [leetcode刷题】20.有效的括号【学习笔记】【附代码】

情况分析:如果跟我自己写代码的情况联系起来,就很容易理解这里的不匹配一共就3种情况,1.左边多了;有效字符串需满足:左括号必须用相同类型的右括号闭合。每个右括号都有一个对应的相同类型的左括号。第二种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号。第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配。题目分析:其实就是我们在写代码时候会提醒你表达式错误,括号不匹配的情况。第三种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。

2024-01-20 16:32:25 343

原创 【力扣刷题笔记】队列和栈方法和实现类总结【java】

1.栈和队列的方法。

2024-01-20 12:24:35 301

原创 【leetcode】刷题,KMP算法学习【学习笔记+代码实现】

然后保持着一个不变的思路,遇见冲突就找前一位,如果s[i]和s[j+1]不相等说明这两个位置就是不匹配,那么就要寻找s[j]的next数组对应值,去s中找这个值对应下标的元素再继续循环遍历。后缀就是反向(也就是从右向左)的把当前字符串第一个元素去掉,然后剩下的元素按顺序排列组合的得到的几种可能。对照这张图,最长相等前后缀就是出现对称的位置这个意思,对称就意味着前后相同中间可能有区别,因为我们要对比模式串也就是子串在文本串出现的情况,这种情况下其实是减轻了遍历的复杂程度。,细节可以根据自己的习惯来写。

2024-01-18 19:05:01 537 1

原创 【基础总结】一些对于java基础语法的总结

主要用于解决字符串拼接时的性能问题。在 Java 中,字符串是不可变的,每次对字符串进行拼接、修改等操作都会生成一个新的字符串对象。由于字符串的不可变性,频繁的字符串操作可能会导致大量的对象创建和销毁,影响性能。是 Java 中的一个类,用于表示可变的字符串。它属于 Java 的。它允许在现有对象的基础上进行操作,而不是创建新的对象。是线程安全的,这意味着多个线程可以安全地同时访问和修改同一个。提供了许多方法用于字符串的拼接、插入、删除、替换等操作,例如。这是通过在每个公共方法上使用同步关键字实现的。

2024-01-17 17:58:44 349

原创 【kamacoder刷题】54. 替换数字(第八期模拟笔试)[包括一些常用方法总结,更新中】

题目描述:给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。这个题的思路很简单,但是需要对不同类的方法的要求比较高。

2024-01-17 16:54:27 352

原创 【力扣刷题】多数字相加习题方法总结

对于遍历过的元素我们可以记录在一个固定的位置,但要保证只出现一次,并且后续方便查找所以想到hashmap。那么我们知道map中存放的是键值对,要把谁当键谁当值就是关键问题。因为我们最终要返回下标,所以应该把下标当值,把元素的数值当键来寻找是否出现过。整数,并返回它们的数组下标。但是,数组中同一个元素在答案里不能重复出现。拆分完题目之后想思路:需要一个数组存储这两个下标,需要对当前元素和当前元素之前的数值做记录,并求和;需要满足同一元素只出现一次。条件:两个元素和为目标值/同一元素只出现一次。

2024-01-16 21:17:04 349 1

原创 【leetcode刷题】/349.两个数组的交集【附代码】

先想一下思路,如果是暴力解决是不是应该统计nums1有什么,nums2有什么,然后再对比,如果延续第242题有效字母的异位词解题思路好像也可行,所以就想到能不能把nums1中有什么统计下来,但要保证不重复,然后再一一拿出nums2的数组元素一一对比,如果一样就添加到一个新的set。这样输出的就是重复出现的数字并且不重复。对比之前关于set介绍文章中提到的方法,hashset适合本题。解题思路:这个看到唯一就想到我们前面的关于单列集合set:无序,不重复。输出结果中的每个元素一定是。题目描述:给定两个数组。

2024-01-16 16:58:32 362 1

原创 【单列集合set】(hashmap和hashset对比)

这里返回值出现boolean是因为set元素不重复。set是一个接口,继承于collection。3.linkedhashset,双链表存储。可以看到调用方法返回int。1.set基本概念和特点。

2024-01-16 15:09:00 385 1

原创 242.有效的字母异位词(解题思路内附代码)

也就是说两个字符串中要出现相同的字母相同的个数但位置没有要求。既然对于位置没有要求,那么解题的侧重点就该在于出现的字母有什么和出现几次这两个问题上。针对上述两个问题不难想到之前一篇学习笔记中提到的“键值对”思想,也就想到了本题的解题思路,哈希表。思路:先定义一个数组,用来存放一共有哪些字母,再依次统计每个字符串中字母出现的次数。1.出现的字母有什么。要分析出现的字母有什么我们不难想到根据ascII码来判断。2.每个出现的字母一共出现几次。要分析出现的次数我们要想到相同位置的叠加。,编写一个函数来判断。

2024-01-16 00:12:58 401 1

原创 双列集合(黑马学习笔记)

map

2024-01-15 16:55:53 312 1

原创 142.环形链表(学习笔记附代码)

思路:对于这道题可以从数学角度去理解,就是当成简单的追及相遇问题,a和b一个跑得快一个跑得慢的匀速运动,在环行路每次前进固定步数,中间不停顿,什么条件下一定能相遇?转化后的问题可以看到有三个关键点,匀速,固定,不停。总结:对于这种环形链表的问题,可以固定一个解题思路,1.快慢指针,2.快指针比慢指针每次多走一个next一直走就能找到相遇节点,相遇条件就是slow==fast,3.相差距离:这个可以列写公式,这个在代码随想录里有详细的动画解释,应该可以看的更清楚,如果后面忘记步骤可以返回看。

2024-01-11 11:07:39 310 1

原创 206.反转链表(双指针+递归)(附代码)

思路比较容易懂但是有一些细节,比如两个指针把谁赋值给谁。我是在链表里把循环前进的过程直接看成.next,就相当于做了一次++操作。这样就方便继续检查不出现空指针的问题。这个思路的话就是用两个指针或者说ListNode类型的数据来指向要反转方向的两个节点,直到前面的指针指向了null就停止。递归法思路其实和双指针是基本一样的,不过是整理成了一个新的私有的函数,这个函数可以取代上面类似于++的前进过程。

2024-01-10 18:06:06 400

原创 707.设计链表(附代码)

你可以选择使用单链表或者双链表,设计并实现自己的链表。的节点的值(查找);是指向下一个节点的指针/引用。如果是双向链表,则还需要属性。以指示链表中的上一个节点。假设链表中的所有节点下标从。题目解读:1.设计链表,单双都可;

2024-01-10 16:31:00 371

原创 关于链表(代码随想录学习笔记)

解题思路:对于单向链表元素的删除其实理解起来并不难,无非就是理解透上面1中提到的对链表的定义,既然单向我们要删掉一个元素就是让他的前一个元素的指针指向被删除的元素指向的对象,但就是写起来稍微麻烦一点,对于目前刚上手链表会需要一些时间理解。//设计新的头节点,-1就是链表构造函数中的输入的val,head是原始头节点(这块让我想了好久刚开始真的迷不过来head的类型)//如果当前节点就是要找的节点,虚拟头节点指向cur节点的下一个节点,也就是找出要删除节点里存放的next,把它放进虚拟头节点里。

2024-01-09 21:34:50 381

原创 209.长度最小的子数组

对于和满足大于等于s好解决,终止位置往前走一次,设定sum值再加一位的nums【终止】,判断大小即可,至于长度最小的问题,首先要明确,如果和大于等于s了我们就要开始缩小窗口,也就是起点前进,再看满足条件与否,因此我们应该把窗口长度初始设置最大,然后逐渐减小到满足条件的最小子数组长度。首先我们要明确一件事,这里的滑动窗口长度是可变的,既然可变就需要有起始位置来设置窗口。示例:输入:s = 7, nums = [2,3,1,2,4,3],输出:2,解释:子数组 [4,3] 是该条件下的长度最小的子数组。

2024-01-09 15:21:05 598

原创 367.有效的完全平方数

1.二分法:这个题要说二分查找的思路还是很容易理解,因为题目中说给定的是一个整数,整数开方必然还是正数,而且这个正整数还必然存在于1~num之间,很容易就想到切两段,在哪个范围内就换端点继续切两端的这么找,因为要循环下去的直到找到目标值,所以想到while,因为while只需要一个必须满足的条件就会一直执行下去,for的话更侧重于有序的推进某个过程,用我的理解的话一个是围起来个圈,一个是给一条线拉着走这样。是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。

2024-01-08 22:48:28 349 1

原创 80. 删除有序数组中的重复项 II(双指针简单应用)

但是这里快慢指针从2开始,因为是在原始数组上修改,不另外添加新的数组,直接从第3个元素开始判断重复情况即可。,返回删除后数组的新长度。不要使用额外的数组空间,你必须在。删除重复出现的元素,使得出现次数超过两次的元素。并在使用 O(1) 额外空间的条件下完成。

2024-01-08 19:22:14 539

原创 88.合并两个有序数组(leetcode)

3.重点:这道题唯一麻烦的就是可能会有一个数组先遍历完了怎么办,就需要if设定这种情况,也就是如果这个指针走到小于等于-1的位置了,就把剩下的数直接放就完事,至于剩下的数是不需要排序的,因为源数组本身就是有序数组。这里要熟悉arraycopy这个方法,要输入五个参数,依次分别是:源数组,要复制的元素的起始位置,目标数组(也就是拷贝之后的新的数组),目标数组要存放元素的起始位置,一共拷贝几个元素。方法二:对我来说比较好接受的双指针方法,其实就是把nums1再重新放一遍数据。中,使合并后的数组同样按。

2024-01-08 18:28:24 344

原创 力扣977.有序数组的平方

2.双指针:因为数组有序,平方后全为正数不需要考虑绝对值这种问题,直接比大小就行。但是原数组两头的绝对值大小不确定需要对比来挑,所以选择两个指针方便计算。1.new一个新的数组:那么这个排序的过程就可以看作是从原始数组剩下的数据里选取大的往新数组里放。像是买东西挑个头大的,逐个挑往自己的篮子里放。组成的新数组,要求也按。题目描述:给你一个按。

2024-01-07 19:30:35 346

空空如也

空空如也

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

TA关注的人

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