自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 问答 (5)
  • 收藏
  • 关注

原创 Nacos 小bug: application.properties配置未生效,导致端口未生效

现在配置生效了,我又好奇看了下shell文件,它不是1.4.5出了这个问题吗,发现1.4.6改好了,但是Windows的cmd文件没人提他就不管了【我是哭笑包】【我是哭笑包】【我是哭笑包】。最近用了下nacos 1.4.6 ,发现windows 中修改配置中的启动端口未生效,其实就是配置文件没读取到。这哥们儿是nacos 1.4.5 Linux系统下的相同问题,shell 中有个bug,改了就好。原版前面和那哥们一样,多了个 “option:”,

2023-10-10 00:19:40 1403 2

原创 java数据结构,第八篇:二叉搜素树

左子节点要小于当前节点右子节点要大于当前节点。

2023-09-12 23:49:08 146

原创 java算法系列,第十五篇:二叉树深度(&广度)优先遍历

这个后序遍历稍微麻烦一点,因为探索完右子树还要找回去的路,所以不能直接把父节点在回去的过程中给弹出了,得先查看它还有没有右子树,如果没有,那直接弹出没关系,如果有,那就先探索完右子树再回来看一下,如果当前节点的右子树已经确认被弹出了,再弹出当前节点;中序就是先遍历完了左子树,没有节点了,再从栈弹出左子树,父节点;前序就先输出父节点,然后把父节点压入栈,再去探索左节点,什么时候没有节点了,探索右节点。当然,这里的LinkedListStack类是我自己写的一个实现栈的类,前面。是指父节点的输出顺序。

2023-09-02 02:20:06 543

原创 java数据结构系列,第七篇:堆

堆”是一种特殊的二叉树,分为大顶堆:堆顶元素为最大值,子节点小于父节点;小顶堆:堆顶元素为最小值,子节点小于父节点。同时堆是一种完全二叉树,一定要·左右两个子节点都有了才能在子节点上插入子节点。这里的get和set方法我用lombok去构建了,isMaxHeap变量用于标识要创建大顶堆还是小顶堆,默认是个大顶堆。

2023-09-01 21:51:43 111

原创 java数据结构系列,第六篇:面向多线程-阻塞队列

假设只能放两个元素,offer线程三个,全堵在这里,poll也有三个,前两个poll 解了前两个offer的围,这时元素空了,还有一个offer赌在这里,还有一个poll要去唤醒它,但是队列空了呀,poll自己也堵住了,这个时候就没戏了。现在我们改用级联唤醒,当后面还有元素可以添加时,让offer唤醒阻塞的offer,同样当还有元素可以删除时,让poll唤醒阻塞的poll。NO,NO,NO,虽然解决了前面的问题,但是又引发了新的问题,那就是线程死锁。实现的线程锁功能太过单调,不够灵活,这里不使用这种方式。

2023-08-30 19:24:57 47

原创 java数据结构系列,第五篇:优先级队列

元素的处理顺序不是严格按照它们被添加到队列的顺序,而是根据元素的优先级来确定的,优先级高的元素会在队列中被优先处理。poll的话由于需要删除掉元素,为了方便,把堆顶元素也就是优先级最大的元素放到堆的末尾,其实就是数组的后面,然后把那个位置置为null,最后下潜调整一下堆的结构。至于堆这种数据结构,它通常是一个特殊类型的二叉树,其中父节点的值总是大于等于(最大堆)或小于等于(最小堆)其子节点的值。peek方法直接从最大堆的堆顶去找就ok了,最大堆的堆顶永远是最大优先级的,因为offer中给它这么排列了。

2023-08-30 00:06:41 166

原创 java数据结构系列,第四篇:双端队列

