自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【刷题笔记】二叉树3

之前已经介绍过了二叉树的前中后序遍历及层序遍历,这是解决所有二叉树问题的手段。上一期也提到过,很多题既可以用前中后序遍历去做也可以用层序遍历去做。本期就介绍一下例题,分别展示两种做法。

2024-08-18 11:54:01 911

原创 【刷题笔记】二叉树2

二叉树的层序遍历套路非常明显,可以解决很多树的问题,不过用层序解答的结果就是时间复杂度都是O(N),所以层序遍历适合那些无论如何都要遍历整棵树的题,例如,求层平均值、求层最大值、求二叉树最大深度、求二叉树最小深度,这些题是你要把整棵树遍历完才能知道答案的,但是用前中后序(深度优先)遍历也可以解决,且时间复杂度也是O(N),只不过相比之下可能层序更容易想。

2024-08-17 07:06:33 756

原创 【刷题笔记】二叉树1

二叉树和链表的形式类似,都分为两个部分,即值value和指向下一个节点的next,只不过二叉树区别于链表,有两个指向:left和right。

2024-08-14 23:23:19 855

原创 【问题记录】Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes b

翻译过来的意思是“Java热点(TM)64位服务器VM警告:共享只支持引导加载程序类,因为已经附加了Bootstrap类路径”。查了一下,这并不算是一个错误,而且并未影响我的执行结果。如果你的 build and run 的位置原本就有这个-ea,直接其在后面加个空格,再加上-Xshare:off。配置完选择apply,ok即可生效。

2024-08-10 17:16:21 134

原创 【刷题笔记】栈和队列1

大家可能之前不了解逆波兰表达式,所以会不知所措,仔细阅读后就能知道,就是我们在遍历字符串数组的时候,一旦遇到运算符,就把这个运算符前面两个数取出来,进行运算。还是用到栈,先将两个数存到栈里面,然后如果遇到运算符,就把两个数弹出来,根据运算符进行计算,再把计算结果压进栈中;,重复项删除操作会选择两个相邻且相同的字母,并删除它们。这道题与上一题类似,先把字母放到栈里面,后面遍历时如果和栈头字母相同,就一起消掉,否则就如栈。',就去栈的头找是否和当前字符相同,相同就一起消掉,不相同就属于失效,类似于消消乐。

2024-08-10 13:39:07 978

原创 【刷题笔记】KMP算法

但是"d"前面的子串最长相等前后缀长度是2,也就是说"c"前"c"后都是"ab",下次循环再匹配的时候,文本串的后面的"ab"就与模式串前面的"ab"匹配了,这个在我们上一次循环中已经匹配好了,后面的循环直接从"c"开始就好了。于是就有了上述代码。最直观的方法就是,两层for循环,外层for循环遍历文本串,内层遍历模式串,从找到模式串第一个位置“a”开始匹配,如果文本串和模式串对应位置的值不相等了,就跳出循环,从文本串的下一个位置开始,重新从模式串第一个值开始匹配。那么,我们来计算模式串的前缀表,。

2024-08-04 15:38:21 627

原创 【刷题笔记】n数之和

这道题和上面的三数之后非常相似,逻辑是一样的,只不过这道题是找最接近目标值target的数,那么其实我们找到和target相等的数就可以立刻返回。如果找不到,那么和target最接近的数就一定在nums[i] + nums[left] + nums[right] 和 nums[i] + nums[left + 1] + nums[right]之间,或者在nums[i] + nums[left] + nums[right] 和 nums[i] + nums[left] + nums[right - 1]。

2024-08-02 01:24:59 542

原创 【刷题笔记】螺旋矩阵

其中,红色为横向遍历,黄色为纵向遍历,可以发现每次遍历的时候我都留一个,这样可以保证最后正好遍历完一圈。(怎么遍历否可以,但是自己要对好,否则会很乱)。螺旋矩阵相关题型,通过顺时针遍历二维数组进行求解,没有太好的办法,但是解法思路不难,最主要的是要注意遍历时的起始值。(2)转完完整的一圈后,还剩下一个数。(1)转完完整的一圈后,还剩下一行;(2)转完完整的一圈后,还剩下一列;

