- 博客(54)
- 资源 (2)
- 收藏
- 关注
原创 滑动窗口例题
思路:1、暴力解法:两层for循环遍历,当sum >= target时计算子数组长度并与result比较,取最小的更新result。提交但是超出了时间限制。2、滑动窗口:所谓滑动窗口,。在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。滑动窗口也可以理解为双指针法的一种!只不过这种解法更像是一个窗口的移动,所以叫做滑动窗口更适合一些。。
2024-04-13 15:34:11
584
原创 统一处理异常和记录日志
SpringBoot设计,如果出现错误404或500,自动调用特定路径下的html页面(路径和名字都特定)。程序中有错误自动就调用该页面。但是错误有@ControllerAdvice 是 Spring MVC 中的一个注解,用于定义全局控制器的通知(advice)。它允许您在整个应用程序范围内定义对控制器的异常处理、绑定属性以及其他全局控制器通知的方法。
2024-04-10 15:50:47
1050
原创 Java项目中使用事务
使用Spring框架:Spring框架提供了声明式事务管理的支持。通过在方法上添加@Transactional注解,可以将方法声明为一个事务性方法。在Java中,声明式事务是通过注解或XML配置的方式来实现的,主要用于管理方法或类的事务处理。Spring框架是Java中最常用的实现声明式事务的工具之一。使用Spring的TransactionTemplate是在Java中实现编程式事务的一种便捷方式。它封装了事务管理的细节,简化了事务处理的代码,同时提供了更加灵活的事务控制。
2024-04-09 16:11:39
380
原创 java开发实习面试
略,以及两道接口测试代码题目索引可以帮助我们快速搜索数据,innodb 存储引擎用的是 b+树索引,叶子节点存放的是索引+数据,非叶子节点只存放索引。可以按照四个角度来分类索引。按数据结构分类:B+tree索引、Hash索引、Full-text索引。按物理存储分类:聚簇索引(主键索引)、二级索引(辅助索引)。按字段特性分类:主键索引、唯一索引、普通索引、前缀索引。按字段个数分类:单列索引、联合索引。查看存在索引的sql语句。
2023-06-14 14:56:44
1762
原创 kafka命令及启动,MacOS
将listeners和advertised.listeners的值用主机名进行替换,在外用使用java进行生产者或消费者连接的时候,不填写具体的IP,填写安装。的主机名,然后,在hosts目录中,配置该主机名对应的真是IP地址即可;默认内网访问,要在外网访问的话,需要在修改config/server.在服务器上打开一个生产者,然后把输入的每行数据发送到kafka中的命令。#后面光标提示数据数据,然后回车就会发送到kafka中了。列举拥有哪些topics。以下命令都是摘抄与官网。然后启动kafka服务。
2023-04-06 15:17:39
521
1
原创 代码随想录算法训练营第31天|贪心算法——跳跃游戏
从图中可以看出来,就是移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。最后的步数就是最少步数。这里还是有个特殊情况需要考虑,当移动下标达到了当前覆盖的最远距离下标时。
2022-11-26 15:52:54
147
原创 代码随想录算法训练营第30天|回溯总结
所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。
2022-11-18 14:25:46
157
原创 代码随想录算法训练营第29天|* 491.递增子序列* 46.全排列* 47.全排列 II
一样,可以不加终止条件,startIndex每次都会加1,并不会无限递归。可以看出元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用startIndex了。而本题求自增子序列,是不能对原数组经行排序的,排完序的数组都是自增子序列了。本题其实类似求子集问题,也是要遍历树形结构找每一个节点,所以和。多了一个去重,排序一下数组,在回溯的时候加判断条件去重。这又是子集,又是去重,是不是不由自主的想起了刚刚讲过的。中我们是通过排序,再加一个标记数组来达到去重的目的。
2022-11-01 23:28:48
612
原创 代码随想录算法训练营第28天|● 93.复原IP地址 ● 78.子集 ● 90.子集II
力扣切割问题可以抽象为树型结构,如图:在131.分割回文串 (opens new window)中我们就提到切割问题类似组合问题。startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。本题我们还需要一个变量pointNum,记录添加逗点的数量。终止条件和131.分割回文串 (opens new window)情况就不同了,本题明确要求只会分成4段,所以不能用切割线切到最后作为终止条件,而是分割的段数作为终止条件。pointNum表示逗点数量,pointNum为3说明字符串分成了4
2022-10-30 16:49:27
804
原创 代码随想录算法训练营第25天|216.组合总和III● 17.电话号码的字母组合天|
再来看参数,参数指定是有题目中给的string digits,然后还要有一个参数就是int型的index和numString映射表。(这个index是记录遍历第几个数字了,就是用来遍历digits的(题目中给出数字字符串),同时index也表示树的深度。那么终止条件就是如果index 等于 输入的数字个数(digits.size)了(本来index就是用来遍历digits的)。例如输入用例"23",两个数字,那么根节点往下递归两层就可以了,叶子节点就是要收集的结果集。然后收集结果,结束本层递归。
2022-10-27 17:00:50
902
原创 学习笔记:《微服务架构设计模式》之服务的拆分策略
软件架构的定义:计算机系统的软件架构是构建这个系统所需要的一组结构,包括软件元素、它们之间的关系以及两者的属性。逻辑视图:开发人员创建的软件元素。在面向对象的语言中,这些元素是类和包。它们之间的关系是类和包之间的关系,包括继承、关联和依赖。实现视图:构建编译系统的输出。此视图由表示打包代码的模块和组件组成,组件是由一个或多个模块组成的可执行或可部署单元。在Java中,模块是JAR文件,组件通常是WAR文件或可执行JAR文件。它们之间的关系包括模块之间的依赖关系以及组件和模块之间的组合关系。
2022-10-27 16:47:56
1931
1
原创 代码随想录算法训练营第24天|回溯理论基础、77.组合
回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,那么既然回溯法并不高效为什么还要用它呢?因为没得选,一些问题能暴力搜出来就不错了,撑死了再剪枝一下,还没有更高效的解法。回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。for循环就是遍历集合区间,可以理解一个节点有多少个孩子,这个for循环就执行多少次。backtracking这里自己调用自己,实现递归。大家可以从图中看出,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了。
2022-10-26 19:32:09
955
原创 学习笔记:《微服务架构设计模式》之逃离单体地狱
微服务架构的模式语言是一组模式,可帮助架构师使用微服务架构构建应用程序。图1-10显示了模式语言的结构。模式语言首先帮助架构师决定是否使用微服务架构。它描述了单体架构和微服务架构,以及它们的好处和弊端。然后,如果微服务架构非常适合当前的应用程序,那么模式语言可以帮助架构师通过解决各种架构和设计问题来有效地使用它。
2022-10-26 15:58:51
349
原创 代码随想录算法训练营第23天|669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
1、如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点。2、如果root(当前节点)的元素大于high的,那么应该递归左子树,并返回左子树符合条件的头点。3、接下来要将下一层处理完左子树的结果赋给root->left,处理完右子树的结果赋给root->right。
2022-10-23 20:42:19
1081
原创 代码随想录算法训练营第22天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
在中,如果递归函数有返回值,如何区分要搜索一条边,还是搜索整个树。本题就是标准的搜索一条边的写法,遇到递归函数的返回值,如果不为空,立刻返回。
2022-10-21 22:33:34
1293
原创 代码随想录算法训练营第21天|530. 二叉搜索树的最小绝对差、二叉搜索树中的众数、236.二叉树的最近公共祖先
思路:依然是使用中序遍历,在递归中计算最小绝对差,与上一题不同的是要记录一下前继节点。
2022-10-21 18:42:03
1044
原创 代码随想录算法训练营第20天|654.最大二叉树、合并二叉树、700. 二叉搜索树中的搜索、98.验证二叉搜索树
思路:1、找终止条件:因为是传入了两个树,那么就有两个树遍历的节点t1 和 t2,如果t1 == NULL 了,两个树合并就应该是 t2 了啊(如果t2也为NULL也无所谓,合并之后就是NULL)。反过来如果t2 == NULL,那么两个数合并就是t1(如果t1也为NULL也无所谓,合并之后就是NULL)。中序遍历,一直更新maxValue,一旦发现maxValue>= root.val,就返回false,注意元素相同时候也要返回false。思路1:自己独立写的,用中序遍历,判断是否为一个递增的序列。
2022-10-19 22:32:57
1266
原创 代码随想录算法训练营第18天|513. 找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树
思路:使用层序遍历,记录每层的第一个元素,结束之后记录的值便是最左下角的值。或者调整层序遍历进队的顺序,先进右边的元素,结束之后,最后一个元素便是最左下角的值。
2022-10-15 20:44:40
1549
原创 代码随想录算法训练营第17天|平衡二叉树、二叉树的所有路径、左叶子之和
思路:采用后序遍历,递归三部曲,返回条件为遇见空节点往上返回,按照后序,先进行左右递归,接受递归返回的值,逻辑处理部分为访问左叶子,也就是root的左孩子是一个叶子结点,将此叶子节点的值赋给midValue,再return总的sum也就是各个左叶子的和。思路:求高度使用后续遍历,求深度则使用前序遍历,所以先写左右子树的递归部分并且判断左右子树是不是平衡二叉树,在递归部分之后写逻辑部分即左右子树高度差大于1返回-1,在主函数里判断最后返回的值是否是-1,是的话则不是平衡二叉树。二、二叉树的所有路径。
2022-10-14 14:50:35
1667
原创 代码随想录算法训练营第15天|层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2
思路:首先想的的方法是递归翻转每个节点的左右孩子,按照三部曲编写代码,单层逻辑只需要简单交换当前节点的左右孩子,然后按照前序遍历的递归顺序进行递归。思路:利用了双端队列,将一层的节点先放入队列之中,从队列的左边取出节点和队列从右边取出的节点进行比较,进而判断二叉树是否对称。思路:借助队列将每一层的节点放进队列,出队的时候如果左右孩子不为空,则加入队列。三、101.对称二叉树 2。二、226.翻转二叉树。
2022-10-13 21:20:21
1886
原创 代码随想录算法训练营第14天|● 递归遍历 ● 迭代遍历● 统一迭代
【代码】代码随想录算法训练营第14天|● 递归遍历 ● 迭代遍历● 统一迭代。
2022-10-11 21:54:47
2029
原创 代码随想录算法训练营第13天|150. 逆波兰表达式求值● 239. 滑动窗口最大值● 347.前 K 个高频元素
思路:先统计元素出现的频率,考虑使用map集合。为了找到前k个高频的元素,需要对这k个高频的元素进行排序,直接将所有元素进行排序效率比较低,因此采用小顶堆的方式只维护k个元素,有频率比较高的元素入堆,便将最小频率的元素移除小顶堆。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。采用这个来构成小顶堆。map.put("C语言入门教程", "http://c.biancheng.net/c/");一、150. 逆波兰表达式求值。
2022-10-11 16:31:31
2315
原创 代码随想录算法训练营第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
2、非递归方法,借助队列存储,层序遍历。四、222.完全二叉树的节点个数。一、104.二叉树的最大深度。一、104.二叉树的最大深度。思路:1、递归三种方式都可以。二、559.n叉树的最大深度。三、111.二叉树的最小深度。思路:递归遍历二叉树。
2022-10-08 19:11:38
2271
原创 代码随想录算法训练营第11天|232.用栈实现队列● 225. 用队列实现栈● 20. 有效的括号● 1047. 删除字符串中的所有相邻重复项
思路:使用两个栈来模拟队列,出栈队列不为空的时候,将入栈队列的元素移动到出栈队列。四、1047. 删除字符串中的所有相邻重复项。二、225. 用队列实现栈。一、232.用栈实现队列。三、20. 有效的括号。
2022-10-04 19:59:28
2405
原创 代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符
代码随想录算法训练营第八天|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符
2022-09-28 20:55:16
2862
原创 代码随想录算法训练营第七天|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和
代码随想录算法训练营第七天|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和
2022-09-28 10:56:54
2895
原创 代码随想录算法训练营第五天|242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和
代码随想录算法训练营第五天|242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和
2022-09-26 20:43:20
3064
原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点 ,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II
代码随想录算法训练营第四天|24. 两两交换链表中的节点 ,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II
2022-09-24 17:13:42
3363
原创 代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
2022-09-22 16:44:24
4045
原创 从中序与后序遍历序列构造二叉树(Java)
使用Map保存中序序列方便在后序序列中查找,findNode函数参数为中序数组、中序数组左边界、中序数组右边界、后序数组、后序数组左边界、后序数组右边界。思路:以后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来在切后序数组。第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第五步:切割后序数组,切成后序左数组和后序右数组。第一步:如果数组大小为零的话,说明是空节点了。.
2022-08-02 21:12:56
947
原创 Java8新特性-Lambda表达式笔记
/匿名内部类实现接口@Test}};//传递com}//Lambda表达式@Test//传递com}}如上代码是一般方法,每次改变if中的条件进行筛选,但是比较冗余。}}});}}}}
2022-07-26 10:07:16
60
原创 学习笔记:基于SpringBoot的牛客网社区项目实现(一)之M1环境下搭建开发环境
1.1 maven环境的安装1.1.1 下载打开 Maven 官方下载页面:Maven,点击下载链接即可开始下载:在这之前先下载好JDK,在终端输入命令行查看:java -version1.1.2 安装安装不想写省略,推荐链接:Mac Maven 安装及配置 - 知乎m1芯片苹果电脑一分钟快速学会安装maven及其环境变量配置_哔哩哔哩_bilibili1.1.3 创建maven项目在maven官网的首页复制如下命令进行创建maven项目选择创建项目存放路
2022-05-27 16:12:25
271
原创 Vue项目中sass-loader版本踩坑
Vue项目中sass-loader版本踩坑版本不对应,搞了好久,解决了。先把电脑的node sass卸载npm uninstall node-sass npm uninstall sass-loader 查看本机的node的版本 ,如下。node-v然后在官网查看对应的版本,官网网址https://www.npmjs.com/package/node-sass比如我目前的版本是16.13.2,查看对应的版本,我的是6.0+,所以我安装npm install node-sass@
2022-01-25 15:45:05
1241
原创 数据结构二叉排序树创建,插入,查找(C语言)
#include<stdio.h>#include <stdlib.h>typedef int ElemType;//二叉排序树节点 typedef struct BSTNode{ int key; struct BSTNode *lchild,*rchild;}BSTNode,*BSTree;//在二叉排序树中查找值为key的结点BSTNode *BST_Search(BSTree T,int key){ while(T!=NULL && key
2021-06-08 22:48:29
835
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人