摘要:
抽象类和接口的定义 (1)抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类。 (2)接口是抽象方法的集合,声明了一系列的方法操作,自身并不能做任何事情。如果一个类实现了某个接口,那么它必须实现这个接口的所有抽象方法。 抽象类与接口的区别 (1)抽象类和接口都不 阅读全文
摘要:
什么是回调 回调是一种双向的调用模式,程序模块之间通过这样的接口调用完成通信联系,回调的核心就是回调方将本身即this传递给调用方,这样调用方就可以在调用完毕之后再告诉回调方它想要知道的信息。 回调函数用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个 阅读全文
摘要:
什么是泛型 泛型的本质是 参数化类型,也就是说 将所操作的数据类型 指定为一个参数,在不创建新类的情况下,通过参数来指定所要操作的具体类型(类似于方法中的变量参数,此时类型也定义成参数形式),也就是说,在创建对象或者调用方法的时候才明确下具体的类型。可以在类、接口、方法中使用,分别称为泛型类、泛型接 阅读全文
摘要:
枚举类的使用 自定义枚举类 class Season{ private final String SEASONNAME;//季节的名称 private final String SEASONDESC;//季节的描述 private Season(String seasonName,String se 阅读全文
摘要:
数据类型分类 Java语言的变量按数据类型分类如下: 整数型 byte(1字节=8bit) 、short(2字节) 、 int(4字节) 、 long(8字节) ① byte范围:-128 ~ 127② 声明long型变量,必须以"l"或"L"结尾③ 通常,定义整型变量时,使用int型。④ 整型的常 阅读全文
摘要:
Atomic 原子类的原理 Atomic 原子操作类是基于无锁 CAS + volatile 实现的,并且类中的所有方法都使用 final 修饰,进一步保证线程安全。而 CAS 算法的具体实现方式在于 Unsafe 类中,Unsafe 类的所有方法都是 native 修饰的,也就是说所有方法都是直接 阅读全文
摘要:
什么是线程池 线程池主要是为了解决新任务执行时,应用程序为任务创建一个新线程以及任务执行完毕时,销毁线程所带来的开销。通过线程池,可以在项目初始化时就创建一个线程集合,然后在需要执行新任务时重用这些线程而不是每次都新建一个线程,一旦任务已经完成了,线程回到线程池中并等待下一次分配任务,达到资源复用的 阅读全文
摘要:
线程安全是并发编程中的重要关注点,造成线程安全问题的主要原因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进 阅读全文
摘要:
什么是ThreadLocal ThreadLocal 提供了线程内部的局部变量,当在多线程环境中使用 ThreadLocal 维护变量时,会为每个线程生成该变量的副本,每个线程只操作自己线程中的变量副本,不同线程间的数据相互隔离、互不影响,从而保证了线程的安全。 ThreadLocal 适用于无状态 阅读全文
摘要:
上下文切换 在并发编程中,并不是线程越多就效率越高,线程数太少可能导致资源不能充分利用,线程数太多可能导致竞争资源激烈,然后上下文切换频繁造成系统的额外开销。那什么是上下文切换呢? 什么是上下文切换? 在处理多线程并发任务时,处理器会给每个线程分配CPU时间片,线程在各自分配的时间片内占用处理器并执 阅读全文
摘要:
Java中的static关键字表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以修饰代码块。 当JVM加载一个类的时候,如果该类存在static修饰的成员变量和成员方法,就会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域;同时被static修饰的成员变量和成员方法是被 阅读全文
摘要:
final表示的是“无法被改变的”,不想被改变的理由有两种,一种是效率,一种是设计。使用到final的一般有四种情况:变量、方法、类、参数。 final变量 有时候变量的恒定不变是很有用的,它能够减轻系统运行时的负担。对于这些恒定不变的数据我可以叫做“常量”。“常量”主要应用与以下两个地方: (1) 阅读全文
摘要:
什么是集合 集合就是一个放数据的容器,准确的说是放数据对象引用的容器 集合类存放的都是对象的引用,而不是对象的本身 集合类型主要有3种:set(集)、list(列表)和map(映射)。 集合的特点 集合用于存储对象的容器,对象是用来封装数据,对象多了也需要存储集中式管理。 和数组对比对象的大小不确定 阅读全文
摘要:
什么是反射 (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。 (2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时 阅读全文
摘要:
bit:位byte:字节1 byte= 8 bit int 类型为 4 byte,共32位bit,unsigned int也是2^32 byte = 4G 1G= 2^30 =10.7亿 所谓海量数据处理,就是指数据量太大,无法在较短时间内迅速解决,或者无法一次性装入内存。而解决方案就是:针对时间, 阅读全文
摘要:
常见的JVM参数配置 垃圾回收统计信息 -XX:+PrintGC 打印GC简要信息-XX:+PrintGCDetails打印GC的详细信息-XX:+PrintGCTimeStamps打印CG发生的时间戳-Xloggc:log/gc.log 指定GC log的位置,以文件输出-XX:+PrintHea 阅读全文
摘要:
平台无关性 Java的无关性的实现,是由Java源代码编译后生成的字节码class文件和Java虚拟机实现的。无关性包括:平台无关性以及语言无关性。 (1) 平台无关性,是指java代码可以运行在不同操作系统的虚拟机上面,因为不同的操作系统都有各自的Java虚拟机,从而实现程序的“一次编写,到处运行 阅读全文
摘要:
Java中内存分配策略 在比较堆和栈的区别之前,我们先了解下Java的内存分配策略,按照编译原理的观点,程序运行时的内存分配有三种策略,分别是:静态的,栈式的,和堆式的。 (1) 静态存储分配:是指在编译时,就能确定每个数据在运行时的存储空间,因而在编译时就可以给他们分配固定的内存空间。这种分配策略 阅读全文
摘要:
JVM主要组成部分 JVM包含两个子系统和两个组件,分别为: Class loader(类装载子系统):根据给定的全限定名类名来装载class文件到运行时数据区的方法区中 Execution engine(执行引擎子系统):执行引擎也叫解释器,负责解释class的指令,再提交给操作系统执行 Runt 阅读全文