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

《Android 应用开发基础教程》——第十一章:Android 中的图片加载与缓存(Glide 使用详解)

目录

第十一章:Android 中的图片加载与缓存(Glide 使用详解)

🔹 11.1 Glide 简介

🔸 11.2 添加 Glide 依赖

🔸 11.3 基本用法

✦ 加载网络图片到 ImageView:

✦ 加载本地资源 / 文件 / URI:

🔸 11.4 占位图、错误图、缩略图

🔸 11.5 图片变换:圆角、圆形、裁剪

✦ CenterCrop 和 FitCenter:

✦ GlideTransform:实现圆角或圆形(需引入扩展库):

🔸 11.6 缓存策略

🔸 11.7 在 RecyclerView 中使用 Glide

🔸 11.8 清除缓存

✅ 实战练习建议

习题答案

项目结构

1. MainActivity.java

2. ImageTextAdapter.java

3. GlideUtils.java

4. CircleBorderTransform.java

5. activity_main.xml

6. item_image_text.xml

7. ImageTextItem.java

总结


第十一章:Android 中的图片加载与缓存(Glide 使用详解)

        在移动应用中,图片加载是最常见也最耗资源的任务之一。为了提升性能并避免内存泄露,我们通常使用图片加载库。Glide 是 Google 推荐的 Android 图片加载库,功能强大、使用简单,支持图片加载、转换、缓存等操作。


🔹 11.1 Glide 简介

Glide 由 BumpTech 开发,具有以下特点:

  • 支持从网络、本地、资源中加载图片

  • 自动内存缓存与磁盘缓存

  • 支持图片缩放、裁剪、圆角、圆形

  • 支持 GIF 加载

  • 支持 RecyclerView 中高效加载


🔸 11.2 添加 Glide 依赖

build.gradle(:app) 文件中添加:

implementation 'com.github.bumptech.glide:glide:4.16.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'


🔸 11.3 基本用法

✦ 加载网络图片到 ImageView:

ImageView imageView = findViewById(R.id.imageView);Glide.with(this).load("https://example.com/image.jpg").into(imageView);


✦ 加载本地资源 / 文件 / URI:

// 资源图片
Glide.with(this).load(R.drawable.sample).into(imageView);// 本地文件
File file = new File(getExternalFilesDir(null), "pic.jpg");
Glide.with(this).load(file).into(imageView);

🔸 11.4 占位图、错误图、缩略图

Glide.with(this).load("https://example.com/image.jpg").placeholder(R.drawable.loading)    // 加载中显示的图.error(R.drawable.error_image)      // 加载失败显示的图.thumbnail(0.1f)                    // 显示缩略图.into(imageView);


🔸 11.5 图片变换:圆角、圆形、裁剪

✦ CenterCrop 和 FitCenter:

Glide.with(this).load(url).centerCrop()    // 居中裁剪.into(imageView);


✦ GlideTransform:实现圆角或圆形(需引入扩展库):

implementation 'jp.wasabeef:glide-transformations:4.3.0'

import jp.wasabeef.glide.transformations.RoundedCornersTransformation;Glide.with(this).load(url).transform(new RoundedCornersTransformation(20, 0)) // 圆角半径 20.into(imageView);


🔸 11.6 缓存策略

Glide.with(this).load(url).diskCacheStrategy(DiskCacheStrategy.ALL)  // 磁盘缓存策略.skipMemoryCache(false)                    // 是否跳过内存缓存.into(imageView);

常用策略包括:

策略描述
DiskCacheStrategy.ALL原图和压缩图都缓存
DiskCacheStrategy.NONE不缓存任何内容
DiskCacheStrategy.RESOURCE仅缓存压缩后的图片

🔸 11.7 在 RecyclerView 中使用 Glide

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {Glide.with(holder.itemView.getContext()).load(itemList.get(position).getImageUrl()).into(holder.imageView);
}

注意:不要在 Adapter 中使用 with(context.getApplicationContext()),会影响 View 生命周期管理。


🔸 11.8 清除缓存

// 清除内存缓存(主线程)
Glide.get(context).clearMemory();// 清除磁盘缓存(子线程)
new Thread(() -> {Glide.get(context).clearDiskCache();
}).start();


