自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 黑马点评DAY5|商户查询缓存

客户端请求的数据在缓存和数据库中都不存在,那么根据我们的缓存更新策略,最终都会向数据库索取数据;那么如果有不怀好意的人用并发的线程用虚假的id向数据库请求数据,就会搞垮数据库。因为店铺种类有十种,可以通过LIst的数据结构存储,但是需要将List中的ShopType对象先转为JSON,取出的时候再由JSON转为ShopType对象。在业务中,如果我们对数据库数据做了一些修改,但是缓存中的数据没有保持同步更新,用户查询时会查到缓存中的旧数据,这在很多场景下是不允许的。,那么这样就可以达到互斥的效果。

2024-07-04 19:23:25 748

原创 黑马点评DAY4|整体项目介绍、短信登录模块

在拦截器中放行就是return true;拦截就是return false;在我们的 loginInterceptor拦截器中配置类一系列不被拦截校验的请求,这些请求不会执行preHandle 方法,因此也不会更新token,如果用户一直访问的是这些请求的内容,那么token就不会更新,可能一段时间之后,token就失效了。解决这个问题,我们可以在原有请求的基础上再加一个拦截器。因为 loginInterceptor有一些请求不被拦截,那我们新加的这个拦截器就拦截所有请求。

2024-07-03 00:33:54 1211

原创 黑马点评DAY3|Redis的Java客户端

@BeforeEach由junit5提供,在每个@Test方法执行前,将该注解下的代码执行一遍。使用步骤:创建jedis对象,建立连接(需要的参数:ip、port、密码)操作数据库释放连接Jedis线程池连接池的几个主要参数:Jedis本身是不安全的,并且频繁创建和销毁连接会有性能损耗,因此可以使用Jedis连接池代替Jedis。将Jedis中的改为SpringDataRedisSpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成

2024-07-01 16:16:32 803

原创 黑马点评DAY2|Redis基本操作

Redis是一种键值型数据库,键为String类型,值可以为很多类型:以上五种为基本数据类型以上三种为特殊数据类型。

2024-07-01 10:20:32 784

原创 黑马点评DAY1|Redis入门、Redis安装

redis是一种但是这样的存储方式,数据会显得非常松散,因为这本质上是一个用户的信息,所以我们一般使用像这样没有表的数据库被称为。

2024-06-29 23:16:04 929

原创 代码随想录算法训练营day31|134.加油站、135. 分发糖果、406.根据身高重建队列

如下图所示:当索引一道2的时候,剩余油量的总量=1+3-6 < 0,这个时候说明以索引0为起点不合适,将起点更新为索引3.两点证明:1.如果我们从蓝色段中间选一个点开始,是不是最后sumGas就不小于0?不会,我们可以看如下图,如果蓝色sumGas<0,sumGas1>0==>可以推出sumGas2<0,这样就不符合我们在蓝色段结束才sumGas<0的条件。2.最终所有的剩余油量相加大于等于0就一定可以跑完一圈吗?。

2024-06-26 10:33:57 274

原创 代码随想录算法训练营day30|跳跃游戏、45.跳跃游戏||、1005.K次取反后最大化的数组和

这道题目的重点在于:1.不管每次能跳多远,只管跳跃范围的覆盖范围,如果最后能覆盖到最后一个元素,则可以到达最后一个下标2.覆盖的范围是随着i的遍历而不停增加的,相当于“”,每个数的最大覆盖范围应该是i+nums[i],如果大于之前的cover,就更新cover,直到有某一次cover能超过最后的索引,说明可以跳到最后。

2024-06-24 00:38:26 197

原创 代码随想录算法训练营day 29|376. 摆动序列、53. 最大子序和

如果前面的序列和为小于0,那么对于后面的序列取最大值没有任何帮助,不如舍弃前面的序列,重新开始开始计算序列和。1.保存最大值的maxValue。2.计算和的count。

2024-06-22 14:29:48 152

原创 代码随想录算法训练营day26|39. 组合总和、40. 组合总和||、8.分割回文串

由题意可知,数组中的每一个数都可以重复相加,因此我们在绘制树形图的时候,每次取完某一个数,下一次回溯的时候还可以用该数,比如2、3、6,每次取完2,候选还剩2、3、6。而最后答案也确实是2、2,所以2每次取完不能排除。另外对于存储满足条件结果的path,每次从纵向的回溯过程出来之后,要将这一层回溯加进去的值减掉给横向的循环的下一个值腾出空间,一边进入下一个值的回溯。同时要给一个sum的值记录和。我觉得这道题目卡个2讲的已经够好了,多看几遍理解透彻就行。

2024-06-20 10:43:43 355

原创 代码随想录算法训练营day23|669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

