合并两个有序链表(LeetCode No.21)
一、算法思路 1.1 建模 这题非常简单,作为系列开篇。将两个有序单链表进行合并,本质思路是使用两个逐一偏移指针p1、p2对链表l1、l2进行元素比对,获取min(p1, p2)元素拼接到新链表(结果链表)上。抽象来看,像拉拉链一样。l1、l2为拉链的左右链,拉取的过程是融合两者元素,形成拉完后的链条。 核心需要: 两个偏移指针,逐一遍历l1、l2 对链表结点数据域的比对方法 一条新的单链表,用于承载结果 1.2 注意事项 新创建的单链表可以使用「虚拟头结点」,也就是 chain 节点。利用虚拟头结点进行占位,可以避免空指针边界异常,降低代码的复杂性。 两条待处理的单链表长度是不一定相等的,需要考虑较长链表多出部分的结点处理。 二、核心代码 123456789101112131415161718192021222324252627282930func mergeTwoLists(l1: SingleLinkList<Int>, l2: SingleLinkList<Int>) ->...
初探Flutter(三) 路由管理
一、基本概念 所谓路由管理,就是管理页面之间如何跳转,通常也可被称为导航管理。Flutter 中的路由管理和原生开发类似,无论是 Android 还是 iOS,导航管理都会维护一个路由栈,路由入栈(push)操作对应打开一个新页面,路由出栈(pop)操作对应页面关闭操作,而路由管理主要是指如何来管理路由栈。 二、MaterialPageRoute 2.1 基本定义 MaterialPageRoute 是 Material组件库提供的组件,它可以针对不同平台,实现与平台页面切换动画风格一致的路由切换动画: 对于 Android,当打开新页面时,新的页面会从屏幕底部滑动到屏幕顶部;当关闭页面时,当前页面会从屏幕顶部滑动到屏幕底部后消失,同时上一个页面会显示到屏幕上。 对于 iOS,当打开页面时,新的页面会从屏幕右侧边缘一直滑动到屏幕左边,直到新页面全部显示到屏幕上,而上一个页面则会从当前屏幕滑动到屏幕左侧而消失;当关闭页面时,正好相反,当前页面会从屏幕右侧滑出,同时上一个页面会从屏幕左侧滑入。 123456MaterialPageRoute({ ...
初探Flutter(二) 状态管理
一、三种常见的状态管理 Widget 管理自己的状态。 Widget 管理子 Widget 状态。 混合管理(父 Widget 和子 Widget 都管理状态)。 1.1 Widget 管理自己的状态 1.1.1 适用场景 如果状态是有关界面外观效果的,例如颜色、动画,那么状态最好由 Widget 本身来管理。 1.1.2 例子 1234567891011121314151617181920212223242526272829303132333435class TapboxA extends StatefulWidget { TapboxA({Key? key}) : super(key: key); @override _TapboxAState createState() => _TapboxAState();}class _TapboxAState extends State<TapboxA> { bool _active = false; void _handleTap() { ...
初探Flutter(一) Widget
一、Widget 1.1 canUpdate方法 canUpdate(...)是一个静态方法,它主要用于在 widget 树重新build时复用旧的 widget。 根本作用:是否用新的 widget 对象去更新旧UI树上所对应的Element对象的配置。 判断规则:只要newWidget与oldWidget的runtimeType和key同时相等时就会用new widget去更新Element对象的配置,否则就会创建新的Element。 1.2 Flutter中的四棵树 1.2.1 基本联系与职责 根据 Widget 树生成一个 Element 树,Element 树中的节点都继承自 Element 类。 根据 Element 树生成 Render 树(渲染树),渲染树中的节点都继承自 RenderObject 类。 根据渲染树生成 Layer 树,然后上屏显示,Layer 树中的节点都继承自 Layer 类。 布局和渲染逻辑在 Render 树中。 Element 是 Widget 和 RenderObject 的粘合剂。 1.2.2...
认识期权(一)期权的基本概念
一、什么是期权 期权,是指一种合约,该合约赋予持有人在某一特定日期或该日之前的任何时间以固定价格购进或售出一种资产的权利。期权是一种权利。持有人享有权利但不承担相应的义务。 1.1 一个简单的例子 Apple公司预计2022年9月10日发行最新款的iPhone14,而就在此时一些零售商推出了“6000元换购iPhone14”的换购券,每张售价50元。这个例子中,购买了该购物券,便是享有了一项权利,即到2022年9月10日当天,可以自行决定是否以6000元的价格换购iPhone14,本质上享有的是一种自主权利,这便是期权的雏形。 1.2...
解读Go框架 - http包(一)
一、从一个简单的例子开始 在《Go语言圣经》的第一章有这么一个例子: 12345678910111213141516171819package mainimport ( "fmt" "log" "net/http")func sayHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world!")}func main() { http.HandleFunc("/", sayHello) err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("ListenAndServe: ", err) }} 这是一个基于 HTTP 协议的 WEB 服务,通过监听 9090端口 来响应客户端的请求;从上面可以看出,编写一个...
基于 LocalWebServer 实现 WKWebView 离线资源加载
一、背景 笔者在《WKWebView》一文中提到过,WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此,在 WKWebView 上直接使用 NSURLProtocol 无法拦截请求。所以如果需要使用到拦截请求,有种可行地方案是使用苹果开源的 Webkit2 源码暴露的私有API(详见原文第3小节:NSURLProtocol问题)。 但使用私有API,必然带来以下几个问题: 审核风险 拦截http/https时,post请求body丢失 如使用ajax hook方式,可能存在 post header字符长度限制 、Put类型请求异常 等 由此看来,在 iOS11 WKURLSchemeHandler [探究] 到来之前,私有API并不那么完美。 所幸通过寻找发现,iOS系统上具备搭建服务器能力,理论上对实现 WKWebView 离线资源加载 存在可能性。 二、分析 基于iOS的local web server,目前大致有以下几种较为完善的框架: CocoaHttpServer...
WKWebView
一、分析 在iPhone 6s、iOS 10.3.2中,对 http://www.qq.com 进行10次请求,得到如下数据: 次数 UIWebView 内存消耗 WKWebView 内存(APP)消耗 UIWebView 请求耗时 WKWebView 请求耗时 1 67.47 MB 0.81 MB 4.13 s 0.80 s 2 58.23 MB 0.86 MB 1.16 s 0.54 s 3 57.83 MB 0.50 MB 1.14 s 0.56 s 4 59.38 MB 0.88 MB 1.08 s 1.07 s 5 59.70 MB 0.75 MB 1.07 s 0.71 s 6 64.05 MB 0.83 MB 1.47 s 0.65 s 7 59.45 MB 0.81 MB 1.11 s 0.63 s 8 57.55 MB 0.45 MB 1.15 s 0.64 s 9 58.47 MB 0.77 MB 1.17s 0.75 s 10 58.89 MB 0.84 MB 1.11 s 0.70...