Home

Flutter 状态

Flutter 状态 Flutter 生命周期 1. 本地平台生命周期 // 注册监听 WidgetsBinding.instance.addObserver(WidgetsBindingObserver); //监听本地应用生命周期 WidgetsBindingObserver.didChangeAppLifecycleState(AppLifecycleState state) WidgetsBindingObserver中还包含其他与本地平台状态有关的回调 2. Widget State 生命周期 initState() didChangeDependencies() build() render tree didUpdateWidget() build()...

Read more

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

Read more

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. 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换...

Read more

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),提取乘积的小数部分。 // 然后...

Read more

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 还有就是关掉各个地方的编译优化选项(不推荐, 选项太多, 漏一个就是麻烦...

Read more

Math 动态规划

Math 动态规划 动态规划(Dynamic programming,简称DP), 把主问题分为子问题, 主问题可以通过子问题 求得. 特性 重叠子问题: 有些子问题的解会被引用多次, 因此需要保存子问题的解. 最优子结构: 最优解肯定是有最优的子解转移推导而来. 无后效性 : 子问题的解并不会由后面其他问题的解而改变 步骤 划分状态: 确认子问题 状态表示: 保存子问题的解 状态转移: 怎么由子问题推导出父问题 确定边界: 确定初始状态是什么?最小的子问题?最终状态又是什么 方向 自底向上,简单来说就是根据初始状态,逐步推导到最终状态,而这个转移的过程,必定是一个拓扑序 自顶向下,也就是从最终状态出发,如果遇到一个子...

Read more

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[][] . 需要创建指...

Read more