Android java 设计封装增强型WebView组件

Android java 设计封装增强型WebView组件(兼容Android 4.4+)
* 特性:
* 1. 全生命周期管理
* 2. 智能硬件加速
* 3. 链式配置API
* 4. 安全下载管理
* 5. 全屏视频支持

public class EnhancedWebView extends WebView {private CustomWebChromeClient mChromeClient;private DownloadManager mDownloadManager;// 链式配置构建器public static class Builder {private final Context mContext;private boolean mJavaScriptEnabled = true;private int mCacheMode = WebSettings.LOAD_DEFAULT;public Builder(Context context) {mContext = context;}public Builder setJavaScriptEnabled(boolean enabled) {mJavaScriptEnabled = enabled;return this;}public Builder setCacheMode(@NonNull int cacheMode) {mCacheMode = cacheMode;return this;}public EnhancedWebView build() {EnhancedWebView webView = new EnhancedWebView(mContext);WebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(mJavaScriptEnabled);settings.setCacheMode(mCacheMode);// ... 其他配置项return webView;}}public EnhancedWebView(Context context) {super(context);initWebView(context);}private void initWebView(Context context) {// 智能硬件加速(API 14+)if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {setLayerType(View.LAYER_TYPE_HARDWARE, null);}// 安全下载管理mDownloadManager = new DownloadManager(context);setDownloadListener(this::handleDownload);}// 全生命周期管理public void onResume() {resumeTimers();if (mChromeClient != null) mChromeClient.onResume();}public void onPause() {pauseTimers();if (mChromeClient != null) mChromeClient.onPause();}public void onDestroy() {loadUrl("about:blank");stopLoading();setWebChromeClient(null);setWebViewClient(null);destroy();}// 全屏视频支持@Overridepublic void setWebChromeClient(WebChromeClient client) {mChromeClient = new CustomWebChromeClient(getContext());super.setWebChromeClient(mChromeClient);}// 安全下载处理private void handleDownload(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {if (isUnsafeFileType(mimeType)) {showSecurityWarning();return;}mDownloadManager.startDownload(url, mimeType);}// 自定义WebChromeClient(处理全屏视频)private class CustomWebChromeClient extends WebChromeClient {private View mCustomView;private CustomViewCallback mCustomViewCallback;public CustomWebChromeClient(Context context) {// 初始化全屏处理相关参数}@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {// 实现全屏视频逻辑if (mCustomView != null) {onHideCustomView();return;}mCustomView = view;mCustomViewCallback = callback;// 将自定义视图添加到DecorView}@Overridepublic void onHideCustomView() {// 退出全屏处理if (mCustomView == null) return;// 移除自定义视图mCustomViewCallback.onCustomViewHidden();mCustomView = null;}}
}

关键实现说明:

  • 生命周期管理
  • 提供onResume()/onPause()/onDestroy()方法与Activity/Fragment生命周期绑定
  • 在销毁时主动清理资源,防止内存泄漏
  • 智能硬件加速
  • 根据API版本自动启用硬件加速层(LAYER_TYPE_HARDWARE)
  • 兼容Android 4.0+设备
  • 链式配置API
  • 采用Builder模式实现流畅配置接口
  • 支持常见配置项:缓存策略、JavaScript开关等

4. 安全下载管理

  • 内置文件类型安全检查
  • 集成DownloadManager实现安全下载
  • 支持自定义安全策略扩展
  • 全屏视频支持
  • 通过自定义WebChromeClient处理全屏回调
  • 维护全屏视图状态机
  • 兼容系统全屏回调接口

使用示例:

// 链式配置
EnhancedWebView webView = new EnhancedWebView.Builder(context).setJavaScriptEnabled(true).setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK).build();// 生命周期绑定
@Override
protected void onResume() {super.onResume();webView.onResume();
}@Override
protected void onDestroy() {webView.onDestroy();super.onDestroy();
}

重新整理兼容低版本

