自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 Java 8 Stream 简介

前言这篇文章的主题是探究 Java 8 Stream的内容,虽然现在Java 14 都发布了,但是目前企业用得最多的还是 Java 8,我们的短期关注点还是在于对 Java 8 的使用,而 Stream 是 Java 8 中一个非常重要的部分,掌握好 Stream API 能让我们的代码变得更简洁、更灵活。Java Stream 介绍Stream 是 Java 8 的一个重要特性,在《Jav...

2020-03-30 09:38:12 193

原创 聊聊线程池那些事

前言平时开发过程中,我们会经常和线程池打交道,有时还会根据不同的业务进行线程池隔离,那么了解线程池的工作原理和参数设置就是非常必要的,所以今天的主题就是探究线程池的那些事儿。为什么使用线程池在使用一项技术之前,了解 「why」 是至关重要的,即我们为什么要使用线程池?线程池有什么好处?线程池是一种池化技术,使用线程池可以减少线程创建时的资源消耗,同时也可以提高响应速度,即当有任务到达时,如...

2020-03-23 09:58:51 274

原创 聊聊类加载器与双亲委派模型

前言我们经常会在面试中遇到有关类加载器的问题,而作为一名Java开发人员应该了解类加载器如何工作?双亲委派模型是什么?如何打破双亲委派?为什么打破?等等。所以今天的主题就是聊一聊类加载器。ClassLoader 介绍《深入理解Java虚拟机》这本书大家都不陌生,想必我们大多数人了解JVM知识都是通过这本书,在该书中也详细介绍了Java类加载的全过程,包含加载、验证、准备、解析和初始化这5个阶...

2020-03-16 11:36:52 218

原创 聊聊ThreadLocal那些事

前言这篇文章聊聊 ThreadLocal,我们经常会在一些开源中间件的源码中见到它的身影,比较常见的用途是保存上下文信息,还有就是保证了线程安全。实际上,ThreadLocal 为每个线程提供一个单独的变量,确是一种保证线程安全的手段,ThreadLocal 创建的变量只能被当前线程访问,其他线程不得干涉。ThreadLocal API使用 ThreadLocal 其实非常简单,直接看下面...

2020-03-09 12:04:46 588

原创 Netty 入门初体验

前言这篇主要介绍一个Netty 客户端与服务端的示例代码,对Netty有一个直观感受,看看如何使用Netty,后续文章会对Netty的各个组件进行详细分析Netty简介Netty是一款异步的事件驱动的网络应用程序框架,支持快速开发可维护的高性能的面向协议的服务器和客户端。Netty主要是对java 的 nio包进行的封装为什么要使用 Netty上面介绍到 Netty是一款 高性能的网...

2020-02-29 09:42:30 137

原创 springboot系列文章之使用单元测试

前言springboot提供了 spirng-boot-starter-test以供开发者使用单元测试,在引入 spring-boot-starter-test依赖后:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>s...

2018-09-13 15:15:06 524

原创 springboot系列文章之集成WebSocket进行广播式消息推送

前言在springboot整合websocket之前,先简单阐述下websocket的基本概念,以及与它相关的sockjs,stomp又是什么。WebSocket简介WebSocket协议是 HTML5新增的一种在单个TCP连接上进行全双工通讯的协议,在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成一条快速通道,两者之间就直接...

2018-09-13 15:10:38 1973

原创 springboot系列文章之过滤器 vs 拦截器