2024-07-29 22:01:11 178

原创 【八股】final、finally和finalize区别及finally的特性

finally中常用来执行一些最终的操作,像关闭一些资源的操作,比如流啊、数据库的链接啊等操作。而在获得最终结果的过程中,其实try-catch中的return都会执行,但是当执行到finally中的return时会将之前得到的结果覆盖。说明finally无论如何都会执行,catch中的代码执行后,把结果存到了result中,但是不管怎样finally中的代码都会执行,所以会最终执行i+=3,把i变成4。被final修饰的变量不能被修改,被final修饰的方法不能被重写,被final修饰的类不能被继承。

2024-07-28 23:15:19 266

原创 【刷题笔记】滑动窗口

当我们遍历到这个位置的时候,我们找到了{1,4,1},可见如果想继续往下走,需要把“1”和“4”去掉,但是第二个“1”得保留,因为要和后面的数字组成{1,2,2,2},但是如果你用set的话,我们主要是想在set中把“4”给他移除掉,让set里面只剩两个元素,在left走过“4”之前,要先走过1个“1”,但是我们不能确定要走几个“1”才能让“4”的个数为0。首先,就是我们让右指针去遍历数组,直到找到水果的种类超过2个,这个时候在让left去移动,直到让map中的水果种类小于等于2种。

2024-07-28 15:11:53 926

原创 正则校验简介

正则校验就是使用正则表达式对字符串进行匹配和验证,以确定字符串是否符合特定的模式。在我们平时开发过程中常用到正则校验,比如,当你写一个用户注册登录功能时一定不希望用户去胡乱填写邮箱、手机号码等信息,再比如,当你写一个收集用户信息的系统时,也不希望用户去填写无效的证件号,等等。于是,在用户提交信息,到了后端后,我们要利用正则校验去验证一下,只有符合条件的数据,才给它入库。注:因为这个 “.” 是特殊符号,所以这里面需要用 “\.” 来表示转义,表示实际的 "."。(3)验证密码(至少八位,包含字母数字)

2024-07-25 20:44:08 199

原创 【刷题笔记】二分查找2

将原来的数组形式转化为矩阵形式,矩阵按照从左到右从上到下的方向递增,给定一个target,我们要做的是找一下,这个矩阵中是否包含这个target。其实,如果我们把这个矩阵看成一个数组,则可以直接用二分查找。问题的关键是,怎么将其看成数组呢?通过这个规律,我们便可以利用二分查找在矩阵中查找目标值了。刷到了一个非常有意思的题,分享给大家。,行数为 m,列数为 n。

2024-07-25 00:38:45 335

原创 【刷题笔记】二分查找

但是,如果target处于[mid,len-1],那么我们就可以先让left=mid+1,再去做一个二分查找,这个时候的mid值(索引)是大于上一轮循环中的mid值(索引)的。(2)如果很不幸,target不在第一个升序空间的范围内,那么,在某一轮循环中一定会出现nums[mid]<nums[0],说明此时mid已经落入了第二个升序空间中,在第二个升序空间中,如果target处于[mid,len-1]([mid,len-1]一定是一个升序空间),则可以进行二分查找。但是要注意的是,原题给出的x范围。

2024-07-24 22:49:48 871

原创 【刷题笔记】前缀和

但是,这个3有可能出现多次,而它出现几次我们就相当于找到了几次,然后,想精准快速地找到数值的时候,我们还想用到contains方法,因此很容易联想到用hashmap。首先,这道题用暴力是可以解的,就是双层for循环,但是这么做的话,时间复杂度就是O(n^2),所以就需要考虑用hashmap+前缀和的方式了。当我们遍历到6的时候,发现6-3=3,而在遍历过的前缀和数组中出现了3,那么我们就找到了一个满足条件的区间。如果当前位置的前缀和减去k的值,在已经遍历过的地方出现过,那么我们就找到了sum[i]

2024-07-21 12:39:09 1136

原创 【刷题笔记】链表篇3

