1.3 七牛如何做HTTP服务测试实现服务逻辑(Service Implementation) – 实现客户端SDK(Client Implementation) – 基于客户端SDK写测试案例(Test Case) • 问题 – 客户端SDK修改导致测试案例编不过 – 客户端SDK通常是使用方友好,而不是测试方友好 – 让服务端与客户端SDK耦合,容易过早陷入客户端SDK如何抽象 更合理的细节,而不能专注于测试服务逻辑本身 比如,基于 http.Client 类直接写测试案例 • 问题 – 代码相对冗长 – 业务逻辑表达不直观 • 写一些辅助函数能够略为改观,不过会有逐步写测试专用SDK的倾向 七牛当前做法 • 引入 httptest DSL 文法 • 更接近基于 http.Client 写测试案例的思路 – 但努力让代码更直白体现测试用意 2}, {"a": "world2", "b": 4} ]' 测试环境 • 如何让 stage 和 product 环境共享测试案例? – 测试环境参数化 – 也方便测试脚本入库(不入库 User/Password、AK/SK 这种敏感 信息) host 指令 • 服务地址参数化 0 码力 | 27 页 | 422.11 KB | 1 年前3
2.3 用golang写一个操作系统《失控》作者:未来会有天量的数据只存在⽤用户本地 l ⻄西⽠瓜⼤大丸⼦子汤:⼤大数据处在奴⾪隶社会 ⽆无底限的运⽤用规则⽇日益伤害⽤用户的权益,普通⽤用户失去了⾃自主性 案例:⻢马云,⼩小⽶米,Facebook 互联⺴⽹网的核⼼心:数据 l ⼲⼴广⼤大⺴⽹网民的各种需求被抑制,包括⼀一些强烈需求 l 上千万的互联从业⼈人员的创造性被抑制 l ⾃自建节点,⾃自建应⽤用,万⼈人规模左右的内测 现有的微博应⽤用,继续强化 ⺫⽬目前阶段: ü 其他语⾔言不适合 ü 丰富的开源资料 ü 跨平台 ü 编绎速度不到3秒 ü 模块化很好,耦合度很低 ü ⼤大量使⽤用google的技术 ü 我喜欢Golang 价值观,哲学思想都⽐比较符合 Golang 跨平台 前后发布了数⼗十个版本,上百次重构,⽤用golang毫⽆无压⼒力。主要得⼒力于以下特征: l 极简的语法 l 快速的编译 以前的同花顺客户端编绎要近20分钟,现在⼩小于3秒 l Package和易⽤用的接⼝口 耦合度低 模块化好 迭代和重构 l 初觉的很好 错误和异常是不同的0 码力 | 33 页 | 1014.12 KB | 1 年前3
Hello 算法 1.1.0 Go版能力 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来说,毕业论文、投递简历、准备笔试和面试已经消耗了大部分精 力,啃厚重的书往往变成了一项艰巨的挑战。 如果你也面临类似的困扰,那么很幸运这本书“找”到了你。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 古 代的计数方法和工具制作步骤等。随着文明的进步,算法逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 展示了在实际应用中常见的哈希算法。 ‧ MD5 和 SHA‑1 已多次被成功攻击,因此它们被各类安全应用弃用。 ‧ SHA‑2 系列中的 SHA‑256 是最安全的哈希算法之一,仍未出现成功的攻击案例,因此常用在各类安全 应用与协议中。 ‧ SHA‑3 相较 SHA‑2 的实现开销更低、计算效率更高,但目前使用覆盖度不如 SHA‑2 系列。 表 6‑2 常见的哈希算法 MD5 SHA‑10 码力 | 383 页 | 18.48 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a作符(operator)运算来完成的。 大多数高级编程语言都支持一些条件和循环 控制语句。 这些条件和循环控制语句可以看作是特殊的操作。 它们的语法接近 于人类语言,因此一个人写的代码很容易被其他人理解。 在 大 多 数 高 级 编 程 语 言 中 , 数 据 通 常 被 抽 象 为 各 种 类 型 ( type ) 和 值 (value)。 一个类型可以看作是值的模板。一个值可以看作是某个类型的实 例。 大多数编程语言支持自定义类型和若干预声明类型(即内置类型)。 具名常量)、以及 定义类型和类型别名将被统称为代码要素。 代码要素名必须为标识符 (identifier)(第5章)。 高级编程语言代码将被编译器或者解释器转换为底层机器码进行执行。 为了帮 助 编 译 器 和 解 释 器 解 析 高 级 语 言 代 码 , 一 些 单 词 将 被 用 做 关 键 字 (keyword)。 这些单词不能被当做标识符使用。 很多现代高级语言使用包(package)来组织代码。 在 IEEE-754 标 准 中 , 最 大 的 可 以 精 确 表 示 的 float32 类 型 数 值 为 3.40282346638528859811704183484516925440e+38,所以3.5e38不能表示任 何float32和complex64类型的值。 在 IEEE-754 标 准 中 , 最 大 的 可 以 精 确 表 示 的 float64 类 型 数 值 为 10 码力 | 608 页 | 1.08 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版能力 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来说,毕业论文、投递简历、准备笔试和面试已经消耗了大部分精 力,啃厚重的书往往变成了一项艰巨的挑战。 如果你也面临类似的困扰,那么很幸运这本书“找”到了你。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 古 代的计数方法和工具制作步骤等。随着文明的进步,算法逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 展示了在实际应用中常见的哈希算法。 ‧ MD5 和 SHA‑1 已多次被成功攻击,因此它们被各类安全应用弃用。 ‧ SHA‑2 系列中的 SHA‑256 是最安全的哈希算法之一,仍未出现成功的攻击案例,因此常用在各类安全 应用与协议中。 ‧ SHA‑3 相较 SHA‑2 的实现开销更低、计算效率更高,但目前使用覆盖度不如 SHA‑2 系列。 表 6‑2 常见的哈希算法 MD5 SHA‑10 码力 | 384 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0 Golang版能力 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来说,毕业论文、投递简历、准备笔试和面试已经消耗了大部分精 力,啃厚重的书往往变成了一项艰巨的挑战。 如果你也面临类似的困扰,那么很幸运这本书“找”到了你。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 SHA‑1 已多次被成功攻击,因此它们被各类安全应用弃用。 第 6 章 哈希表 hello‑algo.com 132 ‧ SHA‑2 系列中的 SHA‑256 是最安全的哈希算法之一,仍未出现成功的攻击案例,因此常用在各类安全 应用与协议中。 ‧ SHA‑3 相较 SHA‑2 的实现开销更低、计算效率更高,但目前使用覆盖度不如 SHA‑2 系列。 表 6‑2 常见的哈希算法 MD5 SHA‑1 ,节点之间通过指针相连接。上一节介绍了链表表示下的 二叉树的各项基本操作。 那么,我们能否用数组来表示二叉树呢?答案是肯定的。 第 7 章 树 hello‑algo.com 147 7.3.1 表示完美二叉树 先分析一个简单案例。给定一棵完美二叉树,我们将所有节点按照层序遍历的顺序存储在一个数组中,则每 个节点都对应唯一的数组索引。 根据层序遍历的特性,我们可以推导出父节点索引与子节点索引之间的“映射公式”:若某节点的索引为0 码力 | 382 页 | 17.60 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a我大概花了大约一年时间来消除这些困惑。 在这个时期,每当我消除了某个 主题的困惑,我就以该主题写一篇博客文章。 最后,我写了大约20篇Go文 章。 与此同时,我收集到了比以前更多的Go编程中的细节。 此时到了重启编 写一本新的Go编程书籍的时候了。 我写了另外大约十篇Go基础教程和另外大约二十篇Go语言中关于各种其它主 题的文章。 所以现在《Go语言101》大约有50篇文章。 你曾经的困惑主要包括哪些方面? 序员需要相当 的Go编程经验和感悟才能理解这些权衡。 Go提供了几种基本但非必需的类型,比如切片,接口和通道。 Go编译器和运 行时在实现这些类型的时候,进行了必要的封装。 一方面,这些封装为Go编 程带来了许多便利,使我们不用从头实现这些类型。 但另一方面,这些封装 隐藏了这些类型的内部结构, 从而对我们更深入地理解这些类型的值的行为 带来了一些障碍。 许多官方和非官方的Go教程都非常简单。 则此类型不确定值可以使用在此处。Go编译器将此类 型不确定值视为此特定类型的类型确定值。 这种情形常常出现在运算符运 算、函数调用和赋值语句中。 有些场景对某些类型不确定值并没有特定的类型要求。在这种情况下,Go编 译器将这些类型不确定值视为它们各自的默认类型的类型确定值。 上述两条类型推断规则可以被视为隐式转换规则。 本文下面的章节将展示一些类型推断的例子。 后续其它文章将会展示更多类 型推断的例子和规则。0 码力 | 821 页 | 956.82 KB | 1 年前3
Hello 算法 1.0.0b4 Golang版适合作为第一章的内容。然而,当我们讨论某个数据结构或算法的特点时,我们难以避免要分析其运行速度 和空间使用情况。因此,在深入学习数据结构与算法之前,建议读者先对复杂度建立初步的了解,并能够完 成简单案例的复杂度分析。 2.2. 时间复杂度 2.2.1. 统计算法运行时间 运行时间可以直观且准确地反映算法的效率。然而,如果我们想要准确预估一段代码的运行时间,应该如何 操作呢? 1. 确定运 )和非线性(树) 数据结构。 � char 类型的长度是 1 byte 吗? char 类型的长度由编程语言采用的编码方法决定。例如,Java, JS, TS, C# 都采用 UTF‑16 编 码(保存 Unicode 码点),因此 char 类型的长度为 2 bytes 。 51 4. 数组与链表 4.1. 数组 「数组 Array」是一种线性数据结构,其将相同类型元素存储在连续的内存空间中。我们将元素在数组中的位 部分研究人员和黑客则致力于寻找哈希算法的安全性问题。直至目前: ‧ MD5 和 SHA‑1 已多次被成功攻击,因此它们被各类安全应用弃用。 ‧ SHA‑2 系列中的 SHA‑256 是最安全的哈希算法之一,仍未出现成功的攻击案例,因此常被用在各类安 全应用与协议中。 ‧ SHA‑3 相较 SHA‑2 的实现开销更低、计算效率更高,但目前使用覆盖度不如 SHA‑2 系列。 6. 散列表 hello‑algo.com 1090 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Go 版在不同資 料規模下的效率。 時間複雜度 ‧ 時間複雜度用於衡量演算法執行時間隨資料量增長的趨勢,可以有效評估演算法效率,但在某些情況 下可能失效,如在輸入的資料量較小或時間複雜度相同時,無法精確對比演算法效率的優劣。 ‧ 最差時間複雜度使用大 ? 符號表示,對應函式漸近上界,反映當 ? 趨向正無窮時,操作數量 ?(?) 的 增長級別。 ‧ 推算時間複雜度分為兩步,首先統計操作數量,然後判斷漸近上界。 展示了在實際應用中常見的雜湊演 算法。 ‧ MD5 和 SHA‑1 已多次被成功攻擊,因此它們被各類安全應用棄用。 ‧ SHA‑2 系列中的 SHA‑256 是最安全的雜湊演算法之一,仍未出現成功的攻擊案例,因此常用在各類安 全應用與協議中。 ‧ SHA‑3 相較 SHA‑2 的實現開銷更低、計算效率更高,但目前使用覆蓋度不如 SHA‑2 系列。 表 6‑2 常見的雜湊演算法 MD5 SHA‑1 表示下的二元樹的各項基本操作。 那麼,我們能否用陣列來表示二元樹呢?答案是肯定的。 第 7 章 樹 www.hello‑algo.com 147 7.3.1 表示完美二元樹 先分析一個簡單案例。給定一棵完美二元樹,我們將所有節點按照層序走訪的順序儲存在一個陣列中,則每 個節點都對應唯一的陣列索引。 根據層序走訪的特性,我們可以推導出父節點索引與子節點索引之間的“對映公式”:若某節點的索引為0 码力 | 385 页 | 18.80 MB | 10 月前3
Go 入门指南(The way to Go)语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开 发了 UTF-8 字符集规范。自 2008 年 1 月起,Ken Thompson 就开始研发一款以 C 语言为目标结果的编 译器来拓展 Go 语言的设计思想。 这是一个由计算机领域 “发明之父” 所组成的黄金团队,他们对系统编程语言,操作系统和并行都有着非 常深刻的见解 图 1.1 Go 语言设计者:Griesemer、Thompson 际应用项目,你可以到 使用 Go 的组织 页面进行查看。 出于隐私保护的考虑,许多公司的项目都没有展示在这个页面。我们将会在第 21 章讨论到一个使用 Go 语言开发的大型存储区域网络(SAN)案例。 在 Chrome 浏览器中内置了一款 Go 语言的编译器用于本地客户端(NaCl),这很可能会被用于在 Go入门指南 - 10 - 本文档使用 看云 构建 Chrome OS 中执行 Go case 1: f() // 当 i == 0 时函数也会被调用 } 在 case ...: 语句之后,您不需要使用花括号将多行语句括起来,但您可以在分支中进行任意形式的编 码。当代码块只有一行时,可以直接放置在 case 语句之后。 Go入门指南 - 87 - 本文档使用 看云 构建 您同样可以使用 return 语句来提前结束代码块的执行。当您在 switch0 码力 | 380 页 | 2.97 MB | 1 年前3
共 30 条
- 1
- 2
- 3