双端队列(Double-ended queue,简称Deque)是一种数据结构,允许在队列的两端进行插入和删除操作。它可以被看作是一个允许元素插入和删除的线性表,但与普通队列不同,双端队列支持在队列的头部和尾部进行插入和删除操作,因此具有更加灵活的使用方式。双端队列在很多算法和数据结构问题中都有广泛的应用,因为它的灵活性使得它可以同时满足栈和队列的需求。这使得双端队列可以像栈一样用于一些问题,比如实现逆序计算或其他需要后进先出(LIFO)操作的场景。这使得双端队列保持了队列的性质,即先进先出(FIFO)。

2023-08-22 23:16:26 579 1

原创 java算法系列,第十四篇:栈的应用(括号配对,逆波兰表达式(后缀表达式),中缀转后缀)

逆波兰表达式(Reverse Polish Notation,RPN),也称为后缀表达式,是一种数学和计算机科学中的表达式表示方法。在逆波兰表达式中,操作符位于操作数的后面,这种表示方法可以消除括号,使运算顺序更加清晰。更复杂的表达式也可以用逆波兰表达式表示,如 "(5 + 2) * 3" 可以表示为 "5 2 + 3 *"。逆波兰表达式在计算器、编程语言的解释器以及某些计算机科学应用中被广泛使用,因为它提供了一种直观且不需要解析括号的方式来表示和计算算术表达式。,判断字符串是否有效。

2023-08-20 00:28:41 350

原创 java数据结构系列,第三篇:栈

栈(Stack)是一种线性数据结构,它遵循“后进先出”(Last In First Out,LIFO)的原则。这意味着最后进入栈的元素将首先被移除,而最先进入栈的元素将被保留在栈的底部。栈可以使用数组或链表来实现。在编程中,栈的应用能够帮助处理各种问题,特别是需要按照特定顺序管理数据时。栈在计算机科学中有广泛的应用,如函数调用、表达式求值、内存管理、回溯算法等。再用数组来实现,数组的话将最后一个元素作为栈顶。以下是栈的实现方式。

2023-08-19 20:19:10 69

原创 java数据结构系列,第二篇:简单的二叉树实现方式

二叉树(Binary Tree)是一种常见的树状数据结构,其中每个节点最多有两个子节点。这两个子节点被称为左子节点和右子节点。每个节点都包含一个值和可能为空的指向其子节点的链接。下面是创建一个二叉树对象,并且按层打印节点值。

2023-08-19 18:47:54 65

原创 java数据结构系列,第一篇:队列

简单来说,队列就像是排队等候服务的人群,最先到达的人将首先接受服务,而后到达的人则需要等待前面的人完成服务后才能接受服务。int 是不是有个长度限制,最大支持到2147483647,超出会变成负数,而head,tail 会一直自增,但是数组索引只支持int 类型,且必须为正数,所以我们要处理一下,不然超出范围就不行了。而一个2的n次方 - 1 的数作为除数,那它的余数在二进制上,就等于 被除数 & 除数。然后加一,就是扩容后的容量的那个2的次方,保证了其始终为2的n次方。采用二进制运算 ‘按位与’:‘&’

2023-08-19 17:51:41 138

原创 java算法系列,第十三篇:弗洛伊德龟兔算法----判断一个链表是否有回环

它基于两个指针,一个称为“龟”(tortoise)指针,另一个称为“兔”(hare)指针。算法的核心思想是,如果链表中存在回环,那么龟兔指针最终会在某一点相遇。在计算机科学中,一个链表可以被描述为一系列节点,每个节点包含数据和指向下一个节点的引用。当一个链表中的某个节点的引用指向之前的某个节点,就会形成一个回环。换句话说,链表的末尾节点连接到了链表中的某个前面节点,导致链表成环。这是因为,当龟兔指针进入回环部分后,它们的相对速度就像是在一个环形跑道上,兔指针的速度是龟指针的两倍。

2023-08-16 19:30:24 89

原创 java算法系列,第十二篇,判断回文链表

