自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 博客总目录

博客目录一、eclipse二、Java三、Jquery四、MySQL五、Oracle六、其它

2020-03-09 11:29:11 272

原创 java实现系统文件管理

公司所做的项目需要别的系统向我们服务器上传文件,当我们需要查看这些文件什么时候上传的、文件数据是怎样的,只能去机房,排查问题效率较低,做此页面,可快速查看上传的文件信息,且可下载到本地查看。为了生产安全,不支持修改及上传文件,如果有的朋友想做,可自行查找资料。:实现系统文件的查询及下载。展示系统的文件信息,如文件名、文件大小、最后更新时间及权限等。好了,主要的代码就这些。

2024-09-16 22:00:08 525

原创 SpringBoot+Vue实现大文件上传(断点续传-后端控制(一))

主要的逻辑就是,首先在前端计算文件的md5,然后跟后端交互,查询该文件是否已上传过,上传过多少分片,如果上传分片的条数跟前端计算的分片数一样,返回-1,否则返回上传分片的条数,前端根据这个数判断是否还需要上传、从哪个分片开始上传,这样就避免了上传过的分片重复上传。针对第一个问题,我们可以保存每个分片的信息,如果下次再上传相同的文件时发现文件已存在且分片全部上传时,则可直接跳过,存在分片未全部上传时,返回未上传的分片下标;第二个问题,我们将文件分片后,如果分片较多,我们一个一个的上传文件块,效率还是比较低。

2024-09-01 21:20:04 897

原创 SpringBoot+Vue实现大文件上传(断点续传-前端控制)

在前一篇文章,我们写了分片上传来实现大文件上传,存在一个问题就是,中间失败的话需要重新上传,那样的话效率低,我们可以基于分片上传来用断点续传,当中间失败了我们可以从某个文件块开始上传而不是从头开始。这个其实可以有两个方案,一个是在前端控制,后端返回上传失败,我们就记住上传失败的文件块的下标,下次从这个下标开始上传即可;总结:这个方式基于分片上传,其实改动相对比较小,就是前端记录下文件块的下标,部分代码为模拟上传中断,方便大家测试,实际应用时可删除。

2024-08-25 21:19:57 567

原创 SpringBoot+Vue实现大文件上传(分片上传)

内存消耗:上传大文件时,如果一次性读取整个文件,会占用大量内存,甚至可能导致内存溢出。而分片上传每次只读取和上传一个小块,内存消耗更可控。服务器处理压力:一次性上传大文件会给服务器带来很大的压力,分片上传可以减轻服务器的负担,因为服务器可以逐片处理和存储文件。通过分片上传,可以绕过这些限制,使上传大文件成为可能。前几篇文章,可以用于较小文件的上传,对于较大文件来说,为了提高上传效率和可靠性,可以采用分片上传。带宽优化:分片上传可以更好地利用带宽资源,特别是在网络不稳定的情况下,分片上传可以避免带宽的浪费。

2024-08-18 23:59:19 429

原创 SpringBoot+Vue实现简单的文件上传(策略模式)

前两篇文章,我们上传了txt、Excel文件,其实文件类型有很多种,如果我们的upload组件没有上传文件类型的限制,那么同一个接口会上传多种文件,而类型不一样,其处理的方式也不一样。一种方式是写if判断,我们判断其类型,然后做特定的处理,那样代码会有大量if判断;另外一个可以使用策略模式来处理,简单来说就是定义一个接口,多个实现类,不同的文件类型使用不同的实现类。

2024-07-14 16:57:59 330

原创 SpringBoot+Vue实现简单的文件上传(Excel篇)

只能上传xls文件且大小限制为2M,选择文件后自动上传。

2024-07-14 16:32:48 594

原创 SpringBoot+Vue实现简单的文件上传(txt篇)

只能上传txt文件且大小限制为2M,选择文件后自动上传。

2024-07-14 09:47:20 394

原创 java自定义排序规则

背景:开发的一个查询功能,主要字段:账号、币种等,业务提供了一个显示顺序,没有什么规则的排序,例如 3,1,6,2 无规则的顺序思路:通过提供的顺序来指定排序规则代码:一/**通过提供的顺序,把他们放在list中,表中主键是账号和币种,我就把他们联合起来,这样list中就不会有重复的,就能保证他们的顺序是唯一的*/二/**排序方法的入口*/三/**自定义一个比较器,T 为比较的类型,可以是String,Integer,也可以是自己定义的对象类型*/@Override。

2024-04-17 10:57:10 356

原创 如何将数据库某列的值(如日期)作为表格的列名

