重构-改善既有代码的设计(十一)--处理概括关系

2018-06-12
阅读 1 分钟
2.2k
有一批重构手法专门用来处理概括关系(即继承关系),主要是将函数上下移动于继承体系之中字段上移和方法上移都用于将特性向继承体系的上端移动,字段下移和方法下移则将特性向继承体系的下端移动。构造函数比较难以向上拉动,因此专门有一个构造函数本体上移处理它,一般不会将构造函数往下推,因为以工厂函数取代构造...

重构-改善既有代码的设计(十)--简化函数调用

2018-06-12
阅读 3 分钟
2k
Rename Method 函数改名 问题 函数的名称未能揭示函数的用途。 方法 修改函数名称。 动机 好的函数需要有一个清晰的函数名。保证一看就懂 Add Parameter 添加参数 问题 某个函数需要从调用端得到更多信息。 方法 为此函数添加一个对象参数,让该对象带进函数所需信息。 动机 如果发现缺少参数,当然就需要添加参数。但是...

重构-改善既有代码的设计(九)--简化条件表达式

2018-06-12
阅读 1 分钟
2.3k
从If、then、else三个段落中分别提炼出独立函数1、将if段落提炼出来,构成一个独立的函数2、将then段落和else段落都提炼出来,各自构成一个独立的函数(如果发现嵌套的条件逻辑,先观察是否可以使用“以卫语句取代嵌套条件表达式”(此手法是下面的9.5),如果不行才开始分解其中的每个条件)

重构-改变既有代码的设计(八)--重新组织数据

2018-06-12
阅读 4 分钟
1.9k
前言 前面已经对方法,类列举了重构方法。现在该轮到字段了注:值对象:不可变对象引用对象:可变对象 Self Encapsulate Field 自封装字段 问题 你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙。 方法 为这个字段建立取值/设值函数,并且只以这些函数来访问字段。(getter和setter方法) 动机 子类可以通过覆...

重构-改善既有代码的设计(七)-- 在代码之间搬移特性

2018-06-10
阅读 2 分钟
1.5k
决定把责任放在哪对于对象设计是最重要的之一。重构可以很好的解决这个问题。以下是笔者的重构方法注:客户:调用接口客户类:使用了接口的类服务类:提供服务的类

重构-改善既有代码的设计(六)--重新组织函数

2018-06-10
阅读 5 分钟
2.4k
提炼函数:(由复杂的函数提炼出独立的函数或者说大函数分解成由小函数组成)你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立函数,并让函数名称解释该函数的用途。

重构-改善既有代码的设计(五)--重构列表

2018-06-09
阅读 2 分钟
2k
什么是重构列表 重构方法需要以一种特定的格式记录下来。按照格式记录下来的重构方法的集合叫重构列表 重构的记录格式 每个重构手法可分为5个部分: 名称 构建重构词汇列表,名称当然是很关键的了,要充分的表达出重构的核心关键; 概要 介绍重构手法的功能,以及应用场景;便于我们查找重构手法;包括三个部分: 一句话...

重构-改善既有代码的设计(四)--构筑测试体系

2018-06-08
阅读 1 分钟
1.9k
测试不光只测代码是否跑通,还要考虑各种情况,代码是否能做出正确的行为。所以添加一些测试用来测试代码健壮性。可以从如下情况考虑边界值抛出预期的异常

重构-改善既有代码的设计(三)--代码的坏味道

2018-06-08
阅读 2 分钟
3.2k
如果两个毫不相关的类中出现重复代码,则可以将重复代码提炼成一个函数放到一个独立类中或者只放在某一个类中(总之要放在合适的地方),然后其他类都去调用这个函数。

重构-改善既有代码的设计(二) --重构原则

2018-06-07
阅读 1 分钟
2.7k
为何重构 重构不是银弹,但是帮助你达到以下几个目的 改进软件设计 不良的程序需要更多的代码。而代码越多,正确的修改就越困难。改进代码设计的一个重要原则就是消除重复代码 使软件更容易被理解 优秀的代码能够让接收你代码的付出更少的学习成本。 重构更容易找到bug 重构能加深对代码的理解。然后就更容易找到bug 重...

重构-改善既有代码的设计(一)--重构,第一个案例

2018-06-07
阅读 4 分钟
2.8k
什么是重构 在不改变代码外在行为的前提下,对代码做出修改以改进程序内部的结构简单地说就是在代码写好后改进它的设计 谁该阅读这本书 专业程序员(能够提高你的代码质量) 资深设计师和架构规划师(理解为什么需要重构,哪里需要重构) 阅读技巧 带着疑问去读: 如果你想要知道重构是什么。第1章够了 如果你想要知道为...

轻松搞定后台管理--guns框架

2018-06-06
阅读 2 分钟
10.2k
Guns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架.Guns v3.0新增rest api服务,提供对接服务端接口的支持,并利...

缓存为王--深入分布式缓存

