领域驱动设计&中台/用状态机封装领域逻辑用状态机封装领域逻辑 潘加宇 CONTENTS 01 状态机的作用 02 状态机要点和建模思路 03 状态机的实现 危险! 小孩耍大枪 危险! 新瓶装旧酒  Research?Re-Search?  连Re-Search都没有,随意发明新词  Subdomain?主题图。 测试 答对问题有奖金 金额从2.56元到20.48元 请扫我微信以便当场转账 加微信时烦告知尊姓大名 所有的逻辑 测试 答对问题有奖金 金额从2.56元到20.48元 请扫我微信以便当场转账 加微信时烦告知尊姓大名 作用 逻辑内移 都以为自己在做正常的事情, 系统却出问题了 强制封装保护信息完整性 条件语句?泛化?不重要了 作用 帮助定义恰当的责任  专家原则、可视原则  减少get/set  接口变简单 要素 状态 行为由组合决定 复杂就在这里!0 码力 | 30 页 | 1.75 MB | 1 年前3
 Java 应用与开发 - Java 内存模型与分配机制大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 应用与开发 Java 内存模型与分配机制 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 September 30, 2018 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 学习目标 1. 理解 JVM 内存模型,掌握 JVM 内存构成 2 虚拟机(Java Virtual Machine, JVM) ▶ Java 程序运行在 JVM 上,JVM 是程序与操作系统之间的桥梁。 ▶ JVM 实现了 Java 的平台无关性。 ▶ JVM 是内存分配的前提。 类装载子系统 Class文件 Class文件 Class文件 方法区 Java堆 Java栈 程序计数器 本地方法栈 执行引擎 本地接口 通过全限定名装载 操作系统 操作系统本地库0 码力 | 44 页 | 818.30 KB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 10 从稀疏数据结构到量化数据类型有了无边界的稀疏网格,再也不用担心二维数组要分配多大了。 坐标可以无限延伸,甚至可以是负数!比如 (-1,2) 等…… 他会自动在写入时分配 16x16 的子网格,称之为叶节点 (leaf node) ,而这里的 unordered_map 就是充当根节点 (root node) 。 图片解释稀疏的好处 传统稠密二维数组 无边界稀疏分块哈希表 此外,还是按需分配内存,即使被写入的部分奇形怪状也不会浪费内存。 浪费内存。 这些被写入的部分被称为激活元素 (active element) ,反之则是未激活 (inactive) 。 这就是稀疏的好处,按需分配,自动扩容。 分块则是利用了我们存储的数据常常有着空间局域性的特点,减轻哈希表的压 力,同时在每个块内部也可以快乐地 SIMD 矢量化, CPU 自动预取之类的。 第 2 章:位运算 稀疏的好处:坐标可以是负数 这样即使坐标为负数,或者可以是任意大的坐标,都不会产生越界错误。 结构。 • 下面这个例子中的稀疏数据结构,用这种语言可以表示为 hash().pointer(11).dense(8) 。 封装起来,方便多层解耦 封装起来,方便多层解耦 封装起来,方便多层解耦 封装起来,方便多层解耦 封装起来,方便多层解耦 • 这样就封装好了,通过模板的方式实现了 自定义的稀疏数据结构: • hash().pointer(11).dense(8) 开源的体素处理库:0 码力 | 102 页 | 9.50 MB | 1 年前3
 Comprehensive Rust(简体中文) 202412. . . . . . . . . . . . . . . . . . . 95 V 第三天:上午 97 18 欢迎参加第 3 天的课程 98 19 内存管理 99 19.1 回顾:程序的内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 19.2 内存管理方法 . . . . . . . . . . 实现 Unsafe Trait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 30.7 安全 FFI 封装容器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 30.7.1 解答 . . . . . . . . 'X'。 • Rust 会跟踪所有引用的生命周期,以确保它们存在足够长的时间。在安全的 Rust 中不会出现悬空 引用。x_axis 会返回对 point 的引用,但 point 会在该函数返回时取消分配,因此不会进行编 译。 • 我们会在讲到所有权(ownership)时详细讨论借用(borrow)。 9.2 独占引用 独占引用(也称为可变引用)允许更改其所引用的值。它们的类型为&mut T。0 码力 | 359 页 | 1.33 MB | 10 月前3
 C++高性能并行编程与优化 -  课件 - 06  TBB 开启的并行编程之旅全部执行完毕。 • 区别在于,一个任务不一定对应一个线程 ,如果任务数量超过 CPU 最大的线程数, 会由 TBB 在用户层负责调度任务运行在 多个预先分配好的线程,而不是由操作系 统负责调度线程运行在多个物理核心。 封装好了: parallel_invoke 更好的例子 第 1 章:并行循环 时间复杂度( time-efficiency )与工作量复杂度( work-efficiency 是元素个数 并行映射 4 个线程,每人处理 2 个元素的映射,花了 2 秒 用电量: 4*2=8 度电 结论:并行映射的时间复杂度为 O(n/c) ,工作复杂度为 O(n) ,其中 c 是线程数量 封装好了: parallel_for 面向初学者: parallel_for 基于迭代器区间: parallel_for_each 二维区间上的 for 循环: blocked_range2d 三维区间上的 log2(n) 次并行 for 即可完成 缩并。 • 这种常用于核心数量很多,比如 GPU 上 的缩并。 结论:改进后的并行缩并的时间复杂度为 O(logn) ,工作复杂度为 O(n) 。 封装好了: parallel_reduce 保证每次运行结果一致: parallel_deterministic_reduce 并行缩并的额外好处:能避免浮点误差,例如求平均值 扫描( scan )0 码力 | 116 页 | 15.85 MB | 1 年前3
 2022年美团技术年货 合辑Decoupled Head,在维持精度的同时, 进一步降低了一般解耦头带来的额外延时开销。 ● 在训练策略上,我们采用 Anchor-free 无锚范式,同时辅以 SimOTA[2] 标签 分配策略以及 SIoU[9] 边界框回归损失来进一步提高检测精度。 2.1 Hardware-friendly 的骨干网络设计 YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 Decoupled Head 结构图 2.3 更有效的训练策略 为了进一步提升检测精度,我们吸收借鉴了学术界和业界其他检测框架的先进研究进 展:Anchor-free 无锚范式 、SimOTA 标签分配策略以及 SIoU 边界框回归损失。 Anchor-free 无锚范式 YOLOv6 采用了更简洁的 Anchor-free 检测方法。由于 Anchor-based 检测器需 要在训练之前进行聚类分析以确定最佳 的提升。 SimOTA 标签分配策略 为了获得更多高质量的正样本,YOLOv6 引入了 SimOTA [4] 算法动态分配正样本, 进一步提高检测精度。YOLOv5 的标签分配策略是基于 Shape 匹配,并通过跨网格 匹配策略增加正样本数量,从而使得网络快速收敛,但是该方法属于静态分配方法, 并不会随着网络训练的过程而调整。 近年来,也出现不少基于动态标签分配的方法,此类方法会根据训练过程中的网络输0 码力 | 1356 页 | 45.90 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 13 C++ STL 容器全解之 vectorcontainer ) C++ 标准库五大件:迭代器( iterator ) C++ 标准库五大件:算法( algorithm ) C++ 标准库五大件:仿函数( functor ) C++ 标准库五大件:分配器( allocator ) 侯捷 STL 侯捷 STL vector 容器 vector 容器:构造函数 • vector 的功能是长度可变的数组,他里面的数据 存储在堆上。 • vector 的目标长度大于原有的容量时, 就需要重新分配一段更大的连续内存,并 把原数组长度的部分移动过去,多出来的 部分则用 0 来填充。这就导致元素的地址 会有所改变,从而过去 data 返回的指针 以及所有的迭代器对象,都会失效。 vector 容器: resize 到更小尺寸不会导致 data 失效 • 当 resize 的目标长度小于原有的容量时, 不需要重新分配一段连续的内存也不会造 成元素的移动(这个设计是为了性能考 ,因此重新扩容到 5 是不需要重 新分配内存的,也就不会移动元素导致指 针失效。 vector 容器: capacity 函数查询实际的最大容量 • 可以用 capacity() 函数查询已经分配内存的大小,即最大容 量。 • 而 size() 返回的其实是已经存储了数据的数组长度。 • 可以发现当 resize 指定的新长度一个超过原来的最大容量时 时,就会重新分配一段更大容量的内存来存储数组,只有这时0 码力 | 90 页 | 4.93 MB | 1 年前3
 Rust 程序设计语言 简体中文版 1.85.0我们将数组的值写成在方括号内,用逗号分隔的列表: 文件名:src/main.rs fn main() { let a = [1, 2, 3, 4, 5]; } 当你想要在栈(stack)而不是在堆(heap)上为数据分配空间(第四章将讨论栈与堆的更多 内容),或者是想要确保总是有固定数量的元素时,数组非常有用。但是数组并不如 vector 类 型灵活。vector 类型是标准库提供的一个 允许 增长和缩小长度的类似数组的集合类型。当不 的数组将包含 5 个元素,这些元素的值最初都将被设置为 3。这种写法与 let a = [3, 3, 3, 3, 3]; 效果相同,但更简洁。 访问数组元素 数组是可以在栈 (stack) 上分配的已知固定大小的单个内存块。可以使用索引来访问数组的元 素,像这样: 文件名:src/main.rs fn main() { let a = [1, 2, 3, 4, 5]; let 所有权(ownership)是 Rust 用于如何管理内存的一组规则。所有程序都必须管理其运行时使 用计算机内存的方式。一些语言中具有垃圾回收机制,在程序运行时有规律地寻找不再使用的 内存;在另一些语言中,程序员必须亲自分配和释放内存。Rust 则选择了第三种方式:通过 所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规 则,程序都不能编译。在运行时,所有权系统的任何功能都不会减慢程序的运行。0 码力 | 562 页 | 3.23 MB | 29 天前3
 《Java 应用与开发》课程讲义 - 王晓东二维数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.1 二维数组的声明和内存分配 . . . . . . . . . . . . . . . . . . . . . . 23 3.3.2 二维数组定义的含义 . . . . . . . . . . . . . . . . . 5.5 课后习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6 Java 内存模型与分配机制 58 6.1 Java 内存模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.1.1 Java 分为源代码级(需重新编译源代码,如 C/C++)和目标代码级 (Java) 平台 无关。 分布式 可支持分布式技术及平台开发。 可靠性 不支持直接操作指针,避免了对内存的非法访问;自动单元回收功能防止内存 丢失等动态内存分配导致的问题;解释器运行时实施检查,可发现数组和字符串 访问的越界;提供了异常处理机制。 . . . . . . . . . . . . . . . . . . . . . . . . . . .0 码力 | 330 页 | 6.54 MB | 1 年前3
 美团点评2018技术年货客户端外,目前提供了 C/C++、Python、Node.js、Golang 客户端,基本覆盖了主流的开发语言。对于 多语言客户端,核心设计目标是利用 C 客户端提供核心 API 接口作为底层基石,封装其他语言 SDK。 目前支持的主流语言使用指南: Java  C/C++  Python  Node.js  Golang  CAT 3.0 开源发布,支持多语言客户端及多项性能提升 可以看到:在极短的时间内,狂打 failed to allocate 64(bytes) of direct memory(...) 日志 (瞬间十几个日志文件,每个日志文件几百M),日志里抛出一个 Netty 自己封装的 OutOfDirectMemoryError 。说白了,就是堆外内存不够用,Netty 一直在“喊冤”。 堆外内存泄露,听到这个名词就感到很沮丧。因为这个问题的排查就像 C 语言内存泄露一样难以排查, 内存大于堆外内存的上限(用户自行指定),就抛出一个自定义 OOM Error,异常里面的文本内容正是 我们在日志里面看到的。 接下来,就验证一下这个方法是否是在堆外内存分配的时候被调用。 果然,在 Netty 每次分配堆外内存之前,都会计数。想到这,思路就开始慢慢清晰,而心情也开始从“秋 风瑟瑟”变成“春光明媚”。 阶段4:反射进行堆外内存监控 阶段4:反射进行堆外内存监控 CAT 0 码力 | 229 页 | 61.61 MB | 1 年前3
共 362 条
- 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 37
 













