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

缓存(4):常见缓存 概念、问题、现象 及 预防问题

常见缓存概念

缓存特征: 命中率、最大元素、清空策略

命中率:命中率=返回正确结果数/请求缓存次数

它是衡量缓存有效性的重要指标。命中率越高,表明缓存的使用率越高

最大元素(最大空间):缓存中可以存放的最大元素的数量,一旦缓存中元素数量超过这个值(或者缓存数据所占空间超过其最大支持空间),那么将会触发缓存启动清空策略

根据不同的场景合理的设置最大元素值往往可以一定程度上提高缓存的命中率,从而更有效的时候缓存。

清空策略:缓存的存储空间有限制,当缓存空间被用满时,如何保证在稳定服务的同时有效提升命中率?这就由缓存清空策略来处理,设计适合自身数据特征的清空策略能有效提升命中率。

缓存介质

硬件介质区分:内存、硬盘

技术上区分:内存、硬盘文件、数据库

  • 内存:将缓存存储于内存中是最快的选择,无需额外的I/O开销,但是内存的缺点是没有持久化落地物理磁盘,一旦应用异常break down而重新启动,数据很难或者无法复原
  • 硬盘:一般来说,很多缓存框架会结合使用内存和硬盘,在内存分配空间满了或是在异常的情况下,可以被动或主动的将内存空间数据持久化到硬盘中,达到释放空间或备份数据的目的
  • 数据库:前面有提到,增加缓存的策略的目的之一就是为了减少数据库的I/O压力。像那些不支持SQL,只是简单的key-value存储结构的特殊数据库(如BerkeleyDB和Redis),响应速度和吞吐量都远远高于我们常用的关系型数据库等。

缓存分类

根据缓存和应用的藕合度,分为local cache(本地缓存)和remote cache(分布式缓存)

  • 本地缓存:指的是在应用中的缓存组件
    • 优点:应用**和cache是在同一个进程内部,请求缓存非常快速,没有过多的网络开销等,**在单应用不需要集群支持或者集群情况下各节点无需互相通知的场景下使用本地缓存较合适;
    • 缺点:缓存跟应用程序耦合,多个应用程序无法直接的共享缓存,各应用或集群的各节点都需要维护自己的单独缓存,对内存是一种浪费
  • 分布式缓存:指的是与应用分离的缓存组件或服务,其最大的优点是自身就是一个独立的应用,与本地应用隔离,多个应用可直接的共享缓存。

本地缓存实现

有两种方式做到本地缓存的实现:

  1. 自己实现
  2. 使用已有的框架
直接实现缓存

只需要简单的缓存数据的功能,而无需关注更多存取、清空策略等深入的特性时,直接编程实现缓存则是最便捷和高效的

  1. 成员变量或局部变量实现:以局部变量map结构缓存部分业务数据,减少频繁的重复数据库I/O操作缺点仅限于类的自身作用域内,类间无法共享缓存
  2. 静态变量实现:通过静态变量一次获取缓存内存中,减少频繁的I/O读取,静态变量实现类间可共享,进程内可共享,缓存的实时性稍差

这类缓存实现,优点是能直接在heap区内读写,最快也最方便

缺点同样是受heap区域影响,缓存的数据量非常有限,同时缓存时间受GC影响

主要满足单机场景下的小数据量缓存需求,同时对缓存数据的变更无需太敏感感知,如上一般配置管理、基础静态数据等场景。

缓存框架

Ehcache、Guava Cache(架构设计灵感来源于ConcurrentHashMap)、

Caffeine、java集合缓存(concurrentMap)、redis缓存

Caffeine :适用于单机应用,数据量较小且要求极低延迟的场景。可以设定删除时间等删除条件,Caffeine 的读写能力显著高于ConcurrentHashMap 。支持更多的过期/回收策略

ConcurrentHashMap :适用于简单的本地缓存需求,读多写少的场景。只能动态添加保存,除非显示的删除(有可能内存溢出)

