【机器学习】梯度下降法及使用一元二次方程模拟使用梯度下降法的代码实现
梯度下降法
- 一、摘要
- 二、梯度下降法
- 三、线性方程中使用梯度下降法
一、摘要
文本主要讲述了梯度下降法作为机器学习中的一种优化方法,用于最小化损失函数
。它并非直接解决机器学习问题,而是作为求解最优参数的工具。通过二维坐标图直观展示了梯度下降法的原理,即通过调整参数值来逐步减小损失函数值,直至找到最小值点。同时,强调了导数在梯度下降中的作用,即指示了损失函数随参数变化的趋势,从而指导参数调整的方向。
二、梯度下降法
-
概述
1.梯度下降法是机器学习领域的一种重要方法,用于优化目标函数。
2.梯度下降法
用于最小化损失函数
,而梯度上升法
用于最大化效用函数
。
3.梯度下降法是解决许多机器学习问题的常用工具,尤其是那些无法直接求解数学解的问题。 -
原理
1.梯度下降法
通过在损失函数上搜索最优解来最小化损失函数
。
2.在二维坐标平面上,损失函数的最小值对应于参数θ的某个值
。
3.通过计算损失函数对参数θ的导数,确定损失函数增大的方向,并沿其负方向移动。
4.移动的步长
称为学习率α
,其取值影响算法收敛的速度。
图中内容是关于机器学习中“学习率(η)”的知识点介绍:
1. 学习率(η)是在机器学习优化算法,尤其是梯度下降法中的一个超参数。
2. 它控制着每次参数更新的步长。如果学习率取值较小,算法会更谨慎地更新参数,虽然能保证算法的稳定性,但会使得收敛到最优解的速度变慢,需要更多的训练时间和计算资源。
3. 而如果学习率取值过大,参数更新的步长就会很大,这可能导致算法在搜索最优解的过程中“跳过”最优解,无法收敛,甚至出现发散的情况,也就得不到最优解。
4. 并不是所有函数都有唯一的极值点:
解决办法:
1. 多次运行,随机化初始点
2. 梯度下降法的初始点也是一个超参数 -
示例
1.通过示例说明梯度下降法的具体步骤,包括
计算导数
、确定移动方向
和步长
。
2.梯度下降法的过程类似于球体在山谷中的滚落过程,直到到达谷底。
3.学习率α
的取值过大或过小都会影响算法的性能,甚至导致无法找到最优解。 -
注意事项
1.梯度下降法可能陷入
局部最优解
,尤其是面对复杂函数时。
2.初始点的选择对梯度下降法的结果有重要影响,不同的初始点可能导致不同的最优解。
3.对于具有多个局部最优解的函数,多次运行梯度下降法并比较结果可以有助于找到更好的解。
三、线性方程中使用梯度下降法
- 线性回归中使用梯度下降法的目标:使 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i = 1}^{m}(y^{(i)} - \hat{y}^{(i)})^{2} ∑i=1m(y(i)−y^(i))2损失函数值尽可能小。
- 线性回归法的损失函数具有唯一的最优解 。
- 代码实现:
-
导入相关依赖包并定义好损失函数方程且绘制出其图像:
import numpy as np import matplotlib.pyplot as plt # 定义损失函数中的x:取值[-1,6],样本数:141 plot_x = np.linspace(-1,6,141) # 定义损失函数中的y:二元一次方程y=(x - 2.5)**2 -1,其中2.5是自定义的,可取任意一个数 plot_y = (plot_x - 2.5)**2 -1 # 绘制当前损失函数在二维平面上的图像 plt.plot(plot_x,plot_y) plt.show()
执行结果:
-
定义求损失函数的导函数和求损失函数值:
# 定义求导函数:得到梯度gradient值 def dJ(theta):return 2*(theta - 2.5) # 定义J对于theta的损失函数 def J(theta):try:return (theta-2.5)**2 - 1.except:return float('inf') # 返回float最大值
-
定义求损失函数最小值函数:
# 定义求损失函数最小值函数 # p_eta: 学习率,控制每次参数更新的步长,默认值为0.1 # p_epsilon: 收敛阈值,当两次迭代的损失函数差值小于该值时,认为算法收敛,默认值为1e-8 # p_theta: 参数的初始值,默认值为0.0 # n_iters:用于控制循环的参数,当无法找到最优解时,就终止,默认为1e4(10的4次方) def minJ(p_eta=0.1,p_epsilon=1e-8,n_iters=1e4,p_theta=0.0):# 定义局部变量,将传入的参数赋值给新的变量,方便后续操作eta = p_etaepsilon = p_epsilontheta = p_thetai_itera = 0while i_itera < n_iters:# 根据传入的theta计算出梯度,这里假设dJ函数已经定义好,用于计算梯度gradient = dJ(theta)# 将上一次的theta赋值给一个变量,用于存储上一次theta的值,以便后续比较损失函数的变化last_theta = theta# 重新计算当前的theta值,根据梯度下降的公式,让theta向梯度负方向前进一步theta = theta - eta * gradient# 计算上一次和当前的损失函数的差值的绝对值是否小于Epsilon# 如果小于,则说明已经接近损失函数的最小值,认为算法收敛,退出循环if(abs(J(theta) - J(last_theta)) < epsilon):breaki_itera += 1return theta, J(theta)
执行结果:
-
定义一个测试函数minJViewThetaChange,用于可视化损失函数的中theta沿着梯度负方向前进的二维平面图上的轨迹:
# 定义一个测试函数,用于可视化损失函数的中theta沿着梯度负方向前进的二维平面图上的轨迹 # p_eta: 学习率,控制每次参数更新的步长,默认值为0.1 # p_epsilon: 收敛阈值,当两次迭代的损失函数差值小于该值时,认为算法收敛,默认值为1e-8 # p_theta: 参数的初始值,默认值为0.0 # n_iters:用于控制循环的参数,当无法找到最优解时,就终止,默认为1e4(10的4次方) def minJViewThetaChange(p_eta=0.1,p_epsilon=1e-8,n_iters=1e4,p_theta=0.0,p_plot=plt):# 定义局部变量,将传入的参数赋值给新的变量,方便后续操作eta = p_etaepsilon = p_epsilontheta = p_theta# 定义用于存储theta每次计算得到的值,用于绘制图片theta_history = [theta]# 迭代次数i_itera = 0while i_itera < n_iters:# 根据传入的theta计算出梯度,这里假设dJ函数已经定义好,用于计算梯度gradient = dJ(theta)# 将上一次的theta赋值给一个变量,用于存储上一次theta的值,以便后续比较损失函数的变化last_theta = theta# 重新计算当前的theta值,根据梯度下降的公式,让theta向梯度负方向前进一步theta = theta - eta * gradient# 将每次计算得到的theta值放入theta_history历史数组当中theta_history.append(theta)# 计算上一次和当前的损失函数的差值的绝对值是否小于Epsilon# 如果小于,则说明已经接近损失函数的最小值,认为算法收敛,退出循环if(abs(J(theta) - J(last_theta)) < epsilon):breaki_itera += 1print("theta=",theta)print("J(theta)=",J(theta))print("theta_history前100个:",theta_history[:100])print("theta_history总长度:",len(theta_history))# 绘制x,y值,即绘制损失函数曲线图p_plot.plot(plot_x,J(plot_x))# 绘制每个theta沿着gradient负方向前进时的曲线p_plot.plot(np.array(theta_history),J(np.array(theta_history)),color='r',marker='+')# 将曲线显示出来p_plot.show()
执行结果:
-
测试1:给定一个比较小的eta值(
0.01
),看看学习率的变化轨迹:
-
测试2:给定一个更小的eta值(
0.001
),看看学习率的变化轨迹:
-
测试3:给定一个比较大的eta值(
0.8
),看看学习率的变化轨迹:
-
测试4:给定一个更大的eta值,看看学习率的变化轨迹:
此时,如果调用minJ函数,得到的theta和损失函数的值都是nan
:
到此,我们可以看出来,学习率eta不能大小,也不能太大,否则将无法使得损失函数收敛。
-
相关文章:
【机器学习】梯度下降法及使用一元二次方程模拟使用梯度下降法的代码实现
梯度下降法 一、摘要二、梯度下降法三、线性方程中使用梯度下降法 一、摘要 文本主要讲述了梯度下降法作为机器学习中的一种优化方法,用于最小化损失函数。它并非直接解决机器学习问题,而是作为求解最优参数的工具。通过二维坐标图直观展示了梯度下降法…...
Hive配置
目录 1. 引言2. 通过docker-compose联动启动Hadoop和MySQL容器3. 配置Hive3.1 下载并解压Hive-4.0.12.2 配置环境变量2.3 安装mysql-connector的jar包2.4 配置Hive2.4.1 hive-env.sh2.4.2 hive-site.xml2.4.2.1 javax.jdo.option.ConnectionURL2.4.2.2 javax.jdo.option.Connec…...
网络安全 越权分为几种
1. 权限查看 Linux 系统中的每个文件和目录都有访问许可权限,通过其确定谁可以通过何种方式对文件和目录进行访问和操作。 文件或目录的访问权限分为只读、只写和可执行3种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改…...
PHP面试题--后端部分
本文章持续更新内容 之前没来得及整理时间问题导致每次都得找和重新背 这次整理下也方便各位小伙伴一起更轻松的一起踏入编程之路 欢迎各位关注博主不定期更新各种高质量内容适合小白及其初级水平同学一起学习 一起成为大佬 数组函数有那些 ps:本题挑难的背因为…...
HTTP~文件 MIME 类型
MIME(Multipurpose Internet Mail Extensions)类型,即多用途互联网邮件扩展类型,是一种标准,用来表示文档、文件或字节流的性质和格式。最初是为了在电子邮件系统中支持非 ASCII 字符文本、二进制文件附件等而设计的&a…...
工程化与框架系列(4)--Webpack 高级配置详解
Webpack 高级配置详解 🛠️ Webpack 是前端工程化中最流行的构建工具之一,掌握其高级配置可以帮助我们构建更高效、更优化的应用。本文将深入探讨Webpack的高级配置技巧和最佳实践。 Webpack 核心概念回顾 🌟 💡 小知识…...
Let‘s Encrypt免费证书的应用示例
文章目录 前言证书申请证书介绍cert.pemchain.pemfullchain.pemprivkey.pem 使用步骤搭建简易demo应用新建nginx配置文件测试SSL是否生效 总结 前言 最近在搞苹果应用上架的问题,据说用HTTP会被拒,但貌似不绝对,2017年苹果曾发公告说必须要求…...
线性模型 - 支持向量机
支持向量机(SVM)是一种用于分类(和回归)的监督学习算法,其主要目标是找到一个最佳决策超平面,将数据点分为不同的类别,并且使得分类边界与最近的数据点之间的间隔(margin)…...
455. 分发饼干(LeetCode)
题目来源: 455. 分发饼干 - 力扣(LeetCode) 题目内容: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i]…...
Harmony os next~鸿蒙应用开发入门教程
鸿蒙应用开发入门教程 基础准备与环境搭建 1. 了解鸿蒙系统 1.1 核心理念学习 HarmonyOS(鸿蒙系统)是华为推出的全场景分布式操作系统,其核心特点如下: 分布式能力 设备协同:手机、平板、智能手表、IoT设备等可无…...
数据库数据恢复—SQL Server附加数据库报错“错误 823”怎么办?
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复…...
树莓派安装ros docker
系统:bookworm或者ubuntu24都行 一、下载docker和拉取ros:noetic镜像 ubuntu 用鱼香ros脚本安装docker并拉取ros:noetic镜像: https://fishros.org.cn/forum/topic/20/小鱼的一键安装系列 wget http://fishros.com/install -O fishros && . …...
MyBatis-Plus 自动填充功能
MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充,帮助开发…...
折半搜索笔记
前言 01 01 01 爆搜的时间复杂度通常为 O ( 2 n ) O(2^n) O(2n),只能应付 N N N 为 20 20 20 左右的题目,但是折半搜索可以应付 N N N 为 30 30 30 ~ 40 40 40 的题目。 思想 将 N N N 个数分为前后两半,先搜索前一半的状态…...
vue 项目部署到nginx 服务器
一 vue 项目打包 1 本地环境 npm run build 2 打包完成生成一个dist 文件夹,将其放到服务器指定的文件夹,此文件夹可以在nginx 配置文件中配置 二 nginx 1 根据对应的系统搜索安装命令 sudo yum install nginx 2 查看conf位置 如果不知道的话 ng…...
JavaWeb基础专项复习6——AJAX
系列文章目录 1、JavaWeb基础专项复习1——XML文件-CSDN博客 2、JavaWeb基础专项复习2——JSP文件-CSDN博客 3、JavaWeb基础专项复习2——Servlet相关知识-CSDN博客 4、JavaWeb基础专项复习4——会话对象Session and Cookie-CSDN博客 5、JavaWeb基础专项复习5——请求对象…...
RabbitMQ快速入门
目录 MQ简介 1、同步通信 图片 2、异步通信 图片 RabbitMQ快速上手 基本介绍: Producer和Consumer Connection和Channel Virtual host Queue Exchange 工作流程 AMQP Java编写RabbitMQ生产者消费者 生产者 1.建立连接 2.开启信道 3.声明交换机 4.声…...
内存中的缓存区
在 Java 的 I/O 流设计中,BufferedInputStream 和 BufferedOutputStream 的“缓冲区”是 内存中的缓存区(具体是 JVM 堆内存的一部分),但它们的作用是优化数据的传输效率,并不是直接操作硬盘和内存之间的缓存。以下是详…...
快速列出MS Word中所有可用字体
Word中有很多字体,虽然在字体下拉列表中提供了字体的样例,但是并不全面,例如使用Batang字体的话,数字会显示成什么效果,就无法直观的看到。 打开Word应用程序,新建一个空白文档,按AltF11打开VBE…...
《机器学习数学基础》补充资料:矩阵的LU分解
本文是对《机器学习数学基础》第2章2.3.3节矩阵LU分解的拓展。 判断是否可LU分解 并非所有矩阵都可以实现LU分解。 定理1: 若 n n n 阶可逆矩阵 A \pmb{A} A 可以进行LU分解,则 A \pmb{A} A 的 k k k 阶顺序主子阵(leading principal s…...
seasms v9 注入漏洞 + order by注入+information_schema解决方法
目录 一、当注入时,information_schema被禁用的解决方法 1.通过sys库可以获取到表名和库名 2.通过无列名注入join获取列名 二、seasms v9 注入漏洞 三、order by注入 一、当注入时,information_schema被禁用的解决方法 information_schema数据库是My…...
跨端方案选型:对比Uni-app与Taro在复杂电商项目中的技术选型依据参考
跨端方案选型:对比Uni-app与Taro在复杂电商项目中的技术选型依据参考 请赏析: Uni-app与Taro复杂电商项目选型对比指南 一、核心选型维度速记 技术栈匹配 → 跨端能力 → 性能优化 → 开发效率 → 生态支持 → 长期维护二、关键维度对比分析 1. 技术栈匹配性 框架技术栈适…...
C语言32个关键字
32个关键字 1.基本数据类型 signed unsigned char int float double short long void 2.构造数据类型 struct union enum 3.数据存储类别 auto static extern register 4.数据优化 const volatile 5. 9条基本语句 if else switch case break default while do for…...
音乐游戏Drummania(GITADORA)模拟器
文章目录 (一)Drummania和GITADORA(1.1)基本情况(1.2)机体 (二)模拟器(2.1)主程序(2.2)模拟器主题 (三)曲谱文…...
WPF中对滚动条进行平滑滚动
有时候我们在动态添加内容时,需要将滚动条滚动到指定内容处。 一般我们会调用ScrollViewer的ScrollToVerticalOffset(垂直方向)函数和ScrollToHorizontalOffset(水平方向)函数来控制滚动条滚动到指定位置。 正常滚动效…...
【通俗讲解电子电路】——从零开始理解生活中的电路(一)
导言:电子电路为什么重要? ——看不见的“魔法”,如何驱动你的生活? 清晨,当你的手机闹钟响起时,你可能不会想到,是电子电路在精准控制着时间的跳动;当你用微波炉加热早餐时&#…...
达梦:内存相关参数
目录 28个相关参数1. 内存池相关MEMORY_POOLMEMORY_N_POOLSMEMORY_BAK_POOL 2. 大缓冲区相关HUGE_BUFFERHUGE_BUFFER_POOLS 3. 共享缓冲区相关BUFFERBUFFER_POOLSBUFFER_MODEMAX_BUFFER 4. 快速池相关FAST_POOL_PAGES 5. 回收池相关RECYCLE_POOLS 6. 回滚段池相关ROLLSEG_POOLS…...
MySql面试总结(一)
mysql中排序是怎么实现的? MySQL 中的排序主要通过ORDER BY子句来实现,其底层实现方式有文件排序和索引排序两种,以下是具体介绍: 通过ORDER BY子句实现排序 这是 MySQL 中进行排序的基本方式,语法为SELECT column1, column2,... FROM table_name ORDER BY column_name…...
YOLOv5 + SE注意力机制:提升目标检测性能的实践
一、引言 目标检测是计算机视觉领域的一个重要任务,广泛应用于自动驾驶、安防监控、工业检测等领域。YOLOv5作为YOLO系列的最新版本,以其高效性和准确性在实际应用中表现出色。然而,随着应用场景的复杂化,传统的卷积神经网络在处…...
第十四届蓝桥杯大赛软件赛国赛C/C++大学C组
A 【跑步计划——日期问题】-CSDN博客 B 【残缺的数字】-CSDN博客 C 题目 代码 #include <bits/stdc.h> using namespace std;void change(int &x) {int sum 0, t x;while(t){sum t % 10;t / 10;}x - sum; } int main() {int n;cin >> n;int ans 0;…...
【备份】php项目处理跨域请求踩坑
这都是老生常谈的东西了。我还在踩坑,记录一下。 我在项目入口明明写了如下代码: // 处理预检请求 (OPTIONS) if ($_SERVER[REQUEST_METHOD] OPTIONS) {header("Access-Control-Allow-Origin: https://xxx.vip");header("Access-Cont…...
编程题 - 汽水瓶【JavaScript/Node.js解法】
“学如逆水行舟,不进则退。” ——《增广贤文》 目录 汽水瓶 题目:解答分析:js代码解答 -ACM模式:代码通过:题解分析:简洁思路代码: 汽水瓶 题目: 某商店规定:三个空…...
【考研】复试相关上机题目
文章目录 22机试回忆版1、判断燃气费描述输入格式输出格式输入样例输出样例 C o d e Code Code 2、统计闰年数量描述输入格式输出格式输入样例输出样例 C o d e Code Code 3、打印图形描述输入格式输出格式 C o d e Code Code 4、密文数据描述输入格式输出格式输入样例输出样例…...
HONOR荣耀MagicBook 15 2021款 独显(BOD-WXX9,BDR-WFH9HN)原厂Win10系统
适用型号:【BOD-WXX9】 MagicBook 15 2021款 i7 独显 MX450 16GB512GB (BDR-WFE9HN) MagicBook 15 2021款 i5 独显 MX450 16GB512GB (BDR-WFH9HN) MagicBook 15 2021款 i5 集显 16GB512GB (BDR-WFH9HN) 链接:https://pan.baidu.com/s/1S6L57ADS18fnJZ1…...
微信小程序:完善购物车功能,购物车主页面展示,详细页面展示效果
一、效果图 1、主页面 根据物品信息进行菜单分类,点击单项购物车图标添加至购物车,记录总购物车数量 2、购物车详情页 根据主页面选择的项,根据后台查询展示到页面,可进行多选,数量加减等 二、代码 1、主页面 页…...
Spring Boot集成MyBatis访问MySQL:从项目搭建到基础数据库查询(基础入门)
Spring Boot集成MyBatis访问MySQL 一、引言 在当今企业级应用开发中,Spring Boot、MyBatis与MySQL的组合凭借其高效性和灵活性,成为构建数据驱动型应用的首选方案。本文将带你从零开始搭建项目,掌握Spring Boot集成MyBatis的基础入门内容。…...
基于STM32的智能家居能源管理系统
1. 引言 传统家庭能源管理存在能耗监控粗放、设备联动不足等问题,难以适应绿色低碳发展需求。本文设计了一款基于STM32的智能家居能源管理系统,通过多源能耗监测、负荷预测与优化调度技术,实现家庭能源的精细化管理与智能优化,提…...
OpenAI发布GPT-4.5:功能非常特殊,推理很贵
今天凌晨4点,OpenAI进行了在线技术直播,发布了最新模型GPT-4.5。 GPT-4.5与之前的模型相比,本次最大的亮点是加上了“情商”,这也是目前所有大模型最缺、最难的功能。 此外,GPT-4.5 在SimpleQA上的测试数据显示&…...
DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略
DualPipe简介 今天是DeepSeek开源周的第四天,官方开源了一种新型并行计算优化策略——DualPipe。 其实大家阅读过Deepseek-V3技术报告的同学,对这个技术并不陌生。 开源地址:https://github.com/deepseek-ai/DualPipe 核心亮点 DualPipe&…...
RabbitMQ系列(七)基本概念之Channel
RabbitMQ 中的 Channel(信道) 是客户端与 RabbitMQ 服务器通信的虚拟会话通道,其核心作用在于优化资源利用并提升消息处理效率。以下是其核心机制与功能的详细解析: 一、Channel 的核心定义 虚拟通信链路 Channel 是建立在 TCP 连…...
LeetCode 热题 100_有效的括号(69_20_简单_C++)(栈;栈+哈希表(建立左右括号的对应关系))
LeetCode 热题 100_有效的括号(69_20) 题目描述:输入输出样例:题解:解题思路:思路一(栈):思路二(栈哈希表(建立左右括号的对应关系)&a…...
c#-LINQ与lambda表达式学习笔记
https://blog.csdn.net/m0_56259289/article/details/144134122 static void Main(string[] args) //程序入口{int[] arr1 new int[] { 1, 2, 3, 4, 5, 6, 7 };int[] arr2 new int[] { 1, 2, 3, 4, 5, 6, 7 };var query1 from n in arr1 select n;var query2 from a in arr…...
数据库基础二(数据库安装配置)
打开MySQL官网进行安装包的下载 https://www.mysql.com/ 接着找到适用于windows的版本 下载版本 直接点击下载即可 接下来对应的内容分别是: 1:安装所有 MySQL 数据库需要的产品; 2:仅使用 MySQL 数据库的服务器; 3&a…...
Word 插入图片会到文字底下解决方案
一、现象描述 正常情况下,我们插入图片都是这样的。 但有时突然会这样,插入的图片陷于文字底部。 二、网上解决方案 网上有教程说,修改图片布局选项,从嵌入型改成上下型环绕。改完之后确实有用,但是需要手动拖动图片…...
有没有什么免费的AI工具可以帮忙做简单的ppt?
互联网各领域资料分享专区(不定期更新): Sheet 正文 1. 博思AIPPT 特点:专为中文用户设计,支持文本/文件导入生成PPT,内置海量模板和智能排版功能,涵盖商务、教育等多种场景。可一键优化布局、配色,并集成AI绘图功能(文生图/图生图)。适用场景:职场汇报、教育培训、商…...
实战-使用 Playbook 批量部署多台 LAMP 环境
实战-使用 Playbook 批量部署多台 LAMP 环境 playbooks 使用步骤 playbook 是一个不同于使用 ansible 命令行执行方式的模式,功能更强大更灵活。 1、在 playbooks 中定义任务: - name: task description #任务描述信息 module_name: modul…...
CSS—引入方式、选择器、复合选择器、文字控制属性、CSS特性
目录 CSS 1.引入方式 2.选择器 3.复合选择器 4.文字控制属性 5.CSS特性 CSS 层叠样式表,是一种样式表语言,用来描述HTML文档的呈现 书写时一般按照顺序:盒子模型属性—>文字样式—>圆角、阴影等修饰属性 1.引入方式 引入方式方…...
Spring 源码硬核解析系列专题(十):Spring Data JPA 的 ORM 源码解析
在前几期中,我们从 Spring 核心到 Spring Boot、Spring Cloud、Spring Security 和 Spring Batch,逐步揭示了 Spring 生态的多样性。在企业级开发中,数据访问是不可或缺的部分,而 Spring Data JPA 通过简化 JPA(Java Persistence API)操作,成为主流的 ORM 框架。本篇将深…...
爬虫和逆向教程-专栏介绍和目录
文章目录 一、爬虫基础和进阶二、App数据采集三、爬虫项目四、爬虫面试 本专栏为爬虫初学者和进阶开发者量身定制的爬虫和逆向学习园地。为你提供全面而深入的爬虫和逆向技术指导,从入门到精通,从基础理论到高级实战,助你在数据的海洋中畅游&…...
Lua | 每日一练 (4)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Lua | 每日一练 (4)题目参考答案线程和协程调度方式上…...