并发篇1. 线程状态要求
掌握 Java 线程六种状态
掌握 Java 线程状态转换
能理解五种状态与六种状态两种说法的区别
六种状态及转换
分别是
新建
当一个线程对象被创建,但还未调用 start 方法时处于新建状态
此时未与操作系统底层线程关联
可运行
调用了 start 方法,就会由新建进入可运行
此时与底层线程关联,由操作系统调度执行
终结
线程内代码已经执行完毕,由可运行进入终结
此时会取消与底层线程关联
阻塞
当获取锁失败后,由可运行进入 Monitor 的阻塞队列阻塞,此时不占用 cpu 时间
当持锁线程释放锁时,会按照一定规则唤醒阻塞队列中的阻塞线程,唤醒后的线程进入可运行状态
等待
当获取锁成功后,但由于条件不满足,调用了 wait() 方法,此时从可运行状态释放锁进入 Monitor 等待集合等待,同样不占用 cpu 时间
当其它持锁线程调用 notify() 或 notifyAll() 方法,会按照一定规则唤醒等待集合中的等待线程,恢复为可运行状态
有时限等待
当获取锁成功后,但由于条件不满足,调用了 wait(long) 方法,此时从 ...
Java核心
未读Java 9 发布于 2017 年 9 月 21 日 。作为 Java 8 之后 3 年半才发布的新版本,Java 9 带来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如集合、Stream 流……。
你可以在 Archived OpenJDK General-Availability Releases 上下载自己需要的 JDK 版本!官方的新特性说明文档地址:https://openjdk.java.net/projects/jdk/ 。
概览(精选了一部分):
JEP 222: Java 命令行工具
JEP 261: 模块化系统
JEP 248:G1 成为默认垃圾回收器
JEP 193: 变量句柄
JEP 254:字符串存储结构优化
JShellJShell 是 Java 9 新增的一个实用工具。为 Java 提供了类似于 Python 的实时命令行交互工具。
在 JShell 中可以直接输入表达式并查看其执行结果。
JShell 为我们带来了哪些好处呢?
降低了输出第一行 Java 版”Hello World!”的门槛,能够提高新手的学习热情 ...
Java核心
未读1 理解泛型的本质JDK 1.5开始引入Java泛型(generics)这个特性,该特性提供了编译时类型安全检测机制,允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”(Type Erasure),将所有的泛型表示(尖括号中的内容)都替换为具体的类型(其对应的原生态类型)。
2 泛型的作用泛型有四个作用:类型安全、自动转换、性能提升、可复用性。即在编译的时候检查类型安全,将所有的强制转换都自动和隐式进行,同时提高代码的可复用性。
2.1 泛型如何保证类型安全在没有泛型之前,从集合中读取到的每一个对象都必须进行类型转换,如果不小心插入了错误的类型对象,在运行时的转换处理就会出错。比如:没有泛型的情况下使用集合:
1234567public static void noGenericTes ...
Java核心
未读1 Java注解基础注解是JDK1.5版本开始引入的一个特性,用于对程序代码的说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要的作用有以下四方面:
生成javadoc文档,通过在代码里面标识元数据生成javadoc文档。
编译期的检查,通过标识的元数据让编译器在编译期间对代码进行验证。
编译时动态处理,编译时通过代码中标识的元数据动态处理,比如动态生成代码。
运行时动态处理,运行时通过代码中标识的元数据动态处理,比如使用反射技术注入实例。
注解的常见分类有三种:
Java自带的标准注解,包括 @Override、@Deprecated和@SuppressWarnings,分别代表 方法重写、某个类或方法过时、以及忽略警告,用这些注解标明后编译器就会进行检查。
元注解,元注解是用于定义注解的注解,包括@Retention、@Target、@Inherited、@Documented 等6种
@Retention:指定其所修饰的注解的保留策略
@Document:该注解是一个标记注解,用于指示一个注解将被文档化
@Target:用来限制注解的使用范围
@Inh ...
Java核心
未读1 什么是异常异常是指程序在运行过程中发生的,由于外部问题导致的运行异常事件,如:文件找不到、网络连接失败、空指针、非法参数等。异常是一个事件,它发生在程序运行期间,且中断程序的运行。Java 是一种面向对象的编程语言,它的异常都是对象,是Throwable子类的实例,当程序中存在错误条件时,且条件生成时,错误就会引发异常。
2 异常的分类要了解异常的分类,我们先看看Java异常类的继承结构图:
2.1 ThrowableThrowable 是 Java 语言中所有错误与异常的顶层父类,其他类都继承于该类。 Throwable 包含两个子类:Error(错误)和Exception(异常),它们通常用于指示发生了异常情况。 Throwable 包含了其线程创建时线程执行堆栈的快照,它提供printStackTrace() 等接口用于获取堆栈跟踪数据等信息。
2.2 Error(错误)Error 类及其子类:程序中无法处理的错误,表示运行应用程序中出现了严重的错误。通常情况为下应用程序 “不应该试图捕获的严重问题” 。此类错误一般表示代码运行时 JVM 出现问题。通常有 Virtual M ...
设计模式
未读单例模式相信大家都有所听闻,甚至也写过不少了,在面试中也是考得最多的其中一个设计模式,面试官常常会要求写出两种类型的单例模式并且解释其原理,废话不多说,我们开始学习如何很好地回答这一道面试题吧。
什么是单例模式面试官问什么是单例模式时,千万不要答非所问,给出单例模式有两种类型之类的回答,要围绕单例模式的定义去展开。
单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。
单例模式的类型单例模式有两种类型:
懒汉式:在真正需要使用对象时才去创建该单例类对象
饿汉式:在类加载时已经创建好该单例对象,等待被程序使用
懒汉式创建单例对象懒汉式创建对象的方法是在程序使用对象前,先判断该对象是否已经实例化(判空),若已实例化直接返回该类对象。否则则先执行实例化操作。
根据上面的流程,就可以写出下面的这段代码
1234567891011121314public class Singleton { private s ...
框架与服务
未读框架篇1. Spring refresh 流程要求
掌握 refresh 的 12 个步骤
Spring refresh 概述
refresh 是 AbstractApplicationContext 中的一个方法,负责初始化 ApplicationContext 容器,容器必须调用 refresh 才能正常工作。它的内部主要会调用 12 个方法,我们把它们称为 refresh 的 12 个步骤:
prepareRefresh
obtainFreshBeanFactory
prepareBeanFactory
postProcessBeanFactory
invokeBeanFactoryPostProcessors
registerBeanPostProcessors
initMessageSource
initApplicationEventMulticaster
onRefresh
registerListeners
finishBeanFactoryInitialization
finishRefresh
功能分类
1 为准备环境
2 3 4 5 6 为准备 Be ...