Redis :适用于大规模分布式应用,要求高可用性和数据持久化的场景

支持分布式缓存是redis,其他的都是应用中的 基于本地应用 的缓存,即本地缓存

缓存穿透

什么是缓存穿透

缓存穿透是**指用户查询数据,在数据库没有,自然在缓存中也不会有**。
这样就导致用户查询的时候,在缓存中找不到对应key的value,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库

缓存穿透是指:用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在 缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请 求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题

预防缓存穿透

方法1:最常见的则是采用布隆过滤器,将所有可能存在的数据哈 希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存 储系统的查询压力。

方法2:如果一个查询返回的数据为空(不管是数据不 存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

方法3:直接设置的默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库

方法4:拦截无效请求

总结:

  • 缓存空值:如果一个查询返回的数据为空(不管是数据不 存在,还是系统故障)

    • 我们把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。
    • 通过这个直接设置的默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库;
  • 采用布隆过滤器BloomFilter:优势占用内存空间很小,bit存储。性能特别高。

    • 将所有可能存在的数据哈希到一个足够大的 bitmap 中,
    • 一个一定不存在的数据会被这个bitmap 拦截掉,从而避免了对底层存储系统的查询压力
  • 参数校验

    • 原理:在接收请求参数时,进行严格的校验,确保请求参数的合法性
    • 实现:对请求参数进行格式、范围等校验,过滤掉不合法的请求,减少无效查询。
  • 限流

    • 原理:对请求进行限流,控制单位时间内的请求数量,避免瞬间大量请求打到数据库
    • 实现:使用令牌桶、漏斗等算法实现限流,保护数据库的稳定性。
  • 使用默认值

    • 原理:对于某些常见的请求,可以设置默认值,避免每次都查询数据库
    • 实现:在应用层中,针对特定的请求返回默认值,减少对数据库的访问。
  • 监控与报警

    • 原理:实时监控请求的情况,及时发现异常请求
    • 实现:设置监控指标,如请求频率、数据库负载等,发现异常时及时报警,进行处理。
  • 使用 API 网关

    • 原理:通过 API 网关对请求进行统一管理和控制。
    • 实现:在 API 网关层面进行请求的过滤、校验和限流,减少无效请求直接到达后端服务

缓存击穿

什么是缓存击穿

缓存击穿与 缓存穿透的简单区别

  • 缓存击穿是指数据库中有数据,但是缓存中没有,大量的请求打到数据库;
  • 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

二级缓存缓存击穿解决方案

方法1:设置热点数据永远不过期
方法2: 如果过期则或者在快过期之前更新,如有变化,主动刷新缓存数据,同时也能保障数据一致性
方法3: 加互斥锁,保障缓存中的数据,被第一次请求回填。此方案不适用于超高并发场景

缓存雪崩

什么是缓存雪崩

如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩
由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU 和内存造成巨大压力,严重的会造成数据库宕机!

缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都 去查询数据库了,而对数据库 CPU 和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列 连锁反应,造成整个系统崩溃

预防缓存雪崩

一般有三种处理办法:

  1. 一般并发量不是特别多的时候,使用最多的解决方案是加锁排队
  2. 每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓 存
  3. key 设置不同的缓存失效时间

总结:

  • 设置 合理的缓存过期时间

    • 随机过期时间:为不同的缓存数据设置不同的过期时间,避免同一时间大量缓存失效。
    • 滑动过期:在每次访问时,更新缓存的过期时间,确保热点数据不会在短时间内失效
  • 使用 互斥锁

    • 加锁机制:在缓存失效时,使用分布式锁(如 Redis 的 SETNX)来控制只有一个请求能去加载数据,其他请求等待,避免同时访问数据库
  • 预热缓存

    • 提前加载:在系统启动时或在特定时间段内,提前将热点数据加载到缓存中,减少高并发时的数据库压力
  • 使用多级缓存

    • 多层缓存:在应用层和数据库之间引入多级缓存(如本地缓存 + 分布式缓存),减少对数据库的直接访问
  • 监控与报警

    • 实时监控:监控缓存命中率、数据库负载等指标,及时发现异常情况并进行处理。
    • 报警机制:设置报警机制,当数据库负载过高时,及时通知运维人员进行处理。
  • 流量控制

    • 限流:对请求进行限流,避免瞬间大量请求涌入数据库,保护数据库的稳定性。
  • 使用消息队列

    • 异步处理:将请求放入消息队列中,异步处理数据加载,减少对数据库的直接压力
  • 降级处理

    • 备用方案:在缓存失效或数据库压力过大时,提供降级服务,比如返回默认值或缓存中的旧数据,确保系统的可用性

缓存污染

缓存污染,指留存在缓存中的数据,实际不会被再次访问了,但又占据了缓存空间

由于缓存空间有限,热点数据被置换或者驱逐出去了,而一些后面不用到的数据却反而被留下来,从而缓存数据命中率急剧下降

解决缓存污染的关键点是能识别出热点数据,或者未来更有可能被访问到的数据

换句话说: 是要提升 缓存数据命中率

缓存预热

缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统

作用:避免在用户请求的时候, 先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!

缓存更新策略

缓存更新除了缓存服务器自带的缓存失效策略之外(Redis 默认的有 6 中策略可供选择),我们还可以 根据具体的业务需求进行自定义的缓存淘汰

常见的策略有两种:
(1)定时去清理过期的缓存
(2)当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数 据并更新缓存

缓存降级

当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然 需要保证服务还是可用的,即使是有损服务。

系统可以根据一些关键数据进行自动降级,也可以配置开 关实现人工降级

降级的目的

  • 核心服务可用,即使是有损的。而且有些服务是无法降级的 (如加入购物车、结算)
  • 在缓存数据不可用的情况下,依然能够提供服务,避免系统崩溃或响应时间过长

实现方式:

  • 直接访问数据库:在缓存失效时,直接从数据库中读取数据。
  • 返回默认值:在无法获取数据时,返回一个预设的默认值。
  • 异步更新:在降级的同时,异步更新缓存,以便在下次请求时能够快速响应。

相关文章:

缓存(4):常见缓存 概念、问题、现象 及 预防问题

常见缓存概念 缓存特征: 命中率、最大元素、清空策略 命中率:命中率返回正确结果数/请求缓存次数 它是衡量缓存有效性的重要指标。命中率越高,表明缓存的使用率越高。 最大元素(最大空间):缓存中可以存放的最大元素的…...

实战项目6(09)

目录 任务场景一 【r1配置】 【r2配置】 【r3配置】 ​​​​​​​任务场景二 【r1配置】 【r2配置】 【r3配置】 ​​​​​​​任务场景三 【r1配置】 【r2配置】 【r3配置】 ​​​​​​​任务场景一 按照下图完成网络拓扑搭建和配置 任务要求:在…...

MySQL 数据库故障排查指南

MySQL 数据库故障排查指南 本指南旨在帮助您识别和解决常见的 MySQL 数据库故障。我们将从问题识别开始,逐步深入到具体的故障类型和排查步骤。 1. 问题识别与信息收集 在开始排查之前,首先需要清晰地了解问题的现象和范围。 故障现象: 数…...

MacOS Python3安装

python一般在Mac上会自带,但是大多都是python2。 python2和python3并不存在上下版本兼容的情况,所以python2和python3可以同时安装在一台设备上,并且python3的一些语法和python2并不互通。 所以在Mac电脑上即使有自带python,想要使…...

锁相放大技术:从噪声中提取微弱信号的利器

锁相放大技术:从噪声中提取微弱信号的利器 一、什么是锁相放大? 锁相放大(Lock-in Amplification)是一种用于检测微弱信号的技术,它能够从强噪声背景中提取出我们感兴趣的特定信号。想象一下在嘈杂的派对上听清某个人…...

机器学习总结

1.BN【batch normalization】 https://zhuanlan.zhihu.com/p/93643523 减少 2.L1L2正则化 l1:稀疏 l2:权重减小 3.泛化误差 训练误差计算了训练集的误差,而泛化误差是计算全集的误差。 4.dropout 训练过程中神经元p的概率失活 一文彻底搞懂深度学习&#x…...

基于神经网络的无源雷达测向系统仿真实现

基于神经网络的无源雷达测向系统仿真实现 项目概述 本项目实现了基于卷积神经网络(CNN)的无源雷达方向到达角(DOA)估计系统。通过深度学习方法,系统能够从接收到的雷达信号中准确估计出信号源的方向,适用于单目标和多目标场景。相比传统的DOA估计算法&…...

《用MATLAB玩转游戏开发》Flappy Bird:小鸟飞行大战MATLAB趣味实现

《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-Flappy Bird:小鸟飞行大战MATLAB趣味实现 文章目录 《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互&#xf…...

【C/C++】跟我一起学_C++同步机制效率对比与优化策略

文章目录 C同步机制效率对比与优化策略1 效率对比2 核心同步机制详解与适用场景3 性能优化建议4 场景对比表5 总结 C同步机制效率对比与优化策略 多线程编程中,同步机制的选择直接影响程序性能与资源利用率。 主流同步方式: 互斥锁原子操作读写锁条件变量无锁数据…...

linux 三剑客命令学习

grep Grep 是一个命令行工具,用于在文本文件中搜索打印匹配指定模式的行。它的名称来自于 “Global Regular Expression Print”(全局正则表达式打印),它最初是由 Unix 系统上的一种工具实现的。Grep 工具在 Linux 和其他类 Unix…...

【js基础笔记] - 包含es6 类的使用

