自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wl_Honest的博客

还差得远

  • 博客(69)
  • 收藏
  • 关注

原创 解决EasyPoi导出Excel文件后提示无法打开文件的问题

问题原因:请求头的Content-Length,在未设置的情况在是-1,下载时需重新定义Content-Length。

2022-11-15 16:25:14 4660 4

原创 CompletableFuture解决多线程返回结果问题

在Java中CompletableFuture用于异步编程,异步编程是编写非阻塞的代码,运行的任务在一个单独的线程,与主线程隔离,并且会通知主线程它的进度,成功或者失败。在这种方式中,主线程不会被阻塞,不需要一直等到子线程完成。主线程可以并行的执行其他任务。使用这种并行方式,可以极大的提高程序的性能。

2022-10-12 17:31:02 7554 1

原创 Springboot整合Netty提供WebSocket服务

昨天重温Netty学习视频,发现Netty还能够提供WebSocket服务,刚好前段时间做了个WebSocket服务的接口,感觉做的不是很好,特地查了一下如何用Springboot整合Netty提供WebSocket服务。经过网上的搜查和昨天视频学习的现学现用,整理出此篇文章记录如何用WebSocket接口定时发送消息。

2022-10-09 15:55:37 1489

原创 Mybatis一对多使用PageHelper分页遇到的问题

接着修改查询方法,将连表查询改为单表查询,一对多的时候会用到上面加上的子查询。PageHelper分页在Mybatis一对多的时候会有数目不对的问题。首先修改Mapper.xml里resultMap下的collection。在网上查询到了解决方法后,特此记录一下。

2022-08-19 16:11:09 406

原创 Mybatis-plus配置多数据源

最近项目中需要查询不同的数据库的表,恰好Mybatis-plus支持多数据源,特此记录。

2022-07-22 21:48:53 7606

原创 分布式系统Redis解决Session共享问题

企业项目中,一般都是将项目部署到多台服务器上,用nginx做负载均衡。这样可以减轻单台服务器的压力,不过这样也带来一些问题,例如之前单机部署的话,session存取都是直接了当的,因为请求就只到这一台服务器上,不需要考虑数据共享。接下来分别用8000和8001端口启动同一个项目,做一个简单演示:测试接口代码: 进入swagger的接口文档页面,进行测试接口请求: 8000端口控制台输出: 然后请求8001的同一个接口:从上面两张图可以看出虽然是同一套代码,去session里获取的同一个参数,2个端口

2022-07-10 18:32:41 1111

原创 Spring AOP之3种增强方式简单示例

AOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。从《Spring实战(第4版)》图书中扒了一张图:从该图可以很形象地看出,所谓切面,相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。想象下面的场景,开发中在多个模块间有某段重复的代码,我们通常是怎么处理的?显然,没有人会靠“复制粘贴”吧。在传统的面向过程编程中,我们也会

2022-07-03 11:37:50 715

原创 SpringBoot+Redis哨兵模式

最近学习到了Redis的哨兵模式,光看视频还不行,需要自己动手实现一遍才能加深映像,特此记录。由于没有真实的服务器可以供我操作,所以在虚拟机上启动了3个redis服务,分别占用7001、7002、7003端口。Redis下载安装不多赘述,只在这里记录一下配置。首先在tmp目录下创建3个文件夹:cd /tmpmkdir 7001 7002 7003然后将redis的配置文件redis.conf拷贝到刚刚创建的3个文件夹下cp redis-6.2.6/redis.conf

2022-04-14 16:10:17 8601

原创 Redisson之分布式锁解决商品秒杀简单示例

一般电商商品秒杀活动会面临大量用户同时下单的情况,不仅要面临高并发的问题,还要保证下单数量不超过商品数量和用户对同一商品不能重复下单(保证商品不被同一个用户抢购完,也就是防黄牛)。面对这些问题,可以采用Redis分布锁来解决,通过Redis中setnx命令来保证同一时间只有一个线程能够正常下单,待订单创建成功后解锁,其余线程再来抢锁。首先模拟一下未采用Redis加锁的代码实现,创建了3张表:用户表、商品表和订单表maven依赖:<dependencies>...

2022-04-07 10:40:01 2838 5

原创 SpringBoot设置动态定时任务

之前写过文章记录怎么在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务执行时间,实在不太灵活。经过网上搜索学习后,特此记录如何在SpringBoot项目中实现动态定时任务。因为只是一个demo,所以只引入了需要的依赖:<dependencies> <dependency> <groupId>org.springframework.bo..

2022-03-22 10:51:01 5069 1

原创 Redis缓存击穿解决方案之互斥锁