/*** EnhancedWebView.java** 增强型 WebView 组件(兼容 Android 4.4+ 与低版本 Java)** 主要特性:* 1. 多进程数据隔离(API 17+)* 2. 硬件加速与网络优化设置* 3. 安全策略:URL 白名单和禁止协议验证、SSL 错误处理* 4. 全屏视频支持(通过自定义 WebChromeClient 与 FullScreenHandler)* 5. 内存优化:分步释放资源、反射销毁处理低版本兼容* 6. Builder 链式配置 API* 7. 提供 JavaScript 桥接接口(注意安全性)** 注意:* (1)所有 WebView 操作务必在主线程中执行* (2)请在 Activity 的生命周期 onResume/onPause/onDestroy 中调用相应的 onResumeWebView()/onPauseWebView()/destroy() 方法* (3)多进程模式需要在 AndroidManifest.xml 中做相应配置,例如:** <activity *   android:name=".WebActivity"*   android:process=":webview" />*/import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.DownloadListener;
import android.webkit.SslErrorHandler;
import android.webkit.SslError;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;public class EnhancedWebView extends WebView {private static final String PROCESS_SUFFIX = ":webview";private FullScreenHandler mFullScreenHandler;private SecurityConfig mSecurityConfig = new SecurityConfig();private boolean mIsMultiProcess = false;// ========== 构造函数 ==========public EnhancedWebView(Context context) {super(context);initWebView(context);}public EnhancedWebView(Context context, AttributeSet attrs) {super(context, attrs);initWebView(context);}public EnhancedWebView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initWebView(context);}// ========== 初始化各模块 ==========/*** 初始化 WebView 参数、功能配置、下载监听等*/private void initWebView(Context context) {initMultiProcess(context);initHardwareAcceleration();initNetworkSettings();initSecuritySettings();initFullScreenSupport(context);// 设置下载监听器(低版本 Java,不使用 lambda)setDownloadListener(new DownloadListener() {@Overridepublic void onDownloadStart(String url, String userAgent,String contentDisposition,String mimeType, long contentLength) {handleDownload(url, userAgent, contentDisposition, mimeType, contentLength);}});}/*** 初始化多进程支持(仅 API 17 及以上有效)*/private void initMultiProcess(Context context) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {String processName = getProcessName(context);if (!processName.endsWith(PROCESS_SUFFIX)) {mIsMultiProcess = true;WebView.setDataDirectorySuffix(processName); // 设置独立数据目录}}}/*** 根据系统版本设置硬件或软件加速*/private void initHardwareAcceleration() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {setLayerType(View.LAYER_TYPE_HARDWARE, null);} else {setLayerType(View.LAYER_TYPE_SOFTWARE, null);}}/*** 初始化 WebSettings 相关配置,包括 JS、DOM 存储、混合内容模式等。*/private void initNetworkSettings() {WebSettings settings = getSettings();// 启用 JavaScript、DOM 及数据库支持settings.setJavaScriptEnabled(true);settings.setDomStorageEnabled(true);settings.setDatabaseEnabled(true);// 针对 Lollipop 及以上版本,允许混合内容(兼容 HTTP 与 HTTPS 混合)if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {settings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);}// 视图和布局优化settings.setUseWideViewPort(true);settings.setLoadWithOverviewMode(true);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);} else {settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);}settings.setCacheMode(WebSettings.LOAD_DEFAULT);}/*** 初始化安全设置,可根据需要扩展*/private void initSecuritySettings() {// 例如:禁用文件访问,防止本地文件注入风险getSettings().setAllowFileAccess(false);}/*** 初始化全屏视频支持,该功能需要传入 Activity 对象*/private void initFullScreenSupport(Context context) {if (context instanceof Activity) {mFullScreenHandler = new FullScreenHandler((Activity) context);}}// ========== 安全策略处理 ==========/*** 对 URL 进行安全验证* 检查是否采用禁止的协议,或是否符合配置的白名单规则* @param url 待验证的 URL* @return 如果 URL 符合安全策略则返回 true,否则返回 false*/private boolean validateUrlSecurity(String url) {try {Uri uri = Uri.parse(url);// 检查协议是否被禁止String scheme = uri.getScheme();if (scheme != null) {for (int i = 0; i < mSecurityConfig.mForbiddenSchemes.size(); i++) {if (scheme.equals(mSecurityConfig.mForbiddenSchemes.get(i))) {return false;}}}// 如果设置了白名单,URL 必须匹配其中至少一个规则if (!mSecurityConfig.mUrlWhitelist.isEmpty()) {for (int i = 0; i < mSecurityConfig.mUrlWhitelist.size(); i++) {Pattern pattern = mSecurityConfig.mUrlWhitelist.get(i);if (pattern.matcher(url).matches()) {return true;}}return false; // 未匹配白名单}return true;} catch (Exception e) {return false;}}/*** 重载 loadUrl 方法,加载之前进行安全策略检测*/@Overridepublic void loadUrl(String url) {if (validateUrlSecurity(url)) {super.loadUrl(url);} else {handleSecurityViolation(url);}}@Overridepublic void loadUrl(String url, java.util.Map<String, String> additionalHttpHeaders) {if (validateUrlSecurity(url)) {super.loadUrl(url, additionalHttpHeaders);} else {handleSecurityViolation(url);}}/*** 当检测到不安全的 URL 请求时,展示安全提示对话框*/private void handleSecurityViolation(String url) {AlertDialog.Builder builder = new AlertDialog.Builder(getContext());builder.setTitle("安全警告").setMessage("尝试访问不安全资源:" + url).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}}).create().show();}// ========== 下载管理 ==========/*** 下载文件时的处理逻辑。实际项目中建议接入系统 DownloadManager,注意运行时权限。*/private void handleDownload(String url, String userAgent, String contentDisposition,String mimeType, long contentLength) {AlertDialog.Builder builder = new AlertDialog.Builder(getContext());builder.setTitle("下载提示").setMessage("是否下载文件?\n" + url).setNegativeButton("取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}}).setPositiveButton("下载", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {// 此处实现下载逻辑,例如调用系统 DownloadManagerdialog.dismiss();}}).create().show();}// ========== 全屏视频支持 ==========/*** 重写 setWebChromeClient 方法,注入自定义的 WebChromeClient* 用于处理全屏视频的进入与退出*/@Overridepublic void setWebChromeClient(WebChromeClient client) {// 无论外部如何设置,我们强制使用内部 CustomWebChromeClientsuper.setWebChromeClient(new CustomWebChromeClient());}/*** 自定义 WebChromeClient,用于全屏视频、SSL 错误处理等*/private class CustomWebChromeClient extends WebChromeClient {@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {if (mFullScreenHandler != null) {mFullScreenHandler.enterFullScreen(EnhancedWebView.this, view, callback);}}@Overridepublic void onHideCustomView() {if (mFullScreenHandler != null) {mFullScreenHandler.exitFullScreen();}}@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// 如果允许自签名证书,则放行;否则取消请求if (!mSecurityConfig.mAllowSelfSignedCerts) {handler.cancel();} else {// 实际开发中建议显示提示对话框,让用户决定handler.proceed();}}}// ========== 生命周期处理 ==========/*** 请在 Activity 的 onResume 中调用此方法,以恢复 WebView 内部定时器等*/public void onResumeWebView() {resumeTimers();if (mFullScreenHandler != null) {mFullScreenHandler.onResume();}}/*** 请在 Activity 的 onPause 中调用此方法,暂停 WebView 的状态*/public void onPauseWebView() {pauseTimers();if (mFullScreenHandler != null) {mFullScreenHandler.onPause();}}/*** 释放 WebView 的资源,防止内存泄漏*/@Overridepublic void destroy() {removeAllViews();clearHistory();clearCache(true);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {super.destroy();} else {try {Method method = WebView.class.getDeclaredMethod("destroy");method.setAccessible(true);method.invoke(this, (Object[]) null);} catch (Exception e) {super.destroy();}}}// ========== 工具方法 ==========/*** 获取当前进程名称* @param context 上下文* @return 当前进程名称,若获取失败返回空字符串*/private static String getProcessName(Context context) {ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses();if (processes != null) {int pid = android.os.Process.myPid();for (int i = 0; i < processes.size(); i++) {ActivityManager.RunningAppProcessInfo info = processes.get(i);if (info.pid == pid) {return info.processName;}}}return "";}// ========== Builder 链式配置 ==========public static class Builder {private Context mContext;private SecurityConfig mSecurityConfig = new SecurityConfig();public Builder(Context context) {mContext = context.getApplicationContext();}/*** 添加 URL 白名单规则(正则表达式)*/public Builder addUrlWhitelist(String regex) {mSecurityConfig.addUrlWhitelist(regex);return this;}/*** 设置是否允许自签名证书(仅建议开发阶段测试)*/public Builder setAllowSelfSignedCerts(boolean allow) {mSecurityConfig.mAllowSelfSignedCerts = allow;return this;}/*** 构建 EnhancedWebView 实例*/public EnhancedWebView build() {EnhancedWebView webView = new EnhancedWebView(mContext);webView.mSecurityConfig = this.mSecurityConfig;return webView;}}// ========== 安全配置内部类 ==========/*** SecurityConfig 用于配置 URL 白名单、禁止协议、以及是否允许自签名证书*/public static class SecurityConfig {private List<Pattern> mUrlWhitelist;private List<String> mForbiddenSchemes;private boolean mAllowSelfSignedCerts;public SecurityConfig() {mUrlWhitelist = new ArrayList<Pattern>();mForbiddenSchemes = new ArrayList<String>();// 默认禁止 file 与 tel 协议mForbiddenSchemes.add("file");mForbiddenSchemes.add("tel");mAllowSelfSignedCerts = false;}/*** 添加白名单规则(正则表达式字符串)*/public SecurityConfig addUrlWhitelist(String regex) {try {Pattern pattern = Pattern.compile(regex);mUrlWhitelist.add(pattern);} catch (Exception e) {// 如果正则表达式错误,则忽略该规则}return this;}/*** 设置禁止协议列表*/public SecurityConfig setForbiddenSchemes(List<String> schemes) {if (schemes != null) {mForbiddenSchemes = schemes;}return this;}}// ========== JavaScript 桥接 ==========/*** 添加 JavaScript 接口,以便页面调用* 注意:请确保接口安全,避免暴露敏感接口!* @param bridge 接口对象,需在方法上添加 @JavascriptInterface 注解* @param name 在 JavaScript 中使用的名称*/public void addJavascriptBridge(Object bridge, String name) {super.addJavascriptInterface(bridge, name);}
}