如何将数据库某列的值(如日期)作为表格的列名需求:前端需要展示如下的二维表格,其中表格的日期是数据库表里data的值,每行不同的值是表格里的字段值,也就是需要将表里的数据行转列,列转行,本来想着通过sql和mybatis映射完成转换,但是搜了一下没有找到自己想要的方法,只好通过java代码来完成转换。前端代码:<template><div><el-form :model="searchForm" ref="searchForm" size="small" :inl

2023-10-26 19:15:00 581

原创 Nginx环境搭建、负载均衡测试

系统环境:win10,IDEA2020,JDK81.ngxin下载Nginx官网下载: http://nginx.org/en/download.htmlNginx有三种版本,分别是Mainline version(开发版)、Stable version(稳定版)、Legacy versions(早期版本)。一般选用稳定版本。Linux使用时选用中间的版本下载然后通过Xftp或Filezilla工具上传到Linux服务器上即可。也可以从浏览器上复制下载文件的URL地址后在服务器中使用wget命令进行下

2023-09-21 13:54:20 1112

原创 LC-买卖股票最佳时机

一开始我看这题属于动态规划,直接想着二维数组求解,先画下数组再写代码,写完提交,发现内存超出限制,想着二维太大,进行降维,降成一维后提交,显示时间超时了,把代码优化了一下,还是超时,所以肯定是两次嵌套循环太耗时,只能想着用一次遍历去解决了。计算公式:比如第一行第三列:是等于当天的价格5,减去买入的价格7,第二行第三列:当天价格5,减去买入的价格1,怎么知道买入的价格?第二行是第一天买入股票然后每天卖掉得到的收益,如第一天买入,收益-7,第二天卖掉就是第二天的价格-买入的价格=1-7=-6;

2023-08-23 19:45:00 256

原创 LC-路径总和

判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。做题前还是应该认真审题,本题在做之前没有看仔细,导致几次没有通过,一次是没注意必须走到叶子节点,一次是想着当前的值大于还需要的值时就返回,导致值为负数时的例子通不过。输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22。解释:由于树是空的,所以不存在根节点到叶子节点的路径。不存在 sum = 5 的根节点到叶子节点的路径。

2023-08-21 20:45:00 184

原创 LC-平衡二叉树

根据平衡二叉树定义,我们只需要遍历树的每个节点,获取他的左右子树的高度差,然后判断是不是平衡二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。输入:root = [1,2,2,3,3,null,null,4,4]输入:root = [3,9,20,null,null,15,7]:给定一个二叉树,判断它是否是高度平衡的二叉树。输入:root = []

2023-08-21 19:15:00 89

原创 LC-将有序数组转换为二叉搜索树

如果数组长度是奇数,则根节点的选择是唯一的,如果数组长度是偶数,则可以选择中间位置左边的数字作为根节点或者选择中间位置右边的数字作为根节点,选择不同的数字作为根节点则创建的平衡二叉搜索树也是不同的。如果没有要求二叉搜索树的高度平衡,则任何一个数字都可以作为二叉搜索树的根节点,因此可能的二叉搜索树有多个。确定平衡二叉搜索树的根节点之后,其余的数字分别位于平衡二叉搜索树的左子树和右子树中,左子树和右子树分别也是平衡二叉搜索树,因此可以通过递归的方式创建平衡二叉搜索树。输入:nums = [1,3]

2023-08-18 21:15:00 152

原创 LC-二叉树最大深度

思路:对于叶子节点,如9,15和7来说,他们的左右节点为空,可以认为他们的深度是1,;等于20,左右节点都有值,且他们深度是1,则20的深度就是2;等于根节点3,他的左节点深度是1,右节点20的深度是2,则对于3的最大深度是2+1。所以某节点的最大深度就是他左右节点深度最大值再加1。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。输入:root = [3,9,20,null,null,15,7]给定一个二叉树 root ,返回其最大深度。输入:root = [1,null,2]

2023-08-18 20:15:00 102

原创 LC-对称二叉树

以例1为例,想要树是对称的,是对于根节点1来说,左2应该等于右2;等于左2跟右2来说,左2的左3是等于右2的右3,左2的右4等于右2的左4,依次类推。描述:给你一个二叉树的根节点 root , 检查它是否轴对称。输入:root = [1,2,2,null,3,null,3]输入:root = [1,2,2,3,4,4,3]

2023-08-18 19:45:00 133

原创 LC-相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。输入:p = [1,2], q = [1,null,2]输入:p = [1,2,3], q = [1,2,3]输入:p = [1,2,1], q = [1,1,2]通过中序遍历,判断树的结构和节点的值是否相同。

2023-08-17 19:30:00 96

原创 LC-合并两个有序链表(解法1)