文章目录 js基础js 预解析js变量提升 DOM相关知识节点选择器获取属性节点创建节点插入节点替换节点克隆节点获取节点属性获取元素尺寸获取元素偏移量标准的dom事件流阻止事件传播阻止默认行为事件委托 正则表达式js复杂类型元字符 - 基本元字符元字符 - 边界符元字符 - 限定符元…...

《Linux命令行大全(第2版)》PDF下载

内容简介 本书对Linux命令行进行详细的介绍,全书内容包括4个部分,第一部分由Shell的介绍开启命令行基础知识的学习之旅;第二部分讲述配置文件的编辑,如何通过命令行控制计算机;第三部分探讨常见的任务与必备工具&…...

补补表面粗糙度的相关知识(一)

表面粗糙度,或简称粗糙度,是指表面不光滑的特性。这个在机械加工行业内可以说是绝绝的必备知识之一,但往往也是最容易被忽略的,因为往往天天接触的反而不怎么关心,或者没有真正的去认真学习掌握。对于像我一样&#xf…...

Python实用工具:pdf转doc

该工具只能使用在英文目录下,且无法转换出图片,以及文本特殊格式。 下载依赖项 pip install PyPDF2 升级依赖项 pip install PyPDF2 --upgrade 查看库版本 python -c "import PyPDF2; print(PyPDF2.__version__)" 下载第二个依赖项 pip i…...

