Docker 简介Docker 是一个开源的 容器化平台,用于开发、部署和运行应用程序。它通过将应用程序及其依赖项打包到一个轻量级的容器中,实现了应用程序的跨平台和一致性运行。
Docker 的核心概念1. 容器(Container)
定义:容器是一个轻量级的、独立的、可执行的软件包,包含运行应用程序所需的所有内容(代码、运行时、库、环境变量等)。
特点:容器是动态的,可以启动、停止、删除和修改。容器之间相互隔离,互不影响。容器共享宿主机的操作系统内核,因此比虚拟机更轻量级。
作用:容器是应用程序的运行环境,可以在任何支持 Docker 的平台上运行。容器提供了一种一致的方式来运行应用程序,避免了“在我机器上能运行”的问题。
意义:容器与虚拟机不同,它共享主机操作系统的内核,因此更加轻量级和高效。
2. 镜像(Image)
定义:镜像是一个只读模板,用于创建容器。它包含应用程序的代码、运行时、库和配置文件。
特点:镜像是静态的,不可修改。镜像可以基于其他镜像构建(通过 Dockerfile)。镜像可以从 Docker Hub(公共镜像仓库)或私有仓库中拉取。
作用:镜像是容器...
Git、GitHub 和 Gitee 完整讲解:从基础到进阶功能
1. 前言本教程详细讲解 Git、GitHub 和 Gitee 的使用,从基础到进阶,帮助开发者全面掌握这三者的功能与应用。
2. 第一部分:Git 是什么?2.1 比喻:Git 就像一本“时光机日记本” 📖
每一段代码的改动,Git 都会记录下来,像是在写日记。
如果代码出现问题,Git 可以“穿越回过去”,恢复到任意时间点的状态。
2.2 Git 的主要特点
版本控制:每次提交都像写了一篇新日记,保存开发成果。
分支管理:分支就像章节,可以并行开发而互不干扰。
分布式:每个人都拥有完整的“时光机日记本”,即便离线也能工作。
3. 第二部分:GitHub 和 Gitee 是什么?3.1 GitHub:全球化的代码社交云平台 🌐
比喻:GitHub 是“全球代码图书馆”。
优势:
开源社区庞大,适合学习和参与开源项目。
是开发者协作开发的最佳平台。
3.2 Gitee:中国本地化的代码托管平台 🇨🇳
比喻:Gitee 是 GitHub 的“中国版伙伴”。
优势:
对国内开发者友好,速度快。
与...
1.xml1.1 概述【理解】
万维网联盟(W3C)
万维网联盟(W3C)创建于 1994 年,又称 W3C 理事会。1994 年 10 月在麻省理工学院计算机科学实验室成立。建立者: Tim Berners-Lee (蒂姆·伯纳斯·李)。是 Web 技术领域最具权威和影响力的国际中立性技术标准机构。到目前为止,W3C 已发布了 200 多项影响深远的 Web 技术标准及实施指南,
如广为业界采用的超文本标记语言 HTML(标准通用标记语言下的一个应用)、
可扩展标记语言 XML(标准通用标记语言下的一个子集)
以及帮助残障人士有效获得 Web 信息的无障碍指南(WCAG)等
xml 概述
XML 的全称为(EXtensible Markup Language),是一种可扩展的标记语言标记语言: 通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)可扩展:标签的名字是可以自定义的,XML 文件是由很多标签组成的,而标签名是可以自定义的
作用
用于进行存储数据和传输数据
作为软件的配置文件
作为配置文件的优势
可读性好
可维护性高
1.2 标签...
写在前面的话:
基础加强包含了:
反射,动态代理,类加载器,xml,注解,日志,单元测试等知识点
其中最难的是反射和动态代理,其他知识点都非常简单
由于 B 站 P 数限制,xml,注解等知识点,阿玮写了详细文档供大家学习
1.类加载器1.1 类加载器
作用
负责将.class 文件(存储的物理文件)加载在到内存中
1.2 类加载的完整过程
类加载时机
简单理解:字节码文件什么时候会被加载到内存中?
有以下的几种情况:
创建类的实例(对象)
调用类的类方法
访问类或者接口的类变量,或者为该类变量赋值
使用反射方式来强制创建某个类或接口对应的 java.lang.Class 对象
初始化某个类的子类
直接使用 java.exe 命令来运行某个主类
总结而言:用到了就加载,不用不加载
类加载过程
加载
通过包名 + 类名,获取这个类,准备用流进行传输
在这个类加载到内存中
加载完毕创建一个 class 对象
链接
验证
确保 Class 文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全
(文件中的信息是否符合虚拟机规范有没有安全隐患)
...
日志1.1 作用: 跟输出语句一样,可以把程序在运行过程中的详细信息都打印在控制台上。
利用 log 日志还可以把这些详细信息保存到文件和数据库中。
1.2 使用步骤: 不是 java 的,也不是自己写的,是第三方提供的代码,所以我们要导入 jar 包。
把第三方的代码导入到当前的项目当中
新建 lib 文件夹,把 jar 粘贴到 lib 文件夹当中,全选后右键点击选择 add as a ….
检测导入成功:导入成功后 jar 包可以展开。在项目重构界面可以看到导入的内容
把配置文件粘贴到 src 文件夹下
在代码中获取日志对象
调用方法打印日志
1.3 日志级别1TRACE, DEBUG, INFO, WARN, ERROR
还有两个特殊的:
ALL:输出所有日志
OFF:关闭所有日志
日志级别从小到大的关系:
TRACE < DEBUG < INFO < WARN < ERROR
1.4 配置文件12345678910111213141516171819202122232425262728293031323334353...
1. 反射1.1 反射的概述: 专业的解释(了解一下):
是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意属性和方法;
这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。
通俗的理解:(掌握)
利用反射创建的对象可以无视修饰符调用类里面的内容
可以跟配置文件结合起来使用,把要创建的对象信息和方法写在配置文件中。
读取到什么类,就创建什么类的对象
读取到什么方法,就调用什么方法
此时当需求变更的时候不需要修改代码,只要修改配置文件即可。
1.2 学习反射到底学什么?反射都是从 class 字节码文件中获取的内容。
如何获取 class 字节码文件的对象
利用反射如何获取构造方法(创建对象)
利用反射如何获取成员变量(赋值,获取值)
利用反射如何获取成员方法(运行)
1.3 获取字节码文件对象的三种方式
Class 这个类里面的静态方法 forName(“全类名”)(最常用)
通过 class 属性获取
通过对象获取字节码文件对象
代码示例:
123456789101112...
1. 网络编程入门1.1 网络编程概述
计算机网络
是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统
网络编程
在网络通信协议下,不同计算机上运行的程序,可以进行数据传输
1.2 网络编程三要素
IP 地址
要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而 IP 地址就是这个标识号。也就是设备的标识
端口
网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说 IP 地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识
协议
通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤...
1. 线程池1.1 线程状态介绍当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么 Java 中的线程存在哪几种状态呢?Java 中的线程
状态被定义在了 java.lang.Thread.State 枚举类中,State 枚举类的源码如下:
123456789101112131415161718192021222324252627282930public class Thread { public enum State { /* 新建 */ NEW , /* 可运行状态 */ RUNNABLE , /* 阻塞状态 */ BLOCKED , /* 无限等待状态 */ WAITING , /* 计时等待 */ TIMED_WAITING , /* 终止 */ TERMINATED; } // 获取当前线程的状...
1.实现多线程1.1 简单了解多线程【理解】是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。
1.2 并发和并行【理解】
并行:在同一时刻,有多个指令在多个 CPU 上同时执行。
并发:在同一时刻,有多个指令在单个 CPU 上交替执行。
1.3 进程和线程【理解】
进程:是正在运行的程序
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的并发性:任何进程都可以同其他进程一起并发执行
线程:是进程中的单个顺序控制流,是一条执行路径
单线程:一个进程如果只有一条执行路径,则称为单线程程序
多线程:一个进程如果有多条执行路径,则称为多线程程序
1.4 实现多线程方式一:继承 Thread 类【应用】
方法介绍
方法名
说明
void run()
在线程开启后,此方法将被调用执行
void start()
使此线程开始执行,Java 虚拟机会调用 run 方法()
实现步...
1. 缓冲流昨天学习了基本的一些流,作为 IO 流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础之上创建而来的,就像穿上铠甲的武士一样,相当于是对基本流对象的一种增强。
1.1 概述缓冲流,也叫高效流,是对 4 个基本的FileXxx 流的增强,所以也是 4 个流,按照数据类型分类:
字节缓冲流:BufferedInputStream,BufferedOutputStream
字符缓冲流:BufferedReader,BufferedWriter
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统 IO 次数,从而提高读写的效率。
1.2 字节缓冲流构造方法
public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。
public BufferedOutputStream(OutputStream out): 创建一个新的缓冲输出流。
构造举例,代码如下:...