由于第一种方式走了三次循环,所以它的时间复杂度不理想,现在采用 ’找中间节点的同时将前半段反转‘ 的方式来减少一个循环。使用快慢指针法找中间节点,让p1一次走一步,p2一次走两步,等p2走完了,p1刚好走了一半,这样就找到中间节点了。[1,2,2,1] 倒过来仍然是[1,2,2,1],啊,“上山西去运煤,煤运去西山上” 就是这个感觉。* 步骤1:找中间节点的同时将前半段反转。* 步骤2:比较前半段的反转与后半段。* 步骤2:将中间节点后半段反转。步骤2:将中间节点后半段反转。* 步骤1:找中间节点。

2023-08-16 19:08:13 123

原创 java算法系列,第十一篇:合并有序链表

这个就先用递归先合并成两个链表,然后再调用上面的合并两个链表的方法去合并就行了。这种方式的话就不需要另外再新创建一个新链表,直接拿原来节点去组合。要求合并成一个新的有序列表:[1,2,3,4,8,9]以上两种方法都是合并两个有序链表,如果是多个呢?

2023-08-16 18:23:07 348

原创 java算法第十篇,有序链表去重

递归思路就是拿第一个节点跟后面的一个比较,如果相等,跳过第一个节点,返回从第二个节点开始去重后的所有节点,通过递归调用的方式往后面比下去,如果两个节点的值不相等,那就给从第二个开始的后面的节点去重,最后返回头节点。就是让p1一开始指向头节点,p2指向它的下一个节点,然后去比较,如果p1=p2就让p1指向p2的下一个节点,然后更新一下p2,只要p2不为空,就一直往下面循环比下去。现在有这么一个链表[1,1,2,3,4,5,5,5],要求你去去重,最后得到[1,2,3,4,5]

2023-08-13 10:12:33 127

原创 java算法系列,第九篇:删除链表的倒数第n个节点

给你一个链表[1,2,3,4,5],现在要你删除倒数第2个节点,怎么办?这个其实是力扣上面的一道题目。

2023-08-11 20:22:13 257

原创 java算法系列第八篇,链表:通过值删除所有匹配的节点

【代码】通过值删除所有匹配的节点。

2023-08-10 19:54:25 70

原创 反转链表(4):一个链表模拟两个链表

在介绍反转链表(2)时,我们创建了一个容器类并封装了add和remove 方法来实现在使用原来节点的情况下实现反转。

2023-08-10 18:15:04 61 1

原创 java算法系列,第七篇:反转单向链表(1)

reverseList方法用于构建一个新的链表,让最后一个节点的值等于传进来的第一个第一个链表的第一个节点的值(ListNode node1=new ListNode(1,node2);这里的node1就是第一个链表的第一个节点),然后下一个节点指向已经创建好的下一个节点,当然,下一个节点的初始值为null,因为最后一个节点的后面没有没有节点了。,请你将这个链表反转,并返回反转后的链表的头节点。依次往复,直到第一个链表的最后一个节点。问题描述:给定一个单链表的头节点。用于构建一个1-5的链表。

2023-08-08 18:11:20 55

原创 反转链表(3):递归

没错,完了,就这点。

2023-08-08 18:09:46 34

原创 反转链表(2)

这里就是把原来的头节点一次又一次的移到新的链表中去作为新链表的头节点,比如第一次移了1,第二次2,第三次3.....,那么新节点的头节点第一次为1,第二次2,第三次3,最后就是5,这样就完成了倒序。上次采用了创建一个新的链表和节点的方式来实现倒序,现在我们改用创建一个新的链表,然后把原来的节点移过去的方式来实现。

2023-08-08 16:09:06 23

原创 java算法系列,第六篇:杨辉三角