前言之前实际开发项目的时候,虽然有用过滤器和拦截器,但是理解上还是有点懵懵懂懂的,没有彻底明白,这篇文章就来仔细剖析下这二者的区别与联系。过滤器过滤器Filter,是在Servlet规范中定义的,是Servlet容器支持的,该接口定义在 javax.servlet包下,主要是在客户端请求(HttpServletRequest)进行预处理,以及对服务器响应(HttpServletRe...

2018-09-13 15:10:13 463 1

原创 springboot系列文章之日志配置

前言 下面的总结基本上来自网络与官方文档,这里做一个记录,方便以后查看SpringBoot 内部采用的是 Commons Logging进行日志记录,但是默认配置也提供了对常用日志的支持,如: Java Util Logging,Log4j,Log4j2和Logback。每种Logger 都可以通过配置使用控制台或者文件输出日志内容。slf4j Simple Loggin...

2018-09-08 20:00:16 172

原创 JDK自带的反编译工具 javap

前言以前经常看一些文章使用 javac 反编译 class文件,然后生成一堆字节码,再一顿骚操作分析字节码,可谓是非常炫酷。这里有时间刚好也来玩玩JDK的 javapjavap 介绍javap是 JDK自带的一个工具,可以将 class文件反编译成字节码,它并没有将class文件反编译成 java文件,但是依然反编译成程序员能读的格式。下面举一个小例子,java源代码如下:...

2018-09-06 15:28:01 10244

原创 JVM 系列文章之 对象存活分析 - 引用计数 and 可达性分析

前言在垃圾回收器回收对象时,我们如何判断哪些对象是”活”的,哪些是”死”的,关于判断对象存活的方法主要分为两类: 引用计数法 和 可达性分析算法引用计数法引用计数器就是: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减一;任何时刻计数器为 0 的对象就是不可能再被使用的,可以此时进行回收。但是引用计数法有一个很大的缺陷,就是它很难...

2018-09-06 15:27:33 164

原创 JVM 系列文章之 Java 的内存区域

前言 下面关于 Java 的内存区域介绍大部分参考深入理解Java虚拟机,也参考了网上很多资料,以下图片均摘自网络运行时数据区域Java虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。根据《Java 虚拟机规范》将 Java虚拟机所管理的内存分为以下几个运行时数据区域: - 程序计数器 - Java虚拟机栈 - 本地方法栈 - Java...

2018-09-06 15:27:02 225

原创 JVM 系列文章之 Full GC 和 Minor GC

Full GCFull GC 就是收集整个堆,包括新生代,老年代,永久代(在JDK 1.8及以后,永久代会被移除,换为metaspace)等收集所有部分的模式RednaxelaFX大在[Major GC和Full GC的区别是什么?触发条件呢?- 知乎]( https://www.zhihu.com/question/41922036/answer/93079526)这个问题有关于 GC...

2018-09-06 15:26:31 187

原创 JVM 系列文章之 GC 算法浅析

Java的堆结构再介绍垃圾回收算法之前,先来看看 Java中的堆,Java里的堆指的是用于存放 Java 对象的内存区域。JVM的堆被同一个JVM实例中所有的Java线程共享,它通常由某种自动管理机制所管理,这种机制通常叫做”垃圾回收”。在Java 中,堆被分为两个不同的区域: 新生代(Young),老年代(Old)。新生代又被划分为三个区域: Eden,From Survivor,To ...

2018-09-06 15:25:56 155

原创 springboot系列文章之spring-boot-devtools实现热部署

前言实际开发过程中,修改应用的业务逻辑时常常需要重启应用,这显得非常繁琐,降低了开发效率,所以热部署对于开发来说显得十分必要了什么是热部署? 应用启动后会把编译好的Class文件加载到虚拟机中,正常情况下载项目修改了源文件是需要全部重新编译并加载(需要重启应用),而热部署就是监听 Class 文件的变动,只把发生修改的Class重新加载,而不是重启应用。spring-...

2018-09-06 15:24:37 3683

原创 springboot系列文章之实现跨域请求(CORS)

CORS介绍跨域资源共享向来都是热门的需求,我们可以使用 CORS 来快速实现 跨域访问,只需要在服务端进行授权即可,无需在前端添加额外的设置简单说,CORS是一种访问机制,英文全称: Cross-Origin Resource Sharing,即我们说的跨域资源共享。当一个资源从与该资源本身所在服务器不同的域或端口请求一个资源时,资源会发起一个跨域HTTP请求。比如,在一个域名下的网页中...

2018-09-06 15:23:55 1915

原创 探究MySQL中的日志文件

前言日志文件记录了影响MySQL数据库的各种类型活动,MySQL数据库中常见的日志文件有错误日志,二进制日志,慢查询日志和查询日志。下面分别对他们进行介绍。错误日志错误日志文件对MySQL的启动,运行,关闭过程进行了记录。mysql> show variables like 'log_error';+---------------+-----------------...

2018-08-31 11:40:35 272

原创 一文读懂一个URL请求的过程是怎样的

前言当我们在浏览器中输入一个URL访问地址,然后浏览器返回给我们一个响应页面,这内部过程到底是怎样的呢?下面我将从以下几个方面阐述一个 WEB请求过程到底是怎样: - 浏览器缓存 - DNS域名解析 - TCP连接 - HTTP请求与响应浏览器的缓存机制 这里将浏览器机制放在第一步是考虑如果浏览器中有了缓存数据,浏览器再次向目标URL发送请求时,在数据不过期的情况下,会...

2018-08-31 11:38:36 10295 2

原创 springboot系列文章之整合mybatis

mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。关于...

2018-08-31 11:38:09 194

原创 springboot系列文章之整合Spring Data JPA

JPA简介首先来介绍一下JPA,JPA是 Java Persistence API的简称,中文名称为 Java持久层API,是官方(Sun)在JDK5.0后提出的Java 持久化规范,其目的是为了简化Java EE和Java SE的应用开发工作。可以通过注解或者XML描述之间的映射关系,将实体对象持久化到数据库中。JPA仅仅是一种规范,它仅仅定义了一些接口,而接口是需要实现才能工作,所以底...

2018-08-31 11:37:42 195

原创 BIO,NIO,AIO概览

前言本文简单介绍一下BIO,NIO,AIO以及同步与异步,阻塞与非阻塞等概念同步与异步同步与异步关注的是消息通信机制同步同步就是发起一个调用后,等待当前调用返回,没得到结果之前,调用不返回,就像做事一样,事情必须一件一件做完了,才能做下一件异步异步就是发起一个调用后,立刻得到回应,但没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用...

2018-08-31 11:37:08 145

原创 Java NIO.2系列文章之异步通道API入门

NIO.2概览NIO.2也就是人们常说的 AIO,在Java 7中引入了NIO的改进版NIO 2,它是异步非阻塞的IO方式。AIO的核心概念就是发起非阻塞方式的I/O操作,立即响应,却不立即返回结果,当I/O操作完成时通知。这篇文章主要介绍NIO 2的异步通道API的一些内容,后续文章再分析NIO.2的其他特性异步通道API从Java 7开始,java.nio.channe...

2018-08-31 11:36:45 295

原创 Java NIO 系列文章 (一) Buffer,Channel,Selector入门

前言 下面部分内容参考 Java NIO 系列教程-并发编程网NIO类库简介NIO 库是在JDK 1.4中引入的,NIO 弥补了原来同步阻塞 I/O 的不足,它在标准Java代码中提供了高速的,面向块的I/O。NIO的核心部分主要有: - 通道 Channel - 缓冲区 Buffer - 多路复用器 Selector下面一一介绍着三大核心部分。通道 Cha...

2018-08-31 11:36:08 1407

原创 MySQL常用基础类型详解

前言以下是对《高性能MySQL》中MySQL基础类型的学习总结整数类型有如下几种整数类型,以及它们相应的存储空间: - TINYINT,8位存储空间 - SMALLINT,16位存储空间 - MEDIUMINT,24位存储空间 - INT,32位存储空间 - BIGINT,64位存储空间以int类型为例,它的存储空间是32位,其可以存储的值的范围是从-2^31到2^3...

2018-08-21 15:37:27 235

原创 浅析Spring的IoC和DI

前言以前学习 Spring 框架的控制反转和依赖注入,一直很懵懂,对这两者概念和它们之间的关系没有一个清晰的认识,所以这篇文章详细去探索这被人称道的 IoC 和 DI什么是控制反转IoC的全称是Inversion of Control,中文意思就是控制反转,那到底什么是控制反转呢,首先让我们看一个例子。假设有一个服务类ServiceA,要做doService这项工作,其中它想调...

2018-08-21 15:35:55 124

原创 springboot系列文章之编写七牛云的自定义starter

springboot的自动配置编写自定义starter之前,先来简要介绍下springboot的自动配置的相关特征。spring-boot-autoconfigure 依赖spring-boot-autoconfigure 依赖,是Spring Boot实现自动配置的核心Starter组件,它的工作原理很简单,通过@EnableAutoConfiguration让SpringBoo...

2018-08-21 15:35:23 616

原创 springboot系列文章之SpringApplication详解

前言还是从SpringBoot的启动类说起,这篇文章主要分析启动类中的SpringApplication@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.cla...

2018-08-21 15:34:52 637

原创 springboot系列文章之启动时初始化数据

前言在我们用springboot搭建项目的时候,有时候会碰到在项目启动时初始化一些操作的需求,针对这种需求springboot(spring)为我们提供了以下几种方案供我们选择: - ApplicationRunner与CommandLineRunner接口 - Spring Bean初始化的InitializingBean,init-method和PostConstruct - Spr...

2018-08-21 15:34:21 48101 3

原创 springboot系列文章之SpringBootApplication注解

前言Springboot的启动类可以是非常简单,其中最关键的两部分是Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run),这篇文章主要分析其@SpringBootApplication注解,后续文章再接着分析其类定义。@SpringBootApplicationpublic class Application ...

2018-08-21 15:33:44 487

原创 详解Java Socket的工作机制

Socket的来龙去脉下面的分析主要是参阅了计算机网络(谢希仁第7版)进行总结的,从系统调用—>应用编程接口API—>套接字接口来分析Socket的来龙去脉,当然维基百科上也有对Socket的详细解释1. 系统调用大多数操作系统使用系统调用的机制在应用程序和操作系统之间传递控制权。对程序员来说,系统调用和一般程序设计中的函数调用非常相似 2. 应用编程接口AP...

2018-08-13 01:02:02 2045 1

原创 平衡二叉树的插入与删除

定义AVL树是带有平衡条件的二叉查找树。它要求在AVL树中任何节点的两个子树的高度(高度是指节点到一片树叶的最长路径的长) 最大差别为1,如下图所示:为什么有AVL树大多数BST操作,例如搜索,最大,最小,插入,删除等,消耗取O(h)时间,h是BST的高度。对于倾斜的二叉树,这些操作的成本可能会变成O(n)。如果我们在每次插入和删除之后确保树的高度保持O(Logn),那么我...

2018-08-09 22:10:50 8993

原创 RabbitMQ的安装

RabbitMQ简介RabbitMQ是采用Erlang语言实现AMQP(高级消息队列协议)的消息中间件。RabbitMQ的安装这里所有的安装操作都是在Centos 7系统下进行的,RabbitMQ的安装方式其实有两种,一种是直接在Linux系统中安装,一种是在容器中安装,这里指Docker容器。对于一些简单的测试环境或者小型项目,我更愿意在Docker中安装使用,因为在Docker...

2018-08-09 00:40:16 169

原创 死磕排序算法之堆排序

介绍堆排序就是利用堆这种数据结构来实现的一种排序算法,平均时间复杂度为O(nlogn),空间复杂度为O(1)堆堆是一种完全二叉树,即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入堆有堆序性,每个结点的值都大于或等于其左右孩子的值,称为大顶堆,每个结点的值都小于或等于其左右孩子的值,称为小顶堆。图形演示这里Youtobe上有个讲heap sor...

2018-08-07 22:42:38 126

原创 动态代理的原理及其应用

动态代理的介绍动态代理是一种在运行时动态地创建代理对象,动态地处理代理方法调用的机制。实际上它是一种代理机制。代理可以看做是对调用目标的一个封装,直接通过代理来实现对目标代码的调用与静态代理的比较静态代理提前写好代理类,每个业务类都要对应一个代理类,不灵活 - ISubject,该接口是被访问者或者被访问的对象 - SubjectImpl,被访问者的具体实现类 ...

2018-08-07 22:29:46 6867

原创 MySQL常用语句(二)

前言这文主要介绍MySQL查询,联结表,全文索引的常用语句使用子查询使用IN操作符进行子查询select cust_id from orders where order_num in (select order_num from orderitems where prod_id = 'TNT2')作为计算字段使用子查询select cust_name,c...

2018-08-07 11:23:33 123

原创 MySQL常用语句(一)

关于Show语句show语句可以用来查询数据库,表,列和服务器状态信息,show后面还可以跟like操作符,甚至有的还可以跟where语句show variables 查看系统变量show variables 显示MySQL系统变量的值mysql> show variables like "%char%";+--------------------------+--...

2018-08-07 11:21:48 894

原创 项目中碰到的ExceptionInInitializerError异常

背景之前在集成第三方即时通信系统-融云的时候,我直接clone它的服务端源码,然后导入我的项目,我在测试它连接融云服务器案例时,发现一直不成功,始终报一个 ExceptionInInitializerError 的异常。后来通过网上查资料才发现,这个异常是静态变量初始化时出现异常时,JVM会抛出java.lang.ExceptionInInitializerError的异常。由此,我对这个异常做...

2018-03-18 20:39:25 39359 1

原创 Iterator和Iterable解析

之前一直搞不清楚Iterator和Iterable到底有什么关系,它们的区别是什么,今天查看Java集合类源码才发现其中的名堂,接下来给大家讲讲我的分析与理解。Iterable接口Iterable是接口,Iterable是1.5引入的新特性,Iterator是1.2就有了,二者都是为了迭代造作,Iterable只是包装了Iterator,从而允许实现此接口的对象成为foreach语句的目标,而且这样

2017-10-16 16:51:58 489

原创 阿里云Centos下安装JDK+Tomcat+Mysql步骤详解

阿里云Centos下安装JDK+Tomcat+Mysql步骤详解标签(空格分隔): 云服务器前言:以下我是按照Centos7的系统环境安装的,亲测可用一.JDK的安装步骤软件下载地址:JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html (直接下载.tar.gz格式的文件)可以直接下载最新版本,我这里是jdk

2017-09-03 15:32:58 429

原创 Java基础知识之容器(一)

Java基础知识之容器(一)Java 容器前言:在java开发中我们会大量的使用集合,在这里我将总结常见的集合类,每个集合类的优点和缺点,以便我们能更好的使用集合。关于简单容器分类的结构图以上是容器的分类情况,其中比较常用的就是图中红色圈出的部分.点线框表示接口,实线框表示具体的类。1.基本概念Collection:一个独立元素的序列,这些元素都服从一条或多条规则,是大多数集合类型的接口。List

2017-08-16 10:48:58 222

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除