【学习计算机视觉算法的基础及基本编码-基于Python语言--实例教程】
Python视觉算法实际从0-1实例编码
- 一、学习基础
- 二、学习计算机视觉基础知识
- 三、深度学习在计算机视觉中的应用
- 四、实例项目
- 五、实践与拓展
一、学习基础
-
数学基础
- 线性代数:
- 学习矩阵、向量的基本概念,包括矩阵的加法、乘法、转置等运算。理解矩阵的秩、行列式等概念。
- 学习特征值和特征向量,掌握其计算方法和应用,例如在主成分分析(PCA)等降维算法中的使用。
- 微积分:
- 掌握一元函数的导数和积分,包括基本函数的求导公式,如多项式函数、指数函数、三角函数等。
- 理解多元函数的偏导数和梯度,为优化算法中的梯度下降等做准备。
- 概率论与统计学:
- 学习概率分布,如正态分布、均匀分布等。掌握期望、方差等统计量的计算。
- 理解贝叶斯定理,这在计算机视觉中的概率推理问题中有重要应用。
- 线性代数:
-
编程语言基础
- Python:
- 学习Python的基本语法,包括变量、数据类型(如整数、浮点数、字符串、列表、字典等)。
- 掌握函数、类和模块的使用,学习如何编写和调用函数,创建类和对象,以及使用标准库和第三方库。
- 熟悉Python的包管理工具pip,学会安装和管理第三方库。
- Python:
二、学习计算机视觉基础知识
- 图像基础
- 图像表示:
- 学习图像的数字表示,了解像素、灰度图像和彩色图像的存储格式(如RGB、HSV等)。
- 掌握图像的基本操作,如读取、显示、保存图像,使用Python的OpenCV库完成这些操作。
- 图像表示:
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 显示图像
cv2.imshow('Image', image)
# 等待按键
cv2.waitKey(0)
# 保存图像
cv2.imwrite('new_image.jpg', image)
- **解释**:- `cv2.imread('image.jpg')`:使用OpenCV的`imread`函数读取图像文件,将其存储为一个NumPy数组。- `cv2.imshow('Image', image)`:使用`imshow`函数显示图像,第一个参数是窗口名称,第二个参数是图像数组。- `cv2.waitKey(0)`:等待用户按下任意键,以保持窗口显示,直到用户操作。- `cv2.imwrite('new_image.jpg', image)`:使用`imwrite`函数将图像保存到文件。
- 传统计算机视觉算法
- 边缘检测:
- 学习Sobel、Canny等边缘检测算法。使用OpenCV实现这些算法。
- 边缘检测:
import cv2
import numpy as np# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# Sobel边缘检测
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
sobel_combined = cv2.magnitude(sobel_x, sobel_y)
# Canny边缘检测
edges = cv2.Canny(image, 100, 200)
- **解释**:- `cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)`:以灰度模式读取图像。- `cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)`:对图像进行Sobel边缘检测,计算水平梯度,`cv2.CV_64F`表示输出图像的数据类型,`1, 0`表示计算x方向梯度,`ksize=3`是Sobel算子的大小。- `cv2.magnitude(sobel_x, sobel_y)`:计算梯度的幅值,得到综合的边缘信息。- `cv2.Canny(image, 100, 200)`:使用Canny算法进行边缘检测,100和200是低阈值和高阈值。- **角点检测**:- 学习Harris角点检测和Shi-Tomasi角点检测算法。
import cv2
import numpy as np# 读取图像
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Harris角点检测
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 标记角点
image[dst > 0.01 * dst.max()] = [0, 0, 255]
- **解释**:- `cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)`:将彩色图像转换为灰度图像。- `cv2.cornerHarris(gray, 2, 3, 0.04)`:使用Harris角点检测算法,`2`是邻域大小,`3`是Sobel算子的孔径大小,`0.04`是Harris角点检测的参数。- `image[dst > 0.01 * dst.max()] = [0, 0, 255]`:将检测到的角点标记为红色。
三、深度学习在计算机视觉中的应用
- 深度学习框架
- TensorFlow:
- 学习TensorFlow的基本概念,包括张量、操作、计算图等。
- 掌握如何使用TensorFlow搭建简单的神经网络,如多层感知机(MLP)。
- TensorFlow:
import tensorflow as tf# 定义一个简单的MLP
model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10)
])
# 编译模型
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
-
解释:
tf.keras.Sequential:用于创建一个顺序模型。tf.keras.layers.Flatten(input_shape=(28, 28)):将输入的28x28图像展平为一维向量。tf.keras.layers.Dense(128, activation='relu'):添加一个具有128个神经元的全连接层,使用ReLU激活函数。tf.keras.layers.Dense(10):输出层,有10个神经元,用于分类任务。model.compile:编译模型,指定优化器、损失函数和评估指标。
-
PyTorch:
- 学习PyTorch的张量操作,如创建、索引、切片、运算等。
- 掌握如何使用PyTorch构建神经网络,包括自定义网络结构和使用预定义模块。
import torch
import torch.nn as nn
import torch.optim as optim# 定义一个简单的网络
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = Net()
# 定义优化器和损失函数
optimizer = optim.SGD(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
- 解释:
nn.Linear(28 * 28, 128):定义一个线性层,输入维度为28x28,输出维度为128。torch.relu(self.fc1(x)):使用ReLU激活函数。optimizer = optim.SGD(model.parameters(), lr=0.001):使用随机梯度下降优化器,学习率为0.001。criterion = nn.CrossEntropyLoss():使用交叉熵损失函数。
- 卷积神经网络(CNN)实践
- 使用TensorFlow构建CNN:
import tensorflow as tfmodel = tf.keras.Sequential([tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
-
解释:
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)):添加一个卷积层,32个3x3的卷积核,使用ReLU激活函数,输入形状为32x32x3的彩色图像。tf.keras.layers.MaxPooling2D((2, 2)):添加一个2x2的最大池化层。tf.keras.layers.Flatten():将特征图展平。tf.keras.layers.Dense(64, activation='relu'):添加一个64个神经元的全连接层,使用ReLU激活函数。tf.keras.layers.Dense(10):输出层,用于分类任务。
-
使用PyTorch构建CNN:
import torch
import torch.nn as nn
import torch.optim as optimclass CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv2d(3, 32, 3)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(32, 64, 3)self.fc1 = nn.Linear(64 * 6 * 6, 64)self.fc2 = nn.Linear(64, 10)def forward(self, x):x = torch.relu(self.conv1(x))x = self.pool(x)x = torch.relu(self.conv2(x))x = self.pool(x)x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = CNN()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
- 解释:
nn.Conv2d(3, 32, 3):定义一个输入通道为3,输出通道为32,卷积核大小为3x3的卷积层。nn.MaxPool2d(2, 2):定义一个2x2的最大池化层。self.fc1 = nn.Linear(64 * 6 * 6, 64):定义一个全连接层,输入维度为池化后特征图展平的大小,输出为64。
四、实例项目
- 图像分类项目
- 数据集:使用MNIST、CIFAR-10等公开数据集。
- 使用TensorFlow实现:
import tensorflow as tf
from tensorflow.keras.datasets import mnist# 加载数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255# 构建模型
model = tf.keras.Sequential([tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
# 训练模型
model.fit(train_images, train_labels, epochs=5, batch_size=64)
# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
-
解释:
-mnist.load_data():加载MNIST数据集。
-train_images = train_images.reshape((60000, 28, 28, 1)):将训练图像数据重塑为适合CNN输入的形状。
-model.fit(train_images, train_labels, epochs=5, batch_size=64):训练模型,使用64的批量大小,训练5个周期。- 使用PyTorch实现:
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])
# 加载数据集
trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=False, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=True)# 定义模型
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 32, 3)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(32, 64, 3)self.fc1 = nn.Linear(64 * 5 * 5, 64)self.fc2 = nn.Linear(64, 10)def forward(self, x):x = torch.relu(self.conv1(x))x = self.pool(x)x = torch.relu(self.conv2(x))x = self.pool(x)x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = Net()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()# 训练模型
for epoch in range(5):for images, labels in trainloader:optimizer.zero_grad()output = model(images)loss = criterion(output, labels)loss.backward()optimizer.step()# 评估模型
correct = 0
total = 0
with torch.no_grad():for images, labels in testloader:output = model(images)_, predicted = torch.max(output.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))
- 解释:
-transforms.Compose:组合多个数据转换操作,包括转换为张量和归一化。
-datasets.MNIST:加载MNIST数据集。
-torch.utils.data.DataLoader:创建数据加载器,用于批量加载数据。
-for epoch in range(5):训练模型5个周期,每个周期遍历训练数据。
- 目标检测项目
- 使用TensorFlow:
- 可以使用TensorFlow的Object Detection API。首先需要安装相关的API,并使用预训练的模型(如SSD、Faster R-CNN等)。
- 使用PyTorch:
- 可以使用PyTorch的Detectron2库,它提供了一系列预训练的目标检测模型和方便的训练、评估工具。
- 使用TensorFlow:
五、实践与拓展
- 数据增强:
- 学习在深度学习中使用数据增强技术,如旋转、翻转、裁剪等。使用OpenCV或相应深度学习框架的工具。
import torchvision.transforms as transforms
# 定义数据增强操作
transform = transforms.Compose([transforms.RandomRotation(10),transforms.RandomHorizontalFlip(),transforms.RandomCrop(28, padding=4)
])
- 解释:
-transforms.RandomRotation(10):随机旋转图像,角度范围为正负10度。
-transforms.RandomHorizontalFlip():随机水平翻转图像。
-transforms.RandomCrop(28, padding=4):随机裁剪图像,大小为28x28,带有4像素的填充。
-
超参数优化:
- 学习如何调整模型的超参数,如学习率、批量大小、网络结构等。可以使用手动调整、网格搜索、随机搜索等方法。
-
模型部署:
- 学习将训练好的模型部署到实际应用中,如使用TensorFlow Serving或PyTorch的TorchServe,将模型部署到服务器上,为客户端提供服务。
预告:《利用Python库进行计算机视觉算法的实践》
相关文章:
【学习计算机视觉算法的基础及基本编码-基于Python语言--实例教程】
Python视觉算法实际从0-1实例编码 一、学习基础二、学习计算机视觉基础知识三、深度学习在计算机视觉中的应用四、实例项目五、实践与拓展 一、学习基础 数学基础 线性代数: 学习矩阵、向量的基本概念,包括矩阵的加法、乘法、转置等运算。理解矩阵的秩、…...
从零搭建一个Vue3 + Typescript的脚手架——day1
1.开发环境搭建 (1).配置vite vite简介 Vite 是一个由尤雨溪开发的现代化前端构建工具,它利用了浏览器对 ES 模块的原生支持,极大地提升了开发服务器的启动速度和热更新效率。Vite 不仅适用于 Vue.js,还支持 React、Svelte 等多种框架&…...
Pgsql存储占用分析
基础命令 -- 查询表大小 SELECT pg_total_relation_size(table_name);-- 查询表大小(不带索引) SELECT pg_table_size(table_name);-- 查询表索引大小 SELECT pg_indexes_size(table_name);-- 查询表具体大小 SELECT pg_relation_size(table_name); SEL…...
51c自动驾驶~合集46
我自己的原文哦~ https://blog.51cto.com/whaosoft/13050104 #世界模型会是L3自动驾驶的唯一解吗 三维空间占有率(3D Occupancy)预测的目的是预测三维空间中的每个体素是否被占有,如果被占有,则对应的体素将被标记。3D Semant…...
Elasticsearch:使用全文搜索在 ES|QL 中进行过滤 - 8.17
8.17 在 ES|QL 中引入了 match 和 qstr 函数,可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数,可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法…...
《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统
目录 基于 IESKF 的紧耦合 LIO 系统 1 IESKF 的状态变量和运动过程 1.1 对名义状态变量的预测 1.2 对误差状态变量的预测及对协方差矩阵的递推 2 观测方程中的迭代过程 3 高维观测中的等效处理 4 NDT 和 卡尔曼滤波的联系 5 紧耦合 LIO 系统的主要流程 5.1 IMU 静止初始化 …...
引领图像编辑领域的新潮流!Edicho:实现跨图像一致编辑的新方法(港科蚂蚁)
在图像处理领域,如何实现跨图像的一致编辑一直是技术挑战。传统方法往往局限于单张图像的编辑,难以保证多张图像间编辑效果的一致性。香港科技大学、蚂蚁集团、斯坦福大学和香港中文大学联合提出Edicho,这一难题迎来了全新的解决方案。 总结如…...
459. 重复的子字符串【力扣】——kmp拼接字符串解法
常规kmp解答 class Solution { public:void getNext(int *next,string s){int j0;next[0]0;for(int i1;i<s.size();i){while(j>0 && s[i]!s[j]){jnext[j-1];}if(s[i]s[j]) j;next[i]j;}}bool repeatedSubstringPattern(string s) {if(s.size()0) return false;i…...
fpga 的时钟管理模块pll 跟 dcm
FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的时钟管理模块(Clock Management Module, CMM)是用于生成和管理内部时钟信号的关键组件。两个常见的CMM类型是PLL(Phase-Locked Loop,…...
USB 驱动开发 --- Gadget 驱动框架梳理(一)
本文由 Linux 内核文档翻译与总结而来,个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中,角色定义: the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver),负责与 …...
1Hive概览
1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…...
【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)
【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection) 引言 UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集,可以获取数据库中未授权的数据。这种注入技术要…...
IoTDB 常见问题 QA 第三期
关于 IoTDB 的 Q & A IoTDB Q&A 第三期持续更新!我们将定期汇总我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题“小百科”,方便大家使用 IoTDB。 Q1:查询最新值 & null 数据相加方…...
RabbitMQ---消息确认和持久化
(一)消息确认 1.概念 生产者发送消息后,到达消费端会有以下情况: 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除,那么就可能会导致,消息处理异常想要再获取这条消息的时…...
《鸿蒙Next旅游应用:人工智能赋能个性化与智能导览新体验》
随着鸿蒙Next的推出,旅游应用迎来了全新的发展机遇,借助人工智能技术能为用户带来更出色的个性化推荐和智能导览服务。 鸿蒙Next与人工智能融合优势 鸿蒙Next拥有强大的分布式能力和原生智能体验。其能打破设备界限,实现多设备协同…...
微信小程序获取当前页面路径,登录成功后重定向回原页面
🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回&#…...
【9.2】Golang后端开发系列--Gin路由定义与实战使用
文章目录 一、Gin 框架路由的基本定义方式1. 简单路由创建2. 路由参数3. 查询参数 二、商业大项目中的路由定义和服务调用1. 路由模块化2. 路由组和中间件3. 中间件的使用4. 服务层调用5. 错误处理6. 版本控制7. 路由注册 一、Gin 框架路由的基本定义方式 1. 简单路由创建 使…...
【微信小程序】let和const-综合实训
let 和 const 都是用于声明变量的关键字,它们与传统的 var 关键字相比,有很多不同之处。 let 声明块级作用域变量,可再赋值;const 声明块级作用域常量,不可再赋值。 以下是它们的详细介绍: 一、基本概念…...
图匹配算法(涵盖近似图匹配)
【图数据管理与挖掘-第四讲(子)图匹配算法(涵盖近似图匹配) 北京大学2021暑期-邹磊教授】https://www.bilibili.com/video/BV1zh411q7PW?vd_source7c2b5de7032bf3907543a7675013ce3a 图同构: 定义: 给定…...
java线程——Thread
java线程——Thread 基本步骤示例优劣总结 继承Thread类是Java中实现多线程的一种方式。使用时创建一个新的类,该类继承自java.lang.Thread,并重写其run()方法,在方法中定义线程执行的任务逻辑。 基本步骤 1、创建一个子类:定义一…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