基于Dify实现对Excel的数据分析

在dify部署完成后,大家就可以基于此进行各种应用场景建设,目前dify支持聊天助手(包括对话工作流)、工作流、agent等模式的场景建设,我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分…...

Win全兼容!五五 Excel Word 转 PDF 工具解决多场景转换难题

各位办公小能手们!今天给你们介绍一款超牛的工具——五五Excel Word批量转PDF工具V5.5版。这玩意儿专注搞批量格式转换,能把Excel(.xls/.xlsx)和Word(.doc/.docx)文档唰唰地变成PDF格式。 先说说它的核心功…...

java加强 -Collection集合

集合是一种容器,类似于数组,但集合的大小可变,开发中也非常常用。Collection代表单列集合,每个元素(数据)只包含1个值。Collection集合分为两类,List集合与set集合。 特点 List系列集合&#…...

BGP实验练习1

需求: 要求五台路由器的环回地址均可以相互访问 需求分析: 1.图中存在五个路由器 AR1、AR2、AR3、AR4、AR5,分属不同自治系统(AS),AR1 在 AS 100,AR2 - AR4 在 AS 200,AR5 在 AS …...

Nginx location静态文件映射配置

遇到问题? 以下这个Nginx的配置,愿意为访问https://abc.com会指向一个动态网站,访问https://abc.com/tongsongzj时会访问静态网站,但是配置之后(注意看后面那个location /tongsongzj/静态文件映射的配置)&…...

