
java
文章平均质量分 65
枫叶-哈哈
简述简述
展开
-
Itext教程
转载文章 Itext教程转载 2021-07-22 21:50:28 · 445 阅读 · 0 评论 -
EasyExcel使用说明
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。详情:EasyExcel使用说明转载 2021-07-21 11:15:22 · 282 阅读 · 0 评论 -
springboot+flowable-ui 步骤
参考文章黑月ゞ / springboot-flowable-modeler1,引用jar2,添加UI静态文件3,文件配置3.1 application.yml3.2 stencilset4,Java配置原创 2021-06-30 14:38:20 · 1411 阅读 · 0 评论 -
利用redis生成自定义code(编码)
原理:利用日期表达式生成时间字符串,利用redis的 increment 生成自增数字,保证code唯一。具体格式如下:如:CODE[D:yyyyMMdd][N:4] 生成结果:CODE202105200001[]包裹的字符串是规则,在[]外的是固定字符串[D:日期规则] :表示日期规则,获取日期。如:[D:yyyyMMdd] -> 20210520[DL:日期规则] :表示日期规则,获取日期并转成字母。如:[DL:MMdd] -> 0520 -> 0EB0[N:数值长度]原创 2021-05-21 14:41:53 · 1152 阅读 · 1 评论 -
Java类加载器
参考文章Java面试题|JVM必看15道面试题简介加载类文件到内存。Class loader只管加载,只要符合文件结构就加载,至于能否运行,它不负责,那是有Exectution Engine 负责的类型对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。启动类加载器(Bootstrap ClassLoader):是虚拟原创 2021-02-19 23:35:36 · 219 阅读 · 1 评论 -
Java内存模型
转载文章Java内存模型简述Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。作用Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。这里说的变量包括实例字段、静态字段和构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的,不会共享,也就不存在竞争的问题。主内存与工作内转载 2021-02-05 17:24:06 · 99 阅读 · 0 评论 -
ForkJoinPool和Executor的区别
参考文章介绍 ForkJoinPool 的适用场景,实现原理Fork/Join 框架框架使用ExecutorExecutor 使用了一个无限队列来保存需要执行的任务,而线程的数量则是通过构造函数传入,如果没有向构造函数中传入希望的线程数量,那么当前计算机可用的CPU数量会被设置为线程数量作为默认值。适用场景:io密集型ForkJoinPoolFork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框原创 2021-01-21 16:51:32 · 840 阅读 · 0 评论 -
Future,CompletableFuture的差异
参考文章线程的启动方式线程线程请参考 线程实现方法缺点:无法获取运行结果。Future + CallableJava 1.5开始,提供了Callable和Future,是多线程有返回结果的一种。通过它们可以在线程任务执行完毕之后得到任务执行结果。boolean isDone();// 判断是否已经完成 。get() ; // 阻塞主线程,直到子线程运行结束,返回运行结果 。get(long timeout, TimeUnit unit) ; // 阻塞主线程,直到子线程运行结束,返回原创 2021-01-20 03:16:51 · 756 阅读 · 1 评论 -
JAVA实现大文件多线程下载,提速30倍
转载文章: JAVA实现大文件多线程下载,提速30倍!想学?我教你啊转载 2021-01-18 09:46:58 · 496 阅读 · 0 评论 -
HTTP面试题
参考文章:一文带你了解HTTPS看懂HTTPSURI、URL和URN的区别http原理Http与Https的区别:HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头HTTP 无法加密,是不安全的,而 HTTPS 对传输的数据进行加密,是安全的HTTP 标准端口是80 ,而 HTTPS 的标准端口是443在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层HTTP无需证书,而HTTPS 需要CA机构wosign的原创 2020-12-31 11:45:36 · 2089 阅读 · 4 评论 -
TCP 和 UDP 的总结
参考文章35 张图解:被问千百遍的 TCP 三次握手和四次挥手面试题什么是 TCPTCP 是面向连接的、可靠的、有序的、基于字节流的传输层通信协议。面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;字节流:消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面原创 2021-02-02 14:22:31 · 592 阅读 · 1 评论 -
网络 7 层架构
参考文章一文看懂网络七层协议/OSI七层模型网络7层架构物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、等。它的主要作用是传输比特流(就是由 1、0 转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的模数转换与数模转换)。数据链路层:主要将从物理层接收的数据进行 MAC 地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。网络层:主要将从下层接收到的数据进行 IP 地址(例 192.168.0.1)的封原创 2020-12-27 20:35:52 · 215 阅读 · 0 评论 -
Hystrix学习总结
参考文章Hystrix的服务熔断和服务降级服务熔断与降级(Hystrix)SpringCloud(6)—熔断降级理解、Hystrix实战白话:服务降级与熔断的区别Spring Cloud Hystrix服务容错Hystrix熔断VS降级熔断降级是应对雪崩效应的一种微服务链路保户机制,当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的相应信息。相同点:目标一致 都是从可用性和可靠性出发,为了防止系统崩溃;用户体验类似 最终都让用户体原创 2020-12-24 17:40:57 · 167 阅读 · 0 评论 -
maven构建加速-在pom中使用阿里云仓库
转载 南哥220 的maven构建加速-在pom中使用阿里云仓库pom配置示例 <repositories> <repository> <id>central</id> <name>central repository</name> <url>http://maven.aliyun.com/nexus/content/groups/p转载 2020-12-20 17:43:16 · 392 阅读 · 0 评论 -
java常用加密算法
参考文章CRC、MD5、SHA1 有何区别?常用算法AES高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:RSARSA 加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法。非对称加密是通过两个密钥(公钥-私钥)来实现对数据的加密和解密的。公钥用于加密,私钥用于解密CRC、MD5、原创 2020-12-19 12:50:51 · 456 阅读 · 0 评论 -
springboot+security 使用说明
一,简单启用Spring Security1,引入jar<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>2,配置application.yml 文件security: basic: enabled:原创 2020-10-24 16:26:14 · 1286 阅读 · 0 评论 -
sharding-jdbc-springboot简单样例
1,sharding-jdbc 基本概念逻辑表 :水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为 10 张表,分别是 t_order_0 到 t_order_9,他们的逻辑表名为 t_order。真实表:数据库中真实存在的物理表。即上个示例中的 t_order_0 到 t_order_9。数据节点:数据分片的最小单元。由数据源名称和数据表组成,例:ds_0.t_order_0。绑定表:分片规则一致的主表和子表。例如:t_order 表和 t_order_item原创 2020-10-17 16:32:36 · 1073 阅读 · 0 评论 -
springboot和kafka的实例
1,引入jarbuild.gradle 添加以下引用compile group: 'org.springframework.kafka', name: 'spring-kafka', version: '2.4.4.RELEASE'2,配置application.yml 添加一下配置spring: kafka: bootstrap-servers: 127.0.0.1:9092 #生产者的配置,大部分我们可以使用默认的,这里列出几个比较重要的属性 producer:原创 2020-09-25 14:25:40 · 225 阅读 · 0 评论 -
SpringBoot和RocketMQ的实例RocketMQTemplate
1,引用jar包build.gradle文件添加jar包引用compile group: 'org.apache.rocketmq', name: 'rocketmq-spring-boot-starter', version: '2.1.1'2,配置application.properties 配置文件###rocketmq###rocketmq.name-server=192.168.1.3:9876rocketmq.producer.group=app-demprocketmq.pr原创 2020-09-24 17:27:44 · 4733 阅读 · 1 评论 -
SpringBoot和RocketMQ的简单实例
1,引用jar包build.gradle文件添加jar包引用compile group: 'org.apache.rocketmq', name: 'rocketmq-spring-boot-starter', version: '2.1.1'2,配置文件application.properties 配置文件spring.application.name=app-dempserver.port=8081###rocketmq###rocketmq.name-server=192.168.1原创 2020-09-17 10:29:18 · 655 阅读 · 0 评论 -
通过问题了解rocketmq
1、说说你们公司线上生产环境用的是什么消息中间件?RabbitMQ:erlang语言开发,开发者想看源码时成本较高,不过社区活动度高。RabbitMQ对消息堆积不是很好,当大量消息堆积时会导致RabbitMQ的性能急剧下降。每秒可以处理几万到十几万的消息。RocketMQ:阿里用Java语言开发的。面向互联网集群化功能丰富,对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应,每秒钟大概能处理几十万条消息。Kafka:Scala开发,面对日志功能丰富,性能最高。但当你的业务中每秒钟消息原创 2020-09-15 18:01:30 · 255 阅读 · 0 评论 -
RabbitMQ实现延迟任务
死信队列&死信交换器死信消息:消息被拒绝(Basic.Reject或Basic.Nack)并且设置 requeue 参数的值为 false消息过期了队列达到最大的长度消息过期:在 rabbitmq 中存在2种方可设置消息的过期时间,第一种通过对队列进行设置,这种设置后,该队列中所有的消息都存在相同的过期时间,第二种通过对消息本身进行设置,那么每条消息的过期时间都不一样。如果同时使用这2种方法,那么以过期时间小的那个数值为准。当消息达到过期时间还没有被消费,那么那个消息就成为了一个 死信原创 2020-09-03 02:09:25 · 398 阅读 · 1 评论 -
RabbitMQ的理解
RabbitMQ是一个开源的消息代理软件。它接收生产者发布的消息并发送给消费者。它扮演中间商的角色,可以用来降低web服务器因发送消息带来的负载以及延时。RabbitMQ里的几个重要概念。生产者(Producer):发送消息的应用。消费者(Consumer):接收消息的应用。队列(Queue):存储消息的缓存。消息(Message):由生产者通过RabbitMQ发送给消费者的信息。连接(Connection):连接RabbitMQ和应用服务器的TCP连接。通道(Channel):连接里的一个原创 2020-08-21 18:09:55 · 265 阅读 · 1 评论 -
Spring Boot:拦截器与过滤器
参考文章spring boot 过滤器、拦截器的区别与使用Springboot 拦截器配置(登录拦截)拦截器与过滤器的区别过滤器和拦截器触发时机不一样,如上图:过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。实现方式不同:Filter的执行由Servlet容器回调完成,依赖于Servlet容器。而拦截器是spring提供并管理的,通过动态代理(反射)的方式来执行,可以在任何情况下使用。过滤器 不能使用sprin原创 2020-08-13 16:26:09 · 156 阅读 · 0 评论 -
String和locale
字节与字符的关系locale的设定为什么要设定locale到底什么是locale?什么是字符集?zh_CN.GB2312到底是在说什么?怎样去自定义localelocale的五脏六腑怎样设定locale呢?原创 2020-08-14 11:55:08 · 958 阅读 · 0 评论 -
@RequestParam、@RequestBody和@ModelAttribute区别
@RequestParam接受一个请求参数(像的@RequestParam customerName)。接受 Content-Type: 为 application/x-www-form-urlencoded,multipart/form-data 数据。Http协议中,如果不指定Content-Type,则默认传递的参数就application/x-www-form-urlencoded类型。RequestParam实质是将Request.getParameter() 中的Key-Value参数Map利原创 2020-07-30 10:30:04 · 1747 阅读 · 0 评论 -
Zookeep的应用场景
节点类型:1、PERSISTENT-持久化目录节点客户端与zookeeper断开连接后,该节点依旧存在2、 PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号3、EPHEMERAL-临时目录节点客户端与zookeeper断开连接后,该节点被删除4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点客户端与zookeeper断开连接后,该节点被删除,只是Zookee.原创 2020-07-24 15:19:15 · 203 阅读 · 0 评论 -
java锁
了解线程锁之前先了解一下线程状态。线程状态当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5 种状态。尤其是当线程启动以后,它不可能一直"霸占"着 CPU 独自运行,所以 CPU 需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换新建状态(NEW):当程序使用 new 关键字创建了一个线程之后,该线程就处于新建状态,此时原创 2020-12-27 17:28:02 · 143 阅读 · 0 评论 -
线程终止方式
1、正常运行结束2、使用退出标志退出线程public class ThreadSafe extends Thread { public volatile boolean exit = false; public void run() { while (!exit) { //do something } }}定义了一个退出标志 exit,当 exit 为 true 时,while 循环退出,exit 的默认值为 fals原创 2020-12-27 18:17:52 · 678 阅读 · 0 评论 -
线程间数据共享
多线程对一个变量操作时,需要注意线程安全。线程不安全static int num = 0;public static void main(String[] args) { for (int i = 0; i < 6; i++) { new Thread(() -> { try { num = num + 2; System.out.println("num = " + num原创 2020-06-19 20:43:09 · 190 阅读 · 0 评论 -
线程协同作战
CountDownLatchCountDownLatch 线程计数,可以实现一个主线程等到N个子线程全部执行完成后再执行主线程代码。final CountDownLatch latch = new CountDownLatch(2);new Thread(){public void run() { System.out.println("子线程"+Thread.currentThread().getName()+"正在执行"); Thread.sleep(3000); System.out.原创 2020-06-19 10:53:35 · 195 阅读 · 0 评论 -
线程实现方法
继承 Thread 类public class MyThread extends Thread { public void run() { System.out.println("Thread 线程实现"); }}MyThread myThread = new MyThread();myThread.start();实现 Runnable 接口public class MyThread implements Runnable { public void run() {原创 2020-06-07 12:42:44 · 188 阅读 · 0 评论 -
HashMap与ConcurrentHashMap的区别
HashMap 和 ConcurrentHashMap 都是存key,value的。HashMap线程不安全,ConcurrentHashMap 线程安全。HashMapJAVA7结构如图,数组+链表:HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。HashMap根据key的hash()方法计算哈希值,即数组的index。如果有多个key的原创 2020-06-07 11:47:10 · 860 阅读 · 0 评论 -
Java IO/NIO
阻塞 IO 模型最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出 CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除 block 状态。典型的阻塞 IO 模型的例子为:data = socket.read();如果数据没有就绪,就会一直阻塞在 read 方法。非阻塞 IO 模型当用户线程发起一个 read 操作后,并不需要等待原创 2020-05-31 18:12:13 · 185 阅读 · 0 评论 -
JVM
JVM概念JVM 是可运行 Java 代码的假想计算机 , 是运行在操作系统之上的,它与硬件没有直接的交互。JVM对每一个操作系统都有对接,可以在每个操作系统稳定运行。这也是Java可跨平台运行的原理。JVM运行内存一个程序运行就是一个JVM。多个程序运行就会有多个JVM。一个程序可以有多个线程同时并发运行。线程私有内存的存活周期和线程的周期一致。线程运行结束后,私有内存就释放了。GC主要清理的内存就是堆区。Java堆从GC的角度上可以分为。新生代,老年代。eden:java对象实例化的刚出原创 2020-05-30 13:02:27 · 150 阅读 · 1 评论 -
java正则表达式的\
在其他语言中,\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。在 Java 中,\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个 \ 代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是 \d,而表示一个普通的反斜杠是 \原创 2020-05-25 10:09:25 · 227 阅读 · 0 评论 -
netty接受http
启动netty的server接受http请求1,HttpHelloWorldServer.javaimport org.slf4j.LoggerFactory;import org.slf4j.Logger;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.Channel;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoo翻译 2020-05-15 16:33:14 · 401 阅读 · 1 评论 -
netty的简单理解
参考资料: https://www.cnblogs.com/imstudy/p/9908791.html1,Netty 常见使用场景在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。2,高性能设计1,b翻译 2020-12-21 21:04:43 · 185 阅读 · 0 评论 -
netty的helloworld
一个简单的netty测试,类似聊天。client发送 聊天信息,server 回复client说的话。1,引用jar包 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>${netty-all.version}</versi原创 2020-05-15 10:38:24 · 222 阅读 · 0 评论 -
SPRINGBOOT无法接受PUT和DELETE的参数
SPRINGBOOT无法接受PUT和DELETE请求由于Springboot没有默认的支持PUT和DELETE请求,所以需要进行一定的设置。@Configurationpublic class MvcConfig extends WebMvcConfigurationSupport { @Bean public FormContentFilter httpPutFormCon...原创 2020-05-08 11:47:44 · 677 阅读 · 1 评论