Android学习总结-GetX库常见问题和解决方案
GetX库的常见问题
-
路由管理:
Get.to()
后页面不跳转或卡顿?- 问题: 明明调用了
Get.to(NextPage())
,但页面没反应,或者感觉有延迟卡顿。这可能发生在较复杂的页面树或低端设备上。 - 原因:
- 最常见:
Snackbar
,Dialog
,BottomSheet
没有关闭。 GetX 的路由管理依赖于它内部的GetOverlay
。任何未关闭的Snackbar
/Dialog
/BottomSheet
都会阻塞新的路由导航。这是 极其常见 的原因。 - Widget 构建耗时过长(特别是
build()
方法中做了耗时的同步操作),导致框架忙于构建而无法及时响应路由请求。
- 最常见:
- 解决方案:
- 务必检查并关闭所有
Snackbar
/Dialog
/BottomSheet
! 在尝试Get.to()
之前,确保所有临时覆盖层都已消失。可以使用Get.back()
手动关闭(如果确认有打开),或重构代码确保它们在使用后及时关闭。 - 优化页面
build()
方法: 避免在build()
中做大量计算、耗时同步 IO 操作。将耗时逻辑移到异步方法或使用FutureBuilder
/StreamBuilder
。确保build()
尽可能快速返回。 - (特定场景) 尝试
Get.offAll()
: 如果想强制关闭之前的页面栈(包括潜在的临时覆盖层),可以尝试Get.offAll(NextPage())
,但这会清空历史栈,慎用。 - 确认
GetMaterialApp
: 确保应用的顶层入口使用了GetMaterialApp
,而不是常规的MaterialApp
,因为GetMaterialApp
集成了 GetX 所需的路由管理和依赖注入基础设施。
- 务必检查并关闭所有
- 问题: 明明调用了
-
状态更新失效:
Obx
/GetX
/GetBuilder
里的 UI 不刷新?- 问题: 修改了
Rx
变量或更新了GetBuilder
的id
,但对应的 Widget 没有更新。 - 原因和解决方案:
- **变量非
Rx
/ 未使用.obs:**
Obx和
GetX只能监听
Rx类型(如
RxInt,
RxString,
Rxn,
RxList)或其扩展变量(使用
.obs创建的变量)。确保你想要被监听的变量确实是
Rx` 类型。 - 忘记给
GetBuilder
设置或更新id
:GetBuilder
默认监听其关联 Controller 的update()
方法。如果你只想更新特定GetBuilder
Widget,需要在调用update()
时传递对应的id
。常见错误:- 在
GetBuilder
里忘记了设置id
(id: myId
)。 - 在 Controller 里调用
update(specificId)
,但GetBuilder
设置的id
和传递的specificId
对不上。 - 根本没有在 Controller 里调用
update()
或update(myId)
。改变数据后必须调用!
- 在
- (
Obx
/GetX
) 在监听范围外访问变量:
正确方式:Obx(() {// 错误!someString 是在 Obx 外部访问的,不会触发重建。必须通过 .value 读取 RxObject!return Text(controller.someString); });
Obx(() => Text(controller.someString.value)); // 或更简洁的 .obs 方式 final someString = 'Hello'.obs; Obx(() => Text(someString())); // 使用 () 直接访问值
- 类成员
Rx
变量被整个替换:class MyController extends GetxController {var myList = [1, 2, 3].obs; } // 错误:整个 list 替换,原始 RxList 丢失,监听失效 controller.myList = [4, 5, 6]; // 正确:使用 RxList 的方法或属性修改(保证监听器在同一个对象上) controller.myList.value = [4, 5, 6]; // 或 controller.myList.assignAll([4, 5, 6]); controller.myList.add(4); // 修改单个元素
- **
Obx
监听了一个整个变化的 Controller 实例 (比较少见):** 确保用于访问 Controller 的Get.find<MyController>()
是在GetBuilder
或Get.put()
之后,且获取到的是持久化的同一个实例。 - 变量值改变前后相同 (原始类型):
RxInt(5)
再次设置为5
,Obx
不会触发重建,因为值未变。
- **变量非
- 问题: 修改了
-
内存泄漏/控制器未释放:
- 问题: 页面销毁后,关联的
GetXController
没有被自动回收,占用内存。 - 原因:
GetX
(Obx
,GetX
widget) 和GetBuilder
默认会自动管理它们所依赖的 Controller 的生命周期。它们被创建时绑定到当前路由,当页面被路由系统正常移除时(Get.back()
),会自动销毁绑定到该页面的 Controller。- 手动
Get.put()
未指定permanent
: true 或 tag: 如果在GetMaterialApp
之前或在一个不会被回收的全局地方使用Get.put(MyController())
,这个 Controller 会成为单例且不会被自动销毁。permanent: true
的 Controller 也需要手动处理。 - **使用
Get.lazyPut
和fenix: true
**:fenix: true
会在 Controller 被删除后重新创建一份实例缓存,下次find
时直接提供缓存而非重新调用工厂函数。如果不希望缓存,设为false
。 - 引用了其他难以释放的资源: Controller 中如果持有
Disposable
的对象(如StreamSubscription
,AnimationController
),但没有在onClose()
中释放它们。
- 解决方案:
- 优先使用
Bindings
和默认绑定: 使用GetPage
定义路由时,关联Bindings
,或者在页面 Widget 的build
方法中使用Get.put()
/Get.lazyPut()
。GetX 路由系统会在页面销毁时自动清理这些在页面范围内创建的 Controller (前提是使用了它管理的路由Get.to()
/Get.offXXX()
)。GetBuilder
/Obx
也是同样。 - 谨慎对待全局 Controller: 如果确实需要全局、持久化的 Controller(比如用户认证状态),使用
Get.put(MyController(), permanent: true)
。但要意识到需要自己管理其生命周期,或者在应用退出时调用Get.delete<MyController>()
手动销毁。 - **务必实现
onClose()
**:在你的GetxController
中必须重写onClose()
方法,并在其中释放它占有的所有资源:@override void onClose() {myStreamSubscription?.cancel(); // 取消Stream监听myAnimationController?.dispose(); // 销毁动画控制器myTimer?.cancel(); // 取消定时器super.onClose(); }
- 理解
fenix
: 根据业务需求谨慎设置Get.lazyPut(..., fenix: true/false)
。需要频繁创建销毁又想避免工厂函数开销用true
;严格避免内存占用且允许创建开销用false
。 - 手动调用
Get.delete()
: 对于特殊场景或permanent: true
的 Controller,在确定不再需要时(如用户退出登录),调用Get.delete<MyController>(force: true)
强制立即销毁并触发onClose()
。
- 优先使用
- 问题: 页面销毁后,关联的
-
依赖找不到:
Get.find()
抛出异常找不到实例?- 问题:
Get.find<MyController>()
抛出错误,提示没有找到MyController
。 - 原因和解决方案:
- 先
put
/lazyPut
后find
: 调用Get.find()
之前,必须先在同级或上级的 widget/controller/binding 中调用Get.put()
或Get.lazyPut()
注入该类型的实例。顺序错误最常见。 -
lazyPut
导致初次find
失败?Get.lazyPut
只是注册了工厂函数,第一次调用Get.find()
时才会真正创建。确保find
发生在lazyPut
注册之后。如果是在initState
中使用Get.find()
,并且依赖关系复杂,可能需要考虑put
或调整初始化顺序。 -
tag
不匹配: 如果在Get.put(MyController(), tag: 'special')
时指定了 tag,那么在Get.find<MyController>(tag: 'special')
时也必须带上相同的 tag 才能找到。确保两边 tag 一致或都不使用。 - 作用域隔离: 使用
Get.create
或特定tag
创建的实例,需要精确匹配查找。 - **
Binding
未加载:** 使用路由时,确认GetPage
绑定了正确的Binding
。在页面构建前,Binding
需要负责put
控制器。
- 先
- 问题:
-
混淆
GetBuilder
,GetX
,Obx
:- 问题: 不清楚何时该用哪个,导致性能不佳或代码冗余。
- 解决方案 - 简洁比较:
- **
GetBuilder
:**- 控制精度: 需要手动通过
update([id])
或id
更新特定部分 UI。 - 依赖: 强绑定一个具体的
GetxController
(通过Get.find
或传入)。 - 轻量: 不依赖
Rx
类型,只依赖update()
调用。 - 适用场景: 需要精细控制刷新范围 (仅更新列表中特定项)、对
Rx
无需求、逻辑更集中于某个具体 Controller。
- 控制精度: 需要手动通过
- **
Obx
/GetX
(基本等价,GetX
可带参数):**- 响应式: 自动监听内部使用的所有
Rx
变量 (使用.value
或()
)。当 任一 被监听的Rx
变量变化时,builder
函数被调用重建整个Obx
包裹的 Widget。 - 便捷: 不需要手动
update()
或指定id
。 - 依赖: 隐式依赖任何在
builder
函数内被访问的Rx
变量的控制器(通过Get.find
或作用域查找)。 - 注意范围:
builder
函数应尽可能简洁,避免包含与响应变量无关的、耗时或大型组件。 - 适用场景: 监听来自可能多个 Controller 的少量
Rx
变量的组合,追求代码简洁度,组件子树相对较小。
- 响应式: 自动监听内部使用的所有
- **
- 选择建议:
- 对
Rx
变量变化后的 UI 更新:**优先Obx
** (简洁)。 - 需要精细控制刷新粒度或不想用
Rx
:选择GetBuilder
。 - 需要为部分子 Widget 提供一个单独的 Controller 实例:**选择
GetX
** (结合Get.create
)。 - 避免大范围
Obx
: 尽量不要在整页的根部直接Obx(()) => Scaffold(...)
。包裹的范围越大,内部任何Rx
变量变化都会导致重建整个页面。应根据状态变化的局部性,用多个小的Obx
或GetBuilder
更精细地包裹子组件。
- 对
场景解析
1. 状态管理相关
真题:在一个复杂的电商应用中,如何使用 GetX 管理商品列表的状态(如加载、刷新、分页等),并确保性能优化?
考察点:对 GetX 状态管理的深入理解和在复杂场景下的应用能力,以及性能优化的意识。
解答思路:
- 创建一个商品列表控制器,使用
Rx
变量管理列表数据和加载状态。 - 封装加载、刷新和分页的逻辑在控制器中。
- 使用
Obx
监听列表数据的变化,实现 UI 的响应式更新。 - 合理使用
GetBuilder
手动控制更新范围,避免不必要的 UI 重绘。
示例代码:
import 'package:flutter/material.dart';
import 'package:get/get.dart';class ProductListController extends GetxController {var products = <Product>[].obs;var isLoading = false.obs;var currentPage = 1;Future<void> loadProducts() async {isLoading.value = true;try {// 模拟网络请求获取商品数据await Future.delayed(Duration(seconds: 1));products.addAll([Product(name: 'Product 1'),Product(name: 'Product 2'),// 更多商品...]);} finally {isLoading.value = false;}}Future<void> refreshProducts() async {products.clear();currentPage = 1;await loadProducts();}Future<void> loadMoreProducts() async {if (isLoading.value) return;isLoading.value = true;currentPage++;try {// 模拟加载更多商品数据await Future.delayed(Duration(seconds: 1));products.addAll([Product(name: 'Product ${products.length + 1}'),Product(name: 'Product ${products.length + 2}'),// 更多商品...]);} finally {isLoading.value = false;}}
}class Product {final String name;Product({required this.name});
}class ProductListPage extends StatelessWidget {final ProductListController controller = Get.put(ProductListController());@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Product List')),body: Obx(() {if (controller.isLoading.value) {return Center(child: CircularProgressIndicator());}return RefreshIndicator(onRefresh: controller.refreshProducts,child: ListView.builder(itemCount: controller.products.length,itemBuilder: (context, index) {return ListTile(title: Text(controller.products[index].name),);},onEndReached: controller.loadMoreProducts,),);}),);}
}
讲解:
ProductListController
负责管理商品列表的状态和逻辑,使用Rx
变量products
和isLoading
实现响应式更新。loadProducts
方法用于首次加载商品数据,refreshProducts
方法用于刷新列表,loadMoreProducts
方法用于分页加载更多商品。ProductListPage
使用Obx
监听products
和isLoading
的变化,根据状态显示不同的 UI。
2. 路由管理相关
真题:如何使用 GetX 实现一个带有底部导航栏的多页面应用,并且支持页面间的传参和返回值?
考察点:对 GetX 路由管理的掌握,包括路由跳转、参数传递和返回值处理,以及底部导航栏的实现。
解答思路:
- 使用
GetMaterialApp
和GetPage
定义路由表。 - 创建底部导航栏,通过
Get.toNamed
进行路由跳转。 - 在跳转时使用
arguments
参数传递数据,使用Get.back(result: ...)
返回数据。
示例代码:
import 'package:flutter/material.dart';
import 'package:get/get.dart';void main() {runApp(GetMaterialApp(initialRoute: '/home',getPages: [GetPage(name: '/home', page: () => HomePage()),GetPage(name: '/detail', page: () => DetailPage()),],));
}class HomePage extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Home Page')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [ElevatedButton(onPressed: () async {final result = await Get.toNamed('/detail', arguments: {'message': 'Hello from Home'});if (result != null) {print('Received result: $result');}},child: Text('Go to Detail Page'),),],),),bottomNavigationBar: BottomNavigationBar(items: [BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),BottomNavigationBarItem(icon: Icon(Icons.details), label: 'Detail'),],onTap: (index) {switch (index) {case 0:Get.toNamed('/home');break;case 1:Get.toNamed('/detail');break;}},),);}
}class DetailPage extends StatelessWidget {@overrideWidget build(BuildContext context) {final args = Get.arguments as Map<String, dynamic>;return Scaffold(appBar: AppBar(title: Text('Detail Page')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text('Received message: ${args['message']}'),ElevatedButton(onPressed: () {Get.back(result: 'Response from Detail');},child: Text('Go back with result'),),],),),);}
}
讲解:
GetMaterialApp
定义了路由表,包含/home
和/detail
两个页面。HomePage
中的按钮点击时使用Get.toNamed
跳转到/detail
页面,并传递参数。DetailPage
中使用Get.arguments
获取传递的参数,使用Get.back(result: ...)
返回数据给HomePage
。- 底部导航栏通过
onTap
回调实现页面切换。
3. 依赖注入相关
真题:在一个 Flutter 应用中,有多个服务类需要管理,如何使用 GetX 进行依赖注入,并且确保服务类的单例性?
考察点:对 GetX 依赖注入的理解,以及单例模式的实现。
解答思路:
- 使用
Get.singleton
方法注册服务类,确保其单例性。 - 在需要使用服务类的地方,使用
Get.find
获取服务类的实例。
示例代码:
import 'package:flutter/material.dart';
import 'package:get/get.dart';class UserService {String getUserInfo() {return 'User information';}
}class OrderService {String getOrderInfo() {return 'Order information';}
}void main() {Get.singleton(UserService());Get.singleton(OrderService());runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {final userService = Get.find<UserService>();final orderService = Get.find<OrderService>();return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('Dependency Injection')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text(userService.getUserInfo()),Text(orderService.getOrderInfo()),],),),),);}
}
讲解:
- 在
main
函数中使用Get.singleton
注册UserService
和OrderService
,确保它们是单例的。 - 在
MyApp
中使用Get.find
获取服务类的实例,并调用其方法。
难点解决
状态管理方面
UI 未更新问题:
有一次我在项目里使用 Obx
和 GetBuilder
管理状态,状态改变后 UI 却没更新。经过排查,发现是因为 Rx
变量没正确声明为可观察对象,还有 GetBuilder
没调用 update
方法,以及控制器实例未正确初始化或注入。
为了解决这个问题,我仔细检查代码,确保使用 Rx
或 .obs
声明变量。比如声明 var counter = 0.obs;
。对于 GetBuilder
,我在状态改变后调用 update
方法,像在控制器里写:
class MyController extends GetxController {int count = 0;void increment() {count++;update();}
}
同时,我也检查了控制器是否通过 Get.put
正确注入,确保在 main
函数里正确初始化:
void main() {Get.put(MyController());runApp(MyApp());
}
2. 多个控制器状态相互影响
在一个复杂项目中,不同控制器的状态相互干扰,导致 UI 显示异常。分析后发现是控制器之间存在不合理的依赖关系,状态更新逻辑也比较混乱。
为了克服这个问题,我遵循单一职责原则,保证每个控制器只管理自己的状态。要是需要在控制器之间共享状态,我就使用依赖注入获取其他控制器的实例,并且在合适的时机更新状态。例如:
class ControllerA extends GetxController {var valueA = 0.obs;
}class ControllerB extends GetxController {final ControllerA controllerA = Get.find();void updateValueA() {controllerA.valueA.value++;}
}
路由管理方面
- 路由跳转失败:在使用
Get.to
或Get.toNamed
进行路由跳转时,页面没切换。经过检查,发现问题出在路由表未正确配置、路由名称拼写错误或者目标页面未正确注册。
我先检查GetMaterialApp
中的getPages
配置是否正确,确保路由表准确无误:
void main() {runApp(GetMaterialApp(initialRoute: '/',getPages: [GetPage(name: '/', page: () => HomePage()),GetPage(name: '/detail', page: () => DetailPage()),],));
}
同时,我仔细核对路由名称的拼写,使用 Get.toNamed
时传入正确的名称,像 Get.toNamed('/detail');
。
- 嵌套路由问题:使用嵌套路由时,页面显示异常或者无法正常切换。这是由于嵌套路由的
navigatorKey
配置错误以及路由逻辑混乱导致的。
为了解决这个问题,我正确使用Get.nestedKey
来管理嵌套路由的Navigator
实例。例如:
class HomePage extends StatelessWidget {final GlobalKey<NavigatorState> navigatorKey = Get.nestedKey(1);@overrideWidget build(BuildContext context) {return Scaffold(body: Navigator(key: navigatorKey,initialRoute: '/home/sub1',onGenerateRoute: (settings) {// 路由生成逻辑},),);}
}
并且,我仔细梳理嵌套路由的逻辑,避免出现循环路由或错误的路由跳转。
依赖注入方面
- 依赖对象未正确注入:使用
Get.find
获取依赖对象时抛出异常,原因是依赖对象未通过Get.put
或其他方式注册,或者注入时机不正确。
为了解决这个问题,我在使用依赖对象之前,确保已经正确注册。例如在main
函数里:
void main() {Get.put(MyService());runApp(MyApp());
}
同时,我检查注入时机,保证在需要使用依赖对象之前已经完成注入。
- 单例模式问题:使用
Get.singleton
注入依赖对象时,未达到单例效果,这是因为多次调用Get.singleton
并传入不同的实例。
为了避免这种情况,我确保只调用一次Get.singleton
来注入单例对象,不在其他地方重复调用。例如:
void main() {Get.singleton(MyService());runApp(MyApp());
}
相关文章:
Android学习总结-GetX库常见问题和解决方案
GetX库的常见问题 路由管理:Get.to() 后页面不跳转或卡顿? 问题: 明明调用了 Get.to(NextPage()),但页面没反应,或者感觉有延迟卡顿。这可能发生在较复杂的页面树或低端设备上。原因: …...

|从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面
🐑 |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 🐑 文章目录 🐑 |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 🐑♈前言♈♈调取Deepseek大模型♈♒准备工作♒♒调用API♒ ♈将模型嵌入到ui界面中♈♈…...
React 中 HTML 插入的全场景实践与安全指南
在 React 开发过程中,我们常常会遇到需要插入 HTML 内容的场景。比如将服务端返回的富文本渲染到页面,还有处理复杂的 UI 结构,正确的 HTML 插入方式不仅影响页面展示效果,更关乎应用的安全性。 本文将详细探讨 React 中插入 HTM…...
一键更新依赖全指南:Flutter、Node.js、Kotlin、Java、Go、Python 等主流语言全覆盖
在现代软件开发中,依赖项扮演着至关重要的角色。保持依赖的最新状态不仅可以获得新特性和性能优化,还能修复已知安全漏洞。但在不同语言和框架中,依赖管理的方式差异很大。本篇文章将系统性讲解如何在各主流语言中实现“一键更新依赖”。 &am…...
Java异步编程难题拆解技术
异步编程基础与核心概念 异步编程模型与同步模型的对比 Java中异步编程的常见场景(IO密集型、高并发任务等) 关键术语:Future、CompletableFuture、回调、事件循环 Java异步编程的核心API与框架 Future接口的局限性及基本用法 Completable…...
NoSQL 之 Redis 配置与优化
目录 一、 前置知识点 1. 关系数据库与非关系型数据库 (1)关系型数据库 (2)非关系型数据库 (3)非关系型数据库产生背景 (4)两者对比 2. Redis 基础 (1࿰…...

pikachu靶场通关笔记20 SQL注入03-搜索型注入(GET)
目录 一、SQL注入 二、搜索型注入 三、源码分析 1、渗透思路1 2、渗透思路2 四、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入百分号单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取…...

产品笔试专业名词梳理
目录 产品常识 四种常见广告形式 贴片广告 中插广告 信息流广告 横幅广告 BAT和TMD BAT TMD 付费渗透率 蓝海市场、红海市场 蓝海市场 红海市场 竞品研究 SWOT分析 SWOT分析的核心目的: SWOT分析的优点: SWOT分析的局限与注意事项&…...

【前端】es6相关,柯里化
0. 严格模式 严格模式的概念从ES6引进。通过严格模式,可以在函数内部选择进行较为严格的全局或局部的错误条件检测。 MDN中严格模式的描述 严格模式通过抛出错误来消除了一些原有静默错误严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时…...

51单片机基础部分——矩阵按键检测
前言 上一节,我们说到了独立按键的检测以及使用,但是独立按键每一个按键都要对应一个IO口进行检测,在一些需要多按键的情况下,使用过多的独立按键会过多的占用单片机的IO资源,为了解决这个问题的出现,我们…...
onSaveInstanceState() 和 ViewModel 在数据保存能力差异
一、设计目标差异 维度onSaveInstanceState()ViewModel核心目的保存 瞬态 UI 状态(如用户输入、滚动位置),应对进程意外终止或配置变更。管理 业务逻辑相关数据,在配置变更时保留数据࿰…...

SpringBoot2.3.1集成Knife4j接口文档
首先要查看项目中pom文件里面有没有swagger和knife4j的依赖,如果有的话删除,加入以下依赖 <!-- swagger --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</…...
Java Fork/Join框架:三大核心组件深度解析
ForkJoinTask、ForkJoinWorkerThread 和 ForkJoinPool 构成了 Java 中 Fork/Join 框架的三个核心组件,它们之间形成了紧密的协作关系,共同提供了高效的并行计算能力。 三者关系概述 ForkJoinPool:执行环境,管理工作线程和任务调…...
【envoy】-1.安装与下载源码
1.安装 建议使用ubuntu2004,对glibc有要求。上个ti子更快。 wget -O- https://apt.envoyproxy.io/signing.key | sudo gpg --dearmor -o /etc/apt/keyrings/envoy-keyring.gpg $ echo "deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/envo…...
B站的视频怎么下载下来——Best Video下载器
B站(哔哩哔哩)作为国内最受欢迎的视频平台之一,聚集了无数优质内容:动漫番剧、游戏实况、学习课程、纪录片、Vlog、鬼畜剪辑……总有那么些视频让人想反复观看、离线观看,甚至剪辑创作。 但你是否遇到过这样的烦恼&am…...
Mysql-定时删除数据库中的验证码
Moudle 1 使用调度器定时删除事件 数据库实现验证码自动删除的解决方案 -- 删除旧事件(如果存在) DROP EVENT IF EXISTS delete_expired_captchas;-- 创建新事件(每分钟执行一次) CREATE EVENT delete_expired_captchas ON SCHE…...

容器安全最佳实践:云原生环境下的零信任架构实施
📋 目录 引言:容器安全的重要性零信任架构基础理论云原生环境的安全挑战容器安全威胁模型分析零信任架构在容器环境中的实施关键技术组件与工具安全策略与最佳实践监控与响应机制案例研究与实施路径未来发展趋势 引言 随着容器技术和云原生架构的快速…...

[BIOS]VSCode zx-6000 编译问题
前提:Python 3.6.6及以上版本安装成功,Python 3.6.6路径加到了环境变量# DEVITS工具包准备好 问题:添加环境变量 1:出现环境变量错误,“py -3” is not installed or added to environment variables #先在C:\Windows里…...
MySQL连接报SSL错误
问题(cmd) C:\Users>mysql -h xx.xx.xx.xx -u root -p Enter password: ERROR 2026 (HY000): SSL connection error: error:0A000102:SSL routines::unsupported protocol 解决方案 1. 临时禁用 SSL 连接(不推荐生产环境使用࿰…...
在WPF项目中集成Python:Python.NET深度实战指南
随着Python在数据分析、机器学习、自动化等领域的广泛应用,越来越多的.NET开发者希望在WPF桌面应用中调用Python代码,实现两者优势互补。Python.NET(pythonnet)作为连接.NET与Python的桥梁,提供了强大的跨语言调用能力…...
Nuxt.js 布局系统详解:构建可复用页面框架
Nuxt.js 是一个基于 Vue.js 的强大框架,旨在简化开发流程并提高项目的可维护性。布局系统是 Nuxt.js 项目结构中的一个重要组成部分,它位于 layouts 目录下,帮助开发者实现页面间的统一风格和结构复用。 什么是 Nuxt.js 布局系统 Nuxt.js 提…...

CICD实战(二)-----gitlab的安装与配置
1、安装gitlab所需要的依赖包与工具 sudo yum install wget net-tools sudo yum install curl policycoreutils openssh-server openssh-clients postfix -y 2、配置清华源 vim /etc/yum.repo.d/gitlab-ce.repo[gitlab-ce] namegitlab-ce baseurlhttp://mirrors.tuna.tsin…...

[GitHub] 优秀开源项目
1 工具类 1.1 桌面猫咪互动 BongoCat...

Linux中su与sudo命令的区别:权限管理的关键差异解析
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析LLP (二)
低层协议(Low Level Protocol, LLP)详细解析 1. 低层协议(Low Level Protocol, LLP)核心特性 包基础 :基于字节的包协议,支持 短包 (32位)和 长包 (可变长度࿰…...

第4天:RNN应用(心脏病预测)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标 具体实现 (一)环境 语言环境:Python 3.10 编 译 器: PyCharm 框 架: Pytorch (二)具体步骤…...
Python训练day40
知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中 展平操作:除第一个维度batchsize外全部展平 dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业:仔细学习下测试和训练…...
湖北理元理律师事务所:债务优化中的民生保障实践
在债务纠纷数量年增21%(2023年最高人民法院数据)的背景下,法律服务机构如何平衡债务清偿与民生保障,成为行业重要课题。湖北理元理律师事务所通过“法律金融心理”三维服务模式,探索出一条可持续的债务化解路径。 一、…...
Vue-Todo-list 案例
一、前言 在前端开发中,Todo List(待办事项列表) 是一个非常经典的入门项目。它涵盖了组件化思想、数据绑定、事件处理、本地存储等核心知识点,非常适合用来练习 Vue 的基本用法。 本文将带你一步步实现一个功能完整的 Vue Todo…...

GIC700概述
GIC-700是用于处理外设与处理器核之间,以及核与核之间中断的通用中断控制器。GIC-700支持分布式微体系结构,其中包含用于提供灵活GIC实现的几个独立块。 GIC700支持GICv3、GICv3.1、GICv4.1架构。 该微体系结构规模可从单核到互联多chip环境࿰…...