一、缓存击穿缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库造成巨大的冲击。 --引用哔哩哔哩UP主“黑马程序员”教程《Redis入门到实战教程》中的PPT内容常见的解决方案有2中:1.互斥锁2.逻辑过期二、互斥锁互斥锁原理示意图(引用B站视频中的PPT):简单来说,就是线程1查询缓存未命中,这时它会去获取互斥锁,然后查询数据库获取结果并将结果写入缓存中,最后释放锁。在线程1释放锁之前,其它线

2022-03-17 18:29:30 7616

原创 SpringAmqp之常用模型Demo

一、消息队列消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。二、SpringAmqpAMQP:Advanced Message Queuing Protocol,用于在应用程序之间传递

2022-03-13 19:37:36 2379

原创 SpringCloud组件之Gateway微服务网关

学习SprinngCloud到了网关这一组件,照例简单记录下网关的作用网关有以下几个作用:统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。 动态路由:动态的将请求路由到不同的后端集群中。 减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射。在1.x版本中都是采用Zuul网关。但是在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关代替Zu.

2022-03-07 18:09:29 402

原创 SpringCloud组件之Feign远程调用

上篇文章运用SpringCloud组件Eureka简单写了个服务注册Demo,并用RestTemplate实现了服务之间的远程调用,这篇文章则用到SpringCloud的另一个组件Feign来实现更方便更优雅的远程调用。首先引入maven依赖<!-- feign客户端 --> <dependency> <groupId>org.springframework.cloud</groupId>

2022-03-06 14:41:26 258

原创 SpringCloud之Eureka注册Demo

早在18年的时候写过一篇关于Eureka的文章,不过在那以后就没有深入学习SpringCloud了,恰好最近比较空闲,适合沉下心来好好学习SpringCloud,所以还是从注册中心开始,写个Demo记录一下。此篇文章代码参考了哔哩哔哩上黑马程序员的视频,在教学代码上稍作修改了,视频链接:https://www.bilibili.com/video/BV1LQ4y127n4?p=13数据库用的MySQL,用到的2张表用idea创建maven项目,目录结构如图:最外层pom....

2022-03-04 16:10:01 564

原创 SpringBoot+Redis简单实现文章浏览量记录

现在做的大部分项目都用到了SpringBoot和Redis,不过实际开发中,Redis只存了Token之类的数据,大部分的增删改查还是直接走的MySQL数据库。这2天逛论坛发现其实很多场景其实更需要Redis这样的存在,于是参考网上的代码简单做了个文章浏览量记录的Demo。首先放出maven依赖:<dependencies> <dependency> <groupId>junit</groupId> <artif

2022-02-23 09:51:35 5397 26

原创 MySQL之INTERVAL()函数用法

最近记录的博客都是关于java的,对数据库的学习是少之又少,刚好突发奇想对一张城市轨道交通表进行统计分析,于是恰好遇到了自己已知sql写法解决不了的查询问题:对城市轨道交通表按运营里程分组统计个数。现有一张城市轨道交通表如下:id为自增长主键,city_code为城市行政区划编码,mileage为运营里程,approved_mileage为运营线路数量,后面2个字段分别是已批复里程和已批复线路数量。现在想要统计运营里程小于100,大于100且小于300,大于300且小于500,大于500且小

2022-01-10 14:35:51 2199

原创 EasyPoi通过模板生成Excel文件

之前用easypoi实现过导出简单的excel文件,最近又有需求导出固定格式的excel文件,所以在网上搜索学习了一下,现将学会后写的demo记录一下方便以后回顾。 首先照例引入maven依赖(这里版本要注意一下,之前引入4.3.0导出图片会失败,后面在网上看到有人遇到同样的问题,换成4.2.0后就可以正常导出图片了):<!-- easypoi --> <dependency> <groupId>cn.afterturn.

2022-01-07 14:10:37 7694 2

原创 SpringBoot搭配Quartz实现动态定时任务

前面2篇文章讲述了如何实现简单的定时任务,不过由于执行周期是写在配置文件里的,如果想要修改周期或者暂停任务都是比较麻烦的事情,那么能不能在不修改代码和暂停服务的情况下动态修改定时任务周期或者手动暂停任务?通过Quartz是可以实现这一目标的,本文参考了GitHub上的文章,写了个动态定时任务的demo,特此记录。参考链接:https://github.com/xkcoding/spring-boot-demo/tree/master/demo-task-quartz首先引入需要的jar包:

2021-12-27 17:37:16 2401 1

原创 SpringBoot项目给定时任务配置线程池

