Java
文章平均质量分 64
Java相关技术分享
Freelance developer
不想当将军的士兵不是好士兵
展开
-
SPI(服务提供发现机制)简单使用
SPI的英文全称是Service Provider Interface,是Java内置的一种服务提供发现机制。一般常用于一些框架或组件库的开发,我们最熟悉JDBC就应用到了SPI机制,并且在Spring、Dubbo中也大量应用了SPI机制。SPI机制是针对同一个接口采用不同的实现,提供给不同的用户使用,目的就是为了提高框架或者组件库的扩展性。原创 2023-02-16 17:08:55 · 467 阅读 · 0 评论 -
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 · 2870 阅读 · 0 评论 -
若需要在Springboot中过滤器中注入Bean,需要注意一个小细节
一、场景描述曾经在一次业务功能实现过程中,需要在过滤器中使用RedisTemplate,天气太热,又不想用其他方式,就想直接注入进来,但咱老百姓都知道Web应用启动的顺序是:先初始化Listener,然后再初始化Filter,然后才对DispathServlet进行初始化,因此,当我非要在Filter里干进去一个Bean时,属实有点强人锁男了,因为Filter初始化时,Bean还没初始化。二、具体操作说明:综上情况,当需要创建和注册Filter的时候,可以使用@Bean,把它放到IOC容器中。我的原创 2021-08-13 15:20:01 · 733 阅读 · 0 评论 -
存储IP地址,到底用什么数据类型相对比较好
一、 介绍在平常开发当中,肯定遇到过需要存储IP地址的场景,比如登录、访问、操作日志记录,方便起见直接使用字符串类型存储也不是不可以,但是在《高性能MySQL》中,建议存储IPv4地址时,使用32位无符号整数类型,而不建议使用字符串类型。二、使用无符号整数类型存储IP的优点节省存储空间和索引空间便于使用范围查询,如:between...and,而且查询效率更高通常,我们保存IPv4地址时,一个IPv4最小需要7个字符(四个一位数数字,三个点),最大需要15个字符(三个三位数,三个点),因此使用原创 2021-08-10 11:08:35 · 2656 阅读 · 0 评论 -
创建型模式——组合模式
一、介绍组合模式又叫做部分整体模式,它创建了对象组的树形结构,将对象组合成树形结构以表示“整体-部分”的层次关系。组合模式依据树形结构来组合对象,用来表示部分以及整体层次,它使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象。另外,组合模式从实现的角度来讲,又分为透明模式和安全模式,下面会明确说明:二、组合模式之透明模式透明模式是把组合使用的方法放到抽象类中,不管叶子对象还是树枝对象都有相同的结构,这样做的好处就是叶子节点和树枝节点对于外界没有区别,它们原创 2021-07-14 16:51:08 · 949 阅读 · 0 评论 -
创建型模式——单例模式
一、介绍单例模式是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。二、具体写法1、懒汉式:线程不安全,没啥特殊嗜好就不要用/** * 懒汉式:线程不安全,几乎不可使用 * * @author zhangxs **/public class FirstSingleton {原创 2021-06-23 14:43:58 · 108 阅读 · 0 评论 -
结构型模式——适配器模式
一、介绍原创 2021-06-28 10:13:27 · 135 阅读 · 0 评论 -
行为型模式——策略模式
一、介绍原创 2021-06-25 17:35:40 · 76 阅读 · 0 评论 -
行为型模式——模板方法模式
一、介绍从生活角度理解,我们都在银行办理过多种业务,不管办理哪种业务,银行都有一个固定的流程,比如都需要先排队,然后办理业务,最后针对银行工作反馈评分等。在这个过程中,排队和反馈评分都是固定的套路,不会随着业务的不同而变化,但是办理的业务是不确定的,有可能存钱业务,有可能是理财业务。因此,可以将其抽取一个模板,将排队操作和反馈评分操作统一并固定化,具体业务办理交给客户和柜员具体去处理。在模板模式中,一个抽象类公开定义了执行它的方法的方式或模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方原创 2021-06-24 17:24:10 · 70 阅读 · 0 评论 -
结构型模式——装饰者模式
一、介绍原创 2021-07-13 11:25:25 · 133 阅读 · 0 评论 -
结构型模式——桥接模式
一、介绍原创 2021-07-12 17:35:58 · 162 阅读 · 0 评论 -
创建型模式——建造者模式
一、介绍原创 2021-07-09 17:46:44 · 140 阅读 · 0 评论 -
Java中的深拷贝和浅拷贝
一、介绍浅拷贝对于基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象,而对于引用数据类型的成员变量(如:某个数组,某个类的对象等),浅拷贝会进行引用传递,也就是只是将该成员变量的内存地址复制一份给新的对象,因此复制前后的两个对象的该成员变量,都指向了同一个实例,所以浅拷贝引用类型成员变量的情况下,在一个对象中修改该成员变量必然会影响到另一个对象的该成员变量的值。深拷贝对于基本数据类型的成员变量,深拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象,换言之就是复原创 2021-07-07 17:42:33 · 226 阅读 · 0 评论 -
创建型模式——原型模式
一、介绍原型模式是指用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。原型模式是一中创建型模式,允许基于一个对象,创建拎一个可定制的对象,无需知道如何创建的细节。它的工作原理是通过将一个原型对象传给那个需要发动创建的对象,这个发动创建的对象通过请求原型对象,拷贝它们自己来实现创建,即对象克隆。二、案例以模拟克隆羊举例说明,假设现有一只羊,姓名tom,年龄1,颜色白,需要克隆跟它完全相同的10只传统方式下,羊对象定义为:/** * 羊 * * @author zhangxs原创 2021-07-07 16:21:37 · 96 阅读 · 0 评论 -
创建型模式——抽象工厂模式
一、介绍很显然,简单工厂模式和工厂方法模式都只能生产一类的产品,除了生产手机,如果还需要生产手表,简单工厂模式和工厂方法模式就显得不是很优雅,只能复制代码了。因此就出现了抽象工厂模式,抽象工厂模式通过在抽象工厂中增加创建产品的接口,并在具体子工厂中实现新增产品的创建即可。二、案例这次采用模拟手机、智能手表制造举例说明:手机制造标准/** * 手机制造标准 * * @author zhangxs **/public interface Phone { void make();原创 2021-07-06 17:36:15 · 126 阅读 · 0 评论 -
创建型模式——工厂方法模式
一、介绍相对于简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂,也就是定义一个抽象工厂,其定义了产品的生产接口,但不负责具体的产品,将生产任务交给不同的派生类工厂。这样不用通过指定类型来创建对象了。二、案例依然采用模拟手机制造举例说明:手机制造标准/** * 手机制造标准 * * @author zhangxs **/public interface Phone { void make();}苹果手机具体制造实现/**原创 2021-07-06 17:22:04 · 79 阅读 · 0 评论 -
创建型模式——简单工厂模式
一、介绍简单工厂模式是对对象创建最简单,最单薄的管理方式,只是对不同对象的创建进行了简单封装,通过向工厂传递类型来指定要创建的对象。二、案例以模拟手机制造举例说明:手机制造标准/** * 手机制造标准 * * @author zhangxs **/public interface Phone { void make();}苹果手机具体制造实现/** * 苹果手机 * * @author zhangxs **/public class ApplePhone原创 2021-07-06 17:09:38 · 56 阅读 · 0 评论 -
听说用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 · 98 阅读 · 0 评论 -
最优平均算法
一、问题描述二、问题难度分析三、算法思路通过上面的分析,穷举不可取,如果要将其转化为多重背包问题或装载问题,好像也是很难实现的。在这里,我们只有另辟蹊径,采取一种近似的策略,其思想是通过在最大和最小行之间交换任务,使其差距减少,然后重复进行,直到达到预设极差目标或最大允许交换次数为止。四、Java实现需求:现有1800个奖金300块以内且有大有小的开发任务,需要安排给14个开发者完成,每个任务金额不同,但希望每个开发者,最终完成分配的任务后,获得的奖金尽可能公平直接上代码:packag原创 2021-05-18 18:40:34 · 526 阅读 · 0 评论 -
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 · 547 阅读 · 0 评论 -
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 · 1206 阅读 · 5 评论 -
通过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 阅读 · 0 评论