- 博客(93)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JVM详解(个人学习笔记)
本篇文章为我个人在学习JVM时所记录的笔记,内容把部分来自《深入理解java虚拟机》一书,笔记中总结了JVM中一些比较重要的知识点并作出了自己的解释。
2024-08-05 09:58:02
1001
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java中的集合(详细)
java中自带一些集合类,可以帮助我们更方便地写程序,其中所有的集合类都在java.util包下。集合有很多有优点,首先它的大小是可以变化的,不像数组一样大小不可变。再者集合可以存储引用数据类型。
2024-03-30 19:48:03
3175
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring框架介绍及详细使用
本篇文章将会对spring框架做出一个比较详细的讲解,并且每个知识点基本都会有例子演示,详细记录下了我在学习Spring时所了解到全部知识点。在了解是什么spring之前,我们要先知道spring框架在开发时,服务器端采用三层架构的方式,分成了表现层、业务层和持久层。例如:表现层使用JSP和Servlet程序,与浏览器客户端进行数据的交互。业务层使用Service程序,进行业务逻辑处理和事务处理。持久层使用Dao程序,进行数据库的持久化操作。数据库使用MySQL数据库。
2024-03-27 00:00:57
1631
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 SpringMVC介绍及详细使用
介绍了解SpringMVC之前我们先要了解什么是三层架构三层架构1.开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序2.使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构3.三层架构 表现层:WEB层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型 业务层:处理公司具体的业务逻辑的 持久层:用来操作数据库的MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑分离成三个独立的组件
2024-03-24 22:01:26
1291
2
原创 LeetCode-轮转数组
首先我们可以借助另外一个数组储存移动过后的数组,最后再复制到原数组之中,这种思路很好理解,不过需要借助另外的数组,在时间和空间上的速度就略显不足了。再把前k个和后几个再次反转,这样既移动了位置又把顺序恢复了回来,很巧妙。另外一种思路是通过三次翻转的方式,在原数组中即可完成移动。本题的含义很清晰,本质就是要在原位置移动数组,这里可以有两种思路。向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100],将数组中的元素向右轮转。
2024-08-21 11:08:46
325
原创 LeetCode-找到字符串中所有字母异位词(滑动窗口)
本题可以使用滑动窗口来求解,先使用两个数组来维护窗口内每个词出现的频率,一个数组记录要求解的字符串中单词的频率,一个维护当前窗口内单词的频率,通过不断地移动窗口时将两个数组进行对比,如果相同则证明此时是异位词,记录下当前索引。起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。
2024-08-16 13:52:14
184
原创 LeetCode-字母异位词分组
本题的意思很简单,就是把字母组成相同的字符放在一个数组里面,为此,我们可以遍历数组,将每个字符串先变为一个char数组,然后对其进行排序,因为一个字符串如果组成相同,那么在排序后肯定是相同的。因此我们用一个map来储存每种字母组合,将排序后的字符串作为key,将原本的字符串作为value,依次放入其中。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。给你一个字符串数组,请你将。
2024-08-14 16:19:23
299
原创 LeetCode-得到更多分数的最少关卡(前缀和)
可获取的分数是一定的,把0替换成-1并且求出sum,遍历并记录alice已经获得的分数,sum - pre 为bob可以获得的分数。请你返回 Alice 获得比 Bob 更多的分数所需要完成的。需要完成多少个关卡,才能获得比 Bob 更多的分数。完成一些关卡,然后 Bob 会完成剩下的所有关卡。一个玩家通过一个简单模式的关卡可以获得。Alice 需要完成至少一个关卡获得更多的分数。Alice 需要完成至少三个关卡获得更多的分数。个关卡的游戏,游戏中有一些关卡是。游戏的一开始,Alice 将从第。
2024-08-05 16:00:00
232
原创 LeetCode-重新放置石头
第 i = 0 步操作中,我们将位置 1 处的石块移到位置 2 处,有石块的位置为 [2,2,3,3]。第 i = 1 步操作中,我们将位置 3 处的石块移到位置 2 处,有石块的位置为 [2,2,2,2]。第 i = 0 步操作中,我们将位置 1 处的石块移到位置 2 处,位置 2,6,7,8 有石块。第 i = 1 步操作中,我们将位置 7 处的石块移到位置 9 处,位置 2,6,8,9 有石块。第 i = 2 步操作中,我们将位置 2 处的石块移到位置 5 处,位置 5,6,8,9 有石块。
2024-08-05 15:30:00
266
原创 LeetCode—修改后的最大二进制字符串(贪心)
00可以变10,可以消耗0将高位都变为1,比如000->110。最后只剩下一个0,不用动,此时就是最大的值。可能会有人觉得用10换01不是变小了么,但是要想,当0的个数大于1个的时候,将0推到前面之后就可以将00替换10,相当于用高位的1换了低位的1,一定是变大的。所以我们只要记录第一个0开始的位置idx,并计算0的个数m,那么最后一个0就是放在idx + m - 1的位置上,其余位填充1即可。最后可以用char数组合并成str,我这里直接用builder拼接也能过,别用String直接+就行,会超时。
2024-08-05 10:22:51
414
原创 算法—滚动数组思想
滚动数组思想是一种优化空间复杂度的技巧,在面对一些动态规划问题时,我们会定义一个二维数组来保存中间状态,以便计算最终的解。然而,有时候我们可以通过滚动数组的方式,减少空间复杂度,而不影响计算的正确性。滚动数组实际上是一种“压缩”状态空间的方法。它的核心思想是,对于某些动态规划问题,当前状态只依赖于之前的若干个状态,而不需要所有之前的状态都保留。因此,我们可以只用几个变量(数组元素)来保存这些必要的中间状态,而不用整个二维数组。简而言之就是不用记录下所有的中间状态,因为当前状态会有规律地继承于之前的状态。
2024-07-30 09:27:34
595
原创 LeetCode——被管绕的区域
在搜索时可以使用深度优先搜索,从边界搜索到图中所有的符号,最后根据标记所得将所有的标记为false的变为”X“,这样我们就成功替换了所有被包围的”O“。因此我们就可以从整个图的边界开始查找,找到所有与边界”O“相连的”X“,除了这些”O“,把剩下的全部”O“都变成”X“。题目中的意思就是指将数组中被”X“包围”O“全部变成”X“,而只有和边界”O“相连的”O“才不会被”X“包围。在上图中,底部的区域没有被捕获,因为它在 board 的边缘并且不能被围绕。
2024-07-19 15:21:32
357
原创 java基础万字笔记
此篇文章为本人在初学java时所记录的java基础的笔记,其中全面记录了java的基础知识点以及自己的一些理解和要注意的点。由于该笔记是边学边记录而成,所以基本很多模块内都会有一些我本人后期记录的知识穿插进去,导致一些模块内的内容并不连贯,但是整篇笔记绝对是干活满满,没有什么废话,所记录的都是有价值的知识点。
2024-07-18 16:11:52
810
原创 LeetCode-移除后集合的最多元素数(java)
移除后,数组变为 nums1 = [1,4,5] 和 nums2 = [2,3,2]。移除后,数组变为 nums1 = [1,2,3] 和 nums2 = [4,5,6]。对此,我们利用添加的思想,先得出两个数组中各自具有的数字,也就是不在这两个数组交集之中的数字,先将这些数字添加进集合。此时选完后如果c1+c2
2024-07-18 11:45:42
414
原创 VUE详解——组件篇
本文为本人在学习vue时所记录的有关组件的笔记,其中详细介绍了vue中的组件及其使用,其中大部分内容来自vue官方中文文档,对于其中的一些知识也加入了一些自己的理解。
2024-07-17 15:04:08
941
原创 JUC练习——线程安全的计数器
当我们在多线程环境下需要共享一个计数器时,确保计数操作的线程安全性是至关重要的。线程安全的计数器能够确保在多个线程同时访问和修改计数器时,不会出现数据不一致或者竞态条件的问题。常见的实现方式包括使用锁机制(如 synchronized 或 ReentrantLock )、使用原子变量(如 AtomicInteger )。着两种方式实现的原理都很简单,代码也比较简单。
2024-07-15 16:43:34
232
原创 LeetCode—和为K的子数组(前缀和)
借助官方题解中的一张图,在遍历结束后,会得到所有的前缀和及其出现的次数,在不断的遍历中pre-k会不断更新,在将其和前缀和去匹配,如果相等了count就加一。例如,求第3到5个数的和,就可以转化为前5个数的和减去前2个数的和,两个前缀和相减就可以来表示一个连续子数组的和。但是,暴力求解虽然简单,但是时间消耗是很大的,时间复杂度是n的平方。因此我们可以使用另外一种方式来求解此题,可以思考一下,题目中让求的说连续的子数组和,因此最简单的一种方法就是暴力求解,找到所有的子数组,计算和是否为K。
2024-07-10 11:35:32
203
原创 Cookie,Session与Token解析
简而言之,Cookie就是是一些数据,类型为“小型文本文件”,会以key-value的形式存储于电脑上的文本文件中。主要用于存储服务器返回给客服端的信息,然后在客户端中进行保存。在下一次访问该网站时,客户端会将保存的Cookie一同发给服务器,服务器再利用Cookie进行一些操作,比如使用Cookie记录用户的登录状态信息。
2024-06-05 22:29:00
1031
原创 WebMagic学习笔记
前言本文为本人学习初次学习WebMagic框架时记录的笔记,大部分内容都从官网中得来,也加入一些自己遇到的问题以及解决方法。这其中并不包含注解的使用,当然注解的使用很简单,如果熟悉不用注解的方法实现,注解的方式也很快就可以学会。在这里强烈推荐大家去官方文档阅读学习。WebMagic官方中文文档基本介绍WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)构成,核心代码非常简单,主要是将这些组件结合并完成多线程的任务WebMagic的结
2024-05-30 23:03:26
814
原创 Java 使用WebMagic爬取网页(简单示例)
WebMagic是一个基于Java的开源网络爬虫框架,它提供了很多简单易用的API接口,可以帮助使用者快速构建出高效、可扩展的网络爬虫程序,WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)构成,核心代码非常简单,主要是将这些组件结合并完成多线程的任务WebMagic的结构分为。
2024-05-20 22:06:37
1417
原创 java—数据库批量插入数据
本篇文章将记录几种使用java向mysql数据库中批量插入数据的方法,比如插入1000条,10000条,10万条甚至100万条数据。操作数据库的方式采用Mybatis框架。输入的数据:现数据库有一个student表,表中字段如下:编写student实体类,及其controller和dao层,因为只是插入数据所以不需要加service层。
2024-05-15 00:11:03
1520
原创 盘点java中线程安全的组件
在java中有很多已经为我们提供好的线程安全的组件,在并发中使用这些组件并不用担心线程安全的问题,使用起来很方便,在本篇本章中我主要总结了八种线程的组件,分别是Vector和所有的原子类。下面本将介绍其的使用方法以及其为什么是安全的。
2024-05-11 18:52:45
1013
2
原创 JUC-synchronized练习-交替打印ABC
主要的实现设置一个全局的变量state,线程执行通过不断累加state,根据state对三取余的结果来判断该线程是否继续执行还是进入等待。并通过synchronized锁住一个共享变量lock来进行上锁。简单来利用synchronized实现一个字符串的交替打印。今天来练习一下synchronized。最后创建三个线程并让其进入就绪态。结果展示:结果会一直交替打印abc。
2024-05-07 22:43:23
222
原创 java实现Trie(前缀树)
前缀树(Trie)是一种树形数据结构,用于存储字符串集合,通常用于快速检索大量的字符串。每个节点表示一个字符串的字符,从根节点到每个子节点的路径构成了一个字符串。这种结构使得在给定前缀的情况下,能够高效地查找以该前缀开头的所有字符串。前缀树在自动补全、拼写检查等应用中非常常见。示例图如下:前缀树中就表示了字符串"inn","int","ate","age","adv","ant".其结构的关键就是下可以拥有26个子节点代表26种英文字母的选择。
2024-05-02 15:02:48
856
原创 Redis集合 set 详解
set 类似于 Java 中的HashSet,是redis中的一种数据结构,它是一个无序并且唯一的键值集合,并且储存时不会按照插入的先后顺序进行.
2024-04-27 22:07:20
583
1
原创 synchronized的底层原理
synchronized 是 Java 中的关键字,它用于锁定代码块或方法,以确保同一时刻只有一个线程可以进入被锁定的部分。这在多线程编程中非常重要,因为它有助于避免多个线程同时访问共享资源时引发的数据不一致问题。synchronized 可以锁定对象,也可以锁定类。锁的对象决定了哪些线程可以进入锁定区域。先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现为以下3种形式。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的Class对象。
2024-04-24 21:40:33
1318
原创 LeetCode-非递增子序列
每日一题今天刷的依旧是一道中等题,不过感觉今天这道题是中等难度里面比较难的题了,思考了很长时间。过程感觉比较难以理解。
2024-04-24 20:35:08
208
原创 LeetCode-竖直打印单词
每日一题今天依旧是一道力扣的中等难度的题,但是个人感觉这道题算是中等难度里比较简单的一道题。在做的时候也很顺利,最后运行地也很快。
2024-04-22 21:31:04
551
原创 LeetCode-电话号码的字母组合(回溯)
每日一题今天刷到的是一道利用回溯来解决的题,不过稍微有点复杂,并且我也有一段时间没有做回溯了,所有在解题时也是思考了一段时间。
2024-04-21 22:32:33
569
原创 JVM-垃圾收集算法
在 Java 中,垃圾收集(Garbage Collection)是一种自动管理内存的机制,它负责在运行时识别和释放不再被程序使用的内存,从而避免内存泄漏和悬空引用问题。本篇文章将介绍三种常见的垃圾收集算法。
2024-04-21 21:11:48
736
原创 Nacos简介
什么是Nacos?一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。主要作用注册中心:配置中心:配置中心就是用来管理项目当中所有配置的系统,也是微服务系统当中不可或缺的一部分。为什么我们要用配置中心先来看一下没有配置中心的传统项目存在哪些问题:1. 我们只需要在application.yml等配置文件中,设置好要配置好的值,就能完成配置。比如说我们的环境配置,业务参数的配置。
2024-04-20 22:26:56
307
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人