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.pswp.cn/pingmian/73370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73370.shtml
英文地址,請注明出處:http://en.pswp.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…