这道题目需要考虑当前节点是否在[low,high]之间,因为是平衡二叉树,所以当当前节点值小于low时,那么其左节点肯定更小,因此删除该节点的方式是给root节点返回其,注意:这里不是直接返回右节点,是因为在右子树中也有可能存在不满足条件的节点,需要继续递归排查;当当前节点值大于high时,那么其右节点肯定更大,因此删除该节点的方式是给root节点返回其。如果root.val符合在[low,high]的区间内,其左右节点承接左右节点的返回值即可。最终返回root。

2024-06-16 17:18:30 419 1

原创 多线程中run()和start()的区别

而执行start方法会在main线程中异步地开启一个新线程去执行run方法中的代码,如果有两个线程执行start方法,就会出现两个线程同时去执行run方法中的情况。但是一旦出现一个线程在执行run方法的时候,另一个线程也同时要执行run方法,但是synchronized关键字中的元素只能被一个线程访问,最终会卡死。以及 thread.run();因为当我们直接调用run方法执行的时候,这是直接在main方法的主线程中调用run方法,以下代码中,通过thread.start()启动线程,最终产生了线程阻塞。

2024-06-15 17:20:55 426 2

原创 代码随想录算法训练营day22|701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点、 235. 二叉搜索树的最近公共祖先

这道题较为简单,只需要通过递归找到符合要求的叶子节点,并将节点插入即可。

2024-06-15 15:40:55 462

原创 一个低级的错误:方法调用实参和形参的顺序没有匹配上!!!

这里的uploadChunk方法调用了addMediaFilesToMinIO方法 :boolean b = addMediaFilesToMinIO(localChunkFilePath, mimeType, bucket_video, chunkFilePath);localChunkFilePath, mimeType两个参数都是String类型,但是刚开始我把俩顺序搞反了,导致无法识别存储到Minio的路径,始终无法上传文件!调试了一个小时,做开发真的得细心细心加细心啊!

2024-06-13 20:46:33 105

原创 Hash算法、MD5算法、HashMap

哈希值”(Hash Value)本身是由哈希算法生成的,而hashCode算法在Java中是与对象的hashCode()方法相关联的概念。下面我将分别解释哈希值和Java中的hashCode算法。

2024-06-13 16:54:19 1191

原创 通过Stream流对集合进行操作

1.Stream.iterate(0, i -> ++i):创建一个无限序列,从 0 开始,每次迭代时通过 i -> ++i 函数(一个 lambda 表达式)增加当前值。将本地的一个视频文件分成多块上传到Minio服务器,现在上传功能已经完成,需要调用minioClient对已经上传的文件重新合并成一个新的视频文件。2.limit(7):使用 limit 方法来截取流的前 7 个元素,因为 iterate 创建的是无限序列,所以需要限制结果的数量。

2024-06-13 16:13:34 316

原创 代码随想录算法训练营Day17|404.左叶子之和 110.平衡二叉树 222.完全二叉树的节点个数

1、这道题需要统计出所有左叶子结点的值的和,首先要明确左叶子节点指的2.但是光凭叶子结点本身是无法判定左叶子的,因为左右孩子都是null,所以要从上一层节点往下判定。所以判断左叶子的条件语句应该是3.另外,这道题目采用后序遍历是最方便的。并且要明确递归三要素:返回值、终止条件、递归逻辑。

2024-06-07 18:05:08 432

原创 DTO和POJO的区别

在实际应用中,DTO 和 POJO 可以相互转换。例如,一个服务方法可能会接收一个 DTO,然后使用 DTO 中的数据来创建或更新一个 POJO,该 POJO 随后被用于数据库操作。这种分离有助于保持代码的清晰性和关注点分离。

2024-06-05 18:14:04 468 2

原创 代码随想录算法训练营Day15|102.二叉树的层序遍历 226.翻转二叉树 101.对称二叉树

只总结一句话:每一个节点需要知道自己的左右节点是否对称才可以判断以自己为根节点的子树是都对称,从叶子节点向上不断返回左右节点对称判定结果的与,最终返回到根节点,得到最终结果。这其实是和方法传参的机制有关,我们都知道在Java中,对象是通过引用传递的。当你将一个对象作为参数传递给方法时,实际上是传递了一个指向该对象的。swap方法中,一个是将待翻转节点的左右节点分别传入,一个是直接将待翻转节点传入。我们可以看出,这个方法只能将left和right指针的副本进行互换,不能对本身的right和left指针互换。

2024-06-05 14:52:46 538

原创 代码随想录算法训练营Day14| 递归遍历 、迭代遍历实现前中后序遍历、 统一迭代

不多加赘述。

2024-06-04 17:36:17 260

原创 Java中的大小顶堆的实现方式