四、Hive DDL表定义、数据类型、SerDe 与分隔符核心

在理解了 Hive 数据库的基本操作后,本篇笔记将深入到数据存储的核心单元——表 (Table) 的定义和管理。掌握如何创建表、选择合适的数据类型、以及配置数据的读写方式 (特别是 SerDe 和分隔符),是高效使用 Hive 的关键。 一、创建表 (CREATE TABLE)&…...

每日脚本 5.11 - 进制转换和ascii字符

前置知识 python中各个进制的开头 二进制 : 0b 八进制 : 0o 十六进制 : 0x 进制转换函数 : bin() 转为2进制 oct() 转换为八进制的函数 hex() 转换为16进制的函数 ascii码和字符之间的转换 : chr(97) 码转为字符 …...

cookie和session的区别

一、基本概念 1. Cookie 定义​​:Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据(通常小于4KB),浏览器会在后续请求中自动携带该数据。作用​​:用于跟踪用户状态(如登录状态)、记…...

Kotlin Multiplatform--03:项目实战

Kotlin Multiplatform--03:项目实战 引言配置iOS开发环境配置项目环境运行程序 引言 本章将会带领读者进行项目实战,了解如何从零开始编译一个能同时在Android和iOS运行的App。开发环境一般来说需要使用Macbook,笔者没试过Windows是否能开发。…...

图形学、人机交互、VR/AR领域文献速读【持续更新中...】