我们看它每一行都会存在一些重复的值,如果不进行算法优化,它每一个都要计算一次,就比如蓝色和紫色方框都圈中的那个3,这完全没有必要,而且大大增加了时间复杂度。先创建一个数组长度和行数相同的一维数组,由于正三角形的行数最大长度和列数最大长度一致,所以这个数组足以满足所有行的列数的长度要求。后面一行的第n个数是不是等于前一行的第n个数加上它前面那个数,那么就 row[i]=row[i]+row[i-1];第一种方式:将计算出来的数存进一个二维数组,当计算下一个数值时,优先去数组里找,找不到才计算。

2023-08-04 18:39:51 239 1

原创 java算法系列,第五篇:汉诺塔问题

印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片,一次只移动一片,不管在哪根针上,小片必在大片上面。他的递归思想就是先把问题分成大三步,再在每个问题依次这么去分解,最后把所有大问题都解决掉,问题就ok了。最难的就是第二步赛进去,那就把第二步分解成小问题,依次解决掉,最后“塞进去”这个大问题就OK了,然后门一关就完事了。3.把b移到c,为了实现这一步就必须先把b上面那个移到空出来的a。

2023-08-03 19:53:54 87

原创 java算法系列,第四篇:斐波拉契数列

比如说当求f(6)时他会分别去求f(5)和f(4),当球f(5) 时他去分别求f(4)和f(f3),那么这里面f(4)是不是被单独计算了两次。这样就增加了时间复杂度。现在我们创建一个数组,把所有未知数全设为-1;当第一次计算出来一个值后,就把相应数组索引位置的数改成所求得的值。这样,每个数就只要求一次了。

2023-08-02 16:02:01 98

原创 java算法系列,第三篇:插入排序

插入排序算法是一种简单但效率较低的排序算法,在数据量较大的情况下性能可能较差。对于大规模数据的排序,推荐使用更高效的排序算法,如快速排序或归并排序。但对于小规模数据,插入排序在代码实现上较为简单,可以满足需求。用于遍历整个数组,从第二个元素(索引为1)开始,因为一个元素的数组可以认为是已排序的。向前移动一位,继续比较前一个元素,直到找到。,表示当前要比较的数的前一个数的下标。在每次循环中,记录当前要比较的数为。循环结束后,整个数组将被排序完成。循环遍历打印排序后的数组元素。在找到合适位置后,将。

2023-08-01 18:01:18 34 1

原创 java算法系列:第二篇——冒泡排序

由于每一轮循环后,已经确定的最大元素会被放置到正确的位置,所以在后续的循环中就不再需要对已排序的元素进行比较,因此可以逐渐缩小内层循环的范围。表示排序的轮次,初始轮次为0,每一轮循环都会将未排序区间的最大元素“冒泡”到正确的位置。由于每一轮循环都会将最大的数放到最后,因此可以将循环次数逐渐减少。上面那个带 @Test 注解的方法是一个测试方法,相当一个入口函数,后面那个sort()方法才是本次算法的主体;的大小,如果前面的数比后面的数大,就交换它们的位置,将较大的数往后移动。在内层循环中,通过比较。

2023-08-01 17:12:27 33 1

原创 二分查找法(5):递归

但是这种方式在数据量大的时候它的性能时不及循环方式的,它会因多次递归而产生很多额外开销,甚至如果数据量过大的会话还会导致栈溢出,所以只推荐在数据量小的场景下使用。使用改变调用参数的方式来递归调用 f(...) 方法的方式来替代循环方式,这样是不是更容被读懂呢。二分查找法也可以使用递归的方式来实现,当数据量小时,可以使用递归来使代码更容易理解。这里用一个公开类来调用内部私有类的方式来简化这个整体方法的调用参数,便于调用者使用。

2023-07-30 18:15:48 126 1

原创 二分查找法(4):LeftMost&RightMost——查找最左和最右边的值

不定义候选变量,后面不是要处理j=m-1/i=m+1吗,索性最后就输出j+1,i-1都是一样的,我看很多视频还专门拎出来讲解一番,简直侮辱人的智商。这里的思路是:先定义一个候选变量,每次符合条件就迭代这个候选变量,如果要向左找最左边的就继续j=m-1,同理,最右就i=m+1。

