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

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

用对象替换数组 问题:你有一个包含各种类型数据数组。 解决方案:数组替换为每个元素都有单独字段对象。 重复被观测数据 问题:存储类中领域数据是否负责GUI?...解决方案:从子类中删除字段,并将其移动到类。 上方法 问题:你子类具有执行类似工作方法。 解决方案:使方法相同,然后将它们移动到相关类。...上构造器主体 问题:你子类构造器代码基本相同。 解决方案:创建一个类构造器,并将子类中相同代码移动到它。子类构造器中调用类构造器。...下移方法 问题:类中实现行为是仅由一个(或几个)子类使用吗? 解决方案:将此行为移动到子类。 下移字段 问题:字段是否仅用于少数子类? 解决方案:字段动到这些子类。...用委托替换继承 问题:有一个子类只使用其一部分方法(或者不可能继承数据)。 解决方案:创建一个字段并在其中放置一个类对象,方法委托给类对象,并摆脱继承。

1.8K40

75.颜色分类——题解(执行用时击败90% ,内存消耗击败 78%)

观察题目描述和题目示例输出,0排序列最前面,2排序列最后面,因此,扫描数组,我们可以判断当前数字值: 如果是0,就往数列前部移动; 如果是2,就往数列后部移动。 问题2:如何前后移?...开始我们并不知道最终会有多少个0,但数列最前面一定是0,因此flag0初始值为数列最前面,即0;同样,开始我们并不知道最终有多少个2,但数列最后面一定是2,所以flag2初始值为数组最后一个元素索引位置...初始化完毕后,接下来开始扫描过程(即更新标记flag0和flag2过程): 如果当前元素是0,当前元素与索引为flag0元素互换位置,flag0++; 如果当前元素是2,当前元素与索引为flag2...如果序列里没有0,那么flag0始终指向数组第一个位置;同理,如果序列里没有2,flag2始终为数组最后一个元素索引位置。 问题4:如果当前元素为1,怎么处理? 不处理!为什么不处理呢?...就因为有两个标记flag0和flag2存在,因为两个标记严格限定了0和2边界,自然而言,两个边界之间就是1了。

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

《重构》第十一章 - 读后感(处理概括关系)

1.字段 两个子类有相同字段,那么就该字段移到父类中! 2.函数上 有些函数各个子类中产生完全相同结果,将该函数移动到类!避免行为重复是很重要,尽管重复自身只会成为错误源泉。...3.构造函数本体上 如果在各个子类中拥有一些构造函数,他们本体几乎完全一致,类中新建一个构造函数,并在子类构造函数中调用它。...4.函数下移 类中某个函数只与部分子类有关,那么就应该这个函数移动到相关子类中去。这块也从侧面表示了我们使用继承,应该尽量一些共性东西放到父类定义,而将特性放到子类中去。...5.字段下移 类中某个字段只被部分子类使用到,这个字段动到需要它子类中去。还是我们上边说,父类中放共性,子类放特性。...11.以委托取代继承 某个子类只使用类接口一部分,或者根本不需要继承而来数据,那么子类中新建一个字段用来保存类,调整子类函数,使它改为委托类;然后去掉两者之间继承关系。

63930

关于重构总结

对于数组每一个元素都以一个字段表示 一个数组元素各自代表不同东西 赋值“被监视数据数据复制到一个领域对象中,建立Observer模式,用以同步领域对象和GUI对象内重复数据 一些领域对象数据置身于...以状态取代类型码 有一个不可变类型码,且会影响到类行为,但无法用继承手法消除字段取代子类 修改这些函数,使他们返回某个字段,然后销毁子类 当各个子类唯一差别只“返回数据常量”函数身上...,用以表示某种错误情况 以测试取代异常 修改调用者,使它在调用函数之前先做检查 面对调用者可以预先检查条件,你抛出了异常 处理概括关系 名称 解释 动机 字段 将该字段移至类 子类拥有相同字段...函数上 将该函数移至类 有些函数,子类中产生相同结果 构造函数本体上 类中新建一个构造函数,并在子类构造函数中调用它 各个子类构造函数拥有几乎一致本体 函数下移 函数移到相关子类中去...子类新建一个字段用以保存类,调整子类函数,改为委托类,然后去掉两者之间继承关系 某个子类只使用了类接口中一部分,或是根本不需要继承而来数据 以继承取代委托 让委托继承受托类 两个类之间存在委托关系

96210

彻底搞懂ArrayList

