![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 96
qq_39158142
这个作者很懒,什么都没留下…
展开
-
java 实现 excel,doc,ppt 文件加密
这里我们使用docx4j 进行加密。要进行加密的文件为office 2007 套件生成的文件,即文件名后缀有x的,比如pptx,docx,xlsx等。导入pom 依赖。 <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j-core</artifactId> <version&g原创 2020-10-20 11:01:41 · 476 阅读 · 0 评论 -
java 反射中的坑
1 class 中的getMethod , getField , getDeclaredField,getDeclaredMethods 区别get打头的可以获取当前类以及父类或者接口中声明的public 修饰的字段或者是方法getDeclared 只能获取当前类中声明的所有方法或者是字段,包括private , protected ,public ,以及默认的包修饰符。2 fianl 字段可以修改吗可以通过反射来进行修改,如果被final 修饰的字段同时被static 修饰,那么只有类加载原创 2020-06-24 11:51:38 · 360 阅读 · 0 评论 -
pdf 合并
由于某些原因需要进行pdf合并,但是网上的大部分都只能合并俩到三个,而且有限制,求人不如求己,就自己写了参照网上的写了个工具类。我们使用的是apache的pdf处理工具类。maven: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pd...原创 2019-05-22 19:42:45 · 244 阅读 · 0 评论 -
RoundingMode 参数详解
RoundingMode的几种模式,具体是什么舍入行为呢?看API完全没看懂,还好有人总结过了:https://blog.csdn.net/alanzyy/article/details/8465098下面是我对这篇文章的图形理解,个人感觉比较好记,具体的示例可以看上边的原文:UP正数向右边靠,负数向左边靠DOWN和up正好相反,正数向左边靠,负数向右边靠CEILI...转载 2019-05-27 18:45:30 · 186 阅读 · 0 评论 -
java 动态代理 和动态编程
概述代理分两种技术,一种是jdk代理(机制就是反射,只对接口操作),一种就是字节码操作技术。前者不能算技术,后者算是新的技术。未来将有大的动作或者较为广泛的应用和变革,它可以实现代码自我的编码(人工智能,代码智能)。什么是动态编程?动态编程解决什么问题?Java中如何使用?什么原理?如何改进?(需要我们一起探索,由于自己也是比较菜,一般深入不到这个程度)。什么是动态编程动态编程是...原创 2019-05-30 19:34:34 · 912 阅读 · 0 评论 -
要怎样才能够完美的编写高性能的RPC框架
在 RPC Benchmark Round 1 中,Turbo 性能炸裂表现强悍,并且在 listUser 这一项目中,取得了 10x dubbo 性能的好成绩。本文将介绍 Turbo 强悍性能背后的原理,并探讨如何编写高性能的 RPC 框架。过早的优化是万恶之源?这句话是 The Art of Computer Programming 作者,图领奖得主 Donald Knuth 大神说的...转载 2019-05-29 19:03:37 · 252 阅读 · 0 评论 -
java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比
我们为什么要序列化举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放。那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列化。我们要用的时候,就需要将字节流重构成对象,这叫反序列化。不知道我这么说大家能不能理解。java序列化的缺点java自己提供序列化而且用起来也非常简单,但是在远程服务调用中很少用...转载 2019-05-29 19:05:41 · 1237 阅读 · 0 评论 -
antlr4 实战 idea
ANTLR 是用JAVA写的语言识别工具,它用来声明语言的语法,简称为“元语言”(meta-language)。ANTLR 语法识别一般分为二个阶段:1.词法分析阶段 (lexical analysis)对应的分析程序叫做lexer,负责将符号(token)分组成符号类(token class or token type)2.解析阶段根据词法,构建出一棵分析树(parse ...原创 2019-06-14 14:26:46 · 2056 阅读 · 3 评论 -
多线程步调一致
并发编程三个核心问题:分工、同步、互斥背景介绍这里我们来模拟一下商城对账单流程,如下图:总共分为4个步骤:1 查询未对账订单2 查询派送单3 进行对账4 将对账结果写入差异库代码实现1 首先我们新建一个类,OrderTest,使用单元测试。这里为了模拟,我们将所有操作都模拟为一秒。public class OrderTest { List&l...原创 2019-07-08 11:17:58 · 206 阅读 · 0 评论 -
java 并发容器
java并发容器基本可以分为4个,list,map,set,queue,如下如:11 list只有一个实现 CopyOnWriteArrayList ,顾名思义就是写的时候会将共享变量新复制一份出来,这样做的好处是读操作完全无锁。但是新插入的数据不会立即更新,对源数据的增,删,改是没用的。适用于读多写少2 MapMap 接口的两个实现是 ConcurrentHashM...原创 2019-07-08 11:42:20 · 149 阅读 · 0 评论 -
spring 技巧
ApplicationContextAware实现该接口,获取获取spring的bean。InitializingBean ,DisposableBean实现该接口,可以在bean初始化和销毁前进行操作BeanPostProcessor实现该接口,BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为...原创 2019-07-10 13:31:49 · 181 阅读 · 0 评论 -
java semphore实现 简单数据库连接池
1 自定义实现(semphore/阻塞队列)首先我们先介绍一下什么是信号量:类似于我们去公共澡堂洗澡,需要先去前台付款拿到储物柜的钥匙,如过没有空闲的储物柜,我们就需要一直等待,直到有别人洗完澡,让出储物柜,这里的钥匙就相当于信号量(有限的数量)。信号量可以使共享变量可被指定数量的线程访问。一个计数器,一个等待队列,三个方法。在信号量模型里,计数器和等待队列对外是透明的,所以只能通...原创 2019-07-05 13:49:43 · 176 阅读 · 0 评论 -
HashMap源码解析
变量//默认容量,为16,如果需要自己设置的话,最好设置为2 的 n 次方 ,即使设置的不是2的次方,也会自动寻找最近的2的次方作为默认容量。至于为什么是2的次方,是为了减少hash的冲突static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16//最大的容量,如果设置的超过最大容量,则map的容量为该值 s...原创 2019-08-01 14:13:09 · 111 阅读 · 0 评论 -
获取包以及jar 包下的类
首先,Java中的getResourceAsStream获取项目下的指定资源有以下几种:一:获取src下的指定资源通过Class.getResource 来获取。path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下(即'/'代表src)获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源 //必须要从...原创 2019-05-22 18:53:32 · 1141 阅读 · 0 评论 -
xml 解析
DOM解析是将这个xml文件装入内存DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse("books.xml"...原创 2019-04-26 17:24:16 · 172 阅读 · 0 评论 -
java 内存参数设置
JVM按照其存储数据的内容将所需内存分配为堆区与非堆区两个部分:所谓堆区即为通过new的方式创建的对象(类实例)所占用的内存空间;非堆区即为代码、常量、外部访问(如文件访问流所占资源)等。堆第一组配置参数:-Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn 1、-Xms :表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/6...原创 2019-04-17 13:08:10 · 6306 阅读 · 0 评论 -
optional
从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Op...转载 2018-07-05 17:35:18 · 1044 阅读 · 0 评论 -
java 集合Stream操作
Stream相当于我们集合中的迭代器,不同的是这是一个增强的迭代器,可以并行的对数据进行处理,而迭代器只能串行的执行。使用并行去遍历时,数据会被分成多个段,每个段在不同的线程中执行,最后将计算结果进行合并。使用的是jdk7新加的fork/join框架。分类:Intermediate:一个流可以后面跟随零个或多个 intermediate 操作。其目的主要是打开流,做出某种程度的数据映射/过...原创 2018-07-19 13:13:44 · 786 阅读 · 0 评论 -
不可变类
一、不可变类简介不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。二、不可变类的优点说完可变类和不可变类的区别,我们需要进一步了解为什么要有不可变类?这样的特性对JAVA来说带来怎样的好...转载 2018-08-19 19:21:57 · 358 阅读 · 0 评论 -
guava学习
Preconditions用来进行参数的检查,方法失败则抛出NullPointException或 IndexOutOfBoundsException 或IllegalArgumentException异常。有三个方法: Preconditions.checkElementIndex(1, 1); //检查数组越界 Preconditions.checkArgument(1>...原创 2018-08-19 20:12:54 · 363 阅读 · 0 评论 -
Hystrix
首先介绍一下系统故障常用方案:降级、熔断、限流、排队一、服务器降级(自身的故障)1、服务降级:服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。也就是说,当服务器负载达到饱和时,将一些无关轻重、可有可无的服务停掉,以此来达到主功能的完整执行。2、降级方式服务接口拒绝服务:无用户特定信息,页面能访问...原创 2018-08-21 19:09:08 · 183 阅读 · 0 评论 -
SOA,微服务
传统架构:传统架构:将所有的模块都耦合在一起。SOA(Service Oriented Architecture):定义:面向服务的架构服务:所有业务功能都是一项服务,服务就意味着要对外提供开放的能力,当其他系统需要使用这项功能时,无须定制化开发。ESB:ESB 的全称是 Enterprise Service Bus,中文翻译为“企业服务总线”。从名字就可以看出,ESB...原创 2018-08-21 21:43:44 · 153 阅读 · 0 评论 -
CompletableFuture
在JDK1.5已经提供了Future和Callable的实现,可以用于阻塞式获取结果,如果想要异步获取结果,通常都会以轮询的方式去获取结果,如下://定义一个异步任务Future<String> future = executor.submit(()->{ Thread.sleep(2000); return "hello world";})...原创 2018-11-27 09:55:05 · 147 阅读 · 0 评论 -
NIO
新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的。NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的、面向块的 I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO 不用使用本机代码就可以利用低级优化,这是原来的 I/O 包所无法做到的。在本教程中,我们将讨论 NIO 库的几乎所有方面,从高级的概念性内容到底层的编程细节。除了学习诸如缓冲区...转载 2019-01-31 15:04:14 · 139 阅读 · 0 评论 -
ExecutorService
ExecutorService 即线程池。 1 submit 提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future2 shutdown 启动一次顺序关闭,执行以前提交的任务,但不接受新任务.3 shutdownNow试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表4 isShutdown如果此执行程序已关闭,...原创 2019-02-14 11:27:52 · 1691 阅读 · 0 评论 -
Spring Cloud 简介
毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底...转载 2019-03-06 13:33:57 · 99 阅读 · 0 评论 -
Java中的锁分类
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。公平锁/非公平锁公平锁是指...转载 2019-03-07 10:38:52 · 111 阅读 · 1 评论 -
Java之SPI机制
之前开阿里的HSF框架,里面用到了Java的SPI机制,今天闲暇的时候去了解了一下,通过写博客来记录一下SPI的全名为Service Provider Interface,我对于该机制的理解是为接口寻找服务实现类。现在公司的系统都是进行了模块的划分,系统抽象为多个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块...转载 2019-03-04 20:10:45 · 127 阅读 · 0 评论 -
Transaciton 注解 使用事项
Transaciton 注解会自动为我们开启一个事务。但某些情况下,总会出现事务开启不成功,这里我们做一个总结。transaction 注解原理:spring 在启动的时候会去解析生成相关的bean,这时候会查看拥有相关注解的类和方法,并且为这些类和方法生成代理,并根据@Transaction的相关参数进行相关配置注入,这样就在代理中为我们把相关的事务处理掉了(开启正常提交事务,异常回滚事务...原创 2019-03-07 15:13:41 · 545 阅读 · 0 评论 -
线程与定时器
1.定时器定时器使用的是Timer,使用schedule来进行任务的进行。public static void main(String args[]) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out...原创 2018-06-24 22:15:55 · 436 阅读 · 0 评论