在java中没有一个现成的大小顶堆的数据结构,但可以用PriorityQueue类代替。

2024-06-03 22:34:19 258

原创 代码随想录算法训练营Day12|347.前 K 个高频元素、 239. 滑动窗口最大值

1、是一个基于优先级的队列,它使用了一个优先队列算法(通常是堆结构)来保证队列头部(peek或poll方法返回的对象)总是队列中具有最高优先级的对象。3、如果堆中的值的个数不满k个,直接加入Entry,如果正好k个,每次加入一个都会将堆中最小的那个值弹出,从而保证堆中的k个元素使所有当前已经遍历的值中的前k个。2、小顶堆维持了一个最多只有k个元素的堆,这个堆在java中可以用一个实现了Queue接口的PriorityQueue对象去模拟。4、当全部遍历完毕,堆中的元素是所有元素中前k个大。

2024-06-03 11:42:08 419

原创 代码随想录算法训练营Day11| 20. 有效的括号、 1047. 删除字符串中的所有相邻重复项、 150. 逆波兰表达式求值

这道题几个注意点都在注释中标注。

2024-06-01 20:49:20 258

原创 代码随想录算法训练营Day10| 232.用栈实现队列、 225. 用队列实现栈

【代码】代码随想录算法训练营Day9| 232.用栈实现队列、 225. 用队列实现栈。

2024-05-31 13:09:17 261

原创 代码随想录算法训练营Day8|541. 反转字符串II、替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

卡哥的方法,先整体反转,再去除多余的空格,最后再对每一个单词反转。卡哥要求空间复杂度为O(1),那方法一就不符合要求了。这道题目很简单,但是解决了我长久以来关于ACM模式的一个困惑:连续用scanner向系统键入两个量的时候,会报错。1.这道题刚开始把题意理解错了,以为对于任意长度的字符串都只反转[0,k-1]以及[2k,3k-1]区间的值。方法一:自己想的方法,思路比较简单,但是调试了好久,贴在这里梳理一下思路。之前写的一个方法,用字符数组做的,时间复杂度和空间复杂度都很低。3.需要自己导入必要的包。

2024-05-30 01:12:10 396

原创 代码随想录算法训练营Day7|454.四数相加II、 383. 赎金信、15. 三数之和、 18. 四数之和

四个数组分成两组进行for循环,先用HashMap存储所有第一组for循环出现的和的次数。再进行第二组for循环,每一次得出的和判断其负数是否在map的key中,如果存在,就加上这个value。和有效的字母异位词那道题目类似。

2024-05-29 12:17:31 335

原创 代码随想录算法训练营Day6| 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

对于ASCII字符集,字符’a’的Unicode编码是97,字符’b’的编码是98,以此类推,直到字符’z’的编码是122。**关键:**如果map中没有target-nums[i],说明在之前没有出现可以和当前数配对相加为target的数,那么就先把他加进map,等到那个输出现,再将他们的索引成对返回。2.创建一个set集合,存储每一个按照规则算出来的数,一旦出现之前已经加入到set的数了,说明开始循环了,就跳出while,res置为false,这个数不是快乐数。记录字符串s中字符出现的次数。

2024-05-29 11:59:57 1161

原创 Mybatis的二级缓存

指的是Session级别的缓存,当调用同一个SqlSession去访问数据时,每一次读取的数据都会存储在当前SqlSession中,下一次调用不需要再次从数据库读取,直接从一级缓存中读取即可。:指的是Mapper级别的缓存,多个SqlSession可以共享缓存,同一个服务器所有实例之间甚至跨服务器共享。

2024-05-27 11:19:31 501

原创 JDBC和Mybatis开启一次会话的步骤比较

将com.mysql.jdbc.Driver这个类加载到JVM中,使得DriverManager这个类可以识别并注册这个类的实例,使得DriverManager可以用这个驱动程序和数据库建立连接。和数据库建立连接通过连接器获取Statement对象,这个对象用来执行sql语句执行查询操作的话需要ResultSet对象存储返回值亦或者执行更新操作对于查询操作,处理ResultSet对象以获取和处理查询结果。对于更新操作,可以通过返回的int值(更新的行数)来确认操作的成功与否。

2024-05-27 02:50:31 312

原创 Java的类路径究竟是什么?