✅ 实战练习建议

  1. 实现一个图文混排的 RecyclerView 列表,动态加载网络图片

  2. 使用 Glide 加载 GIF 动图

  3. 用 GlideTransform 实现头像圆形 + 外边框效果

  4. 编写工具类 GlideUtils 封装通用加载逻辑


📢 下一章预告:

第十二章:Material Design 组件实战(Toolbar、BottomNavigation、Snackbar 等)


习题答案

项目结构

MainActivity.java
ImageTextAdapter.java
GlideUtils.java
CircleBorderTransform.java
activity_main.xml
item_image_text.xml

1. MainActivity.java

package com.example.demo;import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView;private ImageTextAdapter adapter;private List<ImageTextItem> itemList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerView = findViewById(R.id.recyclerView);recyclerView.setLayoutManager(new LinearLayoutManager(this));// 模拟数据itemList = new ArrayList<>();itemList.add(new ImageTextItem("https://example.com/image1.jpg", "这是描述文字 1"));itemList.add(new ImageTextItem("https://example.com/image2.gif", "这是描述文字 2"));itemList.add(new ImageTextItem("https://example.com/avatar.png", "这是圆形头像"));adapter = new ImageTextAdapter(itemList, this);recyclerView.setAdapter(adapter);}
}

2. ImageTextAdapter.java

