Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。 官方地址: https://projectlombok.org/ github地址: https://github.com/rzwitserloot/lombok 在IntelliJ IDEA 中的使用 (1)先安装lombok插件,步骤如下(新版的IDEA已经自带集成了Lombok插件,可以不用安装)。 菜单 File > Settings >…

2022-10-04 0条评论 711点热度 0人点赞 admin 阅读全文

电商当项目经验已经非常普遍了,不管你是包装的还是真实的,起码要能讲清楚电商中常见的问题,比如库存的操作怎么防止商品被超卖 解决方案 分析 基于数据库单库存 基于数据库多库存 基于redis 基于redis实现扣减库存的具体实现 初始化库存回调函数(IStockCallback) 扣减库存服务(StockService) 调用 在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。 解决方案 使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。 还是使用…

2022-09-26 0条评论 534点热度 0人点赞 admin 阅读全文

简介 布隆过滤器(BloomFilter)是一种用于判断元素是否存在的方式,它的空间成本非常小,速度也很快。 但是由于它是基于概率的,因此它存在一定的误判率,它的Contains()操作如果返回true只是表示元素可能存在集合内,返回false则表示元素一定不存在集合内。因此适合用于能够容忍一定误判元素存在集合内的场景,比如缓存。 它一秒能够进行上百万次操作(主要取决于哈希函数的速度),并且1亿数据在误判率1%的情况下,只需要114MB内存。 原理 数据结构 布隆过滤器的数据结构是一个位向量,也就是一个由0、1所组…

2022-09-25 0条评论 545点热度 0人点赞 admin 阅读全文

接口java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。ExecutorService 的实现就是一个线程池的实现。 一、ExecutorService 示例代码 下面是使用Java 实现的ExecutorService 示例代码: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExecutorSer…

2022-09-20 0条评论 619点热度 0人点赞 admin 阅读全文

需要做一个简单的订单号生成规则,并发量不是特别高,从订单号上不要体现出订单的真实数量(例如自增长的ID就会暴露订单数量给用户看到) 示例我是写的订单号生成器,生成类似这样子的的16位订单号。 /** * @author Terry E-mail: yaoxinghuo at 126 dot com * @date 2022/3/4 22:57 * @description */ public class OrderUtils { private static int serial = 0; // 序列号倒数5位的前…

2022-09-18 0条评论 790点热度 0人点赞 admin 阅读全文

分布式 id 生成器 在分布式场景中,唯一 id 的生成算比较重要。 而通常在高并发场景中,需要类似 MySQL 自增 id 一样不断增长且又不会重复的 id,即 MySql 的主键 id。 比如,在电商 618 或者双 11 搞活动的时候,一般在 0 点 开始,会有千万到亿级的订单量写入,每秒大概需要处理 10 万加的订单。 而在将订单插入数据库之前,我们在业务上需要给订单一个唯一的 id,即利用 idMaker 生存唯一的订单号,再插入数据库内。如果生成的 id 是随机且没有含义的纯数字的话,在大订单量的情况下…

2022-09-14 0条评论 743点热度 0人点赞 admin 阅读全文

使用海康的SDK长传JPG格式的图片到人脸库,总是上传不成功,SDK:hCNetSDK.NET_DVR_GetUploadState的返回值是19。相同的照片(用电脑能正常打开并查看)用海康自带的网页后台上传,提示:图片格式错误 因为JPG也有编码问题,怀疑是某种编码的JPG海康设备并不支持。所以再使用Java通过BufferedImage再转一次就可以了。 工具方法代码如下: public static byte[] bufferedImageToBytes(BufferedImage image) throws…

2022-09-02 0条评论 1195点热度 0人点赞 admin 阅读全文

Java中截取文件名的后缀名有几种方式,整理如下: 使用String的 查找最后一个.的位置,然后截取 /** * 获取文件名的扩展名 * @param fileName * @return 例如test.jpg 返回的扩展名是jpg */ private static String getExtension(String fileName) { String extension = ""; int i = fileName.lastIndexOf('.'); if (i > 0) { extension =…

2022-08-31 0条评论 1671点热度 0人点赞 admin 阅读全文

在使用Java的BufferedImage处理图片的时候,需要使用ImageIO读入图片文件: BufferedImage bufferedImage = ImageIO.read(new File("/path/to/image.jpg")); 发现就最开始读入的时候,报错: Exception in thread "main" javax.imageio.IIOException: Unsupported Image Type at java.desktop/com.sun.imageio.plugins.jp…

2022-08-16 0条评论 1198点热度 0人点赞 admin 阅读全文

有一些原始图片,需要将他们的图片尺寸按比例缩小,并使尺寸缩小后的文件大小压缩到指定大小以内,例如海康的设备(考勤机、超脑)上传人脸底图,要求的图片文件大小尺寸在200KB以内。 我是使用的BufferedImage将图片长宽循环执行缩小到一定的比例,然后检测图片文件大小是否达到200KB以内(详见:https://blog.terrynow.com/2022/08/14/java-calculate-buffered-image-estimated-file-size/) 干货代码如下: public class …

2022-08-15 0条评论 812点热度 0人点赞 admin 阅读全文
13456721