它给出了三种可以作为类路径的的路径:1、应用程序的编译输出目录(通常是bin目录或target目录)。2、项目依赖的JAR文件,这些JAR文件通常放在lib目录下。(一个程序不可能只有程序员自己编码的一部分,还需要借助其他的轮子也就是我们的jar包来执行,这些jar包可以保存在lib目录下,也可以通过maven中的pom.xml文件来配置,3、其他任何在编译或运行时需要包含进来的目录或文件。

2024-05-27 02:23:48 590

原创 Mysql中的常见类型

大整数类型,占四个字节,范围为-2,147,483,648 到 2,147,483,647,INT类型常用于存储较大的整数,如用户ID、记录编号、计数器等。

2024-05-26 23:10:52 286

原创 Mysql中表之间的关系

比如订单和商品之间:一个订单可以包含多个商品,一个商品也可以存在于多个订单中。一对一、多对一(其实就是主从关系,在从表中设置一个外键关联上主表)、订单1包含了两件商品,商品1存在于订单1和订单2中。3、设计中间表关联商品和订单表。

2024-05-26 23:01:05 503

原创 Mysql多表查询

现在有俩表如下图所示,一个employee,com_Id为外键和company中的主键Id关联。employee中只有Id = 5的com_Id为空,数据未关联。如果直接查询两个表的所有信息,根据笛卡尔积,会查出来3*4共12条有效信息但是如果在查询语句后面限定条件,就可以查出符合条件的数据,这些数据是两个表的交集,查询这个交集的过程就叫内连接查询。当然写表的全称太麻烦了,也可以用别称也可以不查所有字段,只查自己想要的字段。

2024-05-26 22:59:52 836

原创 Mysql中的约束(常见约束、外键约束)

约束就是对于数据库的表中字段,在某些性质上进行约束,以规范化字段或者实现一些功能。

2024-05-26 17:42:50 270

原创 代码随想录算法训练营Day4|24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、 142.环形链表II、面试题 02.07. 链表相交

这道题的关键在于:1、在置换两个节点的时候,当前节点需要在这俩节点之前一个节点。并且要提前保存cur.next以及cur.next.next。2、每次置换完一组节点,cur = cur.next.next3、判断结束的标志:奇数个节点:cur.next.next!= null 偶数个节点:cur.next!= null 为了保证cur.next.next不会产生空指针,需要先判断next!= null4、最终返回的是虚拟节点的下一个节点,因为最初的head节点已经不在链表最前面了。

2024-05-25 16:16:21 674

原创 代码随想录算法训练营Day3|203.移除链表元素、206.反转链表、707.设计链表

1、首先,删除链表中的一个节点,为了不影响head节点,我们要定义一个curNode节点。2、但是,如果要删除的节点是头结点,如图(a)所示,对于头结点来说,需要加一个虚拟节点作为它的curNode,这样才可以和图(b)一样通过curNode.next赋值为curNode.next.next来跳过这个需要删除的节点。其实当cur为null的时候就可以停止了,因为这个时候cur为null,不需要再让cur指向pre操作了,这个时候就可以停止了,因此while循环的判断条件为while(cur!

2024-05-24 15:17:18 1060

原创 Day2 数组小结

1、数组的小标从0开始且地址连续2、数组定位元素的效率非常高,几乎是O(n)的时间复杂度,因此查找很快3、因为内存连续,因此进行删除或者添加的话,需要移动后面的元素4、二维数组空间并不是连续的,如{{1,2,4},{2,3,4,},{2,3,4}}中{1,2,4},{2,3,4},{2,3,4}是地址连续的,但是1,2,4,2,3,4,2,3,4这所有的元素并不一定内存连续。

2024-05-24 01:08:37 183

原创 代码随想录算法训练营Day2|977.有序数组的平方、59.螺旋矩阵||、 209.长度最小的子数组

每次判断大小,如果是left指针的平方数大,left右移一位;如果是right指针的平方数大,right左移一位,直到right=left,为什么要等于?

2024-05-24 00:51:49 372

原创 代码随想录算法训练营Day1|704.二分查找、27. 移除元素

if (nums[mid] > target) right 要更新为mid,target要在[left,mid)之间去寻找,实际上已经把mid索引的值排除在外,因此不需要不需要像左闭右闭一样将right更新为mid-1。注意每次当target在nums[mid]左边时,right更新为mid-1;当target在nums[mid]右边时,left更新为mid+1。快指针是用来查找哪些数组元素是我们需要的,慢指针是用来保存我们需要的值。关键在于右边界为开区间,因此这个右边界的值实际上是取不到的。

2024-05-22 09:51:28 420

原创 华为机试HJ23删除字符串中出现次数最少的字符

实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。数据范围:输入的字符串长度满足 1≤𝑛≤20 ,保证输入的字符串中仅出现小写字母字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。删除字符串中出现次数最少的字符后的字符串。输入:aabcddd输出:aaddd。

2024-04-18 11:54:37 472

原创 java中的进制转换

【代码】java中的进制转换。

2024-04-17 12:40:22 184 1

空空如也

空空如也

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

TA关注的人

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