最直接的做法就是直接同时遍历两个链表,然后每两个对应的值相加,超过10就进位,不过在写的过程中还是会遇到很多麻烦。我的做法是:遍历这个链表。用一个栈把小于x的节点记录下来,然后,遍历完,在依次弹出来,按顺序往前链接节点。做完这道题后,开心地去提交,发现过了,运行时间上击败3.14%的人。答案的做法是:遍历的时候把比x大的和小的节点分类组成新的链表,然后再把它们接上。双向链表的方法,为了提升效率,获取节点以及增加节点时都是从两端双向进行的。这道题有个很巧妙的地方:就是用head和tail标记了链表的头和尾。

2024-07-18 22:11:14 183 1

原创 【解决方案】通过Spring Initializr创建Spring工程时Java只有17-21

解决办法如下:点击设置,将其中的 https://start.spring.io/ 修改成 https://start.aliyun.com/我的jdk版本是1.8,但是选择利用Spring Initializr创建Spring工程时,找不到Java为8的版本了。接下来可以根据您的项目需求选择合适的依赖。然后,便可选择Java 8。

2024-07-18 20:57:29 195

原创 【刷题笔记】链表篇2

这道题的思路非常的暴力,就是从链表头部往后遍历,如果遇到两个节点的值一样,就把这两个节点同时去除掉,然后把这个节点的值记录一下,继续往后遍历,如果有和这个值相等的节点,继续去除。但是,一个根本原因就是:“只有两个节点的值先相等了,才有三个节点的值和他们相等的机会”,所以我们可以只统计有两个节点的值相等的,并不需要频繁去更新这个变量。所以,用map记录,只要有前一个节点指向它,就给它的value+1,当出现2的时候,这个节点就是我们要找的。注意:这么做一定要把虚拟头节点加上,因为有可能第一个节点就入环了。

2024-07-17 22:38:39 257

原创 【刷题笔记】链表篇

利用hashSet先把第一个链表中的节点都装进去,然后从第二个链表的头开始遍历,看看是否hashSet包含这个节点,如果包含,第一个找到的节点就是我们要找的。那么我们就可以让他们的尾巴对齐,然后长的那个链表跳到和短的链表相同的位置,再一起向后跳,每跳一次比较这两个节点是否相等(val和next都要相等),直到找到为止。3)方法三,采用了双指针的做法。它的思路其实和方法一是一致的,本质上还是让两个链表的尾巴对齐,然后到了两个链表一样长的位置,一起往后跳,直到找到第一个相同的节点。

2024-07-16 01:07:26 447

原创 VO、PO、DTO、DO的作用

我们在刚做项目的时候可能会不理解VO、PO、DO、DTO的含义,就导致再写业务的时候胡乱建一些类,放进这些包下面。领域对象,是对现实世界中业务角色的抽象,它不仅包含数据,还可能包含领域业务逻辑。,但某些场景下,DO不需要进行显式的持久化,例如,某些策略模式设计的对象可能只有逻辑实现,而没有对应的数据库表结构。数据传输对象,通常用于在不同层进行数据传递,例如,前端发出一个请求,通过DTO中封装一些数据传给后端。视图对象,就是后端查完数据库后,进行业务逻辑处理,把前端想要的数据封装成VO对象,再返给前端展示。

2024-07-14 22:07:43 193

原创 创建SpringBoot工程及调式(源码阅读前置知识)

如果当前断点后面还有断点,跳到后面那个断点执行位置,若后面没有则直接执行完。比如,在第5行和10行有两个断点,当前运行至第5行,按它,则运行到下一个断点(即第10行),再按它,则运行完整个流程。阅读源码的话,我们只选择Spring Web即可,然后点击create,等待maven完成依赖注入。运行到光标处,你可将光标定位到你需要查看的那一行,代码会运行至光标行,不需打断点。步出, 从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。步过, 如果当前行断点是一个方法,则不进入方法体内。

2024-07-13 11:10:06 215

原创 Java环境变量配置

