2025 最新flutter面试总结
目录
1.Dart是值传递还是引用传递?
2.Flutter 是单引擎还是双引擎
3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别?
4.简述Dart语音特性
6、Dart 是不是单线程模型?是如何运行的?
7. 解释 Stateful Widget Lifecycle ?
8.Dart的事件循环的运行遵循以下规则
9. Flutter 是如何实现原生性能和体验的?
10.那么在Dart中如何让你的代码异步执行呢?
11.说一下 Future 和 Future队列 ?
12. 什么是 Flutter tree shaking
13.Future和 Stream Isolate?
14. Spacer 小部件是什么?
15.在flutter里streams是什么?有几种streams?有什么场景用到它?
16. hot restart 和 hot reload 之间的区别是什么?
17.Stream 有哪两种订阅模式?分别是怎么调用的?
18. 为什么构建(build)方法在 State 上而不是在 StatefulWidget 上?
19.什么是StatelessWidget和StatefullWidget?他们之间的区别是什么?
20. 请解释InheritedWidget是什么,并说明它在状态管理中的作用。
21. Provider与其他状态管理解决方案有什么不同?
22. 简述下Bloc模式是什么,以及它的工作原理。
23. 什么是Flutter中的异步编程?有哪些常用的异步编程模式?
24. Flutter中的渲染对象模型(Render Object Model)是什么?他与Widget树有何区别?
25.待补充中...
谢谢大家!!!
1.Dart是值传递还是引用传递?
dart是值传递。
每次调用函数,传递过去的都是对象的内存地址,而不是这个对象的赋值。
2.Flutter 是单引擎还是双引擎
关于使用多个
FlutterEngine
还是单个FlutterEngine
,这实际上取决于你的具体需求和应用场景。1.用单个FlutterEngine来管理多个入口可能是有利的。这种方式可以减少Flutter引擎的创建和销毁次数,从而提高性能并减少资源消耗。尤其是在Flutter页面之间的切换较为频繁时,使用单个FlutterEngine可以避免每次切换时都重新创建Flutter引擎,从而提高应用的响应速度和用户体验。不过,这也可能带来一些复杂性,比如在处理不同页面的生命周期和状态管理时可能需要更多的工作。
2.使用多个FlutterEngine:另一方面,如果你的应用需要在不同的原生页面或视图中嵌入多个独立的Flutter视图,并且这些视图之间需要相互隔离或者具有不同的生命周期,那么使用多个FlutterEngine可能更为合适。这样可以确保每个Flutter视图都有其自己的引擎实例,从而避免潜在的状态冲突和生命周期问题。然而,这也可能带来更高的资源消耗和性能开销。
3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别?
在 Flutter 中,StatelessWidget 和 StatefulWidget 是两种基本的 Widget 类型,它们的主要区别在于状态管理和如何处理 UI 更新。以下是它们的详细比较:
StatelessWidget
定义:
StatelessWidget 是一种不可变的 Widget,其状态在创建后不会改变。它们只依赖于构造函数中的参数来构建 UI。
特点:
不维护任何内部状态。
适合用于显示静态内容或简单的 UI 结构。
在需要更新 UI 时,必须重新创建该 Widget 的实例。
使用示例:
class MyStatelessWidget extends StatelessWidget {final String title;MyStatelessWidget({required this.title});@overrideWidget build(BuildContext context) {return Text(title);}
}
StatefulWidget
定义:
StatefulWidget 是一种可变的 Widget,可以在其生命周期内维护状态。它可以响应用户输入或其他事件并更新 UI。
特点:
具有一个可变的状态(通过 State 类管理)。
当状态发生变化时,通过调用 setState() 方法来通知 Flutter 更新 UI。
适合用于需要动态更新的内容,如表单、动画等。
使用示例:
class MyStatefulWidget extends StatefulWidget {@override_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}class _MyStatefulWidgetState extends State<MyStatefulWidget> {int _counter = 0;void _incrementCounter() {setState(() {_counter++;});}@overrideWidget build(BuildContext context) {return Column(children: [Text('Counter: $_counter'),ElevatedButton(onPressed: _incrementCounter,child: Text('Increment'),),],);}
}
状态管理:
StatelessWidget 不维护任何状态,适合静态内容。
StatefulWidget 可以维护内部状态,适合动态内容。
更新机制:
StatelessWidget 需要重新创建实例来更新 UI。
StatefulWidget 通过 setState() 方法来更新 UI。
根据应用的需求,开发者可以选择使用 StatelessWidget 或 StatefulWidget 来构建相应的界面。
4.简述Dart语音特性
在Dart中,一切都是对象,所有的对象都是继承自Object
Dart是强类型语言,但可以用var或 dynamic来声明一个变量,Dart会自动推断其数据类型,dynamic类似c#没有赋初值的变量都会有默认值null
Dart支持顶层方法,如main方法,可以在方法内部创建方法
Dart支持顶层变量,也支持类变量或对象变量
Dart没有public protected private等关键字,如果某个变量以下划线(_)开头,代表这个变量在库中是私有的
5. Navigator 是什么?在 Flutter 中 Routes 是什么?
在 Flutter 中,Navigator 和 Routes 是用于管理应用导航和页面切换的核心组件。以下是它们的详细解释:
Navigator
定义:Navigator 是一个 Widget,用于在 Flutter 应用中管理页面的堆栈。它可以通过推送(push)新页面和弹出(pop)当前页面来实现页面的切换。
功能:
页面堆栈管理:Navigator 维护一个页面堆栈,用户可以在不同页面之间导航。
动画效果:Navigator 提供了默认的页面切换动画,可以通过自定义的路由实现更复杂的动画效果。
使用示例:
Navigator.push(context,MaterialPageRoute(builder: (context) => SecondPage()),
);
Routes
定义:Routes 是指应用中的不同页面或屏幕。每个页面都可以通过一个唯一的字符串标识。
类型:
命名路由:Flutter 支持命名路由,可以通过一个字符串直接引用一个路由,而不是创建一个新的 MaterialPageRoute 实例。
默认路由:可以在 MaterialApp 的 routes 参数中定义应用的所有路由。
使用示例:
MaterialApp(initialRoute: '/',routes: {'/': (context) => HomePage(),'/second': (context) => SecondPage(),},
);// 导航到命名路由
Navigator.pushNamed(context, '/second');
Navigator
是用于管理页面堆栈和导航的 Widget,而Routes
是用于定义应用中不同页面的结构。通过结合使用Navigator
和Routes
,Flutter 开发者可以轻松地实现复杂的导航逻辑和用户体验。
6、Dart 是不是单线程模型?是如何运行的?
引用《Flutter中文网》里的话
Dart 在单线程中是以消息循环机制来运行的,其中包含两个任务队列,一个是“微任务队列” microtask queue 另一个是“事件队列” event queue。
7. 解释 Stateful Widget Lifecycle ?
生命周期包含以下简化步骤
createState() // 创建状态mounted == true // 是否安装initState() // 初始化状态didChangeDependencies() // 是否更改了依赖项build() // 构建didUpdateWidget() // 是否更新小部件setState() // 设置状态deactivate() // 无效的dispose() // 释放mounted == false
8.Dart的事件循环的运行遵循以下规则
入口函数 main()执行完后,消息循环机制便启动了。首先会按照先进先出的顺序逐个执行微任务队列中的任务,当所有微任务队列执行完后便开始执行事件队列中的任务,事件任务执行完毕后再去执行微任务,如此循环往复
9. Flutter 是如何实现原生性能和体验的?
Flutter 通过一系列独特的设计和技术实现了原生应用的性能和体验。以下是 Flutter 如何实现原生的几个关键点:
渲染引擎
Skia:Flutter 使用 Skia 作为其渲染引擎。Skia 是一个高性能的 2D 图形库,可以直接与底层操作系统的图形 API 进行交互(如 OpenGL 和 Vulkan),从而实现高效的图形渲染。
直接访问原生 API
Platform Channels:Flutter 通过平台通道(Platform Channels)与原生代码进行通信。开发者可以在 Flutter 中调用原生 Android 或 iOS 的 API,实现对硬件功能(如相机、GPS 等)的访问。
Widget 树
自绘 Widget:Flutter 的 UI 是完全由 Widgets 构成的,Flutter 不依赖于原生 UI 组件,而是通过绘制其自己的组件来实现。从而确保了在不同平台上具有一致的外观和行为。
高效的性能
AOT 编译:
Flutter 使用 Ahead-of-Time (AOT) 编译,将 Dart 代码编译为原生机器码,从而提高应用的启动速度和运行性能。
热重载
开发体验:
Flutter 提供热重载功能,使得开发者在进行 UI 修改时可以立即查看效果,而无需重新启动应用,这大大提高了开发效率。
跨平台
单一代码库:
通过共享单一代码库,Flutter 可以同时为 iOS 和 Android 平台构建应用,减少了开发和维护的成本。
丰富的组件库
Material 和 Cupertino:
Flutter 提供了丰富的 Material Design 和 Cupertino 组件,开发者可以轻松创建符合 Android 和 iOS 平台的原生用户体验。
10.那么在Dart中如何让你的代码异步执行呢?
把要异步执行的代码放在微任务队列或者事件队列里就行了。
可以调用scheduleMicrotask()来让代码以微任务的方式异步执行
可以调用Timer.run来让代码以Event loop的方式异步执行
11.说一下 Future 和 Future队列 ?
Dart中,执行一个异步任务使用Future来处理。在 Dart 的每一个 Isolate 当中,执行的优先级为 :Main > MicroTask > EventQueue。
Dart 在单线程中是以消息循环机制来运行的,其中包含两个任务队列,一个是“微任务队列” microtask queue,另一个叫做“事件队列” event queue。Future 默认情况下其实就是往「事件队列」里插入一个事件,当有空余时间的时候就去执行,当执行完毕后会回调 Future.then(v) 方法。而我们也可以通过使用 Future.microtask 方法来向 「微任务队列」中插入一个任务,这样就会提高他执行的效率。
12. 什么是 Flutter tree shaking
在 Flutter 中,Tree Shaking 是一种优化技术,用于减少最终应用的体积。具体来说,它的作用是:
去除未使用的代码:
在构建应用时,Tree Shaking 会分析代码中的依赖关系,并自动移除那些在应用中未被引用或使用的代码。这包括未使用的库、类、函数等。
提高性能:
通过减小应用的体积,Tree Shaking 帮助提高应用的加载速度和运行性能,因为较少的代码意味着更少的资源消耗。
编译时优化:
Flutter 在编译过程中会进行 Tree Shaking,确保在最终的构建产物中只包含必要的代码。
在编译 Flutter Web 应用程序时,JavaScript 包由 dart2js 编译器生成。发布构建具有最高级别的优化,包括摇树(tree shaking)你的代码。摇树是指通过仅包含保证会执行的代码来消除未使用的代码的过程。这意味着你无需担心应用程序包含的库的大小,因为未使用的类或函数将从编译后的 JavaScript 包中排除。
13.Future和 Stream Isolate?
在 Flutter 中,Future、Stream和Isolate都是用于处理异步任务的重要概念,它们的区别和应用场景如下:
Future:
表示一个异步操作的结果。使用Future可以在异步操作完成后获取到操作的结果。适用于处理单个异步任务并获取最终结果的场景,例如网络请求、文件读写等。
Stream:
表示一个异步的数据流。使用Stream可以处理异步的数据流,例如网络请求的响应数据、传感器数据等。适用于处理连续的异步数据的场景。
Isolate:
是Dart中的线程,代表一个执行环境。不同执行环境(Isolate)之间内存不共享。Dart的异步操作不一定在另一个线程(Isolate)中执行,而且通常是在同一个线程(Isolate)中执行。适用于处理耗时的计算任务、网络请求、处理大量数据等场景。使用Isolate可以提高应用的性能和响应速度。
在实际应用中,可以根据具体的需求选择使用合适的异步方式。例如,如果需要处理单个异步任务并获取最终结果,可以使用Future;如果需要处理异步数据流,可以使用Stream;如果需要在不同的线程中执行异步任务,可以使用Isolate。同时,在使用Isolate时需要注意线程之间的通信和数据传递问题。
14. Spacer 小部件是什么?
Spacer 通过 flex 容器管理小部件之间的空白空间。
通过使用 Row 和 Column 的 MainAxis 对齐方式,我们也可以管理空间。
Row(children: [Text('左边的文本'),Spacer(), // 添加可扩展的空白空间Text('右边的文本'),],
)
| 左边的文本 | (Spacer) | 右边的文本 |
15.在flutter里streams是什么?有几种streams?有什么场景用到它?
Stream 用来处理连续的异步操作,Stream 是一个抽象类,用于表示一序列异步数据的源。它是一种产生连续事件的方式,可以生成数据事件或者错误事件,以及流结束时的完成事件
分单订阅流和广播流。
网络状态的监控
stream中执行的异步模式就是StreamMicrotask
16. hot restart 和 hot reload 之间的区别是什么?
在 Flutter 开发中,hot reload 和 hot restart 是两种常用的功能,用于提高开发效率,但它们之间有一些重要的区别:
Hot Reload
定义:hot reload 是一种快速更新代码的方式,它可以在不重启应用的情况下,立即反映对代码的更改。
特点:
保持状态:hot reload 会保留应用的当前状态,包括用户输入、动画等。这样可以在不丢失进度的情况下查看更改。
适合 UI 更改:主要用于更新 UI 方面的代码,如 Widget 的布局或样式。
使用场景:
修改 UI 组件、样式或布局时。
调整 Widget 的属性或添加新的 Widget。
Hot Restart
定义:hot restart 是一种重启应用的方式,它会重新加载整个应用及其状态。
特点:
重置状态:hot restart 会清除当前状态,并重新启动应用,因此所有的状态、数据和输入都会丢失。
适合全局改变:主要用于应用逻辑或状态更改时,需要重新初始化应用。
使用场景:
修改全局状态、依赖项、初始化方法或其他需要重置的逻辑时。
当更改了应用的入口文件或 main() 方法时。
状态保持:
hot reload 保持当前状态。
hot restart 清除当前状态并重启应用。
适用场景:
hot reload 适合快速迭代 UI 更改。
hot restart 适合需要重置应用的全局更改。
通过合理使用这两种功能,Flutter 开发者可以显著提高开发效率和用户体验。
17.Stream 有哪两种订阅模式?分别是怎么调用的?
Stream有两种订阅模式:单订阅(single) 和 多订阅(broadcast)。
单订阅就是只能有一个订阅者,而广播是可以有多个订阅者。这就有点类似于消息服务(Message Service)的处理模式。单订阅类似于点对点,在订阅者出现之前会持有数据,在订阅者出现之后就才转交给它。
而广播类似于发布订阅模式,可以同时有多个订阅者,当有数据时就会传递给所有的订阅者,而不管当前是否已有订阅者存在。
Stream 默认处于单订阅模式,所以同一个 stream 上的 listen 和其它大多数方法只能调用一次,调用第二次就会报错。但 Stream 可以通过 transform() 方法(返回另一个 Stream)进行连续调用。通过 Stream.asBroadcastStream() 可以将一个单订阅模式的 Stream 转换成一个多订阅模式的 Stream,isBroadcast 属性可以判断当前 Stream 所处的模式。
18. 为什么构建(build)方法在 State 上而不是在 StatefulWidget 上?
构建方法放在 State 类中是为了更好地管理和反映状态变化,使得 StatefulWidget 能够动态响应用户交互和其他条件的变化。这种设计使得 Flutter 的状态管理更加高效和灵活。
状态管理
StatefulWidget 允许在其生命周期中维护状态。状态可以随着用户交互或其他因素而变化。因此,构建方法在 State 类中,而不是在 StatefulWidget 中,以便能够反映这些动态变化。
不可变性
StatelessWidget 的所有内容都是不可变的,每次需要更新时都会重新创建一个新的 Widget 实例。这使得它的构建方法可以直接在 Widget 类中定义。
生命周期
在 StatefulWidget 中,状态信息可能会发生变化,这些变化需要在构建方法中反映出来。通过将构建方法放在 State 类中,Flutter 能够在状态变化时仅重建相关的部分,提高性能。
设计逻辑
State 类不仅负责构建 UI,还包含了管理状态的逻辑。将构建方法放在 State 中,可以更清晰地分离出 Widget 的外观(StatefulWidget)和其行为(State)。
说明:
import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: CounterWidget(),);}
}class CounterWidget extends StatefulWidget {@override_CounterWidgetState createState() => _CounterWidgetState();
}class _CounterWidgetState extends State<CounterWidget> {int _counter = 0;void _incrementCounter() {setState(() {_counter++;});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Counter Example')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[Text('You have pushed the button this many times:'),Text('$_counter',style: Theme.of(context).textTheme.headline4,),],),),floatingActionButton: FloatingActionButton(onPressed: _incrementCounter,tooltip: 'Increment',child: Icon(Icons.add),),);}
}
CounterWidget (StatefulWidget)|v_CounterWidgetState (State)||--- build() <-- 构建方法在 State 中| || |--- Scaffold| | || | |--- AppBar| | |--- Body| | | || | | |--- Column| | | | || | | | |--- Text (说明)| | | | |--- Text (计数器)| | || | |--- FloatingActionButton||--- _incrementCounter() <-- 更新状态
CounterWidget 是一个 StatefulWidget,它创建了一个 _CounterWidgetState 的实例。
_CounterWidgetState 中的 build 方法负责创建 UI。当 _counter 的值变化时,调用 setState 方法会触发 build 方法重新构建 UI。
将构建方法放在 State 中,能够确保 UI 始终反映最新的状态变化。
19.什么是StatelessWidget和StatefullWidget?他们之间的区别是什么?
StatelessWidget是一旦构建后状态就不能改变的Widget,无生命周期的回调。
StatefulWidget是一旦构建Widget的状态还会发生改变的Widget。
StatefulWidget有一个状态类State,维护了可变状态。当状态发生变化时,StatefulWidget 将会重建其对应的 State 对象。
生命周期不同,调用build()方法次数和时机不同。
20. 请解释InheritedWidget是什么,并说明它在状态管理中的作用。
InheritedWidget
类是一个特殊的无界面(stateless)Widget,它主要用于在整个Widget树中`自顶向下`地高效传递和共享数据(`Notifation`用于`自下而上`传递数据)。InheritedWidget能够提供数据在widget树中从上到下进行传递。保证数据在不同子widget中进行共享。
作用
1、数据共享
2、数据监听与重建
3、性能优化:只重绘受影响的部分子树
21. Provider与其他状态管理解决方案有什么不同?
provider是基于InheritedWidget的包装,可以实现页面和其子页面间的数据共享。
Provider具有
缓存
功能,调用setState()方法,那些没有依赖
状态的子节点都不会被重新build
。
https://blog.51cto.com/u_16175630/7445520
22. 简述下Bloc模式是什么,以及它的工作原理。
BLoC全称(Business Logic Component)是谷歌提出的一种设计模式,利用流的方式实现界面的异步渲染和重绘,我们可以非常快速的通过BLoC实现业务与界面的分离。
BLoC 管理着事件 events 和状态 state,比如,它接受一系列事件流,并将它们转化为状态流作为输出。
在Flutter中实现BLoC设计模式需要借助 flutter_bloc 这个库来完成
原理:
BLoC基于流(Stream)的概念,使用RxDart库中的StreamController和Stream来实现。BLoC将UI层(如widget)中的用户操作通过事件(Event)发送给业务逻辑层,并根据这些事件处理数据并生成新的状态(State),再将新状态传递回UI层以更新视图。
23. 什么是Flutter中的异步编程?有哪些常用的异步编程模式?
Flutter中的异步是向事件队列中插入任务。
Future、Stream
Future一次只支持一个任务,Stream可以支持多个任务。
async和await、await for是异步的语法糖。
24. Flutter中的渲染对象模型(Render Object Model)是什么?他与Widget树有何区别?
RenderObject就是渲染树中的一个对象,负责布局及绘制。
widget负责描述UI,存储配置信息。
25.待补充中...
谢谢大家!!!
相关文章:
2025 最新flutter面试总结
目录 1.Dart是值传递还是引用传递? 2.Flutter 是单引擎还是双引擎 3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别? 4.简述Dart语音特性 5. Navigator 是什么?在 Flutter 中 Routes 是什么? 6、Dart 是不是…...
Java后端之AOP
AOP:面向切面编程,本质是面向特定方法编程 引入依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>示例:记录…...
JS中对数组的操作哪些会改变原数组哪些不会?今天你一定要记下!
JavaScript 数组方法:变更原数组与不变更原数组的区别 在 JavaScript 中,数组是非常常见且重要的数据结构。作为开发者,我们常常需要使用数组方法来处理数组数据。但是,数组的不同方法会以不同的方式影响原数组,它们可…...
ubuntu x64下交叉编译ffmpeg到目标架构为aarch架构的系统
参考链接 https://blog.csdn.net/qq_46396470/article/details/137794498...
Java进阶(二):Java设计模式
目录 设计模式 一.建模语言 二.类之间的关系 1.依赖关系 2.关联关系 3.聚合关系 4.组合关系 5.继承关系 6.实现关系 三.面向对象设计原则 单一职责原则 开闭原则 里氏替换原则 依赖倒置 接口隔离原则 迪米特原则 组合/聚合(关联关系)复用原则 四.23种设计模式…...
python学opencv|读取图像(四十二)使用cv2.add()函数实现多图像叠加
【1】引言 前序学习过程中,掌握了灰度图像和彩色图像的掩模操作: python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 python学opencv|读取图像(四十)掩模:三…...
DIY QMK量子键盘
最近放假了,趁这个空余在做一个分支项目,一款机械键盘,量子键盘取自固件名称QMK(Quantum Mechanical Keyboard)。 键盘作为计算机或其他电子设备的重要输入设备之一,通过将按键的物理动作转换为数字信号&am…...
【公式】卢布贬值风险:义乌到俄罗斯贸易的汇率陷阱
卢布贬值风险:义乌到俄罗斯贸易的汇率陷阱 具体实例与推演 假设一位中国义乌的商人,计划出口一批价值100万人民币的商品到俄罗斯。最初的汇率是1人民币兑换100卢布。 初始状态: 商品价值:100万人民币初始汇率:1人民币…...
1月27(信息差)
🌍喜大普奔,适用于 VS Code 的 GitHub Copilot 全新免费版本正式推出,GitHub 全球开发者突破1.5亿 🎄Kimi深夜炸场:满血版多模态o1级推理模型!OpenAI外全球首次!Jim Fan:同天两款国…...
Linux常见问题解决方法--1
常见安全工具、设备 工具 端口及漏洞扫描:Namp、Masscan 抓包:Wireshark,Burpsuite、Fiddler、HttpCanary Web自动化安全扫描:Nessus、Awvs、Appscan、Xray 信息收集:Oneforall、hole 漏洞利用:MSF、…...
Python 数据清洗与处理常用方法全解析
在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战。本文总结了多种数据清洗与处理方法:缺失值处理包括删除缺失值、固定值填充、前后向填充以及删除缺失率高的列;重复值处理通过删除或标记重复项解决数据冗余问题࿱…...
《企业应用架构模式》笔记
领域逻辑 表模块和数据集一起工作-> 先查询出一个记录集,再根据数据集生成一个(如合同)对象,然后调用合同对象的方法。 这看起来很想service查询出一个对象,但调用的是对象的方法,这看起来像是充血模型…...
顶刊JFR|ROLO-SLAM:首个针对不平坦路面的车载Lidar SLAM系统
摘要 基于激光雷达(LiDAR)的同步定位与地图构建(SLAM)被认为是在恶劣环境中提供定位指导的一种有效方法。然而,现成的基于激光雷达的SLAM方法在经过不平坦地形时,尤其是在垂直方向相关的部分,会…...
第05章 09 使用Lookup绘制地形数据高程着色图
在VTK(Visualization Toolkit)中,可以使用颜色查找表(Lookup Table,简称LUT)来根据高程数据对地形进行着色。以下是一个示例代码,展示了如何使用VTK和C来读取地形数据,并使用颜色查找…...
【深度学习入门_机器学习理论】K近邻法(KNN)
本部分主要为机器学习理论入门_K近邻法(KNN),书籍参考 “ 统计学习方法(第二版)”。 学习目标: 了解k近邻算法的基本概念、原理、应用;熟悉k近邻算法重要影响要素;熟悉kd树原理与优化应用。 开始本算法之…...
基于Django的Boss直聘IT岗位可视化分析系统的设计与实现
【Django】基于Django的Boss直聘IT岗位可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为主要开发语言,利用Django这一高效、安全的W…...
编程语言中的常见Bug及解决方案
在编程过程中,不同语言有其独特的特性和挑战,这也导致了各种常见Bug的出现。本文将总结几种主流编程语言中的常见Bug,包括JavaScript、Python、C/C、Java和Go,并提供相应的解决方案和案例。 一、JavaScript中小数相加精度不准确的…...
DeepSeek API 的获取与对话示例
代码文件下载:Code 在线链接:Kaggle | Colab 文章目录 注册并获取API环境依赖设置 API单轮对话多轮对话流式输出更换模型 注册并获取API 访问 https://platform.deepseek.com/sign_in 进行注册并登录: 新用户注册后将赠送 10 块钱余额&#…...
数据库SQLite和SCADA DIAView应用教程
课程简介 此系列课程大纲主要包含七个课时。主要使用到的开发工具有:SQLite studio 和 SCADA DIAView。详细的可成内容大概如下: 1、SQLite 可视化管理工具SQLite Studio :打开数据库和查询数据;查看视频 2、创建6个变量&#x…...
Elasticsearch+kibana安装(简单易上手)
下载ES( Download Elasticsearch | Elastic ) 将ES安装包解压缩 解压后目录如下: 修改ES服务端口(可以不修改) 启动ES 记住这些内容 验证ES是否启动成功 下载kibana( Download Kibana Free | Get Started Now | Elastic ) 解压后的kibana目…...
(CICD)自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)
一、平滑发布与灰度发布 **什么叫平滑:**在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问; **什么叫灰度:**发布后让部分用户使用新版本,其它用户使用旧版本&am…...
Android源码阅读笔记(二)—— 启动模式
Android源码阅读笔记(二)—— 启动模式初章 1、为什么学习启动模式 Activity的启动模式其实是一个在面试中经常会被关注的问题,那么它的重要性体现在哪里? A:在多数的开发场景中,我们似乎也没有怎么关注过…...
AndroidCompose Navigation导航精通2-过渡动画与路由切换
目录 前言路由切换NavControllerBackStackEntry过渡动画过渡原理缩放动画渐隐动画滑动动画动画过渡实战前言 在当今的移动应用开发中,导航是用户与应用交互的核心环节。随着 Android Compose 的兴起,它为开发者提供了一种全新的、声明式的方式来构建用户界面,同时也带来了更…...
PCL ——LevenbergMarquardt非线性最小二乘法拟合圆柱(C++详细过程版)
目录 一、算法概述1、圆柱方程2、LM算法流程二、代码实现三、结果展示一、算法概述 目前求解非线性最小二乘问题常用算法有高斯-牛顿方法(Gauss-Newton algorithm,GN 算法)、列文伯格-马夸尔特方法(Levenberg-Marquardt algorithm,LM 算法)。本文采用 LM 算法进行圆柱拟合。 …...
GD32的GD库开发
所有的Cortex-M处理器都有相同的SysTick定时器,因为CMSIS-Core头文件中定义了一个名为SysTick的结构体。 这个定时器可以用作延时函数,不管是STM32的芯片还是GD32,AT32的芯片,delay函数都可以这么写,只要它是cortex-M…...
DeepSeek R1:推理模型新纪元与价格战
标题:DeepSeek R1:推理模型新纪元与价格战 文章信息摘要: DeepSeek R1的发布标志着推理模型研究的重要转折点,其采用四阶段强化学习训练方法,结合监督微调和拒绝采样,显著提升了模型的推理能力。这一进展不…...
一文简单回顾Java中的String、StringBuilder、StringBuffer
简单说下String、StringBuilder、StringBuffer的区别 String、StringBuffer、StringBuilder在Java中都是用于处理字符串的,它们之间的区别是String是不可变的,平常开发用的最多,当遇到大量字符串连接的时候,就用StringBuilder&am…...
机器学习:支持向量机
支持向量机(Support Vector Machine)是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的广义线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。 假设两类数据可以被 H x : w T x…...
简单的停车场管理系统的C语言实现示例
以下是一个简单的停车场管理系统的C语言实现示例。该示例使用结构体来管理停车场的车位信息,并提供基本车辆进入、离开以及显示停车场状态功能。 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_SLOTS 10 // 最大车位数…...
网络工程师 (3)指令系统基础
一、寻址方式 (一)指令寻址 顺序寻址:通过程序计数器(PC)加1,自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址:通过转移类指令直接或间接给出下一条指令的地址。跳…...
基于Python的智慧物业管理系统
【Python】基于Python的智慧物业管理系统(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目背景二、研究目的三、项目意义四、项目功能五、项目创新点六、开发技术介绍七、项目界面展示(部分展示,详细看视频)八、项…...
使用 Vue 3 的 watchEffect 和 watch 进行响应式监视
Vue 3 的 Composition API 引入了 <script setup> 语法,这是一种更简洁、更直观的方式来编写组件逻辑。结合 watchEffect 和 watch,我们可以轻松地监视响应式数据的变化。本文将介绍如何使用 <script setup> 语法结合 watchEffect 和 watch&…...
环境变量
目录 一.概念介绍 1.1命令行参数 二.一个例子,一个环境变量 2.1查看环境变量 2.2如何理解环境变量呢?存储的角度 2.3环境变量最开始从哪里来的呢? 概括: 1. 环境变量的存储 2. 命令查找过程 3. 环境变量表和命令行参数…...
Scale AI 创始人兼 CEO采访
Scale AI 创始人兼 CEO 亚历山大王(Alexander Wang)首次亮相节目接受采访。他的公司专注于为人工智能工具提供准确标注的数据。早在 2022 年,王成为世界上最年轻的白手起家亿万富翁。 美国在全球人工智能竞赛中的地位,以及它与中…...
MongoDB中常用的几种高可用技术方案及优缺点
MongoDB 的高可用性方案主要依赖于其内置的 副本集 (Replica Set) 和 Sharding 机制。下面是一些常见的高可用性技术方案: 1. 副本集 (Replica Set) 副本集是 MongoDB 提供的主要高可用性解决方案,确保数据在多个节点之间的冗余存储和自动故障恢复。副…...
【Erdas实验教程】001:Erdas2022下载及安装教程
文章目录 一、Erdas2022安装教程1. 安装主程序2. 拷贝补丁3. 安装LicenseServer4. 运行软件 二、Erdas2022下载地址 一、Erdas2022安装教程 Erdas2022全新界面如下: 1. 安装主程序 下载安装包并解压,以管理员身份运行 “setup.exe” 或 “setup.vbs”&…...
Python3 【函数】水平考试:精选试题和答案
Python3 【函数】水平考试:精选试题和答案 Python 函数考试试卷及答案。共计30题,其中选择题15题、填空题10题、编程题5题,试卷满分为100分。 一、选择题(每题 2 分,共 30 分) 以下哪个关键字用于定义函数…...
stm8s单片机(三)时钟系统与时钟切换
一个单片机系统要正常运行应包括四个部分: 电源,晶振,复位电路,下载电路。 晶振就是时钟。 stm8有四种时钟源 HSE (High Speed External clock signal)HSE user-ext (High Speed External clock signal user external)HSI (High Speed Inter…...
ChatGPT高效处理图片技巧使用详解
ChatGPT,作为OpenAI开发的预训练语言模型,主要用于生成自然语言文本的任务。然而,通过一些技巧和策略,我们可以将ChatGPT与图像处理模型结合,实现一定程度上的图像优化和处理。本文将详细介绍如何使用ChatGPT高效处理图…...
图漾Halcon版本SDK使用教程【V1.1.0新版本】
文章目录 1.下载并安装 Halcon1.1 下载Halcon软件1.2 安装Halcon 2.下载Camport_Halcon_gentl SDK2.1 下载Camport_Halcon_gentl SDK2.2 Camport Halcon SDK介绍2.3 Halcon SDK环境配置与运行2.3.1 SDK环境配置2.3.2 获取相机支持的参数2.3.3 配置相机参数并运行相机 2.4 遍历H…...
C语言二级
//请编写函数fun(),该函数的功能是:计算并输出给定整数n的所有因 //子(不包括1和自身)之和。规定n的值不大于1000。例如,在主函数 //中从键盘给n输入的值为856,则输出为:sum 763。 //注意&…...
软工_软件工程
2025.01.24:软件工程导论学习笔记 第2节 软件工程 2.1 软件发展 - 四个阶段2.1.1 程序设计2.1.2 程序系统2.1.3 软件工程2.1.4 第四阶段 2.2 软件危机2.2.1 软件危机 - 定义2.2.2 软件危机 - 主要表现 2.1 软件发展 - 四个阶段 2.1.1 程序设计 软件生产个体化&…...
【creo】CREO配置快捷键方式和默认单位
了解CREO工作目录设置 设置快捷方式启动目录,就能自动加载其中的配置。 一、通过键盘快捷方式 保存配置 creo_parametric_customization.ui 文件: 二、通过映射键录制 通过这种方式可以监听鼠标的点击事件。使用键盘快捷方式无法找到需要的动作时候可…...
go理论知识——Go Channel 笔记 [特殊字符]
go理论知识——Go Channel 笔记 📝 1. 基本概念 🧠 1.1 Channel 是什么? Channel 是 Go 语言中用于在不同 Goroutine 之间进行通信的机制。Channel 是类型安全的,意味着你只能发送和接收特定类型的数据。 1.2 Channel 的创建 …...
微信小程序压缩图片
由于wx.compressImage(Object object) iOS 仅支持压缩 JPG 格式图片。所以我们需要做一下特殊的处理: 1.获取文件,判断文件是否大于设定的大小 2.如果大于则使用canvas进行绘制,并生成新的图片路径 3.上传图片 async chooseImage() {let …...
第05章 11 动量剖面可视化代码一则
在计算流体力学(CFD)中,动量剖面(Momentum Profiles)通常用于描述流体在流动方向上的动量分布。在 VTK 中,可以通过读取速度场数据,并计算和展示动量剖面来可视化呈现速度场信息。 示例代码 以…...
Android Studio 新版本24.2.2 运行后自动切到 LogCat
最近更新了 Android studio 版本,发现有个问题: 每次 Run app 之后。都会自动切换到 run 标签。这让我非常不习惯。我个人习惯在app 运行后查看Logcat 最后靠 deepSeek 找到一种解决方案: Android Studio 中截图如下:...
使用EVE-NG-锐捷实现OSPF
一、OSPF基础知识 Open shortest Path First(OSPF)开放式最短路径优先协议 1.OSPF的关系状态 (1)邻居关系(TWO-WAY) 只发送hello包不发送LSA包(链路状态通告包) (2)邻接关系(FULL) OSPF设备与设备之间相互建立OSPF关系,初始为邻居关系(TWO-WAY)状态࿰…...
解决使用Selenium时ChromeDriver版本不匹配问题
在学习Python爬虫过程中如果使用Selenium的时候遇到报错如下session not created: This version of ChromeDriver only supports Chrome version 99… 这说明当前你的chrome驱动版本和浏览器版本不匹配。 例如 SessionNotCreatedException: Message: session not created: This…...
景联文科技加入AIIA联盟数据标注分委会
2025年1月16日,中国人工智能产业发展联盟(简称AIIA)数据委员会数据标注分委会(以下简称“分委会”)正式成立。景联文科技成为第一批AIIA联盟数据标注分委会委员单位。 数据标注分委会的成立旨在搭建数据标注领域产学研…...