class字节码文件结构
类型
名称
说明
长度
数量
u4
magic
魔数,识别Class文件格式
4个字节
1
u2
minor_version
副版本号(小版本)
2个字节
1
u2
major_version
主版本号(大版本)
2个字节
1
u2
constant_pool_count
常量池计数器
2个字节
1
cp_info
constant_pool
常量池表
n个字节
constant_pool_count-1
u2
access_flags
访问标识
2个字节
1
u2
this_class
类索引
2个字节
1
u2
super_class
父类索引
2个字节
1
u2
interfaces_count
接口计数器
2个字节
1
u2
interfaces
接口索引集合
2个字节
interfaces_count
u2
fields_count
字段计数器
2个字节
1
field_info
fields
字段表
n个字节
fields_count
u2
methods_count
方法计数器
2个字节
...
JVM指令手册尚硅谷Java研究院
一、栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0压入栈lconst_1 将long类型常量1压入栈fconst_0 将float类型常量0压入栈fconst_1 将float类型常量1压入栈dconst_0 将double类型常量0压入栈dconst_1 将double类型常量1压入栈bipush 将一个8位带符号整数压入栈sipush 将16位带符号整数压入栈ldc 把常量池中的项压入栈ldc_w 把常量池中的项压入栈(使用宽索引)ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引)
从栈中的局部变量中装载值的指令iload 从局部变量中装载int类型值 ...
SpringBoot运维实用篇基础篇发布以后,看到了很多小伙伴在网上的留言,也帮助超过100位小伙伴解决了一些遇到的问题,并且已经发现了部分问题具有典型性,预计将有些问题在后面篇章的合适位置添加到本套课程中,作为解决方案提供给大家。
从此刻开始,咱们就要进入到实用篇的学习了。实用篇是在基础篇的根基之上,补全SpringBoot的知识图谱。比如在基础篇中只给大家讲了yaml的语法格式,但是具体写yaml文件的时候还有很多实用开发过程中的坑,这些在实用篇中都要进行学习。
实用篇共分为两块内容,分别是运维实用篇和开发实用篇。其实划分的标准是我自己制定的,因为这里面的知识有一些还是比较散的,做两个阶段的划分是为了更好的将同类知识点进行归类,帮助学习者找到知识之间的关联性,这样有助于知识的记忆存储转换,经过一系列的知识反复出现与强化练习,将临时记忆转换成永久性记忆。做课程嘛,不能仅以讲完为目标,要以学习者的学习收获为目标,这也是我这么多年教学秉承的基本理念。
下面就从运维实用篇开始讲,在运维实用篇中,我给学习者的定位是玩转配置,为开发实用篇中做各种技术的整合做好准备工作。与开发实用篇相比,运维实 ...
SpringBoot开发实用篇怀着忐忑的心情,开始了开发实用篇文档的编写。为什么忐忑?特喵的债欠的太多,不知道从何写起。哎,不煽情了,开工。
运维实用篇完结以后,开发实用篇采用日更新的形式发布给各位小伙伴,基本上是每天一集,目前已经发布完毕。看评论区,好多小伙伴在求文档,所以赶紧来补文档,加班加点把开发实用篇的文档刨出来。
开发实用篇中因为牵扯到SpringBoot整合各种各样的技术,由于不是每个小伙伴对各种技术都有所掌握,所以在整合每一个技术之前,都会做一个快速的普及,这样的话内容整个开发实用篇所包含的内容就会比较多。各位小伙伴在学习的时候,如果对某一个技术不是很清楚,可以先跳过对应章节,或者先补充一下技术知识,然后再来看对应的课程。开发实用篇具体包含的内容如下:
热部署
配置高级
测试
数据层解决方案
整合第三方技术
监控
看目录感觉内容量并不是很大,但是在数据层解决方案和整合第三方技术中包含了大量的知识,一点一点慢慢学吧。下面开启第一部分热部署相关知识的学习
1. 热部署什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程 ...
# SpringBoot2核心技术-基础入门
Spring Boot 2核心技术
Spring Boot 2响应式编程
学习要求-熟悉Spring基础-熟悉Maven使用
环境要求
Java8及以上
Maven 3.3及以上
学习资料
Spring Boot官网
Spring Boot官方文档
本课程文档地址
视频地址
源码地址
1. Spring 与 SpringBootSpring官网
1. Spring能做什么1. Spring的能力
2. Spring的生态覆盖了:
web开发
数据访问
安全控制
分布式
消息服务
移动开发
批处理
……
3. Spring5重大升级
响应式编程
内部源码设计
基于Java8的一些新特性,如:接口默认实现。重新设计源码架构。
2. 为什么用SpringBoot
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.link
能快速创 ...
Web 开发
1. SpringMVC自动配置概览Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置)
The auto-configuration adds the following features on top of Spring’s defaults:
Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.
内容协商视图解析器和BeanName视图解析器
Support for serving static resources, including support for WebJars (covered later in this document)).
静态资源(包括webjars)
Automatic registration of Converter, GenericConverter, and ...
数据访问1. SQL1. 数据源的自动配置1. 导入JDBC场景1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>
数据库驱动?
为什么导入JDBC场景,官方不导入驱动?官方不知道我们接下要操作什么数据库。
数据库版本和驱动版本对应
123456789101112131415161718<!--默认版本:--><mysql.version>8.0.22</mysql.version><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!--version>5 ...
单元测试1. JUnit5 的变化Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库
作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。
JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于在Junit Platform上运行。
JUnit Vintage: 由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。
注意:
SpringBoot 2.4 以上版本移除了默认对 Vintage 的依赖。如果需要兼容junit4需要自行引入(不能使用j ...
指标监控1. SpringBoot Actuator1. 简介未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>
2. 1.x与2.x的区别
3. 使用
引入场景
访问 http://localhost:8080/actuator/**
暴露所有监控信息为HTTP
123456management: endpoints: enabled-by-default: true #暴露所有端点信息 web: exposure: include: '*' # ...
原理解析1. Profile功能为了方便多环境适配,springboot简化了profile功能。
1. application-profile功能
默认配置文件 application.yaml;任何时候都会加载
指定环境配置文件 application-{env}.yaml
激活指定环境
配置文件激活
命令行激活:java -jar xxx.jar --spring.profiles.active=prod --person.name=haha
修改配置文件的任意值,命令行优先
默认配置与环境配置同时生效
同名配置项,profile配置优先
2. @Profile条件装配功能12345@Configuration(proxyBeanMethods = false)@Profile("production")public class ProductionConfiguration { // ...}
3. profile分组1234spring.profiles.group.p ...