transient Object[] elementData; 存储数据数组,该字段表明ArrayList底层数据结构是数组。...该方法链中grow方法是核心,第四个问题答案也grow中,多线程情况下,增加元素数据为什么导致集合中出现null值 public void ensureCapacity(int minCapacity...答案:我们并未对c做任何同步操作,多线程情况下,如果线程A调用c.size()得到结果是1,还未来得及调用c.toArray()方法,线程c元素移除掉,那么ArrayList就会出现size为1...答案:不通过迭代器删除元素,由于数据会进行前,可能(不是一定,要考虑元素位置)会造成数组越界和数据遗漏(i+1元素前移到i位置,那么原来i+1元素就会被遗漏掉),通过迭代器remove删除元素后...第四个问题:多线程情况下,增加元素数据为什么出现null值 因为grow并非线程安全操作,elementData会重新指向新数组,如果size发生自增,那么会跨过一个索引下标赋值。

41831

二分法题目:在有序数组中A内,查找数组某一个元素下标(本题是从由小到大顺序)

算法步骤如下: 初始化:首先,确定数组左右边界,通常初始边界数组起始索引,右边界数组末尾索引。 找到中间元素:计算左右边界中间索引,然后取得该索引元素值。...比较中间元素: 如果中间元素等于目标值,查找成功,返回元素索引。 如果中间元素大于目标值,说明目标值应该在左半边,边界动到中间索引左边一位。...如果中间元素小于目标值,说明目标值应该在右半边,边界动到中间索引右边一位。...如果数组无序,需要事先进行排序操作。 由于二分查找每次查找范围缩小为一半,因此它效率非常高,尤其是大型数据集中查找操作。 二分查找算法是一种迭代算法,也可以使用递归实现。...,所以能找到输出数组索引值不可能为-1 } /*本题问题1:为什么i<=j 意味着区间未比较元素,而不是i<j ?

26230

php基本语法复习

变量创建 php没有创建变量命令 变量会在首次赋值被创建 如果为变量赋值为文本,用引号包围该值 变量引用 变量引用也需要加‘$’ 取数组某一个元素加大括号{数组[index]} PHP...> 定义方法 array()函数用于创建函数三种数组类型 索引数组 - 带有数字索引数组 关联数组 - 带有指定键数组 多维数组 - 包含一个或多个数组数组 索引数组 索引是自动分配 索引自动分配...> arsort() 根据值对关联数组进行降序排序 krsort() 根据键对关联数组进行降序排序 全局变量 定义 php中许多预定义变量都是全局,这意味着他们一个脚本全部作用域中都可用,无需执行...用于收集HTML表单提交数据 下面是一个包含输入字段和提交按钮表单,当用户通过点击提交按钮来提交表单数据,表单发送到标签 action 属性中指定脚本文件....$_SERVER[“PHP_SELF”]表单数据发送到页面本身,而不是跳转到另一张页面,这样用户就能在表单页面获得错误提示信息 表单验证 验证名字 检查name字段是否包含字母和空格,如果name字段无效

16910

Elasticsearch Search API之(Request Body Search 查询主体)-上篇

missing values 由于es索引,类型下字段可以索引文档动态增加,那如果有些文档没有包含排序字段,这部分文档顺序如何确定呢?...即用户查询时候,搜索引擎查询到了目标数据docid后,需要高亮字段数据提取到内存,再调用该字段分析器进行处理,分析完后采用相似度算法计算得分最高前n组并高亮段返回数据。...simple 文本分成大小相同片段。 span 文本分割成大小相同片段,但尽量避免突出显示术语之间分割文本。这在查询短语很有用。...,最多fragmentSize个待关键字匹配条目,通常,页面上显示文本,应该用该字段取代原始值,这样才能有高亮显示效果。...每个文档中都索引了该字段。 该字段值只创建赋值,并不会更新。 字段基数应该很高(相当于数据索引选择度),这样能确保每个片返回数据相当,数据分布较均匀。

2.1K20

一文读懂如何用 Python 实现6种排序算法

总结了一下常见集中排序算法 归并排序 归并排序也称合并排序,是分治法典型应用。分治思想是每个问题分解成个个小问题,每个小问题解决,然后合并。...具体归并排序就是,一组无序数按n/2递归分解成只有一个元素子项,一个元素就是已经排好序了。然后这些有序子元素进行合并。...:起始索引为 0 “堆”中: 节点 i 右子节点在位置 2 * i + 24) 节点 i 父节点在位置 floor( (i - 1) / 2 ) : 注 floor 表示“取整”操作 堆特性...上,下移 : 当某节点键值大于它父节点,这时我们就要进行“上”操作,即我们把该节点移动到父节点位置,而让它父节点到它位置上,然后我们继续判断该节点,直到该节点不再大于它父节点为止才停止...''' #p,r 是数组A下标 def partition1(A, p ,r): ''''' 方法一,两个指针索引一前一后逐步向后扫描方法 '''

952100

一文读懂如何用 Python 实现6种排序算法

分治思想是每个问题分解成个个小问题,每个小问题解决,然后合并。 具体归并排序就是,一组无序数按n/2递归分解成只有一个元素子项,一个元素就是已经排好序了。然后这些有序子元素进行合并。...:起始索引为 0 “堆”中: 节点 i 右子节点在位置 2 * i + 24) 节点 i 父节点在位置 floor( (i - 1) / 2 ) : 注 floor 表示“取整”操作 堆特性...上,下移 : 当某节点键值大于它父节点,这时我们就要进行“上”操作,即我们把该节点移动到父节点位置,而让它父节点到它位置上,然后我们继续判断该节点,直到该节点不再大于它父节点为止才停止...''' #p,r 是数组A下标 def partition1(A, p ,r): ''''' 方法一,两个指针索引一前一后逐步向后扫描方法 '''...: 列表、元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?

86970

python 实现各种排序算法

归并排序 归并排序也称合并排序,是分治法典型应用。分治思想是每个问题分解成个个小问题,每个小问题解决,然后合并。...具体归并排序就是,一组无序数按n/2递归分解成只有一个元素子项,一个元素就是已经排好序了。然后这些有序子元素进行合并。...:起始索引为 0 “堆”中: 节点 i 右子节点在位置 2 * i + 24) 节点 i 父节点在位置 floor( (i - 1) / 2 ) : 注 floor 表示“取整”操作 堆特性...上,下移 : 当某节点键值大于它父节点,这时我们就要进行“上”操作,即我们把该节点移动到父节点位置, 而让它父节点到它位置上,然后我们继续判断该节点,直到该节点不再大于它父节点为止才停止...''' #p,r 是数组A下标 def partition1(A, p ,r): ''''' 方法一,两个指针索引一前一后逐步向后扫描方法 '''

49010

ElasticSearch权威指南学习(映射和分析)

概念 映射(mapping)机制用于进行字段类型确认,每个字段匹配为一种确定数据类型(string, number, booleans, date等)。...本章开始我们已经找到索引gb类型tweet中映射: GET /gb/_mapping/tweet 字段映射(叫做属性(properties)),这些映射是Elasticsearch创建索引动态生成...此外,你也可以晚些时候为新类型添加映射 ps:你可以向已有映射中增加字段,但你不能修改它。如果一个字段映射中已经存在,这可能意味着那个字段数据已经被索引。...如果你改变了字段映射,那已经被索引数据错误并且不能被正确搜索到。...如果你创建一个新字段,这个字段索引了一个数组,Elasticsearch将使用第一个值类型来确定这个新字段类型。 空字段 数组可以是空。这等价于有零个值。

1.1K10

一文读懂如何用 Python 实现6种排序算法

总结了一下常见集中排序算法 归并排序 归并排序也称合并排序,是分治法典型应用。分治思想是每个问题分解成个个小问题,每个小问题解决,然后合并。...具体归并排序就是,一组无序数按n/2递归分解成只有一个元素子项,一个元素就是已经排好序了。然后这些有序子元素进行合并。...:起始索引为 0 “堆”中: 节点 i 右子节点在位置 2 * i + 24) 节点 i 父节点在位置 floor( (i - 1) / 2 ) : 注 floor 表示“取整”操作 堆特性...上,下移 : 当某节点键值大于它父节点,这时我们就要进行“上”操作,即我们把该节点移动到父节点位置,而让它父节点到它位置上,然后我们继续判断该节点,直到该节点不再大于它父节点为止才停止...''' #p,r 是数组A下标 def partition1(A, p ,r): ''''' 方法一,两个指针索引一前一后逐步向后扫描方法 '''

74890

SQL Server 大数据管理——表分区

增加分区 增加分区方法是某个现有的分区“拆分”为两个分区并重新定义新分区边界。...合并分区 减少分区方法是两个分区边界“合并”成一个。减少分区操作重新填充一个分区而不对另一个分区进行分配。...,分区合并后,合并分界点后一个分区数据动到前一个分区文件中。...2.普通表和分区表结构相同,包括字段数据类型、数据长度、索引等 分区表上tradedate上有聚集索引,但普通表tradelog_partition1上没有建聚集索引,执行上述脚本就会报如下错误:...普通表和分区表结构相同,包括字段数据类型、数据长度、索引等 分区表上tradedate上有聚集索引,但普通表tradelog_partition1上没有建聚集索引,执行上述脚本就会报如下错误: ?

76820

Page management in InnoDB space files(4.InnoDB Space文件页管理)

FULL_FRAG:与FREE_FRAG类似,但是对于没有剩余空闲页面的区段,当区段已满时候,区段将从FREE_FRAG移动到FULl_FRAG,当页面被释放时候,区段回FREE_FRAG,这时候区段就不再满了...当使用最后一个空闲页是偶,区段动到完整列表。 FULL:没有分配给此文件段空闲页区段,如果页面变为空闲,则将区段移动到NOT_FULL列表。...当且空间id有些多余,他们始终与当前空间相同,索引节点页中指向文件段索引节点条目的页码和offset,这两个文件段始终存在,即使他们可能完全为空。...例如,一个新创建表中,唯一存在是页面的根页面,他也是要给叶子页面,但是存在于内部文件段中,以便它不必再以后被移动,叶文件段INODE列表和片段数组全部为空,内部文件段INODE列表全部为空...,单个根页面位于片段数组中。

94921

JMeter通过正则表达式、JSON提取器获取变量

,然后获取Token赋予到HTTP信息头,供其它接口调用 一、JSON提取器 1....在给大家介绍一种结果为数组格式怎么取值,如下图所示,results保存了数组格式值,先要知道数组索引,然后才能继续读取数组值,学过python应该就清楚,只要从0依次递增就能取到需要值,如resulst...(@.name=='function')].id,该json path可以通过一个变量定位到自己所在数组索引,然后去取需要id,比如automation这个值是唯一值,就可以通过该值取到需要值...(@.name=='function')],其中name是序列中一个唯一值,可以根据需要修改,function是name实际为什么值就填什么,最后加"."...后面跟你需要取字段名如id,pah都行,只要在这个数组中存在 ? 9.

5.3K84

MongoDB实战面试指南:常见问题一网打尽

答案:MongoDB中文本索引用于支持全文搜索功能。文本索引可以包含一个或多个字段,并为这些字段文本内容创建索引。创建文本索引后,可以使用text操作符索引字段上执行全文搜索查询。...当数组字段元素是文档, elemMatch允许我们指定多个查询条件,并只返回满足所有条件数组元素。使用elemMatch,需要在查询语句中指定数组字段名和包含查询条件对象。...当查询或更新操作,MongoDB会根据分片键请求路由到相应分片上进行处理。 分片可以帮助扩展数据性能和存储容量。通过数据分布多个服务器上,可以并行处理更多请求,提高吞吐量。...例如,可以使用地理空间索引来查询某个地理位置附近点或查询两个地理位置之间距离。 文本索引(Text Index):文本索引用于支持全文搜索功能,允许用户字符串字段中执行复杂文本搜索查询。...此外,文本索引还支持多种语言文本搜索。 哈希索引(Hashed Index):哈希索引使用哈希函数字段值转换为哈希值,并为这些哈希值创建索引

22010

PHP 常用函数大全

数组指针操作 key 返回数组内部指针当前指向键名 current 返回数组中的当前元素 next 把指向当前元素指针移动到下一个元素位置,并返回当前元素值 prev 把指向当前元素指针移动到上一个元素位置...从结果中取得和指定字段关联标志 mysql_field_len 返回指定字段长度 mysql_field_name 取得结果中指定字段字段名 mysql_field_seek 结果集中指针设定为制定字段偏移量...结果中字段 mysql_list_processes 列出 MySQL 进程 mysql_list_tables 列出 MySQL 数据库中表 mysql_num_fields 取得结果集中字段数目...用给定角度旋转图像 imagesavealpha 设置标记以保存 PNG 图像保存完整 alpha 通道信息(与单一透明色相反) imagesetbrush 设定画线用画笔图像 imagesetpixel...session_decode 将会话数据从一个会话编码字符串 session_destroy 销毁已注册到会话所有数据 session_encode 当前会话数据编码为一个字符串 session_get_cookie_params

3.6K21
领券