这题不是很难,我们可以新建个链表,然后遍历两个链表,将他们的值进行比较,小的就添加进新链表,然后后移一位,再进行比较。以例1为例,我们先将l1的1和l2的1比较,相等就将l1的1添加进新链表,然后后移,将l1的2与l2的1比较,l2的值小,将1添加进新链表,然后后移一位,下面就比较l1的2和l2的3,以此类推。输入:l1 = [1,2,4], l2 = [1,3,4]输入:l1 = [], l2 = [0]输入:l1 = [], l2 = []输出:[1,1,2,3,4,4]

2023-08-16 19:45:00 64

原创 LC-链表的中间节点(双指针)

思路:使用快慢指针,慢指针一次走一步,快指针一次走两步,这样当快指针走到链表尾部时,慢指针所在节点就是中间节点。描述:给你单链表的头结点 head ,请你找出并返回链表的中间结点。解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。双指针是比前面遍历和递归都要好的方法,代码量较少,使用内存也较小。输入:head = [1,2,3,4,5,6]输入:head = [1,2,3,4,5]解释:链表只有一个中间结点,值为 3。输出:[3,4,5]输出:[4,5,6]

2023-08-15 22:15:00 129

原创 LC-链表的中间节点(递归)

可以看见第一个节点没有参与,因为我们(head = head.next)跳过了第一个节点,是最后null为最后一个节点,所以我们把index/2后需要将下标向前移动一位。nodeIndex必须定义为局部变量,这样才能跟随节点,如果我们定义在方法里,跟index一样去增加,那递归返回时会发现每个节点下标都一样。解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。输入:head = [1,2,3,4,5,6]输入:head = [1,2,3,4,5]输出:[3,4,5]输出:[4,5,6]

2023-08-15 21:45:00 131

原创 LC-链表的中间节点(遍历)

解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。:给你单链表的头结点 head ,请你找出并返回链表的中间结点。:我们可以先把链表遍历一下获取其长度,然后再遍历到其中间节点。输入:head = [1,2,3,4,5,6]如果有两个中间结点,则返回第二个中间结点。输入:head = [1,2,3,4,5]解释:链表只有一个中间结点,值为 3。输出:[3,4,5]输出:[4,5,6]

2023-08-15 21:00:00 137

原创 LC-相交链表(解法2)

我们假设除了相交的长度为a,相交的长度为c,则A的长度为LA= a+c,同理,LB=b+c。我们让他们走到链表尾部的时候回到另外链表的头部,这样他们可以同时走到相交的节点。这时LA=a+c+b,LB=b+c+a。如果a,b的节点一直没有相同,则他们不相交,返回null。:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。注意,函数返回结果后,链表必须 保持其原始结构。:这题还可以使用双指针求解。

2023-08-15 20:15:00 113

原创 LC-相交链表(解法1)

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。思路:我们可以先获取两个链表的长度,以短的为准开始遍历两个链表,进行比较,当所指节点一样时,说明有相交,如果一直不相等则没有相交。此解法代码相对较多,容易理解一点,下一篇通过双指针求解。注意,函数返回结果后,链表必须 保持其原始结构。题目数据 保证 整个链式结构中不存在环。

2023-08-15 19:45:00 119

原创 LC-环形链表(找环的入口)

快慢指针一个起点,快指针的速度是慢指针的2倍,所以快指针走的距离也是慢指针的2倍,快 - 慢 = 慢,2b步就是多走的,那么慢指针走的就是2b步。另外,走a+nb步都是停在环的入口处,所以相遇后再走a步(a+2b)会走到入口,但是我们不知道a是多少,可以让一个指针(比如慢指针)回到起点,:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。然后两个指针每次都是走一步,走a步后就会在入口处相遇。思路:我们设起点到环入口是a步,环是b步,多走k步。例如慢指针走的是:a + 0 + k。

2023-08-14 18:45:00 282

原创 LC-环形链表

如果一个链表有环,当它进入环之后,就会沿着环一直走,这时如果我们新增一个指针,让他沿着链表走,某时某刻他们就会相遇,肯定需要一个快一个慢,这样才会快的追上慢的,如果每次移动的距离一样肯定不行。a指针首先在3处,b在0处,我们对比这两个节点是否相等(节点的值可能一样,所以不能拿节点的val去对比)。如果相等,说明有环;如果不相等,a向后移动到2,b向后移动2步也到2;这时判断a和b就是一样,所以有环。:给你一个链表的头节点 head ,判断链表中是否有环。我们创建a,b两个指针,a是慢指针,b是快指针。

2023-08-11 14:18:45 114

原创 LC-删除排序链表中的重复元素

