jjzjj

Spring Boot 分片上传文件

背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上传大文件过程中进行优化实时展现进度条,进行技术评估后针对框架文件上传进行扩展升级,扩展接口支持大文件分片上传处理,减少服务器瞬时的内存压力,同一个文件上传失败后可以从成功上传分片位置进行断点续传,文件上传成功后再次上传无需等待达到秒传的效果,优化用户交互体验,具体的实现流程如下图所示(javafhadmin.cn)文件MD5计算对于文件md5的计算我们使用spark-md5第三方库,大文件我们可以分片分别计算再合并节省时间,但是经测试1G文件计算MD5需要

SpringBoot Redis 解决重复提交问题

前言在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段:1、数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据。2、token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除token,下次请求再次判断token。3、悲观锁或者乐观锁,悲观锁可以保证每次forupdate的时候其他sql无法update数据(在数据

Redis分布式锁加锁案例

1.组件依赖首先我们要通过Maven引入Jedis开源组件,在pom.xml文件加入下面的代码:dependency>groupId>redis.clientsgroupId>artifactId>jedisartifactId>version>2.9.0version>dependency>2.加锁代码先展示代码,再带大家慢慢解释为什么这样实现://java项目fhadmin.cnpublicclassRedisTool{privatestaticfinalStringLOCK_SUCCESS="OK";privatestaticfinalStringSET_IF_NOT_EXIST="NX

面试 考察js基础不能不会的内容(第五天)

01、描述事件冒泡的流程基于DOM树结构,事件会顺着触发元素向上冒泡点击一个div,会一级一级向父级、爷级元素上冒泡,这个点击事件不仅能被这个div捕捉到,也能被他的父级、爷爷级…元素捕捉到例如:style>div{width:200px;height:200px;background-color:red;}style>divid="idv1">buttonid="btn">点击button>div>letaBtn=document.getElementById("btn")letoDiv=document.getElementById("div1")aBtn.onclick=function

面试 个人摸底监测 考察考察JS三座⼤⼭ 1. 原型和原型链 2. 作⽤域与闭包 3. 异步和单线程 (第四天)

01、如何判断⼀个变量是不是数组?letarr=[1,2,3,4]functionfun(){returnarrinstanceofArray}02、如何使⽤class实现继承?classfu{consructor(name,age)}classsonextendsfu{super(...arguments))}扩展://父类classPeople{constructor(name,age){this.name=name;this.age=age;}eat(){console.log("吃吃吃");}}//子类classStudentextendsPeople{constructor(name

面试 考察js基础不能不会的内容(第五天)

01、描述事件冒泡的流程基于DOM树结构,事件会顺着触发元素向上冒泡点击一个div,会一级一级向父级、爷级元素上冒泡,这个点击事件不仅能被这个div捕捉到,也能被他的父级、爷爷级…元素捕捉到例如:style>div{width:200px;height:200px;background-color:red;}style>divid="idv1">buttonid="btn">点击button>div>letaBtn=document.getElementById("btn")letoDiv=document.getElementById("div1")aBtn.onclick=function

面试 个人摸底监测 考察考察JS三座⼤⼭ 1. 原型和原型链 2. 作⽤域与闭包 3. 异步和单线程 (第四天)

01、如何判断⼀个变量是不是数组?letarr=[1,2,3,4]functionfun(){returnarrinstanceofArray}02、如何使⽤class实现继承?classfu{consructor(name,age)}classsonextendsfu{super(...arguments))}扩展://父类classPeople{constructor(name,age){this.name=name;this.age=age;}eat(){console.log("吃吃吃");}}//子类classStudentextendsPeople{constructor(name

javascript开发中函数注释的用法

简介: 不一定说任何函数方法都必须使用JSDoc,但是有一点要注意如果是自己封装的方法,有必要使用JSDoc,理由是可以让其他成员更容易的去了解你封装的方法的属性或返回值,这样可以降低维护成本和提高开发效率。什么时候对函数进行注释不一定说任何函数方法都必须使用JSDoc,但是有一点要注意如果是自己封装的方法,有必要使用JSDoc,理由是可以让其他成员更容易的去了解你封装的方法的属性或返回值,这样可以降低维护成本和提高开发效率。编码实战说明:函数(方法)注释也是多行注释的一种,但是包含了特殊的注释要求,参照JSDoc语法:/***函数说明*@关键字*/常用注释关键字:(只列出一部分,并不是全部)

一步步搞懂MySQL元数据锁(MDL)

某日,路上收到用户咨询,为了清除空间,想删除某200多G大表数据,且已经确认此表不再有业务访问,于是执行了一条命令‘deletefrombigtable’,但好长时间也没删完,经过咨询后,获知droptable删除表速度快,而且能彻底释放空间,于是又在另外一个session中执行了‘droptablebigtable’命令,但是这个命令并没有快速返回结果,光标一直hang在原地不动。最后找我们协助,在登录数据库执行‘showprocesslist’后发现drop语句的状态是‘waitingfortablemetadatalock’,而之前执行的另外一个delete语句依旧能看到,状态为‘upd

javascript开发中函数注释的用法

简介: 不一定说任何函数方法都必须使用JSDoc,但是有一点要注意如果是自己封装的方法,有必要使用JSDoc,理由是可以让其他成员更容易的去了解你封装的方法的属性或返回值,这样可以降低维护成本和提高开发效率。什么时候对函数进行注释不一定说任何函数方法都必须使用JSDoc,但是有一点要注意如果是自己封装的方法,有必要使用JSDoc,理由是可以让其他成员更容易的去了解你封装的方法的属性或返回值,这样可以降低维护成本和提高开发效率。编码实战说明:函数(方法)注释也是多行注释的一种,但是包含了特殊的注释要求,参照JSDoc语法:/***函数说明*@关键字*/常用注释关键字:(只列出一部分,并不是全部)