EP194: Evolution of HTTP[翻译]

这篇文章回顾了HTTP协议的发展历程,从HTTP/0.9到HTTP/3,强调了其在性能和实时性方面的改进,同时提到了服务器系统性能指标,如QPS、TPS、并发数和RT,讨论了Nginx的流行原因,还列出了一些重要的网络调试命令,以及集线器、交换机和路由器在网络中的作用。 ...

<span title='2025-12-21 11:40:26 +0800 CST'>2025-12-21</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Sharker

iOS App间跳转

背景 在App的开发过程中经常会遇到与其他App联动相互拉起的需求(也就是拉起其他App或者被其他App拉起),那么在iOS中这种拉起操作应该如何实现呢,本文将主要介绍以下几个方面 ...

<span title='2024-03-27 20:41:10 +0800 CST'>2024-03-27</span>&nbsp;·&nbsp;6 min&nbsp;·&nbsp;Sharker

UserAgent获取与修改

背景 早从19年 iOS 13开始Apple就建议我们将App中使用UIWebView的地方切换为WKWebView了。 ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information. ...

<span title='2024-02-26 22:40:08 +0800 CST'>2024-02-26</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Sharker

基础语法速通三

继续前面的整理,这将是最后一部分的整理内容,包括了goroutine channel的使用以及Go反射的使用。 Go goroutine channel 进程 线程 并行 并发 进程 线程 进程就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有自己的地址空间,一个进程中至少有5个基本状态,初始态、执行态、等待状态、就绪状态、终止状态。通俗的讲进程就是一个正在执行的程序。 ...

<span title='2024-02-15 13:45:07 +0800 CST'>2024-02-15</span>&nbsp;·&nbsp;11 min&nbsp;·&nbsp;Sharker

基础语法速通 二

上一篇我们根据大地老师的B站视频学习了一部分Go语言语法的基础部分,接下来让我继续开始学习,在这篇中将继续总结函数、接口、time包、 指针与结构体等重要的语法基础。 Go 函数 函数定义 函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。 Go语言支持的函数类型包括: 函数、匿名函数、闭包 Go语言中定义函数使用func关键字,具体格式如下 ...

<span title='2024-02-10 23:20:23 +0800 CST'>2024-02-10</span>&nbsp;·&nbsp;20 min&nbsp;·&nbsp;Sharker

基础语法速通 一

Go 语法速通 以下为学习B站大地Go课程Go语言基础部分的的笔记输出,作为平时查阅的资料,希望也可以帮助读者快速熟悉Go语言 经典Hello World 首先是经典的输出Hello World,Go语言的fmt包中包含了输出函数Print、Println、Printf,如下代码输出Hello World ...

<span title='2024-01-31 23:55:37 +0800 CST'>2024-01-31</span>&nbsp;·&nbsp;18 min&nbsp;·&nbsp;Sharker

图解Http读后感

<span title='2024-01-06 15:36:09 +0800 CST'>2024-01-06</span>&nbsp;·&nbsp;0 min&nbsp;·&nbsp;Sharker

KVO KVC复习

测试

<span title='2023-08-03 13:42:19 +0800 CST'>2023-08-03</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;Sharker

第三章基础组件 一

文本及样式 Flutter.. 两个点语法含义 Dart中两个点..和三个点…的用法 文本及样式 常见属性 textAlign: 文本的对齐方式;可以选择左对齐、右对齐还是居中。注意,对齐的参考系是Text widget 本身, 只有 Text 宽度大于文本内容长度时指定此属性才有意义 maxLines、overflow: 指定文本显示的最大行数,默认情况下,文本是自动折行的,如果指定此参数,则文本最多不会超过指定的行。如果有多余的文本,可以通过overflow来指定截断方式,默认是直接截断,本例中指定的截断方式TextOverflow.ellipsis,它会将多余文本截断后以省略符“…”表示;TextOverflow 的其他截断方式请参考 SDK 文档。 textScaleFactor: 代表文本相对于当前字体大小的缩放因子,相对于去设置文本的样式style属性的fontSize,它是调整字体大小的一个快捷方式。该属性的默认值可以通过MediaQueryData.textScaleFactor获得,如果没有MediaQuery,那么会默认值将为1.0。 TextStyle 1 2 3 4 5 6 7 8 9 10 11 Text("Hello world", style: TextStyle( color: Colors.blue, fontSize: 18.0, height: 1.2, fontFamily: "Courier", background: Paint()..color=Colors.yellow, decoration:TextDecoration.underline, decorationStyle: TextDecorationStyle.dashed ), ); height:该属性用于指定行高,但它并不是一个绝对值,而是一个因子,具体的行高等于fontSize*height。 fontSize:该属性和 Text 的textScaleFactor都用于控制字体大小。但是有两个主要区别: fontSize可以精确指定字体大小,而textScaleFactor只能通过缩放比例来控制。 textScaleFactor主要是用于系统字体大小设置改变时对 Flutter 应用字体进行全局调整,而fontSize通常用于单个文本,字体大小不会跟随系统字体大小变化。 TextSpan 有点像富文本的展示方式 ...

<span title='2022-10-25 23:11:39 +0800 CST'>2022-10-25</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Sharker

第一个Flutter应用 四

