CompletableFuture异步任务
前言所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法。在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结果。但调用者仍需要取线程的计算结果。
Java实现多线程的三种方式
继承Thread类run() 方法 和 start() 方法:run() 方法:普通的成员方法start() 方法:负责启动一个新的线程,并调用 run() 方法
因此启动线程,需要使用 start() 方法
实现 Runnable 接口
实际上 Thread 类也是实现了 Runnable 接口:class Thread implements Runnable {启动 Runnable 实例时,需要放在 Thread 中,然后调用 start() 方法
实现 Callable 接口Java 5 开始提供可以返回结果(通过 Future),也可以抛出异常需要实现的是 call() 方法
以上两点也是 Callable 接口 与 Runnable 接口的区别
Java Fut ...
SpringMVC
什么是Spring MVC?简单介绍下你对Spring MVC的理解?Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的耦合。
Spring MVC的优点
可以支持各种视图技术,而不仅仅局限于JSP
与Spring框架集成(如IoC容器、AOP等)
清晰的角色分配:前端控制器(dispatcherServlet),请求到处理器映射(handleMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。
支持各种请求资源的映射策略
Spring MVC的主要组件?
前端控制器DispatcherServlet(不需要程序员开发)作用:接收请求、相应结果,相当于转发器,有了DispatcherServlet就减少了其它组件之间的耦合度
处理器映射器HandlerMapping(不需要程序员开发)作用:根据请求的URL来查找Handler
处理器适配器HandlerA ...
深入理解JVM--3.垃圾收集与内存分配
概述垃圾收集(Garbage Collection,简称GC)思考?
哪些内存需要回收?
什么时候回收?
如何回收?了解垃圾收集和内存分配的意义?当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。Java各区域区别?
程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由即时编译器进行一些优化,但在基于概念模型的讨论里,大体上可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性, 在这几个区域内就不需要过多考虑如何回收的问题,当方法结束或者线程结束时,内存自然就跟随着回收了。
堆和方法区这两个区域则有着很显著的不确定性:一个接口的多个实现类需要的内存可能会不一样,一个方法所执行的不同条件分支所需要的内存也可能不一样,只有处于运行期间,我们才能知道程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的。垃圾 ...
深入理解JVM--2.内存区域与内存溢出
概述C与C++程序开发中,在内存管理领域中,开发人员即拥有每一个对象的“所有权”,又担负着每一个对象生命从开始到终结的维护责任。Java程序开发中,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题。但是,一出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那排查错误、修正问题将成为一项异常艰难的工作。Java优势:内存动态分配;垃圾收集技术。
运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。
程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能 ...
深入理解JVM--1.走近Java
概述Java不仅仅是一门编程语言,它还是一个由一系列计算机软件和规范组成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等多种场合。Java优势:
结构严谨、面向对象
摆脱硬件平台的束缚,实现“一次编写、到处运行“
提供相对安全的内存管理和访问机制,避免绝大部分内存泄漏和指针越界问题
实现了热点代码检测和运行时编译及优化,使得Java应用能随着运行时间的增长而获得更高的性能
有一套完善的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助用户实现各种各样的功能
Java技术体系组成部分:
Java程序设计语言
各种硬件平台上的Java虚拟机实现
Class文件格式
Java类库API
来自商业机构和开源社区的第三方Java类库Java程序设计语言、Java虚拟机、Java类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。Java类库API中的Java SE API子集和Java虚拟机这两部分统称为JRE(Java Runtime E ...
Gulp压缩和PWA
Gulp压缩Gulp是一款自动化构建的工具
安装Gulpnpm install –global gulp-cli安装过程中若报权限错误,则执行sudo npm install –global gulp-cli命令
插件安装
HTML压缩插件:npm install gulp-htmlclean –save-devnpm install –save gulp-htmlmin
CSS压缩插件:npm install gulp-clean-css –save-dev
JS压缩插件:(二选一)terser 是 ES6+ 的 JavaScript 解析器gulp-babel 是一个 JavaScript 转换编译器,可以把 ES6 转换成 ES5
npm install –save-dev gulp-uglify ; npm install terser
npm install –save-dev gulp-uglify ; npm install –save-dev gulp-babel @babel/core @babel/preset-env
图片压缩插件:npm instal ...
Spring基础
什么是Spring框架?Spring框架有哪些主要模块?Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。Spring框架至今已集成了20多个模块。这些模块主要被分为核心容器、数据访问、集成、web、AOP(面向切面编程)、工具、消息和测试模块。
使用Spring框架能带来的哪些好处?
Dependency Injection(DI)方法使得构造器和JavaBean properties文件中的依赖关系一目了然。
与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。
Spring并没有闭门造车,Spring利用了已有的技术比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他视图技术。
Spri ...
类的加载过程
Java 类加载机制类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。其中类加载过程包括加载、验证、准备、解析和初始化五个阶段。
类的加载过程加载
通过类加载器,加载.class文件到内存中。
将读取到.classs数据存储到运行时内存区的方法区。
然后将其转换为一个与目标类型对应的java.lang.Class对象实例。这个Class对象在日后就会作为方法区中该类的各种数据的访问入口。
验证确保被加载的类(.class文件的字节流),是否按照java虚拟的规范。不会造成安全问题
文件格式验证:第一阶段要验证字节流是否符合 Class文件格式的规范, 井且能被当前版本的虚拟机处理。这一阶段可能包括下面这些验证点:
是否以魔数 0xCAFEBABE开头
主、次版本号是否在当前虚拟机处理范围之内。
常量池的常量中是否有不被支持的常量类型(检査常量tag 标志)。
指向常量的各种索引值中是否有指向不存在的常量或不符合装型的常量。
CONSTANT_Utf8_info型的常量中是否有不符合 UTF8编码的数据
Class 文 ...