随笔分类 - Java基础
摘要:import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.StringReader; import java.nio.charset.StandardCharsets; import javax.
阅读全文
摘要:队列和阻塞队列 队列 队列(Queue)是一种经常使用的集合。Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。和 List、Set 一样都继承自 Collection。它和 List 的区别在于,List可以在任意位置添加和删除元素,而Queue 只
阅读全文
摘要:0.背景 前段时间,其他组同事找到我,说让我协助看一个事务未回滚问题,刚开始以为是事务隔离设置方面的原因,结果原因很简单,因为要给接口添加超时中断的功能,他根据网上文章使用java.util.concurrent.Future#get(long, java.util.concurrent.TimeU
阅读全文
摘要:1.前言 首先回顾下代理模式(Proxy Pattern)的定义:代理模式指为其他对象提供一种代理,以控制这个对象的访问,属于结构型设计模式。其适用于在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端于目标对象之间起到中介的作用。 代理模式主要分为静态代理和动态代理两种方
阅读全文
摘要:进行对象复制时,很多框架提供了公共方法,如org.springframework.beans.BeanUtils#copyProperties,org.apache.commons.beanutils.PropertyUtils#copyProperties,org.apache.commons.b
阅读全文
摘要:如下Demo,想要通过复用stream来实现多次统计,代码中是存在缺陷的 Stream<Person> personStream = personList.stream().filter(p -> "aa".equals(p.getName())); //年龄总和 Integer ageSum =
阅读全文
摘要:JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。CGLib动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1. JDK动态代理 1.1 角色
阅读全文
摘要:1. HashMap继承体系 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {} 结合下面的类继承关系图,可以看出HashMap的主要作用: HashMa
阅读全文
摘要:线程池任务运行的主流程如下: 线程池调用execute提交任务—>创建Worker(设置属性thead、firstTask)—>worker.thread.start()—>实际上调用的是worker.run()—>线程池的runWorker(worker)—>worker.firstTask.ru
阅读全文
摘要:1. 简介 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 降低资源消耗 。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度 。当任务到达时,任务可以不需要等到线程创建就能立即执行
阅读全文
摘要:原因是 javac 在不同jdk下的不兼容, 可升级到最新的jdk来解决。 不升级的话,可以使用的泛型参数提示编译器来绕过,如下:
阅读全文
摘要:前期对接了一个通过ssh免密登录的需求,是基于原先密码登录sftp服务器的代码上进行改造,实际上代码改动量非常少,趁此机会对自己整理的资料做一下总结。 1. 什么是SFTP SFTP是一个安全文件传送协议,可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安
阅读全文
摘要:调用返回报文标签中的存在中划线“-”,不符合规范,需要统一进行转换,但不能替换标签内的内容,利用正则匹配重新输出
阅读全文
摘要:ArrayList 不是线程安全的,这点很多人都知道,但是线程不安全的原因及表现,怎么在多线程情况下使用ArrayList,可能不是很清楚,这里总结一下。 1. 源码分析 查看 ArrayList 的 add 操作源码如下: /** * Appends the specified element t
阅读全文
摘要:1. 复制map示例 首先看一个例子,当我使用不同方法将一个源map拷贝到另一个map后,改变源map,复制后的map理应不受影响 查看输出: 可以看到通过“=”复制的map内容随源map的改变而改变,而通过putAll方法和Iterator复制的map则不受源map改变的影响。 2. Map的两种
阅读全文
摘要:Java有自带的 stripTrailingZeros() 方法用于去除末尾多余的0 按上面的方法输出结果,会显示科学计数法,所以需要处理一下,解决方法: 通过该方法处理BigDecimal类型数据后面的0的方法实现: 不通过该方法处理BigDecimal类型数据实现
阅读全文
摘要:1. 常规元素去重 碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素。 除此之外,可以利用java8的stream来实现去重 上面的方法在List元素为基本数据类型及String类型时是可以的,但是如果List集合元素为对
阅读全文
摘要:定义ftp操作接口 接口实现类 业务场景中,调用ftp发生在对账操作,用户通过输入交易笔数、csv文件名,从而判断ftp服务器上是否存在该文件,如果存在该文件,则首先获取文件中的内容条数,与输入的笔数数值比较,一致的话就继续获取csv文件内容与系统数据库中进行比较、对账,从而完成对账操作。 在测试中
阅读全文