第二章 调试Flutter应用 日志与断点 debugger() 声明 1 2 3 4 void someFunction(double offset) { debugger(when: offset > 30.0); // ... } print、debugPrint、flutter logs Dart print()功能将输出到系统控制台,我们可以使用flutter logs来查看它(基本上是一个包装adb logcat)。 ...

<span title='2022-10-09 10:35:30 +0800 CST'>2022-10-09</span>&nbsp;·&nbsp;5 min&nbsp;·&nbsp;Sharker

第一个Flutter应用 三

第二章 路由管理 MaterialPageRoute 1 2 3 4 5 6 7 // 路由跳转 Navigator.push( context, MaterialPageRoute(builder: (context){ return const NewRoute(); }) ); MaterialPageRoute继承自PageRoute类,PageRoute类是一个抽象类,表示占有整个屏幕空间的一个模态路由页面,它还定义了路由构建及切换时过渡动画的相关接口及属性。MaterialPageRoute 是 Material组件库提供的组件,它可以针对不同平台,实现与平台页面切换动画风格一致的路由切换动画 ...

<span title='2022-10-07 23:36:30 +0800 CST'>2022-10-07</span>&nbsp;·&nbsp;9 min&nbsp;·&nbsp;Sharker

第一个Flutter应用 一

第二章 有状态与无状态组件 Stateful widget 可以拥有状态,这些状态在 widget 生命周期中是可以变的,而 Stateless widget 是不可变的。 Stateful widget 至少由两个类组成: 一个StatefulWidget类。 一个 State类; StatefulWidget类本身是不变的,但是State类中持有的状态在 widget 生命周期中可能会发生变化。 Widget 接口 Widget定义 ...

<span title='2022-10-05 21:21:51 +0800 CST'>2022-10-05</span>&nbsp;·&nbsp;10 min&nbsp;·&nbsp;Sharker

第一个Flutter应用 二

第二章 状态管理 StatefulWidget的状态管理视情况被管理,通常有一下几种方式 Widget 管理自己的状态 Widget 管理子widget状态 混合管理 (父Widget和子Widget都管理状态) 如何决定使用哪种管理方式 如果状态是用户数据,如复选框的选中状态、滑块的位置,则该状态最好由父 Widget 管理。 如果状态是有关界面外观效果的,例如颜色、动画,那么状态最好由 Widget 本身来管理。 如果某一个状态是不同 Widget 共享的则最好由它们共同的父 Widget 管理。 在 Widget 内部管理状态封装性会好一些,而在父 Widget 中管理会比较灵活。有些时 候,如果不确定到底该怎么管理状态,那么推荐的首选是在父 Widget 中管理(灵活会显 得更重要一些)。 Widget管理自身状态 _TapboxAState 类: ...

<span title='2022-10-05 21:21:33 +0800 CST'>2022-10-05</span>&nbsp;·&nbsp;7 min&nbsp;·&nbsp;Sharker

任务目标计划

永澄:任务、目标和计划都是啥?它们之间啥关系? 行动(Action) 行动,指的是通过一步操作即可完成的、不可细分的最小事项,活动,也可以理解为执行的最小单元。 对于任务规划目标来说只有行动才是可以被执行的,这是任务管理中的基本原则,任何任务,目标,计划都需要转化成行动才能被执行。 行动概念的用法,通常有两种: ...

<span title='2022-10-05 16:03:48 +0800 CST'>2022-10-05</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Sharker

起步

第一章 起步 弹射起步 变量声明 var 声明变量,但是类型后面不可以改变了,根据第一次赋值数据的类型来推断其类型,编译结束后其类型就已经被确定 dynamic 和 Object 声明动态变量,后面类型也可以改变,不同点在于dynamic可以调用可以用的属性(有运行时风险),Object 只能调用Object提供的属性 final const final是运行时常量,const是编译时常量,同时用final或者const修饰的变量可以不加类型 空类型 安全 1 2 3 4 5 6 7 int i = 8; //默认为不可空,必须在定义时初始化。 int? j; // 定义为可空类型,对于可空变量,我们在使用前必须判空。 // 如果我们预期变量不能为空,但在定义时不能确定其初始值,则可以加上late关键字, // 表示会稍后初始化,但是在正式使用它之前必须得保证初始化过了,否则会报错 late int k; k=9; 函数 函数式编程 Dart函数声明如果没有显式声明返回值类型时会默认当做dynamic处理,返回值没有类型推断 支持箭头函数,只有一个语句的函数,使用箭头函数简写 函数做为变量 1 2 3 4 var say = (str){ print(str); }; say("hi world"); 函数作为参数传递 1 2 3 4 void execute(var callback) { callback(); } execute(() => print("xxx")) 可选的位置参数 包装一组函数参数,用[]标记为可选的位置参数,并放在参数列表的最后面: 1 2 3 4 5 6 7 String say(String from, String msg, [String? device]) { var result = '$from says $msg'; if (device != null) { result = '$result with a $device'; } return result; } 可选的命名参数 定义函数时,使用{param1, param2, …},放在参数列表的最后面,用于指定命名参数。例如: 1 2 3 4 //设置[bold]和[hidden]标志 void enableFlags({bool bold, bool hidden}) { // ... } mixin Dart 是不支持多继承的,但是它支持 mixin,简单来讲 mixin 可以 “组合” 多个类,我们通过一个例子来理解。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 class Person { say() { print('say'); } } mixin Eat { eat() { print('eat'); } } mixin Walk { walk() { print('walk'); } } mixin Code { code() { print('key'); } } class Dog with Eat, Walk{} class Man extends Person with Eat, Walk, Code{} ps: ...

<span title='2022-10-03 18:32:17 +0800 CST'>2022-10-03</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;Sharker