应用 waPC (rust) 做软件测试工具第三届中国 Rust 开发者大会 应用 waPC (rust) 做软件测试工具 Alan poon 潘泳权 大家好! @rustropy_gaming ruito_89 PhoTto / image / chart Webassembly Procedures Call waPC 协议标准化了本机代码调用 WebAssembly 和 WebAssembly 调用本机代码的通信 (messaging) Microservices • Multiple backend product line with complex upstream • Common testing platform 大公司抓包工具的需求 软件测试工具 • 模拟数据规则 • 自动化测试 • Supports http/https/tcp/websocket(MITM) • Can use rust to construct own Support websocket stand in for wasm API 抓包 - Wasm Mock Server wasm 工具 does not invent the wheel 软件测试工具 • 模拟数据规则 • 自动化测试 ModifyRequest(req *http.Request) error{ … req_,err:=wasm.Invoke(ctx,req.url0 码力 | 30 页 | 2.50 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南bilibili.com/263032155 找不到头文 件怎么办呀 CMake Cookbook 小彭老师建议 : ~~-·~·~-·~ -~·-·~·- 第一章:文件 / 目录组织规范 基于 CMake 的 C/C++ 项目,如何优雅地、模块化地组织大量源文件 ? 推荐的目录组织方式 • 目录组织格式: • 项目名 /include/ 项目名 / 模块名 .h • 项目名 find_package(REQUIRED) 命令中指定的包名。 • 是系统的架构,例如 x86_64-linux-gnu 或 i386-linux-gnu 。 • (用于伺候 Ubuntu 喜欢把库文件套娃在 /usr/lib/x86_64-linux-gnu 目录下) https://zhuanlan.zhihu.com/p/60479441 举例说明 find_package fig.cmake • /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake • /usr/share/cmake/Qt5/Qt5Config.cmake • /usr/lib/Qt5/Qt5Config.cmake • /usr/lib/x86_64-linux-gnu/Qt5/Qt5Config.cmake • /usr/share/Qt5/Qt5Config 0 码力 | 56 页 | 6.87 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台xN 监控 / 告警 xN 版本归档 xN 交付追踪 xN 数据度量 xN 服务、工单管理 事件、缺陷管理 想 法 用 户 运行阶段 需求阶段 研发阶段 现代软件交付挑战:开发 5 分钟,上线 2 小时 服务一:设计 | 代码编写 | 构建 | 测试 | 部署 | 发布 服务二:设计 | • 公共资源 / 业务资源利用率低 赋能多业务:一个平台解决了多异构项目的管理和规范 团队高效协作:定义团队角色工作流模板,随时可用云上环境 价值清晰呈现:为管理者提供全视角效能数据,赋能数字决策 人工低效操作减少 80% 构建资源利用率提升 60% 业务资源利用率提升 30% 统一治理内部规范,开发 自助上线;解放运维,工 作重心向业务稳定性保 障,建设平台工程体系 研发 自动化测试管理 • 与开发协同自动化验收 • 自动化测试效益分析 高效协同的测试管理 • 一套 YAML/Chart 模板管理数百微服务 • 每个技术栈抽象一套构建模板 • 运维统一工作流规范,开发自主使用 • 跨多项目复用模板 扫码查看易快报案例 强大免运维的模板库 • 系统纬度:集群、项目、服务、环境、工作流 • 项目纬度:构建、测试、部署, DevOps 指标 • 迭代纬度:需求到发布效率、质量分析0 码力 | 59 页 | 81.43 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串我也可以定义一个 “ hello”ms 是 mylib::String ,而且还是受 namespace 限制的,用户可以 自己 using namespace ,不会存在强迫别人接受你的那一套后缀名规范。 • 甚至可以自定义一个 class int32 具有成员函数,然后就可以快乐地 233_i32 .some_method() 了。而 rust 这种预先规定好一些后缀,就只能是他们标准库的那 不来了(释 放后,这块内存被操作系统收回,不慎写入这个弱引用,就会触发 segfault )。 • 其实 2 就是黑客破解一些 C 语言程序的思路,利用张心欣蒙眼的特性,利用他的粑粑,来 覆盖系统软件重要的数据结构(比如一个正在吃三文鱼刺身的西装),从而改变西装的行为。 弱引用失效案例 • 被引用的 string 本体修改的时候,原先生成的 string_view 会失 效(因为 ptr 和 string_view 其实也是 basic_string_view> 的类型别名。 string 源码解析 • 先看 GCC 标准库内部变量的命名规范,观察可以发现: • _M_xyz 表示成员变量 / 函数。 • _S_xyz 表示静态成员变量 / 函数。 • __xyz 表示函数参数。 • _Tp_xyz 表示模板类型参数。 string 的空基类优化 0 码力 | 162 页 | 40.20 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户) GCC 9 及以上( Linux 用户) CMake 3.12 及以上(跨平台作业) Git 2.x (作业上传到 GitHub ](https://github.com/jiayaozhang/OpenVDB_and_TBB) - [C++ 官方文档 ](https://en.cppreference.com/w/) - [C++ 核心开发规范 ](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md) - [LearnCpp 中文版 ](https://learncpp-cn0 码力 | 96 页 | 16.28 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户) GCC 9 及以上( Linux 用户) CMake 3.12 及以上(跨平台作业) Git 2.x (作业上传到 GitHub 之后执行该命令,操作系统会读取刚刚生成的可执行文件,从而执行其中编译成机器码, 调用系统提供的 printf 函数,并在终端显示出 Hello, world 。 厂商 C C++ Fortran GNU gcc g++ gfortran LLVM clang clang++ flang 多文件编译与链接 • 单文件编译虽然方便,但也有如下缺点: 1. 所有的代码都堆在一起,不利于模块化和理解。0 码力 | 32 页 | 11.40 MB | 1 年前3
Borsh 安全高效的二进制序列化self-describing • 保证序列化后的二进制唯一性和确定性 • 主要序列化规则 Borsh 规范 • 整数采用低字节序( little endian) 存储 • 对于动态长度的集合,先用一个 u32 存储集合 size • 对于原本无序的集合(如 hashmap ),存储时使用 key 的字典序排序 Borsh 规范 let a: [u32; 5] = [1, 2, 3, 4, 5]; let a0 码力 | 21 页 | 3.35 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vector是模仿指针行为的这些运算符,已然成为了 C++ 事实上的标准,而且也非常简洁明了。 • 因此所有的用户和库,都会按照这套运算符标准来 实现和使用迭代器,建立起了沟通的桥梁,节省了 各自创立一套规范的成本。 迭代器模式: ++ 的前置和后置 • 迭代器的自增运算符分为 ++p 和 p++ 两种写法。 • 他们都会产生 p = p + 1 的效果,但是有一个细微的 区别,就是他们被作为表达式时的返回值。 时就决心不支持直接接受 vector 作参数,而是接受他的 两个迭代器组成的区间!好处有: 1. 可以批量插入从来自另一个不同类型的容器,例如 list,只要元素类型相等,且符合迭代器规范。 2. 我可以自由选择对方容器的一个子区间(通过迭代器加 减法)内的元素来插入,而不是死板的只能全部插入。 • template // 这里 It 可以是其他容器的迭代器类型 0 码力 | 90 页 | 4.93 MB | 1 年前3
Zadig 产品使用手册Tekton Jenkins KubeSphere 1 、 敏捷协作方案介绍 持续集成 (CI) -> 持续交付 (CD) -> 持续部署 (CD) -> 持续运营 (CO) 质量右移 质量左移 软件研发核心工程实践:基于质量工程的持续交付体系( CI/CD 、 CO 、 CT 、 CS ) 工 程 实 践 : • 持 续 集 成 ( C I 针 对 代 码 ) • 持 续 交 付 ( C / 基 础 设 施 • 测 试 / 安 全 团 队 持续测试 (Continuous Testing) 持续安全 (Continuous Security) 软件研发核心工程实践:交付工程 CI/CD 开发者实践 软件研发核心工程实践:全流程质量工程实践 - 持续测试 CT/ 持续安全 CS 协 同 特 点 : • 流 程 可 定 义 • 工 具 可 扩 展 • 能 力 可 编0 码力 | 52 页 | 22.95 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: Visual Studio 2019 ( Windows 用户) GCC 9 及以上( Linux 用户) CMake 3.12 及以上(跨平台作业) Git 2.x (作业上传到 GitHub 章:线程 进程与线程 • 进程是一个应用程序被操作系统拉起来加载到内存之后从开始执行到执行结束的这样一个 过程。简单来说,进程是程序(应用程序,可执行文件)的一次执行。比如双击打开一个 桌面应用软件就是开启了一个进程。 • 线程是进程中的一个实体,是被系统独立分配和调度的基本单位。也有说,线程是 CPU 可 执行调度的最小单位。也就是说,进程本身并不能获取 CPU 时间,只有它的线程才可以。 不同在于:他的解构函数里会 自动调用 join() 函数,从而保证 pool 解 构时会自动等待全部线程执行完毕。 小彭老师快乐吐槽时间 • 多线程、异步、无阻塞、并发,能提升程序响应速度,对现实世界中的软件工程至关重要 。 • 反面教材: blender 在运行物理解算的时候,界面会卡住,算完一帧后窗口才能刷新一遍 ,导致解算过程中基本别想做事,这一定程度上归功于 opengl 原始的单线程设计。0 码力 | 79 页 | 14.11 MB | 1 年前3
共 18 条
- 1
- 2