(1)笔者在时间有限的情况下,想要多积累一些自身课题之外的新文献、新知识,所以开了这一篇文章。 (2)想通过将文献喂给大模型,并向大模型提问的方式来快速理解文献的重要信息(如基础i…...

opencascade.js stp vite 调试笔记

Hello, World! | OpenCascade.js cnpm install opencascade.js cnpm install vite-plugin-wasm --save-dev 当你不知道文件写哪的时候trae还是有点用的 ‘’‘ import { defineConfig } from vite; import wasm from vite-plugin-wasm; import rollupWasm from rollup/plugi…...

openharmony系统移植之gpu mesa3d适配

openharmony系统移植之gpu mesa3d适配 文章目录 openharmony系统移植之gpu mesa3d适配1. 环境说明2. gpu内核panfrost驱动2.1 使能panfrost驱动2.2 panfrost dts配置 3. buildroot下测试gpu驱动3.1 buildroot配置编译 4. ohos下mesa3d适配4.1 ohos下mesa3d编译调试4.1.2 编译4.…...

Java开发经验——阿里巴巴编码规范经验总结2

摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制,因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…...

Linux中常见开发工具简单介绍

目录 apt/yum 介绍 常用命令 install remove list vim 介绍 常用模式 命令模式 插入模式 批量操作 底行模式 模式替换图 vim的配置文件 gcc/g 介绍 处理过程 预处理 编译 汇编 链接 库 静态库 动态库(共享库) make/Makefile …...

深入理解深度Q网络DQN:基于python从零实现

DQN是什么玩意儿? 深度Q网络(DQN)是深度强化学习领域里一个超厉害的算法。它把Q学习和深度神经网络巧妙地结合在了一起,专门用来搞定那些状态空间维度特别高、特别复杂的难题。它展示了用函数近似来学习价值函数的超能力&#xf…...

使用lldb看看Rust的HashMap

目录 前言 正文 读取桶的状态 获取键值对 键值对的指针地址 此时,读取数据 读取索引4的键值对 多添加几个键值对 使用i32作为键,&str作为值 使用i32作为键,String作为值 前言 前面使用ldb看了看不同的类型,这篇再使用…...

Vue3简易版购物车的实现。

文章目录 一、话不多说&#xff0c;直接上代码&#xff1f; 一、话不多说&#xff0c;直接上代码&#xff1f; <template><div><input type"text" placeholder"请输入内容" v-model"keywords"><button click"addGood…...

比亚迪全栈自研生态的底层逻辑

比亚迪全栈自研生态的底层逻辑&#xff1a;汽车工程师必须理解的闭环技术革命 引言&#xff1a;当技术壁垒成为护城河 2023年比亚迪销量突破302万辆的震撼数据背后&#xff0c;隐藏着一个更值得工程师深思的事实&#xff1a;其全栈自研体系覆盖了新能源汽车83%的核心零部件。这…...

[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八)

[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八) 引言 在当今网络安全威胁日益严峻的背景下&#xff0c;为 Web 应用启用 HTTPS 已成为基本要求。Spring Boot 提供了简单高效的方式集成 HTTPS 支持&#xff0c;无论是开发环境测试还是生产环境部署&#xff0…...

5.1.1 WPF中Command使用介绍

WPF 的命令系统是一种强大的输入处理机制,它比传统的事件处理更加灵活和可重用,特别适合 MVVM (Model, View, ViewModel)模式开发。 一、命令系统核心概念 1.命令系统基本元素: 命令(Command): 即ICommand类,使用最多的是RoutedCommand,也可以自己继承ICommand使用自定…...

设计模式简述(十九)桥梁模式

桥梁模式 描述基本组件使用 描述 桥梁模式是一种相对简单的模式&#xff0c;通常以组合替代继承的方式实现。 从设计原则来讲&#xff0c;可以说是单一职责的一种体现。 将原本在一个类中的功能&#xff0c;按更细的粒度拆分到不同的类中&#xff0c;然后各自独立发展。 基本…...

常用设计模式

一、什么是设计模式 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验总结&#xff0c;旨在解决面向对象设计中反复出现的问题&#xff0c;提升代码的可重用性、可理解性和可靠性。以下从多个维度详细讲解&#xff…...

20242817-李臻-课下作业:Qt和Sqlite

实验内容 阅读附件内容&#xff0c;编译运行附件中第一章&#xff0c;第三章的例子。 实验过程 第一章 t1实践 #include <QApplication> #include <QWidget> #include <QPushButton> #include <QVBoxLayout>int main(int argc, char *argv[]) {QA…...

嵌入式机器学习平台Edge Impulse图像分类 – 快速入门

陈拓 2025/05/08-2025/05/11 1. 简介 官方网址 https://edgeimpulse.com/ 适用于任何边缘设备的人工智能&#xff1a; Gateways - 网关 Sensors & Cameras - 传感器和摄像头 Docker Containers - Docker容器 MCUs, NPUs, CPUs, GPUs 构建数据集、训练模型并优化库以…...

JavaWeb, Spring, Spring Boot

出现时间 JavaWeb - Spring - Spring Boot 一、JavaWeb 的发展历程 Servlet 和 JSP&#xff1a; Servlet&#xff1a;1997 年首次发布&#xff0c;用于处理 HTTP 请求和响应。 JSP&#xff1a;1999 年首次发布&#xff0c;用于动态生成 HTML 页面。 特点&#xff1a;提供了基…...

upload-labs靶场通关详解:第五关

一、分析源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(".php",".php5",".php4",".php3",".php2",".html",".htm",".ph…...

【问题】Watt加速github访问速度:好用[特殊字符]

前言 GitHub 是全球知名的代码托管平台&#xff0c;主要用于软件开发&#xff0c;提供 Git 仓库托管、协作工具等功能&#xff0c;经常要用到&#xff0c;但是国内用户常因网络问题难以稳定访问 。 Watt Toolkit&#xff08;原名 Steam&#xff09;是由江苏蒸汽凡星科技有限公…...

GitHub打开缓慢甚至失败的解决办法

在C:\Windows\System32\drivers\etc的hosts中增加如下内容&#xff1a; 20.205.243.166 github.com 199.59.149.236 github.global.ssl.fastly.net185.199.109.153 http://assets-cdn.github.com 185.199.108.153 http://assets-cdn.github.com 185.199.110.153 http://asset…...

【25软考网工】第六章(3)数字签名和数字证书

博客主页&#xff1a;christine-rr-CSDN博客 ​专栏主页&#xff1a;软考中级网络工程师笔记 ​​ 大家好&#xff0c;我是christine-rr !目前《软考中级网络工程师》专栏已经更新二十多篇文章了&#xff0c;每篇笔记都包含详细的知识点&#xff0c;希望能帮助到你&#xff01…...

Android Native 函数 Hook 技术介绍

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 Android Native 函数 Hook 技术是一种在应用运行时拦截或替换系统或自身函数行为的手段&#xff0c;常见实现包括 PLT Hook、Inline Hook。 PLT Hook 和…...

代码随想录算法训练营第60期第三十二天打卡

大家好&#xff0c;今天是我们贪心算法章节的第三阶段&#xff0c;前面我们讲过的几道题不知道大家理解的情况如何&#xff0c;还是那句话&#xff0c;贪心算法没有固定的套路与模板&#xff0c;一道题一个思路&#xff0c;我们要多思考这样慢慢地我就就可以水到渠成。今天我们…...

Problem C: 异常1

1.题目描述 检测年龄&#xff0c;其中若为负数或大于等于200岁皆为异常&#xff0c;请将下列代码补充完整。 // 你的代码将被嵌入这里 class Main{ public static void main(String[] args){ Person p1new Person("John",80); Person p2new Pers…...

Ollama部署使用以及模型微调和本地部署

ollama是一款开源的本地大语言模型管理工具&#xff0c;专注于简化大语言模型&#xff08;LLM&#xff09;的本地部署和使用。以下是关于 Ollama 应用的详细介绍&#xff1a; Ollama 的主要功能 本地化部署&#xff1a; Ollama 支持在本地运行模型&#xff0c;无需依赖外部云…...

汇编学习——iOS开发对arm64汇编的初步了解

汇编学习——iOS开发对arm64汇编的初步了解 文章目录 汇编学习——iOS开发对arm64汇编的初步了解前言栈 指令 寄存器寄存器指令运算指令寻址指令前变基 与 后变基 栈堆&#xff08;Heap&#xff09;内存机制三、栈&#xff08;Stack&#xff09;内存机制 3. 多级调用示例 例子A…...

前端代理问题

在前后端联调的时候&#xff0c;有一次因为前端项目代理配置有问题&#xff0c;导致请求接口对不上&#xff0c; transpileDependencies: true,devServer: {hot: true,port: 8081,proxy: {/api: {target: http://localhost:8080,changeOrigin: true,ws: true,pathRewrite: {^/a…...

E+H流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯

EH流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯 在现代工业自动化的广阔舞台上&#xff0c;Profibus DP与Modbus TCP这两种通信协议各领风骚&#xff0c;它们在不同的应用场景中发挥着举足轻重的作用。但工业生产的复杂性往往要求不同设备、系统之间能够顺畅沟…...