Flutter 状态
Flutter 状态
Flutter 生命周期
1. 本地平台生命周期
// 注册监听
WidgetsBinding.instance.addObserver(WidgetsBindingObserver);
//监听本地应用生命周期
WidgetsBindingObserver.didChangeAppLifecycleState(AppLifecycleState state)
WidgetsBindingObserver中还包含其他与本地平台状态有关的回调
2. Widget State 生命周期
initState()
didChangeDependencies()
build()
render tree
didUpdateWidget()
build()...
Tools Vscode中Flutter自动补全卡顿
Tools Vscode中Flutter自动补全卡顿
如果安装Vim和Flutter插件, 那么自动补全时会出现卡顿
Vim每次键入会分析并且需要插件返回结果
Dart自动补全目前是同步的, 并且需要分析代码
2和3项合起来导致卡顿
解决:
不使用Vim插件 “vim.disableExtension”: true
“dart.previewLsp”: true 使用dart lsp服务 这是异步实现
Reference
Editor lags badly when Vim extension is enabled #1800
Math 排序
Math 排序
稳定性
当待排序数据中有相等的元素, 并且排序后相等的元素次序没有改变, 就说这个排序是稳定的.
稳定排序
冒泡排序
插入排序
归并排序
基数排序
不稳定排序
选择排序
快速排序
希尔排序
堆排序
内排序
冒泡排序 O(n^2)
选择排序 O(n^2)
插入排序 O(n^2)
希尔排序 O(n^1.5)
快速排序 O(NlogN)
归并排序 O(NlogN)
堆排序 O(N*logN)
基数排序 O(d(n+r))
冒泡排序(BubbleSort)
基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。
过程:
1. 比较相邻的两个数据,如果第二个数小,就交换位置。
2. 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换...
Math Hash算法
Math Hash算法
Hash算法: 把任意长度的输入通过Hash算法变换成固定长度的输出.
Hash冲突: 多个输入通过Hash算法得到同一个Hash值.
Hash table(ht): Hash列表, 一般使用顺序表存储
Hash table length(htlen): Hash列表长度
Hash slot: Hash槽, 表示ht中的一个位置
Hash loadFactor: 装填多少进行括容, java中默认0.75
Hash函数
1. 除余法
// htlen 为Hash列表长度
hash(key) = key mod htlen
2. 乘余取整法
// 先让关键码key乘上一个常数A (0< A < 1),提取乘积的小数部分。
// 然后...
Xcode 优化问题
Xcode优化问题(XXX was compiled with optimization - stepping may behave oddly; variables may not be available.)
Xcode 11.5 使用Release 编译项目, 并且Debug, 一些参数都是nil, 并且Log里提示
was compiled with optimization - stepping may behave oddly; variables may
not be available
这是因为Xcode会优化代码, Debug时会看起来很奇怪. 最直接的办法是把编译模式改成DEBUG
还有就是关掉各个地方的编译优化选项(不推荐, 选项太多, 漏一个就是麻烦...
Math 动态规划
Math 动态规划
动态规划(Dynamic programming,简称DP), 把主问题分为子问题, 主问题可以通过子问题
求得.
特性
重叠子问题: 有些子问题的解会被引用多次, 因此需要保存子问题的解.
最优子结构: 最优解肯定是有最优的子解转移推导而来.
无后效性 : 子问题的解并不会由后面其他问题的解而改变
步骤
划分状态: 确认子问题
状态表示: 保存子问题的解
状态转移: 怎么由子问题推导出父问题
确定边界: 确定初始状态是什么?最小的子问题?最终状态又是什么
方向
自底向上,简单来说就是根据初始状态,逐步推导到最终状态,而这个转移的过程,必定是一个拓扑序
自顶向下,也就是从最终状态出发,如果遇到一个子...
Lang C语言指针
Lang C语言指针
pointer and array
不同点
int[][] vs int**
C语言中多维数组也是使用顺序地址存储, 地址从低到高排列
int a[2][2] = \{\{1, 2\}, \{3, 4\}\};
// 内存地址 低地址位 1, 2, 3, 4 高地址位
a是一个指针, 保存值为’1’的地址; a[0]是一个指针, 也是保存值为’1’的地址.
因此a = a[0]
int** 是一个指针x, 指向另一个指针y, y指向int类型.
如果int** p = (int**) a; 这样作的话, *p 等于 1, 而**p会把1当作地址作取值操作,
因此会报错. int** 不等价于 a[][] .
需要创建指...
Compute Media 视频直播
Compute Media 视频直播
RSVP
RTP
RTCP
MMS
RTSP
MIME
RTMP
RTMFP
HLS
WebRTC
HLS
HDS
DASH
RTSP
RTMP
Reference
463 post articles, 58 pages.