在阅读源码之前呢,我们都需要配置好自己的环境变量,下面分别介绍一下jdk、maven、gradle的部署,其中maven和gradle是两种流行的Java项目构建和依赖管理工具。然后,点击环境变量,进入下面这个页面,然后开始配置环境变量,可以看见我这里面之前已经部署过jdk1.8.0了。之前没部署过的同学,可以直接单机用户变量下面的新建,进入如下界面。点击新建,并分别添加红色框中的内容,点击移动至最上方。点击确定,在点击下面页面的确定,完成环境变量的配置。下载,或者百度自行下载,下载完解压即可)

2024-07-12 21:52:53 1830

原创 配置文件阅读

表示整个请求(包括所有文件和其他表单字段)可以有的最大大小。这意味着,如果客户端尝试上传一个总大小超过aMB的请求(包括多个文件和表单字段),服务器将拒绝该请求。在这个例子中,它被设置为bMB。这意味着,如果客户端尝试上传一个大小超过bMB的文件,服务器将拒绝该请求。当进行数据库操作时,如果没有明确指定数据源,将使用这个默认数据源。这个第三方库,该库提供了多数据源支持以及动态切换数据源的能力。相关的配置是用来设置处理文件上传时的参数。: 这个配置项下定义了多个数据源的配置。: 这是一个数据源的名称。

2024-04-19 10:12:57 513 1

原创 Java八股(基础一)

Java本身的限制是对象只能分配到堆中,为了减少临时对象在堆内分配的数量,我会在一个方法体内定义一个局部变量,并且该变量在方法执行过程中未发生逃逸,按照JVM调优机制,首先会在堆内存创建类的实例,然后将此对象的引用压入调用栈,继续执行,这是JVM优化前的方式。即针对栈的重新分配方式,首先找出未逃逸的变量,将该变量直接存到栈里,无需进入堆中,分配完成后,继续调用栈内执行,最后线程执行结束,栈空间被回收,局部变量也被回收了。如此操作,优化前在堆中,优化后在栈中,从而减少了堆中对象的分配和销毁,从而优化性能。

2023-11-18 12:01:04 61 1

原创 关于idea项目失效解决方案

对于pom文件:右键 选中 --> add as maven project 即可解决。2.若这里是, 选择jdk,然后Apply。选中src就是你的源代码文件夹,然后再选中Source。main里面的resources对应Resources。1.选中Project Structure。再选中target,对应Exclude。3.接下来进入Modules。test对应Tests。通过以上方式即可解决。

2023-07-18 22:50:08 1134 1

原创 设计模式(二)

如果有一天,我们的if分支逻辑不断膨胀,有变为肿瘤代码的可能,就有必要将if分支逻辑去掉,为了解决这个问题,工厂方法设计模式出现了。之前的简单工厂是一个大而全的工厂,一个工厂需要创建不同的产品,工厂方法讲究的是工厂也要专而精。这样,之后我们只要想新增一种资源加载的方法,就去实现IResourceLoader 接口,工厂方法模式相比于简单工厂模式更符合开闭原则。我们的代码中产品是简单单一的类,事实上,在工作中,我们的产品可能是及其复杂的,我们同样需要对整个产品线进行抽象,具体产品继承抽象类。

2023-07-18 10:02:51 90 1

原创 设计模式(一)

可以在对外暴露的方法上加synchronized锁以保证jvm中有且仅有一个单例存在,但是方法上加锁会极大降低获取单例对象的并发度。1.配置类:在系统中,我们只有一个配置文件,当配置文件被加载到内存后,应该被映射为一个唯一的配置实例,此时就可以使用单例。在类加载的时候,instance静态实例就已经创建并初始化好了,所以,instance实例的创建过程是线程安全的。饿汉式不支持延迟加载,懒汉式有性能问题,不支持高并发。静态内部类的特性:类加载的时机是会在第一次被主动调用的时候加载。(2)对外暴露一个接口。

2023-07-17 10:56:21 122 1

原创 Pytorch学习笔记:Pytorch版本与cuda版本不兼容

NVIDIA GeForce RTX 3050 Laptop GPU with CUDA capability sm_86 is not compatible with the current PyTorch installation.The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37.If you want to use the NVIDIA GeForc

2022-05-16 21:07:10 6324 2

空空如也

空空如也

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

TA关注的人

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