JAVA
文章平均质量分 83
JAVA
二一点
上善若水 夫唯不争 故无尤!
展开
-
JAVA NETTY 文件上传和下载
话不多说,直接上代码,文件上传和下载。HTTP服务public final class HttpServer { static final boolean SSL = System.getProperty("ssl") != null; static final int PORT = Integer.parseInt(System.getProperty("port",...原创 2018-08-25 14:54:55 · 3424 阅读 · 5 评论 -
JAVA并发编程 之 LMAX Disruptor使用实例(高效解决生产者与消费者问题)
什么是Disruptor?Disruptor是一个开源的JAVA框架,它被设计用于在生产者—消费者(producer-consumer problem,简称PCP)问题上获得尽量高的吞吐量(TPS)和尽量低的延迟。Disruptor是LMAX在线交易平台的关键组成部分,LMAX平台使用该框架对订单处理速度能达到600万TPS,除金融领域之外,其他一般的应用中都可以用到Disruptor,它可以带来...原创 2018-04-13 11:30:03 · 19354 阅读 · 2 评论 -
并发队列 ConcurrentLinkedQueue 及 BlockingQueue 接口实现的四种队列
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。在并发队列上JDK提供了两...原创 2018-03-29 09:56:40 · 10779 阅读 · 0 评论 -
JAVA并发编程 之 Lock 与 Synchronized 的比较和应用 及 锁机制
synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢?synchronized 的局限性 与 Lock 的优点如果一个代码块被synchronized关键字修饰,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待直至占有锁的线程释放锁。事实上,占有锁的线程释放锁一般会是以下三种情况之一:占有锁的线程执行完了该代码块,然后释放...原创 2018-04-11 16:18:30 · 1410 阅读 · 0 评论 -
JAVA并发编程 之 CountDownLatch、CyclicBarrier、Semaphore、Callable和Future
CountDownLatch用法CountDownLatch位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch类只提供了一个构造器:public CountDownLatch(int count) { }; //参数...原创 2018-04-11 13:56:03 · 1330 阅读 · 0 评论 -
JAVA线程池,ThreadPoolExecutor实现的四种线程池
线程池在JAVA中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便。但是就会有一个问题,如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?这样Java线程池出现了。new Thread的弊端:a....原创 2018-04-10 16:02:44 · 3244 阅读 · 1 评论 -
多线程 - 生产者与消费者
生产者与消费者在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这种生产消费能力不均衡的问题,所以便有了生产者和消费者模式。生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。...原创 2018-04-09 14:47:25 · 3113 阅读 · 0 评论 -
ThreadLocal、单例模式和多线程、ConcurrentHashMap、CopyOnWrite容器
什么是ThreadLocal?先看看JDK中的源码是怎样描述的:This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its {@code get} or {@code s...原创 2018-03-26 17:13:14 · 2754 阅读 · 0 评论 -
JAVA线程基础(synchronized、同步与异步、volatile、脏读)
一、线程安全(synchronized)线程安全概念:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的。synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为“互斥区”或“临界区”下面看一个例子: public class MyThread extends Thread { private int coun...原创 2018-03-21 15:29:33 · 1313 阅读 · 0 评论 -
JAVA特性 之 反射(Reflection)
什么是反射?反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。用一句话总结就是反射可以实现在运行时可以知道任意一个类的属性和方法。反射能做什么?反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任...原创 2018-04-24 11:23:08 · 1602 阅读 · 0 评论 -
JAVA面向对象四大特性:多态、继承、抽象、封装
一、多态(晚绑定;运行时;一个接口,多种实现)面向对象的四大特性:封装、继承、多态、抽象。从一定角度来看,封装和继承几乎都是为多态而准备的。是最重要的知识点。多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其...原创 2018-04-20 15:40:06 · 11191 阅读 · 1 评论 -
Java GC 分析,JVM生产环境参数实例及分析,JVM详细配置
什么是 Java GCJava GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对JVM(Java Virtual Machine)中的内存进...原创 2018-08-21 11:05:27 · 3889 阅读 · 0 评论 -
JAVA NETTY 心跳检测
使用Socket通信一般经常用来处理多个服务器之间的心跳检测,一般来讲去维护服务器集群,肯定有一台或几台服务器主机Master,还应该有n台Slave。Master常常需要知道自己下面从服务器的各方面情况,进行实时监控,这在分布式架构里叫做心跳检测或心跳监控。如果用http发送心跳包虽然简单但是极度不科学,耗电量太大,所以直接否决。我们选择基于TCP实现长连接,而借助一些第三方插件可以更好更快...原创 2018-08-23 10:38:37 · 2164 阅读 · 0 评论 -
JVM内存结构,JAVA类的加载机制,GC算法,垃圾收集器
一、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次...原创 2018-08-20 14:01:27 · 2690 阅读 · 0 评论 -
Linux(CentOS 7) 安装 Tomcat8 及 JDK1.8配置
一、使用wget方式wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.4/bin/apache-tomcat-8.5.4.tar.gzwget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096f...原创 2018-08-06 14:26:11 · 2423 阅读 · 1 评论 -
Spring boot Maven找不到spring-boot-starter-log4j2 JAR包问题,使用slf4j的logback输出日志
一、问题描述把Springboot版本升级了下,运行发现报了这样一个错误:'dependencies.dependency.version' for org.springframework.boot:spring-boot-starter-log4j:jar is missing.报错的提示是spring-boot-starter-log4j这个Jar找不到。 Maven是如下配置:<par...原创 2018-07-03 13:54:30 · 19527 阅读 · 5 评论 -
Java 网络IO编程 之 BIO、NIO、AIO 的用法与实现
一、BIO 编程1、传统的BIO编程网络编程的基本模型是C/S模型,即两个进程间的通信。服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。 简单...原创 2018-05-16 09:26:38 · 1569 阅读 · 1 评论 -
Java 网络编程 之 socket 的用法与实现
一、概念TCPTCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP,下一篇博客会实现)是同一层内 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是...原创 2018-05-15 09:44:00 · 123198 阅读 · 33 评论 -
JAVA基础 之 泛型详解
一、概述什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控...原创 2018-05-21 16:45:27 · 1046 阅读 · 0 评论 -
JAVA多线程之Master worker并行设计模式
在多线程程序设计中Master worker 模式是常用的并行模式之一,核心思想是由两类进程协助完成的,Master 进程负责接收和分配任务并处理保存结果集,Worker 负责处理任务, 并把结果返回给Master 进程. 这类设计模式最大的好处是 将一个大任务分配成若干个小任务并行执行。可见master-worker 模式适合与将大任务化成小任务并行执行的情况,各个小任务基本并行独立运行,最终提...原创 2018-03-30 16:29:49 · 1049 阅读 · 0 评论 -
JAVA多线程之Future模式
Future模式有点类似于商品订单。比如在网购时,当看中某一个商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无需一直等待请求的结果,可继续浏览或操作其他内容。下面看一个例子:1.客户端发送请求客户端发送请求,包装类返回“假”的结果,同时创建一个线程去执行真实的操作。import java.util.co...原创 2018-03-30 16:10:17 · 311 阅读 · 1 评论 -
线程之间通信 等待(wait)和通知(notify)及Queue的模拟
线程通信概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程之间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会对线程任务在处理过程中进行有效的把控与监督。为了支持多线程之间的协作,JDK提供了两个非常重要的接口线程等待wait()方法和通知notify()方法。这两个方法并不是在Thread类中的,而是输...原创 2018-03-23 16:58:07 · 409 阅读 · 0 评论 -
通俗易懂RESTful,如何设计RESTful风格API
REST -- REpresentational State Transfer 直译:表现层状态转移。这个中文直译经常出现在很多文章中。尼玛,谁听得懂“表现层状态转移”,这是人话吗?那就逐个单词来理解REST名称REST -- REpresentational State Transfer首先,之所以晦涩是因为前面主语被去掉了,全称是 Resource Representati原创 2017-11-07 17:07:32 · 38354 阅读 · 24 评论 -
Springboot 处理跨域请求(AJAX、VUE)
什么是跨域?由于安全原因,浏览器都遵循着同源原则,拦截了不同域名之间的请求。跨域请求,是指能让不同域名之间,可以相互发送请求。当它请求的一个资源是从一个与它本身提供的第一个资源的不同的域名时,一个资源会发起一个跨域HTTP请求(Cross-site HTTP request)。比如说,域名A ( http://domaina.example ) 的某 Web 应用程序中通过标签引入了域原创 2017-10-19 11:30:54 · 9274 阅读 · 2 评论 -
Spring Boot 使用 WebSocket 实现消息推送 及 WebSocket原理
WebSocket 是什么原理,为什么可以实现持久连接?一、WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容原创 2017-10-09 10:56:43 · 15707 阅读 · 6 评论 -
JAVA 实现 HTTP 断点续传及原理
断点续传原理:现在有一个文件需要我们进行下载,当我们下载了一部分的时候,出现情况了,比如:电脑死机、没电、网络中断等等。 对于以上行为,如果“下载”的行为无法记录本次下载的一个进度。那么,当我们再次下载这个文件也就只能从头来过。所以,要实现让一种断开的行为“续”起来的目的,关键就在于要有“介质”能够记录和读取行为出现”中断”的这个节点的信息。实际上这就是“断点续传”的基础原理,用大白话原创 2017-08-29 15:41:19 · 7057 阅读 · 0 评论 -
Spring boot 两种热部署方式 springloader 和 devtools
什么是热部署?热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。在平时编写代码的时候,你会发现我们只是简单把打印信息改变了,就需要重新部署,如果要改变这样的方式,就需要用到热部署springloaded。使用方式,在项目中的pom.xml中plugin里添加依赖: org.springframework springlo原创 2017-08-25 18:05:20 · 16015 阅读 · 3 评论 -
spring boot 的 JPA 操作,提示Entity过时,No identifier specified for entity
先普及一下百度百科中对JPA的解释:JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。下面是spring bo原创 2017-08-29 10:49:40 · 14336 阅读 · 2 评论 -
Maven搭建spring boot启动时报错NoClassDefFoundError: org/apache/juli/logging/LogFactory
开发环境:Myeclipse2017、JDK1.6、Tomcat7.0。搭建完成启动时报错NoClassDefFoundError: org/apache/juli/logging/LogFactory,以下是报错信息: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \( ( )原创 2017-08-25 09:19:52 · 13670 阅读 · 3 评论 -
Myeclipse下使用Maven搭建spring boot项目(第一篇)
开发环境:Myeclipse2017、JDK1.6、Tomcat 8.0。Myeclipse下使用Maven搭建spring boot项目,详细过程如下:1. New -> Project... -> Maven Project2. Next, 选择Use default Workspace location。3. Next, 选择“maven-archetype-webapp”创建一...原创 2017-08-24 17:22:00 · 40862 阅读 · 0 评论 -
Spring Boot 使用Oracle集成Mybatis,驼峰映射(下划线)问题
问题描述:数据库字段为USER_ID,实体类为userId,在application.xml做如下配置,可以自动进行映射:mybatis.configuration.mapUnderscoreToCamelCase=true或新建mybatis.xml配置文件 进行以上配置后,并没有映射成功,查出来的数据都为null。问题分析:1、把项目整体迁移到My原创 2017-11-03 15:40:55 · 3586 阅读 · 0 评论 -
MyEclipse 保存文件时报错 An internal error occurred during: "Building Spring AOP reference model" 的解决方法
问题描述:因为使用了Spring 的 AOP,每次在保存的时候都报如下错误:An internal error occurred during: "Building Spring AOP reference model".java.lang.IllegalArgumentException搜了一大圈的解决方案,在国外的Genuitec上找到了答案,原文如下:OK. I原创 2017-11-13 12:26:49 · 5567 阅读 · 2 评论 -
一个Simple而又SB的问题 @Autowired Field xxxDao in xxx requird a bean of type
问题描述:建立了一个简单的Springboot项目,对Oracle数据库进行访问,查询数据,返回JSON。代码如下:Application.javapackage com.bocom;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure原创 2017-12-28 11:13:23 · 3962 阅读 · 4 评论 -
Myeclipse下使用Maven搭建spring boot项目(第二篇)
上一篇,已经使用Maven搭建了一个WEB项目http://blog.csdn.net/a78270528/article/details/77532781现在需要搭建spring boot框架,并实现一个HelloWorld的项目,让程序真正运行起来。一、在pom.xml中引入spring-boot-start-parent,spring官方的叫stater poms,它可以提供原创 2017-08-25 14:35:11 · 17268 阅读 · 18 评论 -
Java序列化机制,serialVersionUID作用
serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastEx转载 2017-12-07 15:05:13 · 4487 阅读 · 0 评论 -
Spring boot 实现文件上传,postman模拟上传文件报错XssHttpServletRequestWrapper cannot be cast to MultipartHttpServle
JAVA上传、下载、多文件上传功能实现起来还是十分方便的,在测试过程中,使用POSTMAN发送请求,发生了如下异常:java.lang.ClassCastException: com.fingerprint.utils.xss.XssHttpServletRequestWrapper cannot be cast to org.springframework.web.multipart.Mul原创 2017-11-27 13:56:16 · 11415 阅读 · 1 评论 -
Spring boot 集成 Kaptcha 实现前后端分离验证码功能
简述在web开发中验证码是一个常见的功能。不论是防止机器人还是爬虫都有一定的作用,我们可以自己编写验证码的工具类,也可以使用比较方便的验证码工具。本文使用Spring boot 集成 Kaptcha 实现前后端分离验证码功能,这里为什么强调前后端分离,拿登陆功能为例,在登陆我们要请求后台返回一张验证码图片,然后输入用户名密码加上验证码,再次提交给后台,如果不是前后端分离,可轻松的从se原创 2017-11-22 14:27:27 · 15402 阅读 · 7 评论 -
Spring boot 集成JavaMail服务发送邮件
JavaMail是SUN提供给广大Java开发人员的一款邮件发送和接受的一款开源类库,支持常用的邮件协议,如:SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,不再需要考虑底层的通讯细节如:Socket而是关注在逻辑层面。JavaMail可以发送各种复杂MIME格式的邮件内容,注意JavaMail仅支持JDK4及以上版本。虽然JavaMail是JDK的API但它并没有直接加原创 2017-11-27 13:09:43 · 5513 阅读 · 2 评论 -
使用Swagger生成JAVA Mock Server(Springboot)代码
Swagger为我们提供了非常多的工具,其中最强的还要算这个代码的生成工具。在前后端分离的大环境下,前后端之间订立的接口显得尤为重要,接口在订立之后变动的可能性已经很小,这就要求我们提前去设计接口,也就是我们为前端提供的API。但是我们发现,在开发过程中订立的接口寿命其实很短,这是一件非常严重的事情。因此Swagger为我们提供了另外一种比较优雅的方式:就是你先订立接口,然后再去用生成的接口,原创 2017-11-14 15:27:10 · 12374 阅读 · 3 评论 -
SpringBoot中使用Swagger生成RESTful规范API文档
Swagger是为了描述一套标准的而且是和语言无关的REST API的规范。对于外部调用者来说,只需通过Swagger文档即可清楚Server端提供的服务,而不需去阅读源码或接口文档说明。官方网站为:http://swagger.io中文网站:http://www.sosoapi.com背景前后端分离1、前后端仅仅通过异步接口(AJAX/JSON)来编程2、前后端都原创 2017-11-11 14:28:38 · 16366 阅读 · 2 评论