- 博客(13)
- 收藏
- 关注
原创 asyExcel导入存在合并单元格的Excel
Excel表格下面是Excel表格,成果简介前可以作为主表数据存储(存在合并),成果简介后的数据作为从表数据存储。实现思路通过EasyExcel读取Excel数据,用List<AwardsDetailField> list接收因为POI/EasyExcel对合并单元格的数据只读取一次,需要把为空的单元格也赋值,这是核心技术难点。循环使用hibernate-validator对数据进行校验存在校验不通过的数据返回给前端,所有数据校验通过才写入数据库封装然后写入数据库用
2022-05-24 22:15:33
1236
原创 电商秒杀实战代码
“商品秒杀”功能模块是创建在“商品详情”功能模块的基础之上,对于这一功能模块而言,其主要的核心流程在于:前端发起抢购请求,该请求将携带着一些请求数据:待秒杀Id跟当前用户Id等数据;后端接口在接收到请求以后,将执行一系列的判断与秒杀处理逻辑,最终将处理结果返回给到前端。其中,后端接口的这一系列判断与秒杀处理逻辑仍是挺复杂的,Debug将其绘制成了以下的流程图:git从该业务流程图中能够看出,后端接口在接收前端用户的秒杀请求时,其核心处理逻辑为:(1)首先判断当前用户是否已经抢购过该商品了,若
2022-05-10 10:26:04
737
原创 HashMap底层实现原理解析
一:HashMap底层实现原理解析我们常见的有数据结构有三种结构:1、数组结构 2、链表结构 3、哈希表结构 下面我们来看看各自的数据结构的特点:1、数组结构: 存储区间连续、内存占用严重、空间复杂度大优点:随机读取和修改效率高,原因是数组是连续的(随机访问性强,查找速度快)缺点:插入和删除数据效率低,因插入数据,这个位置后面的数据在内存中都要往后移动,且大小固定不易动态扩展。2、链表结构:存储区间离散、占用内存宽松、空间复杂度小优点:插入删除速度快,内存利用率高,没有固定大小,扩展灵活缺
2022-02-28 11:04:27
1066
1
原创 mysql 中关于获取行号@rownum:=@rownum+1
mysql中没有获取行号的函数,因此需要通过一些自定义语句来进行获取。通常做法是,通过定义用户变量@rownum来保存表中的数据。通过赋值语句@rownum:=@rownum+1来累加达到递增行号。例如:select a.* ,@rownum:=@rownum+1 from a,(select @rownum:=0) r; 后半部分语句的select @rownum:=0 相当于创建了r的新表,其表的列为@rownum,数值为0.通过利用变量将@rownum的行进行重新赋值,并显示。可以应用于获..
2021-11-25 09:54:07
2217
原创 RabbitMQ如何防止消息丢失及重复消费
一、RabbitMQ出现消息丢失的情况及其解决办法如图所示,RabbitMQ丢失消息的情况可以发送在任何一个节点。1.1 生产者没有成功把消息发送到MQa、丢失的原因:因为网络传输的不稳定性,当生产者在向MQ发送消息的过程中,MQ没有成功接收到消息,但是生产者却以为MQ成功接收到了消息,不会再次重复发送该消息,从而导致消息的丢失。b、解决办法: 有两个解决办法:事务机制和confirm机制,最常用的是confirm机制。事务机制: RabbitMQ 提供了事...
2021-10-22 15:55:03
299
原创 Postman请求头的使用
1 Authorization:身份验证,主要用来填写用户名密码,以及一些验签字段,postman有一个helpers可以帮助我们简化一些重复和复杂的任务。当前的一套helpers可以帮助你解决一些authentication protocols的问题。;2 Headers:请求的头部信息3 Body:post请求时必须要带的参数,里面放一些key-value键值对4 Pre-requerst Script:可以让你在 请求之前自定义请求数据,这个运行在请求之前,语法使...
2021-10-16 17:47:43
5986
原创 java stream
Stream流的创建方式 数组 Arrays.stream(T array); stream.of(array) Collection Collection.stream() Collection.parallelStream() BufferedReader java.io.BufferedReader.lines() 静态工厂 java.util.stream.IntStream.range() java.nio.file.Files.wa
2021-09-13 16:10:38
133
原创 Java8 常用的Stream流操作
概念:Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具。简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以将更多的控制权交给集合类。Stream 和 Iterator 的功能类似,只是 Iterator 是以外部迭代的形式处理集合数据的操作。在Java8以前,对集合的操作需要写出处理的过程,如在集合中筛选出满足条件的数据,需要一 一遍历集合中的每个元素,再把每个元素逐一判断是否满足条件,最后将满足条件的元素保存返
2021-09-13 15:58:27
292
原创 springCloud五大组件
二、简单介绍下什么是springCloud?“Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。” -----来自官网三、为了方便理解假设一个业务场景假设现在开发一个..
2021-09-01 15:31:44
374
原创 RabbitMQ系列如何保证消息的顺序性、消息不丢失、不被重复消费
如何保证消息的顺序性业务场景:我们需要根据mysql的binlog日志同步一个数据库的数据到另一个库中,加如在binlog中对同一条数据做了insert,update,delete操作,我们往MQ顺序写入了insert,update,delete操作的三条消息,那么根据分析,最终同步到另一个库中,这条数据是被删除了的。但是,如果这三条消息不是按照insert,update,delete顺序被消费,而是按照delete,insert,update的顺序被消费,那么最终这条数据是会保存到新库中的。这就导致了数
2021-08-31 11:43:34
5155
原创 分布式锁之Redis实现
加锁的过程很简单,就是通过SET指令来设置值,成功则返回;否则就循环等待,在timeout时间内仍未获取到锁,则获取失败。@Servicepublic class RedisLock { Logger logger = LoggerFactory.getLogger(this.getClass()); private String lock_key = "redis_lock"; //锁键 protected long internalLockLeaseTime = .
2021-08-30 10:51:14
117
原创 mysql
1.IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。2.case有两种语法,case value when, case when, 别忘了END结尾;返回值:then匹配到的值或else值,如果没有匹配到也没有else则返回NULL;-- 'one'mysql> SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;
2021-08-25 10:41:33
118
原创 正则表达式
一个定时任务表达式有5、6、7个组成,由空格分隔的时间元素。****************************************分隔符****重要内容已标红****从左至右,七位元素的含义如下:0 15 10 * * ? *1.秒(0–59)2.分钟(0–59)3.小时(0–23)4.月份中的日期(1–31)5.月份(1–12或JAN–DEC)6.星期中的日期(1–7或SUN–SAT)7.年份(1970–2099)各个时间可用值如下:秒0-59 , - * /
2021-08-25 10:37:34
238
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人