首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于重构的总结

当事情被认为应该出错时,别忘了检查是否抛出了预期的异常 不要因为测试无法捕捉所有的bug就不写测试,因为测试的确可以捕捉到大多数bug 代码的坏味道 名称 备注 重复代码 同一个类的两个函数有相同表达式...一个类有太多行为,或与另一个类有太多合作形成高度耦合时 搬移字段 将字段迁移到目标类中,将源字段所有引用都改用为目标类的新字段 在其所驻之类之外的另一个类更多的使用到该字段时 提炼类 建立新类,将相关的字段和函数迁移到新类中...给对象增加一些可修改数据,并确保对任何一个对象的修改都能影响到所有的引用此对象的地方时 将引用对象改为值对象 将它变成一个值对象 一个引用对象很小且不可变且不易管理时 以对象取代数组 已对象替换数组,...GUI控件中,而领域对象函数需要访问这些数据 将单向关联改为双向关联 添加一个反向指针,并使修改函数同时更新两条连接 两个类都需要使用到对方特性时 将双向关联改为单向关联 去除不必要的关联 双向关联的类变成单向依赖时...,并直接调用前一个函数 当一个函数的返回值作为另一个函数的参数,且另一函数能调用该函数时 引入参数对象 以一个对象取代这些参数 某些参数总是很自然地同时出现时 移除设值函数 去掉该字段的所有设值函数 类中某个字段应该在该对象创建时被设值

99410

【Rust学习】07_结构体说明

我们将演示如何定义和实例化结构体,并讨论如何定义关联函数,尤其是称为方法的关联函数类型,以指定与结构类型关联的行为。您可以在程序中基于结构体和枚举创建新类型,以充分利用 Rust 的编译时类型检查。...如果结构体有更多的字段,重复每个名称会变得更加烦人。幸运的是,有一个简写的语法!...字段初始化简写当参数名称和结构字段名称完全相同,所以我们可以使用简写语法来重写 build_user,使其行为完全相同,但不会重复 username 和 email,如下所示。...这 ..user1 必须排在最后,以指定任何剩余的字段都应从 user1 中的相应字段获取其值,但我们可以选择以任何顺序为任意数量的字段指定值,而不管结构定义中字段的顺序如何。...当您想给整个元组命名并使元组成为与其他元组不同的类型时,以及当将每个字段命名为常规结构中会很冗长或多余时,元组结构非常有用。要定义元组结构,请从 struct 关键字和结构名称开始,后跟元组中的类型。