上篇文章简单介绍了怎么在SpringBoot项目中运用简单的定时(间隔)任务,并且举例用的是单个任务,如果是多个定时(间隔)任务,并且想同时执行,应该怎么办?首先经过了解,@Scheduled是单线程的,如果有多个定时任务,势必需要前一个任务执行完才会执行后面的任务,先放代码:package com.wl.standard.task;import com.wl.standard.entity.City;import com.wl.standard.entity.CityGdp;import

2021-12-23 15:46:07 1566

原创 SpringBoot项目配置简单定时任务

平时项目中有不少场景需要用到定时任务,以前的公司采用的自己开发的框架,可以通过数据库动态配置定时任务的触发时间,还有间隔任务的间隔周期。鉴于之前太过懒惰,没有自行去认真研究过开源的定时任务框架,遂特此记录一下基于SpringBoot项目的简单定时(间隔)任务。 首先创建一个定时(间隔)任务的配置文件,用于定义每个任务的间隔时间。我这里取名就叫task-config.ini了,放置于resources路径下。内容如下:lineAllCity.cron = */30 * * * * ?...

2021-12-23 14:24:03 638

原创 SpringBoot项目配置拦截器打印访问日志

package com.tct.ii.ucr.core.filter;import com.tct.ii.ucr.common.BodyReaderHttpServletRequestWrapper;import lombok.extern.slf4j.Slf4j;import org.springframework.util.StringUtils;import javax.servlet.Filter;import javax.servlet.FilterChain;import ja.

2021-12-23 10:33:11 1240

原创 Java&EasyPoi将数据导出Excel

最近工作中有需求需要将数据导出到Excel中,这个功能以前做过的项目中几乎都有,但都是人家已经实现了的,这次自己做也折腾了不少的时间,特此记录方便以后自己查阅。 首先需要借助第三方jar包,如标题所言,这次需要导入的是easypoi,官方介绍如下:easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成...

2021-08-11 11:10:35 2826

原创 Java Stream对List集合做分组统计