这题其实不难,链表已经排序,我们只要把相邻的两个节点的值进行比较,如果相同,删除后面的节点(将当前节点的next指针指向它的下一个节点的下一个节点,这样当前节点的下一个节点就没有指针指向它,也就脱离了当前链表),如果不相同,指针后移一位。这里我新增一个头节点,因为返回的时候是返回第一个节点,相当于记住头在哪,返回的时候就是返回它的下一个节点。

2023-08-10 22:00:00 126

原创 LC-杨辉三角-记忆版

我们可以看到计算a[5][3]和a[5][4]时都需要a[4][3]的值,之前我们是需要每次用到都重新计算,这样就比较耗时,有没有办法记住已经算过的值呢,当下次用的时候直接获取就不用重新计算了,以空间来换取时间。我们可以新增一个二维数组,把计算的结果放到数组中,每次计算前先查看一下数组中是否存在,如果已存在就获取值,不存在再计算。

2023-08-10 21:30:00 177

原创 LC-杨辉三角

最后我们需要找到任意位置的数字是多少的规律,比如我们想要知道第i行第j列的数字是多少。我们看第3行第2列的2是由第2行第1列的1和第2行第2列的1加起来;第5行第3列的6是由第4行的第2列和第4行的第3列3加起来,所以。所以第n行的数据是根据它上一行的数据计算来的,也就是第n行数据是是由第n-1行数据计算来的。第三行的2就是它肩膀上两个1之和,其余的类似。靠一边之后,是一个n行n列的排列,下面我们来看下存在的一些规律。上图就是一个杨辉三角,每个数等于他左上角的数与右上角的数之和。

2023-08-10 21:00:00 147

原创 二分查找-Java

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

2023-07-29 10:25:43 142

原创 Java数据结构与算法--稀疏数组

某些场景下,二维数组保存的值大多数为0,只有少量不为0的值。这种情况下,没有意义的值(为0的数据)较多,我们可以将它压缩为较小的数组,保存其中有意义的值即可。常见的场景就是保存围棋、五子棋等的残局。网上说明挺多,可自行查找。数据结构与算法 栏目是本人自学时做的相关笔记与总结,有兴趣的可以关注查看。

2023-07-27 17:10:48 269

原创 VS Code 设置大小写转换快捷键

VS Code 没有默认的大小写转换快捷键,需要我们自己添加。

2023-07-25 15:24:43 5130

原创 idea集成jrebel完成热部署

idea集成jrebel完成热部署今天想把idea设置成热部署,结果按照教程设置完还是不行(一般教程请自行百度)。实在受不了了就集成jrebel插件来完成热部署一、下载插件首先在idea的settings里的plugs搜索jrebel,将插件安装,然后重启idea使其生效。二、下载反向代理工具下载地址:https://github.com/ilanyu/ReverseProxy/releases/download/v1.4/ReverseProxy_windows_amd64.exe下载完成

2023-07-19 11:57:43 450

原创 spring-aop入门

OOP(Object-Oriented Programming)面向对象编程,允许开发者定义纵向的关系,但并适用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用。AOP(Aspect-Oriented Programming),一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

2023-06-19 17:19:09 384

原创 IDEA复制代码有背景色

将此处的勾选去掉。

2023-05-26 13:35:15 1595

原创 java循环依赖

这三个缓存是按照相应的顺序依次使用的,即先从BeanDefinitionMap中查找,如果没有找到,则从BeanFactory缓存中查找,如果还没有找到,则从singletonObjects缓存中取,如果都没有找到,再创建实例并加入到singletonObjects缓存中。当我们创建A对象时,需要把B对象填充到A的b属性,当我们去容器里查找时,没有则会去创建B对象,同样需要把A对象填充到B的a属性,但这时容器里没有A对象,我们就需要去创建A对象,这时就陷入了循环。首先创建两个实体类:A和B。

2023-05-23 08:54:27 1366

原创 IDEA-GsonFormat插件(JSON转实体类)使用

有时候我们后端开发需要创建实体类,但是可能拿到的是json格式的参数,这时候我们去转实体类比较麻烦,当字段比较多的时候,也容易出错。GsonFormat插件可以帮助我们把json数据转成java实体。将json数据复制到框内,点击OK,可以在该页面修改字段类型和类型名称。打开创建快捷键:ALT+S。安装完重启IDEA。

2023-05-13 09:44:47 2851

原创 Java8 常用Lambda表达式

五、sorted+Comparator 排序。四、groupingBy分组。三、filter()过滤。一、list转map。二、list转set。

2022-11-27 23:37:32 521

原创 Vue实现复制功能

vue实现复制功能

2022-09-09 15:43:45 571 4

原创 Navicat 查看连接密码

navicat查看连接密码

2022-09-07 09:10:42 1317

空空如也

空空如也

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

TA关注的人

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