12910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    没有 SPN 的 Kerberoasting

    只有在目标帐户的 Active Directory 中设置了 DONT_REQ_PREAUTH 标志时,它才会成功。...它依赖于有意为您在 AD 中控制的帐户设置 DONT_REQ_PREAUTH 标志,并获取其$krb5asrep$ 哈希值。...TGS请求 TGS-REQ 包含票证请求的服务主体名称、TGT 和使用 TGT 会话密钥加密并包含当前时间戳的结构: TGS-REQ 数据包的内容 (#11) 当 KDC 收到 TGS-REQ 时,它会解密...探索主体名称的格式 让我们检查之前收集的 AS-REQ 数据包中的主体名称: Kerberos 流量中主体名称的示例 客户端主体名称在 cname 字段中传递,服务主体名称在 sname 字段中发送。...使用不正确 SPN 的 Kerberoasting 帐户 KDC 禁止退票的 SPN 有两种类型: 错误的语法 SPN 重复的 SPN,即当相同的 SPN 值分配给多个帐户时 如果 KDC 发现其中之一是这种情况

    1.3K40

    Activiti工作流框架学习笔记(一)之通用数据表详细介绍

    一.数据库表名称说明 Activiti的数据库表分5大部分,名称以ACT开头,第二部分是表用例的两个字符的标志,该用例与服务API的大致匹配: ?...next.dbid:属性值为1时,表示Activiti数据库表ID生成时,当前ID块最大值为1(即数据库里还没有任何数据)。...schema.history:属性表示数据表结构的更新历史,例如—— ? create(5.22.0.0)即表示使用了5.22版本的初始化脚本创建。...4.1.ACD_ID_USER用户表 流程引擎用户的信息被保存在ACT_ID_USER表中,该表有以下字段: ?...5.5.ACT_RU_JOB工作数据表 在流程执行的过程中,会有一些工作需要定时或者重复执行,这类工作数据被保存到ACT_RU_JOB表中。 ?

    4K30

    表格控件:计算引擎、报表、集算表

    对于 SpreadJS Designer,当右键单击任何这些对象时,还提供了一个新的“另存为图片”选项: 报表插件 行高列宽自适应 SpreadJS 报表插件现在支持行和列的自动调整。...启用后,当隐藏单元格处于活动状态时,编辑栏将不会显示任何数据,输入编辑器在编辑模式下将为空,并且公式编辑器面板将不会显示公式。 利用这个特性,可以保护一些单元格中的公式,避免使用者看到公式或修改。...图表 图表表结构引用 新版本已支持结构化参考公式,并且现在在表格中支持它们作为图表数据源。如果图表绑定到完整的表或使用表结构引用的表的某些列,则表中的任何更新都将在运行时自动更新图表的系列或数据值。...表格编辑器 自定义保存文件对话框 在新版本中,用户可以通过 API 设置保存时的文件格式以及文件名称,如下代码所示: 打印边框选项 SpreadJS 中已经存在 showBorder 方法,用于控制打印过程中是否显示边框...原始字段类型 当一个字段被分组时,它被视为一个分组字段。 即使在分组后,原始字段仍然保持为正常字段。 日期字段重新分组 重新分组需要使用原始字段的确切名称。

    13710

    Git 中文参考(八)

    --chmod=(+|-)x 设置更新文件的执行权限。 --[no-]assume-unchanged 指定此标志时,不会更新为路径记录的对象名称。...--replace 默认情况下,当索引中存在文件path时, git update-index 拒绝添加path/file的尝试。同样,如果存在文件path/file,则无法添加文件path。...但是当更改违反配置值时会发出警告,因为配置的值将在下次读取索引时生效,这将消除该选项的预期效果。 -- 不要将任何更多的参数解释为选项。 要采取行动的文件。...引用包含空格的字段,就好像它们是 C 源代码中的字符串一样;即,被双引号包围并带有反斜杠逃逸。使用 40“0”字符或空字符串指定零值。要指定缺失值,请完全省略该值及其前面的 SP。...无论使用哪种格式,都可以以 Git 识别为对象名称的任何形式指定值。任何其他格式的命令或重复的产生错误。

    16410

    Python 高级笔记第二部分:数据库的概述和MySQL数据表操作

    注意: 聚合分组的 select 后只能写聚合函数,无法查找其他字段,除非该字段值全都一样....但是会占用数据库物理存储空间,当对表中数据更新时,索引需要动态维护,降低数据写入效率。...(UNI):字段值不允许重复,但可为 NULL,KEY标志为 UNI 主键索引(PRI):一个表中只能有一个主键字段, 主键字段不允许重复,且不能为NULL,KEY标志为PRI。...✨级联动作:on delete / on update restrict(默认) : 当主表删除或修改记录时,如果从表中有相关联记录则不允许主表变动 cascade :当主表删除记录或更改被参照字段的值时...,从表会级联更新 set null:当主表记录变动时,从表外键字段值变为null no action:不进行级联操作 ⭐️表关联关系 当我们应对复杂的数据关系的时候,数据表的设计就显得尤为重要,认识数据之间的依赖关系是更加合理创建数据表关联性的前提

    1.8K20

    《深入理解Java虚拟机》读书笔记(五)–类文件结构

    如果多个标志同时存在,那么使用按位或(|)运算组合,判断标志位时,使用按位与(&),判断结果是否大于0即可。...修饰符 字段数据类型:基本类型、对象、数组 字段名称 上述信息中,各个修饰符都是布尔值,要么有某个修饰符,要么没有,很适合用标志位来表示,参考前面的访问标记。...而字段名称、字段数据类型都是无法固定的,只能引用常量池中的常量来描述。...属性表集合没有那么严格的限制,只要不与已有属性名重复,任何人实现的编译器都可以向属性表中写入自己定义的属性信息,Java虚拟机运行时会忽略掉它不认识的属性。...如果没有该属性,对程序产生的主要影响就是当抛出异常时,堆栈中就不会显示出错的行号,并且在调试程序的时候也无法按照源码行来设置断点。

    44850

    MySQL数据索引与优化

    当表更新操作远大于select操作时,不建议添加索引。 索引底层数据结构了解 数据组织方面 选择树形存储 基础数据结构中,hash时间复杂度(O(1))但支持顺序查找困难。...每个元素不保存数据,只保存索引值即主键。 所有叶子节点形成一个有序链表。 ?...因为非终结点只是关键字的索引,所以任何关键字的查找必须走一条根到叶子的路。 B+树中叶子结点也形成一个链表,所以B+树在面对范围查询时比B树更加高效。...前缀索引查询(注意选择性把握) 选择性指不重复的索引值和数据表的记录总数的比值。选择性最高时,即所有键不重复时选择性为1。...使用索引查询数据时,索引节点和数据被一起载入内存,不需要根据指针再进行一次IO读取。 无需维护辅助索引。当出现数据页分裂时,无需更新索引中的数据块指针。 非聚簇索引图: ?

    99951

    【随笔】MySQL 索引测试和性能优化指南

    提高排序效率:当 ORDER BY 语句使用索引时,MySQL 可以利用索引中的顺序直接返回排序结果。 提升分组性能:GROUP BY 语句在索引字段上执行时会更加高效。...缺点: 普通索引不保证唯一性,可能会导致重复数据。 对于高频繁插入、更新或删除的表,普通索引会降低性能,因为每次数据变动都需要更新索引。...不允许重复值。 支持 NULL 值。 缺点: 如果数据表中存在重复数据,创建唯一索引时会失败。 在插入、更新数据时,系统需要额外的时间检查唯一性,可能导致性能下降。...缺点: 对于非文本字段,全文索引无法使用。 索引建立和更新时需要消耗更多的资源。 对于小数据量的表,全文索引可能带来不必要的性能开销。...SELECT * FROM users WHERE YEAR(birth_date) = 1990; 数据类型不匹配:当查询条件中的数据类型与列的数据类型不匹配时,索引会失效。

    14810

    Go命令官方指南【原译】

    当获取签出或更新Git存储库时,它还会更新存储库引用的任何git子模块。 永远不会检出或更新存储在供应商目录中的代码。 有关指定包的更多信息,请参阅“go help packages”。...它在深度优先的后序遍历中访问它们,以便仅在所有依赖项之后列出包。未在命令行中明确列出的包将DepOnly字段设置为true。 -e标志更改错误包的处理,无法找到或错误的包。...请注意,更换模块后,其“替换”字段描述替换模块,其“目录”字段设置为替换的源代码(如果存在)。(也就是说,如果Replace为非nil,则Dir设置为Replace.Dir,无法访问替换的源代码。)...-u标志添加有关可用升级的信息。当给定模块的最新版本比当前模块更新时,列表-u将Module的Update字段设置为有关较新模块的信息。...当'go test'在包列表模式下运行时,'go test'会缓存成功的包测试结果,以避免不必要的重复运行测试。要禁用测试缓存,请使用除可缓存标志之外的任何测试标志或参数。

    8.1K30

    NumPy 1.26 中文文档(四十五)

    这些元组根据名称(如果给定还有标题)放置在此字典中。 *names 字段名称的有序元组。如果未定义字段,则为 NULL。 *f 指向一个包含类型需要实现内部特性的函数的结构体的指针。...当 nd 为 0 时,该数组有时被称为 0 阶数组。这样的数组具有未定义的维度和跨度,无法访问。宏 PyArray_NDIM 在 ndarraytypes.h 中定义,指向这个数据成员。...这些元组被放在此字典中,以名称(如果给定也是标题)为键。 *names 字段名称的有序元组。如果未定义字段,则为 NULL。 *f 指向包含类型需要实现内部功能的函数的结构的指针。...当 nd 为 0 时,有时称该数组为秩为 0 的数组。这样的数组具有未定义的维度和步幅,并且无法访问。宏 PyArray_NDIM 在 ndarraytypes.h 中定义,指向此数据成员。...这些元组被放置在此字典中,键为名称(如果给定也是标题)。 *names 一个有序的字段名称元组。如果未定义字段,则为 NULL。 *f 指向包含类型需要实现内部功能的函数的结构体指针。

    13410

    Class 类文件结构

    当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。...而这里的最大长度就是 length的最大值,即u2类型能表达的最大值65535。所以 Java程序中如果定义了超过 64KB英文字符的变量或方法名,将会无法编译。...上述信息中,字段修饰符可以使用布尔类型表示,要么有要么没有。而字段名称是无法固定的,只能引用常量池中的常量来描述。...Class 文件存储格式中对方法的描述与对字段的描述几乎采用了完全一致的方式。方法表的结构如同字段表一样,依次包括了访问标志、名称索引、描述符索引、属性表集合几项。...与 Class 文件中其它的数据项目要求的顺序、长度和内容不同,属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格的顺序,并且只要不与已有的属性名重复,任何人实现的编译器都可以向属性表中写入自己定义的属性信息

    88720

    springboot第71集:字节跳动全栈一面经,一文让你走出微服务迷雾架构周刊

    你可以在 node_modules/@toast-ui/chart/dist 目录下查找此文件,确认文件是否存在。 路径错误:检查文件路径是否正确。有时候可能是包更新后目录结构发生了变化。...详细描述和用途 **checkTableExist**: 此标志可用于检查主表或主要表在应用程序数据库中的存在。...在执行任何CRUD(创建、读取、更新、删除)操作之前,应用程序可能会检查此标志以确保表可用。 **checkBackupTableExist**: 这个变量可能用于验证备份表的存在。...在记录任何数据之前,应用程序将通过检查这个标志来确保日志表存在。 主键组成: 分区键:(accountId, day) 的组合形成复合分区键。这意味着数据根据这两个字段被分区并分布在集群中。...它提供了一种与Elasticsearch集群通信并对数据执行索引、搜索、更新和删除操作的直接方式。

    12110

    给女同事讲解MySQL数据库设计范式与反范式,她夸我“技术好”

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成;每个字段的值都只能是单一值。1971年埃德加·科德提出了第一范式。即表中所有字段都是不可再分的。...1.2 解决方案 想要消除重复组的话,只要把每笔记录都转化为单一记录即可: 简单改动即可 即标准的二维表结构。...3.2 解决方案 将不与PK形成依赖关系的字段直接提出单独成表即可: 4 三范式评价 优点 范式化的更新通常比反范式快 当数据较好的范式化后,很少或者没有冗余数据 范式化的数据比较小,放在内存中操作较快...缺点 存在大量冗余数据 数据维护成本更高(删除异常,插入异常,更新异常) 在企业中很好能做到严格意义上的范式成者反范式,一般需混合使用。...如果需要显示每个用户发了多少消息(类似论坛),可以每次执行一个昂贵的子查询来计算并显示它;也可以在user表中建个num_messages列,每当用户发新消息时更新这个值。

    61442

    SQL定义表(二)

    递增的值记录在已插入或更新的行的ROWVERSION字段中。名称空间可以包含具有RowVersion字段的表和不具有该字段的表。...对该表的任何后续插入或更新都会为该行的RowVersion字段分配一个顺序整数。该字段是只读的;尝试修改RowVersion值会生成SQLCODE -138错误:无法为只读字段插入/更新值。...每个串行计数器字段都维护自己的独立计数器。每当将一行插入表中时,串行计数器字段都会从其自动增量计数器接收一个正整数,该行没有提供任何值(NULL)或值为0。...每个表只能指定一个%AutoIncrement数据类型字段。每当将一行插入表中时,此字段都会从自动增量计数器接收一个正整数,该行没有提供任何值(NULL)或值为0。...当这些类在InterSystems IRIS数据库中保存并编译时,它们会自动投影到与类定义相对应的关系表中:每个类代表一个表;每个类代表一个表。每个属性代表一列,依此类推。

    1.5K10

    top命令

    -d interval: 指定屏幕更新之间的延迟,并覆盖个人配置文件中的相应值或启动默认值,启动后也可以使用d或s交互命令更改。...-i: 空闲进程切换,以倒转最后一个记忆中的i状态开始,关闭此切换时,将不显示自上次更新以来未使用任何CPU的任务。 -n limit: 指定top在结束前应产生的最大迭代次数或帧数。...、拒绝、优先排序、管理和监视进行细粒度控制,一个系统上可以同时存在许多不同的cgroup层次结构,并且每个层次结构都连接到一个或多个子系统,子系统表示单个资源,注意: CGROUPS字段与大多数列不同,...,当您选择显示命令行时,没有命令行的进程(如内核线程)将只显示程序名,此字段也可能受视图显示模式的影响,注意COMMAND字段与大多数列不同,不是固定宽度的,显示时,它加上任何其他可变宽度列将分配所有剩余屏幕宽度...NI: Nice Value,负的nice值意味着更高的优先级,而正的nice值意味着更低的优先级,此字段中的零表示在确定任务的调度能力时不会调整优先级。

    2.4K10

    【MySQL】MySQL知识总结

    对于任何想要使用 AUTO_INCREMENT 的列,应该定义为 NOT NULL,并定义为 PRIMARY KEY 或定义为 UNIQUE 键(不能有重复的)。...(可以为空也就是没有设置非空约束) 设置表字段唯一约束(UNIQUE,UK) 当数据库表中某个字段上的内容不允许重复时,可以使用UK约束进行设置。...UK约束在创建数据库时为某些字段加上“UNIQUE”约束条件,保证所有记录中该字段上的值不重复。如果在用户插入的记录中该字段上的值与其他记录中该字段上的值重复,那么数据库管理系统会报错。...---- 设置表字段的默认值(DEFAULT) 当为数据库表中插入一条新记录时,如果没有为某个字段赋值,数据库系统就会自动为这个字段插入默认值。...更新表中的数据记录 (更新就是修改) 更新数据记录是数据操作中常见的操作,可以更新表中已经存在数据记录中的值。

    7.3K52

    八股文!!

    ,任何一个路由器发生故障都会有问题 面向无连接:IP发包前不需要建立连接,即使接收方不存在也会直接发包。...快速重传 接收端按序接收报文,当收到一个失序报文段时,需要产生一个重复的确认报文,这个确认报文不该被延迟 发送端收到重复的确认报文时,无法判断重复确认是因为报文乱序到达还是报文丢失,因此等待少量重复的确认报文到来...当有错乱分组到达时不应延迟确认需要及时回复重复确认 收到一个重复确认意味着一个数据包到达目的主机 rto超时的拥塞避免 初始值:cwnd = 1 ,ssthresh = 65535 超时时:ssthresh...增长 MSS的值 重复确认的拥塞避免 初始值:cwnd = 1 ,ssthresh = 65535 三次重复确认时:ssthresh = cwnd/2 cwnd = cwnd + 3 * MSS 每次收到一个重复确认时...机器崩溃 机器崩溃时,tcp内核模块无法做出反应,对端不会接收到任何通知也不会再接收到任何数据 另一端read该套接字时,将会被挂起或得到EAGAIN错误 另一端write该套接字时将会持续重传,直到

    1K11

    RefactoringGuru 代码异味和重构技巧总结

    内联函数 问题:当方法主体比方法本身更明显时,请使用此技巧。 解决方案:用方法的内容替换对方法的调用,并删除方法本身。 提取变量 问题:你的表达式很难理解。...提取类 问题:当一个类做两个类的工作时,会非常笨拙。 解决方案:相反,创建一个新类,并将负责相关功能的字段和方法放在其中。...解决方案:删除这些方法,并强制客户端直接调用最终方法。 引入外部方法 问题:实用程序类不包含所需的方法,并且无法将该方法添加到该类中。...移除设置方法 问题:字段的值应该只在创建时设置,之后任何时候都不能更改。 解决方案:删除设置字段值的方法。 隐藏方法 问题:一个方法不被其他类使用,或者只在它自己的类层次结构中使用。...形成模板方法 问题:你的子类实现的算法包含顺序相同的类似步骤。 解决方案:将算法结构和相同的步骤移动到一个超类,并将不同步骤的实现留在子类中。

    1.9K40
    领券