- 博客(40)
- 收藏
- 关注
原创 SPI(服务提供发现机制)简单使用
SPI的英文全称是Service Provider Interface,是Java内置的一种服务提供发现机制。一般常用于一些框架或组件库的开发,我们最熟悉JDBC就应用到了SPI机制,并且在Spring、Dubbo中也大量应用了SPI机制。SPI机制是针对同一个接口采用不同的实现,提供给不同的用户使用,目的就是为了提高框架或者组件库的扩展性。
2023-02-16 17:08:55
452
原创 MySQL中根据身份证号码计算年龄
select timestampdiff(YEAR, substring('622201199812316616', 7, 8), now()) as age;
2022-01-07 09:36:24
6299
原创 通过SpringBoot更优雅的实现分布式锁(Spring Integration)
一、概述之前的文章中,有提到过用redission组件实现分布式锁,实际上除了几种经常被采用的,如:基于关系型数据库基于Redission组件基于Apache Curator组件,通过Zk的临时顺序节点模型实现的除了以上比较常用的方式,这篇文章简单说一下感觉被大伙儿忽略的一种实现方式,那就是通过 Spring Integration 这个新兴组件来实现,实际上它的核心目标就是提供一个简单的模型来实现复杂的企业集成解决方案,为基于Spring的应用添加异步的、消息驱动的行为,让Spring用户可
2022-01-06 16:57:41
7115
原创 SpringBoot基于Redis的分布式锁实现
一、概述分布式锁的重要性不言而喻,原因不在赘述,每一位菜鸟都有理由掌握它。提到分布式锁,解决方案更是乌泱乌泱的,如:直接通过关系型数据库实现基于Redission实现基于Apache Curator实现…本文暂时先介绍一种,基于Redission实现的方式二、环境搭建有一个简单的SpringBoot环境即可,便于测试:依赖<dependencies> <dependency> <groupId>org.springfra
2022-01-06 10:19:56
901
原创 一种解决海量重复提交问题的方案(以Java语言为例,使用SpringBoot + Redis实现)
一、前言及原理分析在实际的项目开发中,对于支持对外访问的接口,很多时候会出现被多次请求的情况,而这些多余的请求可能会对数据库中的数据产生多次影响,导致产异常数据,我们是不希望发生的,因此提出了幂等的概念,所谓幂等,即任意多次执行所产生的影响均与一次执行产生的影响相同。换言之,多次的请求对数据库的影响只能是一次性的,不能重复处理。关于如何保证接口幂等性,通常情况有如下几种方式:数据库建立唯一索引,可以保证最终插入的数据只有一条悲观锁或者乐观锁的方式,悲观锁可以保证每次for update时,其他sql
2021-12-29 11:33:15
1471
原创 Java中字符串补齐,冷门但好用
一、场景描述针对某个字符串,使用指定的字符去填充为指定的位数。。。算了,不废话了二、案例使用Java原生的工具public class Test { public static void main(String[] args) { String str = "12345"; String finalStr = String.format("%10s", str); finalStr = finalStr.replaceAll("\\s", "0"); System.out.pr
2021-08-13 15:39:17
2860
原创 若需要在Springboot中过滤器中注入Bean,需要注意一个小细节
一、场景描述曾经在一次业务功能实现过程中,需要在过滤器中使用RedisTemplate,天气太热,又不想用其他方式,就想直接注入进来,但咱老百姓都知道Web应用启动的顺序是:先初始化Listener,然后再初始化Filter,然后才对DispathServlet进行初始化,因此,当我非要在Filter里干进去一个Bean时,属实有点强人锁男了,因为Filter初始化时,Bean还没初始化。二、具体操作说明:综上情况,当需要创建和注册Filter的时候,可以使用@Bean,把它放到IOC容器中。我的
2021-08-13 15:20:01
726
原创 存储IP地址,到底用什么数据类型相对比较好
一、 介绍在平常开发当中,肯定遇到过需要存储IP地址的场景,比如登录、访问、操作日志记录,方便起见直接使用字符串类型存储也不是不可以,但是在《高性能MySQL》中,建议存储IPv4地址时,使用32位无符号整数类型,而不建议使用字符串类型。二、使用无符号整数类型存储IP的优点节省存储空间和索引空间便于使用范围查询,如:between...and,而且查询效率更高通常,我们保存IPv4地址时,一个IPv4最小需要7个字符(四个一位数数字,三个点),最大需要15个字符(三个三位数,三个点),因此使用
2021-08-10 11:08:35
2639
原创 创建型模式——组合模式
一、介绍组合模式又叫做部分整体模式,它创建了对象组的树形结构,将对象组合成树形结构以表示“整体-部分”的层次关系。组合模式依据树形结构来组合对象,用来表示部分以及整体层次,它使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象。另外,组合模式从实现的角度来讲,又分为透明模式和安全模式,下面会明确说明:二、组合模式之透明模式透明模式是把组合使用的方法放到抽象类中,不管叶子对象还是树枝对象都有相同的结构,这样做的好处就是叶子节点和树枝节点对于外界没有区别,它们
2021-07-14 16:51:08
905
原创 Java中的深拷贝和浅拷贝
一、介绍浅拷贝对于基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象,而对于引用数据类型的成员变量(如:某个数组,某个类的对象等),浅拷贝会进行引用传递,也就是只是将该成员变量的内存地址复制一份给新的对象,因此复制前后的两个对象的该成员变量,都指向了同一个实例,所以浅拷贝引用类型成员变量的情况下,在一个对象中修改该成员变量必然会影响到另一个对象的该成员变量的值。深拷贝对于基本数据类型的成员变量,深拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象,换言之就是复
2021-07-07 17:42:33
213
原创 创建型模式——原型模式
一、介绍原型模式是指用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。原型模式是一中创建型模式,允许基于一个对象,创建拎一个可定制的对象,无需知道如何创建的细节。它的工作原理是通过将一个原型对象传给那个需要发动创建的对象,这个发动创建的对象通过请求原型对象,拷贝它们自己来实现创建,即对象克隆。二、案例以模拟克隆羊举例说明,假设现有一只羊,姓名tom,年龄1,颜色白,需要克隆跟它完全相同的10只传统方式下,羊对象定义为:/** * 羊 * * @author zhangxs
2021-07-07 16:21:37
96
原创 创建型模式——抽象工厂模式
一、介绍很显然,简单工厂模式和工厂方法模式都只能生产一类的产品,除了生产手机,如果还需要生产手表,简单工厂模式和工厂方法模式就显得不是很优雅,只能复制代码了。因此就出现了抽象工厂模式,抽象工厂模式通过在抽象工厂中增加创建产品的接口,并在具体子工厂中实现新增产品的创建即可。二、案例这次采用模拟手机、智能手表制造举例说明:手机制造标准/** * 手机制造标准 * * @author zhangxs **/public interface Phone { void make();
2021-07-06 17:36:15
118
原创 创建型模式——工厂方法模式
一、介绍相对于简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂,也就是定义一个抽象工厂,其定义了产品的生产接口,但不负责具体的产品,将生产任务交给不同的派生类工厂。这样不用通过指定类型来创建对象了。二、案例依然采用模拟手机制造举例说明:手机制造标准/** * 手机制造标准 * * @author zhangxs **/public interface Phone { void make();}苹果手机具体制造实现/**
2021-07-06 17:22:04
78
原创 创建型模式——简单工厂模式
一、介绍简单工厂模式是对对象创建最简单,最单薄的管理方式,只是对不同对象的创建进行了简单封装,通过向工厂传递类型来指定要创建的对象。二、案例以模拟手机制造举例说明:手机制造标准/** * 手机制造标准 * * @author zhangxs **/public interface Phone { void make();}苹果手机具体制造实现/** * 苹果手机 * * @author zhangxs **/public class ApplePhone
2021-07-06 17:09:38
56
原创 使用iview的select组件配合Form表单验证时,验证不通过
一、问题重现如上图,实际上已经选择了,但是还是有校验不通过的错误提示二、问题分析首先了解一下iview的校验库规定的校验规则,如下图:从上面的规则中可以看出,如果我们不添加type来限定类型,则默认类型就是 string,但是一般的需求是option的value都是类似于id这种唯一标识,所以有可能会出现number/string。可恶的是有时候我们即使指定了type: ‘string’,依然校验不过,接着看文档说明,文档中还针对校验字段转换的做了说明,就是针对transform属性的说明,如
2021-07-01 13:10:38
1640
6
原创 JavaScript中好用的几个函数
0、准备数据let arr1 = [{name: "james", age: 36, num: 23},{name: "kobe", age: 40, num: 24},{name: "harden",age: 31, num: 13},{name: "pual", age: 36, num: 3}];let arr2 = [{name: "harden", height: 196},{name: "wade", height: 193},{name: "yao",height: 226}];1、f
2021-06-28 18:24:35
73
原创 行为型模式——模板方法模式
一、介绍从生活角度理解,我们都在银行办理过多种业务,不管办理哪种业务,银行都有一个固定的流程,比如都需要先排队,然后办理业务,最后针对银行工作反馈评分等。在这个过程中,排队和反馈评分都是固定的套路,不会随着业务的不同而变化,但是办理的业务是不确定的,有可能存钱业务,有可能是理财业务。因此,可以将其抽取一个模板,将排队操作和反馈评分操作统一并固定化,具体业务办理交给客户和柜员具体去处理。在模板模式中,一个抽象类公开定义了执行它的方法的方式或模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方
2021-06-24 17:24:10
70
原创 创建型模式——单例模式
一、介绍单例模式是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。二、具体写法1、懒汉式:线程不安全,没啥特殊嗜好就不要用/** * 懒汉式:线程不安全,几乎不可使用 * * @author zhangxs **/public class FirstSingleton {
2021-06-23 14:43:58
100
转载 听说用float(double同样很粗糙)存储金额,损失的金额要从程序员工资里扣,为什么要从程序员工资里扣呢,下文一探究竟
一、为什么不能用float存储金额呢先看demo:@Testpublic void testFloat() { float f1 = 6.6f; float f2 = 1.3f; System.out.println(f1 + f2);}再看结果:7.8999996不由的心生敬畏,情理之中,意料之外,跟你的口算不一样了!!!二、从计算机二进制角度计算 6.6 + 1.3 的过程1、float底层存储原理计算是由CPU来完成的,CPU表示浮点数由三部分组
2021-06-18 18:22:00
97
原创 Oracle、达梦、MySQL,截取字符串后N位
一、说明SQL中截取某个字符串字段后N位的业务场景其实并不多,偶尔一次业务中使用,有参考就行,主要用到greatest (max(one),max(two),max(three))函数,这个函数是求多列的最大值,这里暂时不做详解,可以自行了解一番,另外就是很熟悉的substr()函数和length()函数,不再赘述。二、语法及测试语法:-- str:字符串,n:后n位select substr(str,greatest(-n,-length(str)),n) from dual;测试:
2021-06-17 11:17:10
2239
原创 巩固SpringCloudAlibaba系列——Spring Cloud Gateway
一、什么是Spring Cloud GatewaySpring Cloud Gateway是基于Spring生态系统API网关实现,Spring Cloud Gateway旨在提供一种简单而有效的方法,路由到下游API,并为它们提供微服务横向切割后需要关注的方面,如:安全、监控/指标和弹性等。详细内容请参考官方文档二、相关术语解释路由(Route):网关的基本构件。它由一个ID、一个目标URI、一组断言和一组过滤器组成。如果聚合断言为真,则匹配路由。断言(Predicate):Java8断言函数。
2021-05-25 17:59:57
141
原创 巩固SpringCloudAlibaba系列——Nacos注册中心、配置中心
一、什么是NacosNacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。帮助您更敏捷和容易地构建、交付和管理微服务平台。 它是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。更详细的内容见Nacos文档二、下载、安装及配置安装方式多且简单,详细参考文档,启动了以后,怎么访问,怎么操作控制台,不做赘述,但凡…嗯。三、作为注册中心主流的注册中心产品除了当前要介绍的Nacos,常用的还有Eureka、Consul、Cor
2021-05-24 10:44:34
112
原创 最优平均算法
一、问题描述二、问题难度分析三、算法思路通过上面的分析,穷举不可取,如果要将其转化为多重背包问题或装载问题,好像也是很难实现的。在这里,我们只有另辟蹊径,采取一种近似的策略,其思想是通过在最大和最小行之间交换任务,使其差距减少,然后重复进行,直到达到预设极差目标或最大允许交换次数为止。四、Java实现需求:现有1800个奖金300块以内且有大有小的开发任务,需要安排给14个开发者完成,每个任务金额不同,但希望每个开发者,最终完成分配的任务后,获得的奖金尽可能公平直接上代码:packag
2021-05-18 18:40:34
515
原创 Java重试机制简单使用(基于guava-retrying实现)
一、简单介绍Guava 是Java的工具集,提供了一些常用的便利的操作工具类,减少因为 空指针、异步操作等引起的问题BUG,提高开发效率。Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I
2021-05-18 13:22:37
544
原创 MySQL全文索引、支持中文分词
简单介绍MySQL全文索引是在基于文本的列(char、varchar或text列)上创建的,以提升对这些列中包含的数据的查询和DML操作效率。全文索引被定义为create table语句的一部分,或者使用alter table或create index追加到现有表中。搜索语法为:match(field1,field2,…) against(’keyword‘),更多使用方法及详细信息参考MySQL全文索引官方文档版本说明MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引MyS
2021-05-12 14:21:14
924
4
原创 MeiliSearch 文档、介绍、安装及HTTP请求测试
介绍MeiliSearch是一个功能强大,快速,开源,易于使用和部署的搜索引擎。搜索和索引都是高度可定制的。允许输入、过滤器和同义词等特性都是开箱即用的。是近两年开源的项目,同样也支持中文分词,在小数据规模下可以实现比ElasticSearch更加快速和易用的搜索体验。更多安装、配置、使用等细节请参考官方文档或交友网站HTTP方式操作索引创建索引POST http://192.144.228.170:7700/indexes{ "uid" : "product", "primaryK
2021-05-11 17:06:10
4184
原创 SQL获取当前周的开始日期和结束日期
Oracle、达梦开始日期:select to_char(trunc(to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'),'IW'),'yyyy-MM-dd') from dual;结束日期:select to_char(trunc(to_date(to_char(sysdate,'yyyy-MM-dd'),'YYYY-MM-DD'),'IW') + 6,'yyyy-MM-dd') from dual;MySQL开始日期:select su
2021-05-11 09:39:57
2368
原创 100多个免费API接口分享,调用完全不限次数
各类无次数限制的免费API接口整理,主要是聚合数据上和API Store上的一些,还有一些其他的。聚合数据提供30大类,160种以上基础数据API服务,国内最大的基础数据API服务,下面就罗列一些免费的各类API接口。手机号码归属地API接口:https://www.juhe.cn/docs/api/id/11历史上的今天API接口:https://www.juhe.cn/docs/ap...
2020-04-03 11:20:26
10656
原创 Maven下载依赖时,出现PKIX path building failed
解决Maven下载依赖时,遇到的问题:PKIX path building failed最近通过IDEA创建Spring boot项目,总是出现依赖无法下载的情况,报的错提示:maven PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find v...
2020-03-17 13:31:54
1195
5
原创 CentOS6.x环境下搭建FastDFS分布式文件系统,采用Nginx访问(CentOS7.x也适用,部分命令不同)
搭建FastDFS文件系统,采用Nginx访问1、准备工作2、单节点FastDFS2.1、安装gcc2.2、安装libevent2.3、安装libfastcommon-master2.4、安装fastdfs2.5、配置并启动tracker服务2.6、配置并启动storage服务3、使用Nginx访问FastDFS3.1、为什么需要用Nginx访问3.2、安装fastdfs-nginx-module...
2019-12-21 20:43:34
369
原创 Oracle数据库将排序后的结果进行分页套路
需求:根据ID排序后分页,每页10条记录,显示第二页SELECT *FROM ( SELECT ROWNUM rn, T.* FROM ( SELECT s.* FROM something s ORDER BY sth ) T WHERE -- 结束位置 ROWNUM < 21 ...
2019-09-04 14:47:52
332
转载 阿里巴巴开源的29个实用的项目
一、分布式应用服务开发的一站式解决方案 Spring Cloud AlibabaSpring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring...
2019-08-15 14:26:14
108
转载 通过ajax将数组或list集合传到后台
通过ajax将数组或list集合传到后台通过ajax将数组或list集合传到后台传数组JavaScriptController传集合JavaScriptController通过ajax将数组或list集合传到后台ajax发送请求,controller处理请求传数组JavaScript方式一:$(document).on('click', '#sendArr', function () ...
2019-08-06 16:22:04
276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人