2018-06-02
阅读 2 分钟
7k
什么是缓存 缓存是存储在计算机的一个原始数据的复制集。为了便于访问 为什么缓存为王 缓存无处不在 按照位置来分:客户端缓存,服务端缓存,网络中的缓存按照部署方式来分:单机缓存,集群缓存。分布式缓存 为什么使用缓存 提高用户体验。一个成功的软件用户体验是关键 从网站架构看缓存 从位置层面来看缓存 客户端缓存...

class文件结构

2018-06-02
阅读 1 分钟
2.2k
class文件的大致结构从前到后 名称 用途 大小 补充说明 魔数 (用来验证是不是虚拟机合适的class文件 4字节 因为后缀名可以随意改动,所以使用魔数也是出于安全的考虑 版本号 (用来标识该class文件能够在哪个版本jdk运行) 4字节 前2字节是次版本号,后2字节是主版本号 版本高的jdk可以加载版本低的class文件 常量池 (...

http协议的缺点和确保web安全的https协议

2018-06-01
阅读 2 分钟
5.9k
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

常见大数据和空间面试题

2018-06-01
阅读 3 分钟
3.4k
过滤100亿黑名单 题目 假设有100亿个URL的黑名单,每个URL最多占用64B,设计一个过滤系统,判断某条URL是否在黑名单里。 要求 不高于万分之一的判断失误率;额外内存不超过30GB 答案 100亿个64B的URL需要640GB的内存,显然直接存哈希表不合理。考虑布隆过滤器,假设有一个长度为m的bit类型数组,如图所示: 输入阶段: ...

线程池源码分析

2018-05-30
阅读 5 分钟
1.8k
真正线程池的实现是通过ThreadPoolExecutor,ThreadPoolExecutor通过配置不同的参数配置来创建线程池。下面简单的介绍一下各个线程池的区别和用处。

CurrentHashMap源码剖析

2018-05-29
阅读 8 分钟
4.9k
concurrenthashmap(简称chm) 是java1.5新引入的java.util.concurrent包的成员,作为hashtable的替代。为什么呢,hashtable采用了同步整个方法的结构。虽然实现了线程安全但是性能也就大大降低了 而hashmap呢,在并发情况下会很容易出错。所以也促进了安全并且能在多线程中使用的concurrenthashmap

tocmat类加载:正统的类加载

2018-05-29
阅读 2 分钟
2.6k
部署在同一个服务器上的两个Web应用程序使用的Java类库可以实现相互隔离。不能要求一个类库在一个服务器中只有一份,服务器应当保证两个应用程序的类库可以互相独立使用。

JVM体系结构与GC调优(二)

2018-05-25
阅读 1 分钟
3.4k
jvm支持的垃圾收集器组合 组合选择的标准 吞吐量=应用运行时间/总时间 关注gc总耗时 暂停时间 关注每次gc的耗时 组合选择的场景 堆的调优 一般来说,堆越大越好(gc频率小,但单次gc时间变长) 设置参数 -xms 堆的最小值 -xmx 堆的最大值 每次调整堆大小都会发生fullgc 思考:如果为了不发生fullgc,是否就总是设置-xms = ...

jvm体系结构和gc调优(一)

2018-05-25
阅读 5 分钟
3.7k
大致流程如图:编译好的class文件通过类加载器从物理结构转换成运行时数据区结构。再通过jvm内置执行引擎和本地方法的调用实现 ps:本地方法就是带有native关键字的方法

算法思想

2018-05-22
阅读 1 分钟
3.3k
基础算法思想类别 递推 枚举 递归 分治 贪婪 回溯(试探) 模拟 递推 递推分类 顺推法:从已知条件出发,逐步推算出要解决问题的方法。 逆推法:从已知结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。 递推算法的经典运用 斐波那契数列(顺推法):由n-2,n-1项得到第n项银行存款(逆推法) 枚举 ...

mongodb索引

2018-05-21
阅读 1 分钟
2.2k
索引的概念 索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,通过索引可以快速找到我们查询的数据。提高查询效率 mongodb索引种类 _id索引 单键索引 多键索引 复合索引 过期索引 全文索引 地理位置索引 _id索引 mongodb中绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动...

分布式配置中心--autoconf

2018-05-20
阅读 1 分钟
4.9k
四个方面 配置的演进 各种分布式配置中心 autoconf介绍,功能介绍,以及易用UI autoconf实现原理 先回答什么是配置 {代码...} 配置的演进 分布式配置中心一览 {代码...} autoconf {代码...} autoconf的功能特点 {代码...} autoconf后台管理界面 autoconf的实现原理 {代码...} 注:配置对后台使用人员是加密的。如果要查看...

dubbo实现原理---源码分析

2018-05-15
阅读 2 分钟
6k
DUBBO 加载 spring加载bean的时候,遇到dubbo的命名空间时,会调用DubboNamespaceHandler类。执行init方法。将dubbo标签的各种子标签如service,reference存到一个叫parsers的HashMap中。 DUBBO标签的解析 所有通过标签定义的bean 都会定义成BeanDefinition。并且存到BeanDefinitionMap中 service标签,provide标签,con...