2023-07-28 15:15:50 190 1

原创 二分查找法(3):大体上减少循环中的判断次数

由于前面的算法while循环内都是采用if-else来做判断,所以会导致一个问题:如果查找值没有刚好处在中间值的位置,那么它每循环一次,都要判断两次。现在我们修改一下:循环内只做范围筛选,最后剩下一个数,另外再去判断它是不是我们要的数。这样每循环一次就减少一次判断,大体上减少了时间复杂度。

2023-07-24 00:12:55 42

原创 二分查找法(2):二分查找法的变种—右开区间

【代码】二分查找法(2):二分查找法的变种—右开区间。

2023-07-23 23:02:58 28

原创 Java 算法系列,第一篇:二分查找法

可以看出用了二分查找法后,这次程序效率上足足快了42倍不止吧。可以看到测试结果显示用时不到1ms。

2023-07-20 22:51:29 64 1

原创 创建简单的图片轮播效果

最后,我们调用startSlideshow函数启动轮播,并为轮播图容器添加鼠标移入和移出事件监听函数,以便在鼠标悬停时停止自动切换,移出时继续自动切换。最后,通过调用startSlideshow函数启动轮播图,并添加鼠标移入移出事件监听函数,用于控制轮播的开始和停止。我们还定义了图片(img)的样式,使其适应容器,并使用display属性的none值隐藏所有图片。为了创建控制按钮,我们设置了li标签的样式,包括宽度、高度、边框、边框半径等,并使用相对定位和偏移来实现垂直居中效果。希望本篇博客对你有所帮助!

2023-06-01 19:33:26 294 1

原创 Java web Servlet 三层架构(对比.net 三层架构)

我这里用了接口来对方法的层与层之间的调用做了一个统一规范,您要嫌麻烦直接就写一个GradeDao(命名规范通常以Dao结尾)这样类似的类的就好了,然后增删改方法搞里头,毕竟三层架构只是一种思想,具体实现还得看您自己。上面我那个删除功能用的是ajax局部刷新,下面那个展示编辑页的数据用了同步,还是那句话,具体看您。而java中习惯性叫法略有不同,也只是叫法不同,思想还是一样的,java叫:DAO(数据持久),Service(服务层),Servlet(PL表示层),同常也带一个辅助层。调用Dao层的类和方法。

2023-05-31 00:38:22 465 1

原创 JAVA中的“using(){}语法糖”

try-with-resource会在代码块执行完后自动释放括号内的资源。代码操作......catch(异常类)

2023-05-24 19:03:54 534 1

原创 关于linux下chmod 命令的二进制表达式,你应该能看懂

2^1=2,23,那么第一个位置上的数不可取,直接标0,2^0=1,1=3-1*2,所以是1*2,直接给1。但是我们的需求是要将3转成011,这又该怎么办?二的二次方也就是2^2=4,4*0=0;比如:二进制数011是个啥?没错二进制数011就是3。

2023-05-12 14:32:16 139 1

原创 这应该是全网首篇,c#调用Betalgo.OpenAI.GPT3库,实现简单的gpt连贯对话

cr.Messages.Add(ChatMessage.FromUser(Console.ReadLine())); await GetResult(openAIService, completionResult,cr);//维持现有会话不变,继续问答

2023-03-25 19:31:50 2056 9

原创 (超简单基础版)ASP.NET(.Net Framework)三层架构,结合sql server实现登录与注册

第一步:首先创建一个Models类库(解决方案上)1.使用面向对象的方法封装一个UserInfo类public class UserInfo { public UserInfo() { } public UserInfo(int id, string uid, string pwd, string name, int age, string gender) { this.id = id;...

2022-03-08 21:12:29 1977

空空如也

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

TA关注的人

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