编程语言
文章平均质量分 61
icarusliu81
http://liumoran.cn
展开
-
Excel读写操作抽象简述
1、背景很多项目里面都需要对Excel进行操作,这个时候我们一般使用POI工具,其中使用最多的三个场景如下:生成导入模板:需要为生成的Excel增加各种校验,如下拉、长度限制、单元格类型等;只需要增加标题行,无数据行;导入数据:需要从单元格中读取各种类型的数据,如数字类型、文本类型、日期类型等;用户上传的文件格式可能比较混乱,如预期是文本格式的单元格实际格式是数字,在读取时...原创 2020-02-24 19:04:13 · 310 阅读 · 0 评论 -
编程基础-代码优化示例一(Builder模式、Stream及面向对象)
编码其实是一个可以做到非常精致的事情,每次回头看自己以前写的代码,总是觉得可以采用更好的方式去实现。从好的方面来说自己一直在进步,但从差的方面来说就是自己一直都做的不够好。在日常编码过程中有时候灵机一动的念头,可能就是对于解决某些场景非常有用的方案,因此我决定将一些编码过程中的优化记录下来,总结后真正的变成自己的东西,这样在往后的编码过程中就可以做到更好。当然代码优化是一个永无止境的事情,总结也...原创 2019-09-02 15:06:34 · 561 阅读 · 0 评论 -
Java8日期类型常见用法总结
Java8新引入了一些日期、时间对象,这些对象与老的日期时间对象的使用上存在很大的不同,刚开始会很不习惯,但经过初步的使用后一定会更习惯使用这些新的API的,它使得对日期时间对象的操作上不会再如老的使用方式那样痛苦。首先需要明确的一个概念就是,Java8中将日期与时间对象区分开了。如果只需要使用年、月、日而不关注时间信息,可以直接使用LocalDate;如果需要关注时间信息,可以使用LocalD...原创 2018-12-13 10:05:03 · 1949 阅读 · 0 评论 -
通过训练将图像压缩到指定大小
最近在做一个东西,想要将图片压缩后存储到服务器上以节省空间。直接使用JDK中的类进行压缩处理,但发现压缩后的图片大小跨度区间较大。最终考虑在计算压缩比例时引入调整值,并对这个调整值进行训练,以尽量缩减压缩后大小与目标大小的差距。使用不同大小的图片进行训练后就可以得到一组调整值,最终在代码中可以直接使用这组结果来处理。而不是每次都需要重新训练。实现如下:package com.iroote...原创 2018-12-12 15:56:21 · 771 阅读 · 0 评论 -
kafka消费者构建未返回问题分析-线程池异常处理
在上文中,配置kafka参数时因为参数类型与kafka预期的类型不匹配而导致其抛出了ConfigException。但很奇怪的是,在日志中看不到这个异常的任何信息,因此也导致我一直没往这方面考虑,最终通过一步步调试才发现对构造函数的调用居然没有返回,并经过进一步的分析搞清楚了是因为参数类型不匹配而抛出了异常,但为什么这个异常信息未打印出来的问题也一直困扰着我。问题未搞清楚始终是块心病,因此对这块...原创 2018-12-04 09:58:45 · 568 阅读 · 0 评论 -
MVN指定打包需要包含的目录
在使用jpamodelgen生成源码后,源码生成的目录在target目录下; 如果此时又想使用mvn将项目打成jar包,那么生成的源码并不会打到JAR包中去。此时,需要在pom.xml文件中将该目录包含进去:<resources> <resource> <directory>src/main/java</directory> </re...原创 2018-11-22 15:36:54 · 7415 阅读 · 1 评论 -
JavaFX开发的开发常用工具集——清单管理工具、命令行加强工具及HTTP调用工具
在软件开发过程中,经常会需要使用到一些工具,如清单管理、HTTP调用测试等,电脑上经常要装一堆的软件,而且这些软件经常不是很满足自己的使得习惯。作为一个开发人员,很自然的就想按自己的想法开发一些工具来供自己使用,因此这个工具集就因此而产生了,并且在使用过程中仍在不断优化与增加。目前包含了三个工具:一是定制化的清单管理工具;二是HTTP请求工具;三是Win命令行加强工具。全部都是使用JavaFX等...原创 2018-10-14 14:50:46 · 1810 阅读 · 0 评论 -
0 代码量杂谈
在使用POI导出Excel文件时,如果某个单元格需要设置成下拉选择的方式,并且下拉列表数目大于255时,直接写序列将会报错:java.lang.IllegalArgumentException: String literals in formulas can't be bigger than 255 characters ASCII此时可以增加一个隐藏的Sheet,然后在需要设置下拉的单元...原创 2018-06-21 13:30:35 · 533 阅读 · 0 评论 -
Java并发基础-Fork、Join方式的并行计算研究分析
本文目录:1 Fork/Join概述2 示例3 详解3.1 ForkJoinPool3.2 ForkJoinTask3.3 RecursiveAction与RecursiveTask1 Fork/Join概述Fork/Join是JDK中提供的类似Map/Reduce的并行计算的实现;它主要处理那些可以递归的分解成更小作业的作业。 与Map/Reduce类...原创 2018-03-21 18:32:25 · 387 阅读 · 0 评论 -
Java并发基础-锁的使用及原理(可重入锁、读写锁、内置锁、信号量等)
本文目录:1 基础1.1 可重入锁1.2 读写锁2 内置锁synchronized3 显式锁Lock3.1 简单示例3.2 锁常用操作3.3 读写锁使用示例4 信号量Semaphore4.1 信号量使用示例4.2 方法清单1 基础1.1 可重入锁可重入锁表示的是,如果一个线程在未释放已获得锁的情况下再次对该对象加锁,将可以加锁成功...原创 2018-03-20 15:03:12 · 1440 阅读 · 0 评论 -
Java并发基础-线程状态及转换
每个线程都有状态,表示当前的线程是否在运行或者是等待某些事情的发生等。 本文先对线程的几个状态进行解释,然后再说明线程如何在这几个状态之间跳转。本文目录:1 基础知识2 状态说明3 线程状态转换3.1 新建->就绪3.2 就绪->运行3.3 运行->就绪3.4 运行->阻塞3.5 阻塞->就绪3.6 运行->死亡1 基...原创 2018-03-14 00:18:07 · 231 阅读 · 0 评论 -
Java集合类思维导图
辅助记忆用!原创 2018-03-10 18:05:21 · 1723 阅读 · 0 评论 -
Java8新特性学习-Stream的Reduce及Collect方法详解
Stream的使用方法在http://blog.csdn.net/icarusliu/article/details/79495534一文中已经做了初步的介绍,但它的Reduce及Collect方法由于较为复杂未进行总结,现单独对这两个方法进行学习。 为简化理解,部分可以采用Lambda语法的地方采用了原始的语法; 0. 涉及知识大部分涉及到的知识在http://blog.csdn....原创 2018-03-10 00:26:17 · 94290 阅读 · 15 评论 -
Java并发基础-Condition对象分析
Condition即条件,它用于线程检测条件是否满足,从而决定当前线程是否挂起或者继续执行;这个条件可以被其它线程所更新,并且在更新后通知挂起线程可以继续处理。如最经典的生产者与消费者模式,就可以通过Condition很方便的实现。本文目录:1 基础1.1 Condition对象简单使用1.1.1 Condition对象的创建1.1.2 Condition对象的使用1.2 ...原创 2018-03-15 20:00:22 · 624 阅读 · 0 评论 -
Java8新特性学习-函数式编程(Stream/Function/Optional/Consumer)
Java8新引入函数式编程方式,大大的提高了编码效率。本文将对涉及的对象等进行统一的学习及记录。首先需要清楚一个概念:函数式接口;它指的是有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接口是一个函数式接口。函数式接口是Java支持函数式编程的基础。本文目录:1 Java8函数式编程语法入门2 Java函数式接口2.1 Consu...原创 2018-03-09 11:52:47 · 85378 阅读 · 37 评论 -
Java基础-序列化与反序列化理解要点
关于序列化与反序列化,主要涉及有以下知识点:序列化指的是将对象转换成字节流;Class的信息和实例数据都会转换成字节流; 反序列化则是其反向的过程,指的是将二进制流的数据转换成对象。序列化时使用的是ObjectOutputStream类的writeObject方法;而反序列化时使用的是ObjectInputStream中的readObject方法。Serializable接口用于表示某个...原创 2018-03-14 22:57:38 · 295 阅读 · 0 评论