写代码时如果不想通过SQL查询做分组统计,通过Stream流也是可以做到的,现用简单demo记录一下。先创建一个学生类import lombok.AllArgsConstructor;import lombok.Data;@Data@AllArgsConstructorpublic class Student { private Integer id; private String name; private String sex; private

2021-08-05 14:08:41 16462

原创 SpringBoot+Mybatis-plus分页

分页的插件有多种,现简单记录一下使用Mybatis-plus的分页插件。环境说明:SpringBoot版本:2.3.2数据库:MySQLMybatis-plus的Maven依赖:<!-- mybatis-plus --><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifac..

2021-07-27 15:43:39 2731

原创 Netty之服务端与客户端简单实现

'Quick and easy' doesn't mean that a resulting application will suffer from a maintainability or a performance issue. Netty has been designed carefully with the experiences earned from the implementation of a lot of protocols such as FTP, SMTP, HTTP, and v

2021-07-02 15:21:55 561

原创 Java正则表达式忽略大小写

之前很少写正则表达式,即便是要判断手机号和邮箱之类的功能也是直接copy的网上的内容,最近工作中用到正则表达式比较多,特此记录正则表达式中最常用到的忽略大小写的写法。直接上代码:import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test { public static void main(String[] args) { String text = "Invoice No : 6543

2021-03-06 11:08:43 2825

原创 Java之文件和base64字符串互转

项目中有时需要通过接口传输文件,则一般通过将文件转为base64字符串进行传输。需要引入的包:<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.13</version></dependency>文件转base64字符串:impo

2020-12-28 14:52:38 1554

原创 Python图像增强之高斯模糊、中值模糊、均值模糊

高斯模糊import cv2def gauss_blur(img, ksize, sigma): ''' 高斯模糊 :param img: 原始图片 :param ksize: 高斯内核大小。 ksize.width和ksize.height可以不同,但​​它们都必须为正数和奇数,也可以为零 :param sigma: 标准差,如果写0,则函数会自行计算 :return: ''' # 外部调用传入正整数即可,在这里转成奇数 k

2020-09-25 09:53:38 2376

原创 Python图像增强之椒盐噪声、高斯噪声

椒盐噪声(包含椒噪声和盐噪声)def sp_noise(img, prob, sp): ''' 添加椒盐噪声 :param img: 原始图片 :param prob: 噪声比例 :param sp: 0: 椒噪声, 1: 盐噪声, 2: 椒盐噪声 :return: resultImg ''' resultImg = np.zeros(img.shape, np.uint8) thres = 1 - prob for i

2020-09-11 10:59:00 2631

原创 Python 图像增强之旋转、平移、缩放、裁剪

旋转def rotate_img(img, degrees): ''' 旋转图片 :param img: 原始图片 :param degrees: 旋转角度 :return: ''' height, width = img.shape[:2] # 旋转后的尺寸 heightNew = int(width * fabs(sin(radians(degrees))) + height * fabs(cos(radians(degree

2020-09-09 17:31:25 3089 1

原创 js中变量为0时,判断是否为空返回true的问题

今天编写前端时遇到一个奇葩问题,这个问题可能以前遇到过,但是没有记录下来,今天特此记录,避免以后继续采坑。问题在js中对一个变量进行空值判断,当变量为0时,返回结果为true:var test = 0;if (test == null || test == "") { alert("test is null");}else { alert("test is not null");}原因这是因为0与 ""转换成布尔型都是false的。解决办法var te.

2020-09-08 10:54:25 6906

原创 Python Web框架之FastAPI简单实例

简介引用FastAPI官网:“FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。”官网地址:https://fastapi.tiangolo.com/zh/依赖Python 3.6 及更高版本安装pip install fastapipip install uvicorn示例示例可查看官网示例,这里不多赘述。以下示例主要展示FastAPI结合sqlite完成增删改查。废话不多

2020-09-02 18:34:33 3935

原创 Python OpenCV基于颜色通道分离法去除图片中的红色印章

最近一段时间的工作都是研究如何去除图片中的红色印章,在网上查找了大量的大佬写过的方法,发现大多数是采取颜色通道分离法来做,并且效果还不错。站在前人的肩膀上,我又做了些许调整,谈不上是改进,但是能应对更对的情况总还是好的,特此记录。 拿发票做例子,印章相较于其它部分最大的不同就是印章是红色的,而其它部分不是(这是一句废话)。 那么第一步当然就是将红色分离出来,这一步可以采用Python第三方库OpenCV里的 cv2.split()方法,该方法是把RGB图像的三个通道拆分开来,得...

2020-07-24 21:38:21 12542 1

原创 Java使用for循环删除集合元素需要避免的犯错

最近写Java代码使用for循环遍历集合并在其中删除满足条件的元素时,发现集合明明有5个元素,遍历却不足5次,经过排查后发现是自己犯了一个不该犯的错误,就是在for循环中删除了一个元素后,下次遍历的集合size已经-1了,而用来遍历计数的变量i在上次的循环中已经+1,从而导致循环次数不足集合的原始长度。 问题重现例子,删除集合里的3:public class CollectionTest { public static void main(String[] args) { Inte...

2020-06-03 15:13:30 361

原创 Python ThreadPoolExecutor并发小结

最近项目中由于需要频繁调用高德地图的接口,发现采用单线程循环调用太慢了,于是上网查了一下Python的并发,于是决定采用ThreadPoolExecutor(线程池)做并发。在此之前,先看一下,单线程循环爬取多个网页的耗时:import timeimport requestsimport threadingdef get_html(url): print('thread id:',threading.currentThread().getName(),' 访问了:',url)

2020-05-22 11:04:19 1018

原创 Mysql排序增加序号列

今天在Mysql数据库查询数据并进行排序时,感觉没有序号查看排序结果不够直观。示例如下:--查询部分城市2019年GDP排名select t.city,t.gdp,t.`year` from city_gdp t where t.`year`='2019' group by t.city,t.gdp,t.`year` order by t.gdp desc;查询结果:如需增加序号一列,可按如下方式改写sql:--查询部分城市2019年GDP排名select @rank:=@r..

2020-05-13 15:11:15 6886

原创 Vue.js中的过滤器——filter使用小结

最近项目中因前台页面展示时某个字段过长导致页面样式变形,所以需要对过长的字段进行省略展示,比如字数超过25则只显示前25个字,后面的则用'...'代替。根据网上查找方法,选用了Vue.js的过滤器——filter。它可以某个组件中定义:filters:{ ellipsis:function(value){ if (value.length > 25){ return value.slice(0, 25) + "..." }e

2020-05-09 16:22:21 461

原创 Python模糊查询数据库注意事项

今天用Python的第三方库django.db的connection库连接Mysql做模糊查询时,发现查询失败,部分代码如下:# 获取三甲医院def get_hospital(self, city_name): cursor = connection.cursor() sql = """select t.city_name,t.hospital_name,t.hospita...

2020-04-09 14:18:46 391

原创 Mysql之st_distance_sphere计算两坐标点距离

最近项目中需要计算一个坐标点与多个点的距离,发现用Python来实现效率很低。经同事推荐,将这些坐标点存入了Mysql数据库,然后用数据库自带的方法st_distance_sphere计算距离。经过比较发现确实效率提高了很多,特此记录一下。注意:使用st_distance_sphere需要Mysql数据库版本为5.7及以上。例子:现数据库表中有如下坐标点数据:需要找出与第一个坐...

2020-01-05 11:55:47 8020

空空如也

空空如也

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

TA关注的人

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