package com.example.demo;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.List;public class ImageTextAdapter extends RecyclerView.Adapter<ImageTextAdapter.ViewHolder> {private List<ImageTextItem> itemList;private Context context;public ImageTextAdapter(List<ImageTextItem> itemList, Context context) {this.itemList = itemList;this.context = context;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image_text, parent, false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {ImageTextItem item = itemList.get(position);// 使用 Glide 加载图片if (position == 2) {// 使用圆形头像 + 边框效果GlideUtils.loadCircleWithBorder(context, item.getImageUrl(), holder.imageView, 5, R.color.teal_200);} else {// 普通图片或 GIFGlideUtils.loadImage(context, item.getImageUrl(), holder.imageView);}holder.textView.setText(item.getDescription());}@Overridepublic int getItemCount() {return itemList.size();}public static class ViewHolder extends RecyclerView.ViewHolder {ImageView imageView;TextView textView;public ViewHolder(@NonNull View itemView) {super(itemView);imageView = itemView.findViewById(R.id.imageView);textView = itemView.findViewById(R.id.textView);}}
}

3. GlideUtils.java

package com.example.demo;import android.content.Context;
import android.graphics.Color;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;public class GlideUtils {// 加载普通图片或 GIFpublic static void loadImage(Context context, String url, ImageView imageView) {Glide.with(context).load(url).into(imageView);}// 加载圆形头像 + 边框效果public static void loadCircleWithBorder(Context context, String url, ImageView imageView, int borderWidth, int borderColor) {RequestOptions options = new RequestOptions().transform(new CircleBorderTransform(borderWidth, borderColor)); // 自定义 TransformGlide.with(context).load(url).apply(options).into(imageView);}
}

4. CircleBorderTransform.java

package com.example.demo;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import java.security.MessageDigest;public class CircleBorderTransform extends BitmapTransformation {private final int borderWidth;private final int borderColor;public CircleBorderTransform(int borderWidth, int borderColor) {this.borderWidth = borderWidth;this.borderColor = borderColor;}@Overrideprotected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {int diameter = Math.min(toTransform.getWidth(), toTransform.getHeight());int radius = diameter / 2;Bitmap result = pool.get(diameter + borderWidth * 2, diameter + borderWidth * 2, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(result);Paint paint = new Paint();paint.setAntiAlias(true);// 绘制圆形头像RectF rectF = new RectF(borderWidth, borderWidth, diameter + borderWidth, diameter + borderWidth);canvas.drawOval(rectF, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(toTransform, null, rectF, paint);// 绘制边框paint.setXfermode(null);paint.setColor(borderColor);paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(borderWidth);canvas.drawOval(rectF, paint);return result;}@Overridepublic void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {messageDigest.update(("CircleBorderTransform" + borderWidth + borderColor).getBytes());}
}

5. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="8dp" />
</LinearLayout>

6. item_image_text.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="8dp"><ImageViewandroid:id="@+id/imageView"android:layout_width="100dp"android:layout_height="100dp"android:scaleType="centerCrop"android:contentDescription="Image" /><TextViewandroid:id="@+id/textView"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="Description"android:textSize="16sp"android:paddingStart="16dp"android:gravity="center_vertical" />
</LinearLayout>

7. ImageTextItem.java

package com.example.demo;public class ImageTextItem {private String imageUrl;private String description;public ImageTextItem(String imageUrl, String description) {this.imageUrl = imageUrl;this.description = description;}public String getImageUrl() {return imageUrl;}public String getDescription() {return description;}
}

总结

  1. 图文混排:通过 RecyclerView 展示图片和文字。
  2. 动态加载网络图片:使用 Glide 加载普通图片和 GIF 动图。
  3. 圆形头像 + 边框:通过自定义 CircleBorderTransform 实现。
  4. 工具类封装GlideUtils 封装了通用的图片加载逻辑。

相关文章:

《Android 应用开发基础教程》——第十一章:Android 中的图片加载与缓存(Glide 使用详解)

目录 第十一章&#xff1a;Android 中的图片加载与缓存&#xff08;Glide 使用详解&#xff09; &#x1f539; 11.1 Glide 简介 &#x1f538; 11.2 添加 Glide 依赖 &#x1f538; 11.3 基本用法 ✦ 加载网络图片到 ImageView&#xff1a; ✦ 加载本地资源 / 文件 / UR…...

MySQL 中的游标(Cursor)

一、游标的作用 ​​逐行处理数据​​&#xff1a;当需要对查询结果集中的每一行进行特定操作&#xff08;如计算、条件判断、调用其他过程&#xff09;时使用。​​替代集合操作​​&#xff1a;在无法通过单一 SQL 语句完成复杂逻辑时&#xff0c;游标提供逐行处理的能力。​…...

【嵌入式Linux】基于ARM-Linux的zero2平台的智慧楼宇管理系统项目

目录 1. 需求及项目准备&#xff08;此项目对于虚拟机和香橙派的配置基于上一个垃圾分类项目&#xff0c;如初次开发&#xff0c;两个平台的环境变量&#xff0c;阿里云接入&#xff0c;摄像头配置可参考垃圾分类项目&#xff09;1.1 系统框图1.2 硬件接线1.3 语音模块配置1.4 …...

记忆翻牌游戏:认知科学与状态机的交响曲

目录 记忆翻牌游戏&#xff1a;认知科学与状态机的交响曲引言第一章 网格空间拓扑学1.1 自适应网格算法1.2 卡片排布原理 第二章 状态机设计2.1 状态跃迁矩阵2.2 时空关联模型 第三章 记忆强化机制3.1 认知衰减曲线3.2 注意力热力图 第四章 动画引擎设计4.1 翻牌运动方程4.2 粒…...

【业务领域】InfiniBand协议总结

InfiniBand协议总结 InfiniBand协议是什么&#xff1f;Infiniband产生的原因Mellanox公司介绍及其新闻基于TCP/IP的网络与IB网络的比较IB标准的优势什么是InfiniBand网络什么是InfiniBand架构Mellanox IB卡介绍InfiniBand速率发展介绍InfiniBand网络主要上层协议InfiniBand管理…...

使用Java正则表达式检查字符串是否匹配

在Java开发中&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;简称Regex&#xff09;是处理字符串的强大工具&#xff0c;广泛应用于模式匹配、数据验证和文本处理。Java通过java.util.regex包提供了对正则表达式的支持&#xff0c;包含Pattern和Matcher两个…...

个人健康中枢的多元化AI硬件革新与精准健康路径探析

在医疗信息化领域,个人健康中枢正经历着一场由硬件技术革新驱动的深刻变革。随着可穿戴设备、传感器技术和人工智能算法的快速发展,新一代健康监测硬件能够采集前所未有的多维度生物数据,并通过智能分析提供精准的健康建议。本文将深入探讨构成个人健康中枢的最新硬件技术,…...

Android基础控件用法介绍

Android基础控件用法详解 Android应用开发中,基础控件是构建用户界面的核心元素。本文将详细介绍Android中最常用的基础控件及其用法。 一、TextView(文本显示控件) TextView用于在界面上显示文本信息。 基本用法 <TextViewandroid:id="@+id/textView"andr…...

iO(不可区分混淆)是Web3隐私的圣杯?

1. 引言 iO 是区块链隐私的圣杯吗&#xff1f;本文将探讨&#xff1a; 不可区分混淆&#xff08;indistinguishability obfuscation, iO&#xff09;的局限性iO可能带来的变革iO为何重要&#xff1f;iO是否能真正成为可信硬件的替代方案&#xff1f; 区块链隐私面临的最大挑…...

文章三《机器学习基础概念与框架实践》

文章3&#xff1a;机器学习基础概念与框架实践 ——从理论到代码&#xff0c;用Scikit-learn构建你的第一个分类模型 一、机器学习基础理论&#xff1a;三大核心类型 机器学习是人工智能的核心&#xff0c;通过数据让计算机自动学习规律并做出预测或决策。根据学习方式&#…...

中小企业MES系统概要设计

版本&#xff1a;V1.0 日期&#xff1a;2025年5月2日 一、系统架构设计 1.1 整体架构模式 采用分层微服务架构&#xff0c;实现模块解耦与灵活扩展&#xff0c;支持混合云部署&#xff1a; #mermaid-svg-drxS3XaKEg8H8rAJ {font-family:"trebuchet ms",verdana,ari…...

自动化测试项目1 --- 唠嗑星球 [软件测试实战 Java 篇]

目录 项目介绍 项目源码库地址 项目功能测试 1.自动化实施步骤 1.1 编写测试用例 1.2 自动化测试脚本开发 1.2.1 配置相关环境, 添加相关依赖 1.2.2 相关代码编写 2. 自动化功能测试总结 2.1 弹窗的解决相关问题 2.2 断言的使用和说明 2.3 重新登录问题 项目性能…...

c语言 关键字--目录

1.c语言 关键字 2.typedef 关键字 3.volatile 关键字 4.register 关键字 5.const关键字用法 6.extern关键字...

C语言与指针3——基本数据类型

误区补充 char 的 表示范围0-127 signed char 127 unsigned char 0-255enum不常用&#xff0c;但是常见&#xff0c;这里记录一下。 enum Day {Monday 1,//范围是IntTuesday 2,Wednesday 3 }; enum Day d Monday; switch (d) {case Monday:{printf("%d",Monday);…...

[更新完毕]2025五一杯C题五一杯数学建模思路代码文章教学:社交媒体平台用户分析问题

完整内容请看文章最下面的推广群 社交媒体平台用户分析问题 在问题一中为解决博主在特定日期新增关注数的预测问题&#xff0c;本文构建了基于用户历史行为的二分类模型。首先&#xff0c;从用户对博主的观看、点赞、评论、关注等交互行为中提取统计与时序特征&#xff0c;形成…...

使用Vite创建vue3项目

什么是vite Vite 是新一代构建工具&#xff0c;由 Vue 核心团队开发&#xff0c;提供极快的开发体验。 它利用浏览器原生ES模块导入功能&#xff0c;提供了极快的热模块更新&#xff08;HMR&#xff09;和开发服务器启动速度。 官网&#xff1a;https://vitejs.cn/vite3-cn/…...

Linux管道识

深入理解管道 (Pipes)&#xff1a;连接命令的瑞士军刀 在 Linux 和类 Unix 系统&#xff08;包括 macOS&#xff09;的命令行世界里&#xff0c;管道&#xff08;Pipe&#xff09;是一个极其强大且基础的概念。它允许你将一个命令的输出直接作为另一个命令的输入&#xff0c;像…...

LabVIEW 中VI Server导出 VI 配置

该 LabVIEW VI 展示了在 VI Server 中配置和执行 Exported VIs 的过程&#xff0c;实现对服务器端导出 VI 的远程调用与操作。 ​ 具体过程及模块说明 前期配置&#xff1a;需确保在 LabVIEW 的 “Tools> Options > VI Server > Protocols” 路径下&#xff0c;启用 …...

map和set的遗留 + AVL树(1):

在讲解新的东西之前&#xff0c;我们把上节遗留的问题说一下&#xff1a; 遗留问题&#xff1a; 首先&#xff0c;我们的最上面的代码是一个隐式类型转换&#xff0c;我们插入了一对数据。 我们说了&#xff0c;我们的方括号的底层是insert&#xff0c;当我们调用operator的[…...

Java学习手册:Spring Security 安全框架

一、Spring Security 简介 Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架&#xff0c;用于保护 Java 应用程序&#xff0c;尤其是基于 Spring 的应用。它构建在 Spring 框架之上&#xff0c;能够轻松地集成到基于 Spring 的应用程序中&#xff0c;包括…...

pip 常用命令及配置

一、python -m pip install 和 pip install 的区别 在讲解 pip 的命令之前&#xff0c;我们有必要了解一下 python -m pip install 和 pip install 的区别&#xff0c;以便于我们在不同的场景使用不同的方式。 python -m pip install 命令使用 python 可执行文件将 pip 模块作…...

C++_STL

C 标准模板库&#xff08;Standard Template Library&#xff0c;STL&#xff09;是一套功能强大的 C 模板类和函数的集合&#xff0c;它提供了一系列通用的、可复用的算法和数据结构。 STL 的设计基于泛型编程&#xff0c;这意味着使用模板可以编写出独立于任何特定数据类型的…...

[FPGA Video] AXI4-Stream Remapper

Xilinx AXI4-Stream Remapper IP (PG379) 详细介绍 概述 Xilinx LogiCORE™ IP AXI4-Stream Remapper 核是一个专为视频处理设计的模块&#xff0c;用于在不同每时钟像素数&#xff08;Pixels Per Clock, PPC&#xff09;要求之间重新映射视频像素。它支持将输入 AXI4-Stream…...

【数据结构】励志大厂版·初阶(复习+刷题):栈与队列

前引&#xff1a;本篇将由小编与大家一起复习 栈 、队列 的知识点&#xff0c;栈、队列的顺序、链式结构各个缺点好处&#xff0c;如何实现、对于一般的增删查找此篇文章一定再详细不过&#xff01;对代码的注释、何时需要判断、特殊情况&#xff0c;白话文版一解到底&#xff…...

pytest——参数化

之前有说过&#xff0c;通过pytest测试框架标记参数化功能可以实现数据驱动测试。数据驱动测试使用的文件主要有以下类型&#xff1a; txt 文件 csv 文件excel 文件json 文件yaml 文件.... 本文主要讲的就是以上几种文件类型的读取和使用 一.txt 文件读取使用 首先创建一个 …...

第7篇:RESTful API设计与安全防护

在前后端分离架构中&#xff0c;RESTful API是系统交互的核心通道。本文将从接口规范设计到安全防护&#xff0c;全面讲解如何在EggJS中构建安全、规范、易用的API系统&#xff0c;并提供完整的解决方案和最佳实践。 一、标准化API接口规范设计 1. RESTful设计原则 核心要素&…...

CSS 架构与命名规范

CSS 架构与命名规范&#xff1a;BEM、SMACSS 与 OOCSS 实战 引言 在前端开发中&#xff0c;随着项目规模的扩大&#xff0c;CSS 代码往往会变得难以维护和扩展。无组织的样式表会导致命名冲突、权重覆盖问题和样式继承混乱&#xff0c;这些问题在团队协作的大型项目中尤为明显…...

实验二 软件白盒测试

实验二 软件白盒测试 某工资计算程序功能如下&#xff1a;若雇员月工作小时超过40小时&#xff0c;则超过部分按原小时工资的1.5倍的加班工资来计算。若雇员月工作小时超过50小时&#xff0c;则超过50的部分按原小时工资的3倍的加班工资来计算&#xff0c;而40到50小时的工资仍…...

【数据结构】String字符串的存储

目录 一、存储结构 1.字符串常量池 2.字符串哈希表 2.1结构 2.2基础存储单位 2.2.1键对象 2.2.2值对象 二、存储过程 1.搜索 2.创建 三、存储位置 四、存储操作 1.new新建 2.intern入池 这是String类的详解&#xff1a;String类变量 一、存储结构 1.字符串常量池…...

LLMs Tokenizer Byte-Pair Encoding(BPE)

1 Byte-Pair Encoding(BPE) 如何构建词典&#xff1f; 准备足够的训练语料;以及期望的词表大小&#xff1b;将单词拆分为字符粒度(字粒度)&#xff0c;并在末尾添加后缀“”&#xff0c;统计单词频率合并方式:统计每一个连续/相邻字节对的出现频率&#xff0c;将最高频的连续字…...

npm,yarn,pnpm,cnpm,nvm,npx包管理器常用命令

前端比较主流的包管理器主要有三个npm&#xff0c;yarn&#xff0c;pnpm 多层级依赖&#xff0c;通常发生在依赖之间存在复杂的版本要求时 包 A 依赖于包 B1.0.0 包 B 依赖于包 C2.0.0 另一个包 D 也依赖于 C3.0.0 一、NPM (Node Package Manager) https://www.npmjs.cn/…...

使用mybatis实例类和MySQL表的字段不一致怎么办

在 MyBatis 中&#xff0c;当 Java 实体类的属性名与数据库表的字段名不一致时&#xff0c;会导致查询结果无法正确映射。以下是几种常见解决方案及代码示例&#xff1a; 1. 使用 resultMap 显式映射&#xff08;推荐&#xff09; 场景&#xff1a;字段名与属性名差异较大&…...

阿里发布新一代通义千问 Qwen3模型

近日&#xff0c;阿里巴巴发布了新一代通义千问 Qwen3 模型&#xff0c;一举登顶全球最强开源模型。 这是国内首个“混合推理模型”&#xff0c;将“快思考”与“慢思考”集成进同一个模型&#xff0c;大大节省算力消耗。 旗舰模型 Qwen3-235B-A22B 在代码、数学、通用能力等…...

React pros比较机制

将 count1作为prop传递给Memoson组件 引用类型情况 虽然list值没有发生变化&#xff0c;但是仍旧重新渲染 解决方法使用useMemo()函数&#xff0c;传递一个空依赖项 // 传递数据为引用类型 比较的是引用 // 使用useMemo函数改写、const list useMemo(()>{return [1,2,3]},[…...

Flowable7.x学习笔记(十七)审批我的待办

前言 前文完成了我的待办的查询功能&#xff0c;本文就在此基础上从源码解读到完成审批任务的功能&#xff0c;审批界面我就先不带表单&#xff0c;直接单纯审批通过&#xff0c;这里需要注意的事&#xff0c;审批的表单其实每个节点都可能需要不同的表单内容&#xff0c;后续要…...

HTTP 状态码详解:用途与含义

HTTP 状态码详解&#xff1a;用途与含义 HTTP 状态码详解&#xff1a;用途与含义1. &#xff08;2xx&#xff09;成功类200 OK201 Created204 No Content206 Partial Content 2. &#xff08;3xx&#xff09;重定向类301 Moved Permanently302 Found&#xff08;临时重定向&…...

AI日报 · 2025年05月02日 | 再见GPT-4!OpenAI CEO 确认 GPT-4 已从 ChatGPT 界面正式移除

1、OpenAI CEO 确认 GPT-4 已从 ChatGPT 界面正式移除 在处理 GPT-4o 更新问题的同时&#xff0c;OpenAI CEO Sam Altman 于 5 月 1 日在 X 平台发文&#xff0c;正式确认初代 GPT-4 模型已从 ChatGPT 主用户界面中移除。此举遵循了 OpenAI 此前公布的计划&#xff0c;即在 4 …...

ppt设计美化公司_杰青_长江学者_优青_青年长江学者_万人计划青年拔尖人才答辩ppt模板

WordinPPT / 持续为双一流高校、科研院所、企业等提供PPT制作系统服务。 / 近期PPT美化案例 - 院士增选、科学技术奖、杰青、长江学者特聘教授、校企联聘长江、重点研发、优青、青长、青拔.. 杰青&#xff08;杰出青年科学基金&#xff09; 支持已取得突出成果的45岁以下学…...

文章四《深度学习核心概念与框架入门》

文章4&#xff1a;深度学习核心概念与框架入门——从大脑神经元到手写数字识别的奇幻之旅 引言&#xff1a;给大脑装个"GPU加速器"&#xff1f; 想象一下&#xff0c;你的大脑如果能像智能手机的GPU一样快速处理信息会怎样&#xff1f;这正是深度学习的终极目标&…...

HTML5+JavaScript实现连连看游戏之二

HTML5JavaScript实现连连看游戏之二 以前一篇&#xff0c;见 https://blog.csdn.net/cnds123/article/details/144220548 连连看游戏连接规则&#xff1a; 只能连接相同图案&#xff08;或图标、字符&#xff09;的方块。 连线路径必须是由直线段组成的&#xff0c;最多可以有…...

2025年- H19-Lc127-48.旋转矩阵(矩阵)---java版

1.题目描述 2.思路 画出矩阵&#xff0c;新的旋转矩阵的列坐标等于原始矩阵的矩阵长度-i-1&#xff08;也就是减去当前遍历的i&#xff09;&#xff0c;前后对调。然后新的旋转矩阵的横坐标&#xff0c;是原始矩阵的列坐标。 3.代码实现 public class H48 {public void rota…...

深入理解 MyBatis 代理机制

在 Java 开发领域&#xff0c;MyBatis 是一款优秀的持久层框架&#xff0c;它极大地简化了数据库操作&#xff0c;提高了开发效率。其中&#xff0c;代理机制作为 MyBatis 的核心特性之一&#xff0c;在连接 Java 代码与数据库操作中发挥着关键作用。本文将深入探讨 MyBatis 代…...

游戏引擎学习第254天:重新启用性能分析

运行游戏并尝试让性能分析系统恢复部分功能 我们现在的调试系统这几天基本整理得差不多了&#xff0c;因此我们打算开始清理一些功能&#xff0c;比如目前虽然已经在收集性能分析数据&#xff0c;但我们没有办法查看或有效利用这些信息。今天的计划可能会围绕这方面展开&#…...

性能测试工具篇

文章目录 目录1. JMeter介绍1.1 安装JMeter1.2 打开JMeter1.3 JMeter基础配置1.4 JMeter基本使用流程1.5 JMeter元件作用域和执行顺序 2. 重点组件2.1 线程组2.2 HTTP取样器2.3 查看结果树2.4 HTTP请求默认值2.5 JSON提取器2.6 用户定义的变量2.7 JSON断言2.8 同步定时器&#…...

【Hive入门】Hive性能调优之Join优化:深入解析MapJoin与Sort-Merge Join策略

目录 前言 1 Hive Join操作基础 1.1 Join操作的类型与挑战 1.2 Hive Join执行机制 2 MapJoin优化策略 2.1 MapJoin原理 2.2 MapJoin适用场景 2.3 MapJoin关键参数 3 Sort-Merge Join优化策略 3.1 Sort-Merge Join原理 3.2 Sort-Merge Join优势 3.3 关键配置参数 3…...

【Unity】使用XLua实现C#访问Lua文件

先引入XLua文件中的Plugins和XLua文件夹于Unity项目的Asset文件中 XLua_github链接 建立Lua虚拟机&#xff1a;LuaEnv luaEnv new LuaEnv(); 关闭虚拟机&#xff0c;及时释放资源&#xff1a;luaEnv.Dispose(); Resources文件夹下加载lua文件&#xff08;假设文件路径为Resour…...

AXI中的out of order和interleaving的定义和两者的差别?

AXI中的out of order和interleaving的定义和两者的差别 摘要&#xff1a;在 AXI (Advanced eXtensible Interface) 协议中&#xff0c;Out-of-Order 和 Interleaving 是两个与事务处理顺序和数据传输相关的概念&#xff0c;它们都与 AXI 协议支持的多事务并发处理能力有关&…...

生产级RAG系统一些经验总结

本文将探讨如何使用最新技术构建生产级检索增强生成(RAG)系统&#xff0c;包括健壮的架构、向量数据库(Faiss、Pinecone、Weaviate)、框架(LangChain、LlamaIndex)、混合搜索、重排序器、流式数据接入、评估策略以及实际部署技巧。 引言&#xff1a;检索增强生成的力量 大型语…...

sftp连接报错Received message too long 168449893

sftp连接报错Received message too long 168449893 一、openEuler传文件报错二、分析问题三、解决问题endl 一、openEuler传文件报错 [rootRocky9-12 ~]# scp apache-tomcat-10.1.33.tar.gz root10.0.0.14:Authorized users only. All activities may be monitored and report…...

Java中修饰类的关键字

Java中修饰类的关键字 在web编程课上&#xff0c;老师提问了Java中各种修饰类的关键字的用途和区别&#xff0c;一时间我头脑空白&#xff0c;现在课后重新梳理一遍Java中修饰类的各种关键字的区别和用法。在Java编程中&#xff0c;修饰类的关键字起着至关重要的作用&#xff…...