FullScreenHandler.java

/*** FullScreenHandler.java** 该类用于处理 WebView 全屏视频播放模式,* 通过接管 Activity 的 DecorView 添加/移除全屏自定义视图。** 使用说明:* 1. 由 EnhancedWebView 在初始化时传入 Activity 对象。* 2. 在 WebChromeClient 的 onShowCustomView() 和 onHideCustomView() 回调中调用本类的方法。* 3. 确保 Activity 的屏幕方向及系统 UI 状态在全屏与正常模式间切换。*/import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;public class FullScreenHandler {private Activity mActivity;private View mCustomView;private WebChromeClient.CustomViewCallback mCustomViewCallback;private int mOriginalSystemUiVisibility;private int mOriginalOrientation;/*** 构造函数,传入当前 Activity 对象* @param activity 当前 Activity*/public FullScreenHandler(Activity activity) {mActivity = activity;}/*** 进入全屏模式* @param webView 当前使用的 WebView 对象(用于退出时恢复显示)* @param customView 自定义的全屏视图(例如视频播放界面)* @param callback 全屏视图回调接口,当退出全屏时调用*/public void enterFullScreen(View webView, View customView, WebChromeClient.CustomViewCallback callback) {// 保存当前系统 UI 状态与屏幕方向mOriginalSystemUiVisibility = mActivity.getWindow().getDecorView().getSystemUiVisibility();mOriginalOrientation = mActivity.getRequestedOrientation();// 隐藏 WebViewwebView.setVisibility(View.GONE);// 添加全屏视图到 Activity 的 DecorViewViewGroup decorView = (ViewGroup) mActivity.getWindow().getDecorView();decorView.addView(customView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));mCustomView = customView;mCustomViewCallback = callback;// 设置全屏标志(隐藏状态栏、导航栏)mActivity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);}/*** 退出全屏模式,移除全屏视图并恢复之前的 UI 状态*/public void exitFullScreen() {if (mCustomView == null) {return;}// 从 DecorView 中移除全屏视图ViewGroup decorView = (ViewGroup) mActivity.getWindow().getDecorView();decorView.removeView(mCustomView);mCustomView = null;// 恢复之前的系统 UI 状态与屏幕方向mActivity.getWindow().getDecorView().setSystemUiVisibility(mOriginalSystemUiVisibility);mActivity.setRequestedOrientation(mOriginalOrientation);// 通知 WebView 全屏视图已被隐藏if (mCustomViewCallback != null) {mCustomViewCallback.onCustomViewHidden();}}/*** Activity onResume 时调用(扩展接口,如需恢复状态可添加代码)*/public void onResume() {// 可扩展代码,如重置全屏 UI 状态}/*** Activity onPause 时调用(扩展接口,如需暂停视频播放可添加代码)*/public void onPause() {// 可扩展代码}
}

使用示例

在 Activity 中使用上述组件示例代码如下:

// 在 Activity 的 onCreate 中构建 EnhancedWebView 实例
EnhancedWebView webView = new EnhancedWebView.Builder(this).addUrlWhitelist("^https://(.*\\.)?example\\.com/").setAllowSelfSignedCerts(false) // 生产环境建议设为 false.build();// 将 webView 添加到布局中,例如:
setContentView(webView);
webView.loadUrl("https://www.example.com");// 在 Activity onResume 中调用
@Override
protected void onResume() {super.onResume();webView.onResumeWebView();
}// 在 Activity onPause 中调用
@Override
protected void onPause() {webView.onPauseWebView();super.onPause();
}// 在 Activity onDestroy 中调用
@Override
protected void onDestroy() {webView.destroy();super.onDestroy();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 点击放大,图片预览效果

背景&#xff1a; 在使用vue框架element组件的背景下&#xff0c;我们对图片的展示需要点击放大(单张)&#xff1b;如果是多张图片&#xff0c;要支持左右滑动查看多张图片(多张)。 单张图片放大&#xff0c;el-image图片组件&#xff0c;或者原生的img标签。 多张图片放大&…

HTTP代理的全面解读:什么是HTTP代理?HTTP代理的工作原理

在互联网大潮中&#xff0c;每一个请求和返回数据的背后&#xff0c;都离不开传输协议的支持&#xff0c;而HTTP协议无疑是最熟悉的网络通信基础之一。当我们谈到HTTP代理时&#xff0c;它不仅让浏览网络变得更高效&#xff0c;也为数据采集以及全球性远程任务提供了解决方案。…

学习笔记--基于Sa-Token 实现Java项目单点登录+同端互斥检测

目录 同端互斥登录 单点登录SSO 架构选型 模式二: URL重定向传播 前后端分离 整体流程 准备工作 搭建客户端 搭建认证中心SSO Server 环境配置 开放认证接口 启动类 跨域处理 同端互斥登录 同端互斥登陆 模块 同端互斥登录指&#xff1a;同一类型设备上只允许单地…

本地生活服务APP开发,市场发展全新商业机遇

随着移动互联网的快速发展&#xff0c;人们的消费和生活习惯发生了巨大改变&#xff0c;本地生活服务市场迎来了发展爆发期&#xff01;从外卖、团购等&#xff0c;人们越来越依赖通过手机APP解决日常生活中的各种需求。对于企业而言&#xff0c;一款完善、多样、便捷的本地生活…

当科技业成为系统性压榨的绞肉机

深夜的硅谷办公室依然灯火通明&#xff0c;键盘敲击声此起彼伏。一位程序员在Slack上收到主管的紧急需求&#xff1a;“这个功能明早必须上线。”他苦笑一声&#xff0c;关掉手机里名为“缓解焦虑”的冥想App——这已是本周第三次被迫服用公司提供的“心灵解药”。此刻&#xf…

代码随想录算法训练营第五十六天 | 108.冗余连接 109.冗余连接II

108. 冗余连接 卡码网题目链接&#xff08;ACM模式&#xff09;(opens new window) 题目描述 有一个图&#xff0c;它是一棵树&#xff0c;他是拥有 n 个节点&#xff08;节点编号1到n&#xff09;和 n - 1 条边的连通无环无向图&#xff08;其实就是一个线形图&#xff09;…

什么是索引?为什么要使用B树作为索引数据结构?

MySQL的事务特性 1.原子性:原子性就是这个事件要么执行完,要么没执行,不会存在中间状态,与C中华那个加锁避免多线程竞争是一个道理; 2.一致性:保持事件的操作对象双方某数据之和是不变的,就以转账为例,A转给B100块,那么A的余额多100,B的余额就必须少100; 3.隔离性:隔离就是独…

pyqt5报错:qt.qpa.plugin: Could not find the Qt platform plugin “xcb“(已解决)

我在使用pyqt库的时候报错&#xff1a; qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in \ "/mnt/private_disk/anaconda3/envs/aot-manip/lib/python3.8/site-packages/PyQt5/Qt5/plugins/platforms" even though it was found. This ap…

AI大模型全攻略:原理 · 部署 · Prompt · 场景应用

🚀 AI大模型全攻略:原理 部署 Prompt 场景应用 本文从基础原理到实践部署,再到 Prompt 工程与典型应用案例,全方位解析 AI 大模型的学习路径与使用方法,适合开发者、产品经理、技术爱好者等不同背景读者。 🧠 一、什么是 AI 大模型? AI 大模型(Large Language Mo…

2024年MathorCup数学建模D题量子计算在矿山设备配置及运营中的建模应用解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 D题 量子计算在矿山设备配置及运营中的建模应用 原题再现&#xff1a; 随着智能技术的发展&#xff0c;智慧矿山的概念越来越受到重视。越来越多的设备供应商正在向智慧矿山整体解决方案供应商转型&#xff0c;是否具备提供整体解…

Flink 流处理框架的核心特性

文章目录 事件时间支持Flink状态编程一、状态的类型1. 托管状态&#xff08;Managed State&#xff09;2. 原始状态&#xff08;Raw State&#xff09; 二、状态的管理和容错 Flink端到端的一致性1、检查点机制2、幂等3、事务 水位线窗口操作1、窗口类型2、窗口操作的时间语义 …

交换机(access端口)

任务&#xff1a;对access有更深入的理解 通过网盘分享的文件&#xff1a;交换机&#xff08;access&#xff09;.zip 链接: https://pan.baidu.com/s/1cMC6Na_1PLo6zOHazFplQQ?pwd23a5 提取码: 23a5 SW1 <Huawei>sys [Huawei]dis vlan The total number of vlans …

《鸟哥的Linux私房菜基础篇》---5 vim 程序编辑器

目录 一、vim程序编辑器的简介 二、命令模式快捷键&#xff08;默认模式&#xff09; 1、光标移动 2、编辑操作 3、搜索与替换 三、插入模式快捷键 四、底行模式快捷键&#xff08;按&#xff1a;进入&#xff09; 五、高级技巧 1、分屏操作 2、多文件编辑 3、可视化…

AI大白话(四):自然语言处理——AI是如何理解和生成人类语言的?

🌟引言: 专栏:《AI大白话》 AI大白话(一):5分钟了解AI到底是什么? AI大白话(二):机器学习——AI是怎么“学习“的? AI大白话(三):深度学习——AI的‘大脑‘是如何构建的? 大家好!欢迎回到"AI大白话"系列。前面我们聊了AI的基本概念、机器学习的原理…

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统&#xff0c;扩展卡尔曼滤波 则扩展到了非线性系统&#xff0c;核心原理就是将非线性系统线性化&#xff0c;主要用的的知识点是 泰勒展开&#xff08;我另外一篇文章的链接&#xff09;&#xff0c;如下是泰勒展开的公式…

安装unsloth

我在llamafactory微调LLM&#xff0c;简单测了一些&#xff08;很不精准&#xff09;&#xff0c;加速方法中unsloth比flash_attention速度快了40%&#xff0c;显存占用减少15%&#xff1b; 创建虚拟环境&#xff1a;conda create -n env_name python3.10, 然后conda activate…

关于 51 单片机显示多个数码管时出现残影

残影现象&#xff1a; 出现残影代码&#xff1a; #include <REGX52.H> #include <INTRINS.H> void Delayxms(unsigned int x) //11.0592MHz {while(x){unsigned char i, j;_nop_();i 2;j 199; do{while (--j);} while (--i);x--;} } void DisplayDigitalNumb…

STM32学习笔记之常用外设接口(原理篇)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

InnoDB 引擎核心知识点

InnoDB 引擎核心知识点 6.1 逻辑存储结构 表空间&#xff08;Tablespace&#xff09;&#xff1a;所有数据逻辑上存储在一个表空间中&#xff0c;物理上可能由多个文件组成。段&#xff08;Segment&#xff09;&#xff1a;分为数据段&#xff08;B树叶子节点&#xff09;、索引…

深度学习 Deep Learning 第9章 卷积网络 CNN

深度学习 Deep Learning 第9章 卷积网络 章节概述 本章深入探讨了卷积网络的原理、变体及其在深度学习中的应用。卷积网络通过卷积操作实现了参数共享和稀疏连接&#xff0c;显著提高了模型的效率和性能。本章首先介绍了卷积操作的基本形式及其在不同数据维度上的应用&#x…