202109-13 详解ArrayList的扩容机制 目录一、ArrayList了解过吗?它是啥?有啥用?二、ArrayList如何指定底层数组大小的三、数组的大小一旦被规定就无法改变四、ArrayList具体是怎么添加数据的五、ArrayList又是如何删除数据的呢六、ArrayList是线程安全的吗?不安全的表现七、为什么线程不安全还要用它呢一、ArrayList了解过吗?它是啥?有啥用?众所周知,Java集合框架拥有两大接口Collection和Map,其中,Collection麾下三生子List、Set和Queu... 继续阅读 >
202109-13 详细分析Java内存模型 目录一、为什么要学习并发编程二、为什么需要并发编程三、从物理机中得到启发四、Java内存模型五、原子性5.1、什么是原子性5.2、如何保证原子性六、可见性6.1、什么是可见性6.2、如何保证可见性七、有序性7.1、什么是有序性7.2、如何保证有序性一、为什么要学习并发编程对于“我们为什么要学习并发编程?”这个问题,就好比“我们为什么要学习政治?”一样,我们(至少作为学生党是这样)平常很少接触到,然后背了一堆“正确... 继续阅读 >
202109-10 Java 汉字获取拼音或首字母工具类代码分析 本文主要介绍Java中,将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的示例代码。1、Maven依赖配置(pom.xml)<dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.1</version></dependency>2、工具类代码packagecom.cjavapy.utils.util;importnet.sourceforge.pinyin4j.PinyinHelper;importnet.sourceforge.... 继续阅读 >
202109-10 Java布尔值Boolean和boolean之间转换实例用法 1、Boolean和boolean区别Boolean是类,而boolean是基本数据类型,Boolean定义出来的是对象,可以当对象调用,boolean定义出来的是数据类型,只能当数据类型调用。Boolean是布尔类型包装器。这个涉及到jdk5以后的新特性,自动装箱。2、自动装箱和自动拆箱在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱)。自动装箱:简单的理解为将基本数据类型封装为对象类型。自动拆箱:简单的理解... 继续阅读 >
202109-10 Java新手教程之ArrayList的基本使用 目录1.简介2.方法解释(1)contains(Objecto)(2)lastIndexOf(Objecto)(3)toArray()(4)toArray(T[]a)(5)remove(Objecto)(6)removeAll(Collection<?>c)(7)retainAll(Collection<?>c)(8)indexOf(Objecto)总结1.简介ArrayList是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable这些接口。A... 继续阅读 >
202109-10 Java Optional<Foo>转换成List<Bar>的实例方法 1、转换方法代码publicList<Bar>get(Optional<Foo>foo){returnfoo.map(x->x.getBazList().stream().map(Baz::getBar).collect(Collectors.toList())).orElse(Collections.emptyList());}或publicList<Bar>get(Optional<Foo>foo){returnfoo.map(Foo::getBazList).stream()... 继续阅读 >
202109-10 java静态代理的含义及用法 说明1、如果代理在程序运行之前就已经存在了,那么这种代理方式就成了静态代理,在这种情况下,代理通常是由我们在Java代码中定义的。2、一般来说,静态代理中的代理类和委托类将实现相同的界面,或者生出相同的父类。实例/***委托类和代理类都实现了Sell接口*/publicinterfaceSell{voidsell();voidad();}实例扩展:在Java中,代理也是这样的概念,来看个栗子:先来创建一个明星类Stars:publicclassStarsimple... 继续阅读 >
202109-10 Java正则表达式实现经纬度的合法性操作 Java正则表达式经纬度合法性经度:-180.0~+180.0(整数部分为0~180,必须输入1到5位小数)正则表达式:/^[\-\+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/纬度:-90.0~+90.0(整数部分为0~90,必须输入1到5位小数)正则表达式:/^[\-\+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/遇到了一个这样的需求,前端传来list集合,后台校验每个对象的经纬度是否合法,合法的就标记0,不合法的就标... 继续阅读 >
202109-10 Java中HashMap的初始容量设置方式 Java中HashMap的初始容量设置根据阿里巴巴Java开发手册上建议HashMap初始化时设置已知的大小,如果不超过16个,那么设置成默认大小16:集合初始化时,指定集合初始值大小。说明:HashMap使用HashMap(intinitialCapacity)初始化正例:initialCapacity=(需要存储的元素个数/负载因子)+1。注意负载因子(即loaderfactor)默认为0.75,如果暂时无法确定初始值大小,请设置为16(即默认值)。反例:HashMap需要放置1024个元... 继续阅读 >
202109-10 Java如何固定大小的线程池 1.固定大小的线程池简介线程池就是在程序启动的时候先建立几个可以使用的线程放在那里,然后等着具体的任务放进去,这个任务基本可以说都是Runnable的实现类,因此它减小了系统每次新建和销毁线程的开销,但同时增加了维护这些线程的开销,个中取舍看具体情况而定。固定大小的线程池就是在启动的时候创建了固定个数的线程放在那里等待使用。2.包装一个线程池对象publicclassTaskPool{privatefinalThreadPoolExecutorexecu... 继续阅读 >
202109-09 详解Java实践之适配器模式 目录一、前言二、适配器模式介绍三、案例场景模拟3.1、场景模拟工程3.2、场景简述3.2.1、注册开户MQ3.2.2、内部订单MQ3.2.3、第三方订单MQ3.2.4、查询用户内部下单数量接口3.2.5、查询用户第三方下单首单接口四、代码实现4.1、工程结构4.2、Mq接收消息实现五、适配器模式重构代码5.1、工程结构5.2、代码实现(MQ消息适配)5.2.1、统一的MQ消息体5.2.2、MQ消息体适配类5.2.3、测试适配类5.3、代码实现(接口使用适配)5.3.1、定义统一适... 继续阅读 >
202109-09 详解Java实践之抽象工厂模式 目录一、前言二、开发环境三、抽象工厂模式介绍四、案例场景模拟4.1、场景模拟工程4.2、场景简述4.2.1、模拟单机服务RedisUtils4.2.2、模拟集群EGM4.2.3、模拟集群IIR4.3、单集群代码使用4.3.1、定义使用接口4.3.2、实现调用代码五、代码实现5.1、工程结构5.2、ifelse实现需求5.3、测试验证六、抽象工厂模式重构代码6.1、工程结构6.2、代码实现6.2.1、定义适配接口6.2.2、实现集群使用服务6.2.3、定义抽象工程代理类和实现6.3、... 继续阅读 >
202109-09 详解Java实践之建造者模式 目录一、前言二、开发环境三、建造者模式介绍四、案例场景模拟4.1、场景模拟工程4.2、场景简述4.2.1、物料接口4.2.2、吊顶(ceiling)4.2.3、涂料(coat)4.2.4、地板(floor)4.2.5、地砖(tile)五、代码实现5.1、工程结构5.2、ifelse实现需求5.3、测试验证六、建造者模式重构代码6.1、工程结构6.2、代码实现6.2.1、定义装修包接口6.2.2、装修包实现6.2.3、建造者方法6.3、测试验证七、总结一、前言无论承接什么样的需求,是不是身边总... 继续阅读 >
202109-09 浅谈Java开发架构之领域驱动设计DDD落地 目录一、前言二、开发目标三、服务架构3.1、应用层{application}3.2、领域层{domain}3.3、基础层{infrastructrue}3.4、接口层{interfaces}四、开发环境五、代码示例六、综上总结一、前言整个过程大概是这样的,开发团队和领域专家一起通过通用语言(UbiquitousLanguage)去理解和消化领域知识,从领域知识中提取和划分为一个一个的子领域(核心子域,通用子域,支撑子域),并在子领域上建立模型,再重复以上步骤,这样周而复始,... 继续阅读 >
202109-09 Java 实现浏览器下载文件及文件预览 插曲想记录一下,以后可以来粘贴复制用。一、浏览器下载文件setContentType()该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型。没有缓存response.addHeader("Pargam","no-cache");response.addHeader("Cache-Control","no-cache");publicstaticvoidsetResponseHeader(HttpServletResponseresponse,Stringname){try{name=newString(name.getBytes(),"ISO8859-1");}catch(Unsupp... 继续阅读 >
202109-09 Java并发编程之线程间的通信 目录一、概念简介1、线程通信2、等待通知机制3、基础方法二、等待通知原理1、基本原理2、实现案例三、管道流通信1、管道流简介2、使用案例四、生产消费模式1、业务场景2、代码实现五、源代码地址一、概念简介1、线程通信在操作系统中,线程是个独立的个体,但是在线程执行过程中,如果处理同一个业务逻辑,可能会产生资源争抢,导致并发问题,通常使用互斥锁来控制该逻辑。但是在还有这样一类场景,任务执行是有顺序控制的,例如常... 继续阅读 >