Java基础
CrankZ
这个作者很懒,什么都没留下…
展开
-
JVM基础(三):Java垃圾回收
先来讲一下垃圾回收的前置知识。1.Java内存划分2.Java堆3.Minor GC与Full GC4.Java引用的四种状态5.Java对象在内存中的3种状态1.Java内存划分上面这张图就是jvm运行时的状态。具体划分为如下5个内存空间:1-3为线程私有,4-5为线程共享1、程序计数器:为了线程切换后能恢复到正确的执行位置。线程私有2、Java虚拟机栈:虚拟机栈描述的是Java方法执行的内存模...原创 2018-05-02 15:15:39 · 340 阅读 · 0 评论 -
Spring AOP学习笔记(一):基础概念
AOP产生背景AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,...原创 2018-08-14 23:00:35 · 267 阅读 · 0 评论 -
POJO与JavaBean与SpringBean的概念与区别
前言最近在看阿里Java开发手册的过程中发现了大量的POJO关键字,之前也一直听说JavaBean和SpringBean,但是他们之间的概念还不是很清楚,所以最近学习了一下,写下了这篇文章。先来看一下阿里Java开发手册中提到“POJO”这个关键字的片段。阿里Java开发手册一、编程规约(一) 命名风格8. 【强制】POJO类中布尔类型的变量,都不要加is前缀,否则部分框架...原创 2018-08-08 15:35:26 · 3251 阅读 · 0 评论 -
Java注解学习笔记
什么是注解注解(Annotation)是一种应用于类、方法、参数、变量、构造器及包声明中的特殊修饰符,它是一种由JSR-175标准选择用来描述元数据的一种工具。Java从Java5开始引入了注解。在注解出现之前,程序的元数据只是通过java注释和javadoc,但是注解提供的功能要远远超过这些。注解不仅包含了元数据,它还可以作用于程序运行过程中、注解解释器可以通过注解决定程序的执行顺序。比...原创 2018-08-22 15:36:58 · 312 阅读 · 0 评论 -
Spring注解学习笔记
什么是注解传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低 在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效...原创 2018-08-23 17:50:10 · 1655 阅读 · 1 评论 -
Java NIO学习笔记:结合源码分析+Reactor模式
Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在...原创 2018-10-01 20:24:23 · 848 阅读 · 0 评论 -
数据库连接池学习笔记(一):原理介绍+常用连接池介绍
什么是连接池数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。为什么要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动...原创 2018-09-27 22:12:43 · 80758 阅读 · 15 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
概述在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。CountDownLatch上图TA刚开始被阻塞,三个线程T1,T2,T3每次调用countDown()方法cnt就减1,等到cnt=0时,TA才开始执行。正如Java文档所描述的那...原创 2018-11-06 10:03:52 · 376 阅读 · 0 评论 -
Java多线程学习笔记:ReentrantLock,Condition,ReentrantReadWriteLock
ReentrantLockReentrantLock和synchronized关键字一样可以用来实现线程之间的同步互斥,但是在功能是比synchronized关键字更强大而且更灵活。ReentrantLock 整体结构如下图:常用接口分析构造器ReentrantLock()创建一个 ReentrantLock的实例。 ReentrantLock(boolean fai...原创 2018-11-07 11:48:31 · 381 阅读 · 0 评论 -
Java多线程学习笔记:Callable、Future、FutureTask
概述创建线程的三种方式:继承Thread,重写run方法 实现Runnable接口,重新run方法 实现Callable接口,重写call方法前两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口,这两种方式都是Java第一版就有的方法。 这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信...原创 2018-11-08 10:14:32 · 382 阅读 · 0 评论 -
BeanFactory、 ApplicationContext、FactoryBean区别与联系
BeanFactory概述Spring 作为一种IoC容器最大的目的就是降低组件与组件之间的依赖关系。而BeanFactory作为整个Spring IoC容器的核心使用了一种统一的方法来装配所有的应用对象,通过Java的反射机制和依赖注入来实现这一装配过程,使受之管理的对象无需知道Spring的存在,同时也降低了组件间的依赖程度,同时受管对象的生命周期由BeanFactory来统一管理,开...原创 2018-11-21 16:53:25 · 1157 阅读 · 0 评论 -
基本类型与包装类型
阿里开发手册中关于基本类型的问题7. 【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。 说明:对于Integer var = ? 在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是...原创 2018-12-14 21:48:08 · 2208 阅读 · 0 评论 -
String学习笔记
阿里Java开发手册这里总结了阿里开发手册中有关String类的介绍13. 【推荐】使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险。说明:String str = "a,b,c,,";String[] ary = str.split(",");// 预期大于3,...原创 2018-12-25 16:23:54 · 936 阅读 · 0 评论 -
Java——七种垃圾收集器+JDK11最新ZGC
JDK1.8之前的堆内存示意图:从上图可以看出堆内存的分为新生代、老年代和永久代。新生代又被进一步分为:Eden 区+Survior1 区+Survior2 区。值得注意的是,在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间,而元空间使用的是物理内存,直接受到本机的物理内存限制)。JVM为什么要进行垃圾回收?...原创 2019-01-07 16:41:45 · 27994 阅读 · 10 评论 -
控制反转(IoC)学习笔记
什么是依赖(Dependency)?依赖是一种关系,通俗来讲就是一种需要。程序员需要电脑,因为没有电脑程序员就没有办法编写代码,所以说程序员依赖电脑,电脑被程序员依赖。在面向对象编程中,代码可以这样编写。class Coder { // 程序员依赖电脑,并自己new一个 Computer mComputer; public Coder () { ...原创 2018-08-06 22:37:29 · 356 阅读 · 1 评论 -
Java反射机制学习笔记
前置知识Java类型Java中每个类型要么是引用类型,要么是基本类型。基本数据类型:byte、short、int、long、float、double、char、boolean除掉这四类八种基本类型,其它的都是对象,也就是引用类型,包括数组。对于每个对象类型,JVM都会为其初始化一个java.lang.Class的实例,可以检查包括属性和方法在内的对象运行时的属性。Class同样也...原创 2018-08-10 23:11:30 · 421 阅读 · 1 评论 -
Java日期学习笔记(二):JDK1.8新特性
Java 8另一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中。借助新的时间和日期API可以以更简洁的方法处理时间和日期。在介绍本篇文章内容之前,我们先来讨论Java 8为什么要引入新的日期API,与之前的时间和日期处理方式有什么不同?在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,主要有:Java的java.util.Dat...原创 2018-07-26 16:39:59 · 834 阅读 · 0 评论 -
设计模式(一):代理模式
1.代理模式1.1什么是代理模式代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。1.2为什么要用代理模式(代理模式解决了什么问题)?在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全...原创 2018-05-09 12:52:45 · 212 阅读 · 0 评论 -
JVM基础(二):Java内存模型
前置知识1.多线程问题2.主内存与工作内存1.多线程问题1.1为什么要使用多线程? 现在计算机的运算速度与它的存储和通信速度的差距太大,大量的时间都花费在磁盘I/O、网络通信和数据库访问上。如果不希望处理器在大部分时间里都处于等待其他资源的状态,就必须使用一些手段去把处理器的运算能力“压榨”出来,否则就会造成很大的浪费,而多线程就是很好的解决方法。1.2多线程有什么问题? 由于计算机的存储设备...原创 2018-05-02 20:49:40 · 277 阅读 · 0 评论 -
JVM基础(一):JAVA内存区域
Java内存区域上面这张图就是jvm运行时的状态。具体划分为如下5个内存空间:1-3为线程私有,4-5为线程共享1、程序计数器:为了线程切换后能恢复到正确的执行位置。线程私有2、Java虚拟机栈:虚拟机栈描述的是Java方法执行的内存模型:方法被调用时创建栈帧-->局部变量表->局部变量、对象引用。线程私有3、本地方法栈:为虚拟机执使用到的Native方法服务。线程私有4、Java堆:...原创 2018-05-03 22:13:57 · 253 阅读 · 0 评论 -
ArrayList源码分析+ArrayList为什么不安全
持续更新中,未完坑。。。。------------------------------------------------先来Arraylist看看有什么属性 private static final long serialVersionUID = 8683452581122892189L; /** * 默认初始值大小. */ pri...原创 2018-04-28 11:15:00 · 291 阅读 · 0 评论 -
JVM基础(四):类加载机制与类加载器
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类加载的过程: 包括加载、链接(含验证、准备、解析)、初始化...原创 2018-05-08 23:20:12 · 348 阅读 · 0 评论 -
Java IO学习笔记(一):BIO,NIO,AIO基础概念
什么是I/O我一般了解一个专业术语,会先从她的英文意思开始了解,在计算机系统中I/O就是输入(Input)和输出(Output)的意思,针对不同的操作对象,可以划分为磁盘I/O模型,网络I/O模型,内存I/O等,只要具有输入输出类型的交互系统都可以认为是I/O系统,也可以说I/O是整个操作系统数据交换与人机交互的通道,这个概念与选用的开发语言没有关系,是一个通用的概念。在如今的系统中...原创 2018-06-05 16:05:30 · 291 阅读 · 0 评论 -
Java中equals与==区别
关系操作符 ==首先Java中的数据类型分为基本类型引用类型在Java中有八种基本数据类型:浮点型:float(4 byte), double(8 byte)整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)字符型: char(2 byte)布尔型: boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值”t...原创 2018-05-30 15:58:55 · 322 阅读 · 0 评论 -
Java序列化学习笔记(一):序列化三种方法+简单实战
//TODO 没有深入分析,有时间再写一篇深入分析文章什么是序列化?Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,就是说当JVM关闭时,我们创建的这些对象就随之丢失了。但在现实应用中,就可能要求在JVM停止运行之后能够持久化保存指定的对象,并在将来重新读取被保存的对象,比如说保存在硬盘或数据库中。Java对象序列化就能够帮助我们实现...原创 2018-06-10 22:36:37 · 519 阅读 · 0 评论 -
ArrayList源码分析(JDK1.8)
简述ArrayList ArrayList 是一个动态数组,它是线程不安全的,允许元素为null。 其底层数据结构依然是数组,它实现了List<E>, RandomAccess, Cloneable, java.io.Serializable接口,其中RandomAccess代表了其拥有随机快速访问的能力,ArrayList可以以O(1)的时间复杂度去根据下标访问元素。...原创 2018-07-09 16:06:43 · 200 阅读 · 0 评论 -
Java异常学习笔记(一)
什么是异常?异常的英文单词是exception,字面翻译就是“意外、例外”的意思,也就是非正常情况。事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力...原创 2018-07-02 20:59:49 · 336 阅读 · 0 评论 -
Maven学习笔记:基础概念
Maven仓库什么是 Maven 仓库?在 Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工程指定的文件。Maven 仓库有三种类型:本地(local) 中央(central) 远程(remote)1.本地仓库Maven 本地仓库是机器上的一个文件夹。它在你第一次运行任何 ma...原创 2018-07-18 19:02:21 · 346 阅读 · 0 评论 -
Java多线程:synchronized关键字
Synchronized的作用Synchronized的作用主要有三个:原子性:确保线程互斥的访问同步代码; 可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的 “对一个变量unlock操作之前,必须要同步到主内存中;如果对一个变量进行lock操作,则将会清空工作内存中此变量的值,在执行引擎使用此变量前,需要重新从主内存中load操作或assign操作初始化变量值” ...原创 2018-07-20 22:36:29 · 281 阅读 · 0 评论 -
Java日期学习笔记(一)
Java中的日期概述日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题。在Java中,操作日期主要涉及到一下几个类:1、java.util.Date 类 Date 表示特定的瞬间,精确到毫秒。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间...原创 2018-07-26 15:05:50 · 317 阅读 · 0 评论 -
本地缓存Caffeine
Caffeine说起Guava Cache,很多人都不会陌生,它是Google Guava工具包中的一个非常方便易用的本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。由于Guava的大量使用,Guava Cache也得到了大量的应用。但是,Guava Cache的性能一定是最好的吗?也许,曾经,它的性能是非常不错的。但所谓长江后浪推前浪,总会有更加优秀的技术出现。今天,我就来介绍一个比...原创 2019-05-19 16:54:04 · 1305 阅读 · 0 评论