- 博客(28)
- 收藏
- 关注
原创 《重构,改善既有代码的设计》读书笔记四:在对象之间搬移特性
在对象的设计过程中,“决定把责任放在哪儿”是件非常重要的事情,如果设计不合理,会造成类因为承担过多责任而变得臃肿不堪,或者造成一个类“不负责任”而变得“贫血”。遇到这类情况,我们需要采用相应的手段对这种类进行恰当的重构,使其能够以优雅的姿态站立在程序之中。接下来介绍几种常用重构手段供大家参考。1、搬移函数(Move Method)如果一个类有太多行为,或者如果一个类与另一个类有太多合作而形成高度耦合,此时我会搬移函数。通过这种手段,可以使系统中的类更简单,这些类最终也将更干净利落地实现系统交付的任务
2020-09-21 11:01:11
193
原创 《重构,改善既有代码的设计》读书笔记三:重新组织函数
在写程序代码时,编写函数几乎是不可缺少的,所以对函数的重构,使其更恰当的包装代码是很有必要的。几乎所有时刻,问题来源于过长的函数(Long Method),由于他们包含太多的信息,这些信息又被函数错综复杂的逻辑所掩盖,不易鉴别,所以需要我们考虑如何对这样的函数进行重构,下面就列举一些常用的重构函数的手法,大家可以在自己的重构过程中灵活的运用。1、提炼函数(Extract Method)如果出现过长的函数时(具体多长的函数算长,可能没有统一的标准,有些公司会要求一个函数不能超过80行,但是长度不是关键
2020-09-15 10:21:36
166
原创 《重构,改善既有代码的设计》读书笔记二:代码的坏味道
一、什么样的代码应该被重构1、重复代码(Duplicate Code) 如果你在一个以上的地方看到相同程序结构,那么可以肯定:将其合而为一程序会变得更好。 以下列举一些大家在代码中常见的Duplicate Code同一个类的不同函数含有相同的表达式 如果发现在同一个类中的不同函数中存在相同的表达式,这时候就需要采用Extract Method提炼出重复代码,然后在需要使用的地方去调用被提炼出的那段代码即可。两个互为兄弟的子类内含有相同的表达式 遇到这种...
2020-09-07 13:43:06
212
原创 《重构,改善既有代码的设计》读书笔记一:初识重构
一、何为重构?对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。二、重构有哪些好处?1、改进软件设计 如果没有重构,程序的设计会逐步腐败变质。随着软件功能的增加,很多开发人员在未完全理解软件的整体设计之前便动手写代码,程序将逐渐失去自己的结构,开发人员越来越难以通过阅读代码而理解原来的设计。重构很像是在整理代码,让所有的代码回到它应该的位置,经常性的重构可以帮助代码维持自己该有的形态。 完成同一件事,设计不良的程序往往需要更多的...
2020-09-03 16:53:22
336
翻译 三、如何使用Hystrix
Hello World!以下是HystrixCommand的基本“Hello World”实现:public class CommandHelloWorld extends HystrixCommand<String> { private final String name; public CommandHelloWorld(String name) {...
2019-02-13 13:29:44
1223
翻译 二、Hystrix如何工作的
流程图下图显示了当您通过Hystrix向服务依赖项发出请求时会发生什么情况:下面详细地解释这个流程:1、构造一个HystrixCommand或HystrixObservableCommand对象第一步是构造一个HystrixCommand或HystrixObservableCommand对象,以表示您对依赖项的请求。向构造函数传递发出请求时所需的任何参数。如果依赖希望返回单...
2019-02-13 13:03:38
208
翻译 一、Hystrix
什么是Hystrix?在分布式环境中,不可避免地会有许多服务依赖项失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止跨服务的级联故障并提供回退选项来实现这一点,所有这些都可以提高系统的总体弹性。Hystrix的历史Hystrix是从Netflix API团队2011年开始的弹性工程工作中发展而来的。...
2019-02-13 11:01:09
271
原创 统一异常管理
一、自定义异常处理器import com.jd.y.saas.gauze.message.MessageHelper;public class GauzeException extends RuntimeException { private static final long serialVersionUID = 1L; /** * 错误代码 */ private S...
2018-10-26 15:28:07
332
原创 Java通过动态代理实现一个简单的拦截器
一、代理在使用动态代理实现拦截器之前我们先简单了解一下什么Java的代理。代理,顾名思义,就是不直接操作被代理(下面都用目标对象称呼,听起来舒服一些)对象,而是通过一个代理对象去间接的使用目标对象中的方法。代理分为两种模式,一种是静态代理,一种是动态代理。接下来先写一个静态代理的例子。无论是静态代理还是动态代理,目标对象(target)都要实现一个接口(interface),注意,如果使用cgli...
2018-05-30 10:06:21
2122
原创 jvm调优总结
JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可用内存),分配新的对象,那么就会扩展堆,如果-Xmx设置的太小,扩展堆就会失败,导致OutOfMemoryError错误提示。实际上,细节不止于此, 堆...
2018-05-14 08:22:36
234
原创 Mac下tomcat启动报错Cannot run program。。。 Permission denied解决办法
mac下tomcat启动报错Cannot run program "/Users/horse_leo/Documents/apache-tomcat-7.0.75/bin/catalina.sh" (in directory "/Users/horse_leo/Documents/apache-tomcat-8.0.18/bin"): error=13, Permission denied从英文可...
2018-05-10 16:32:06
6800
原创 计算机系统的硬件组成
1、总线贯穿整个系统的是一组电子管道,称为总线(bus)。它携带信息字节并负责在各个部件之间传递。通常总线被设计成传送定长的字节快,也就是字(word)。字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。现在大多数机器字长要么是4个字节即32位,要么是8个字节(64位)。2、I/O设备输入设备:键盘、鼠标输出设备:显示器存储数据:磁盘3、主存:或者叫内存,是一个临时存储设备,在处理...
2018-05-08 13:35:28
1849
原创 Java中两个Long对象如何比较是否相等
抛出问题:Long a = 4l;Long b = 4l;a == b //trueLong a = 128l;Long b = 128l;a == b //false如果Long的值在[-127,128]之间,用“==”判断是否相等是没问题的,如果不在这个区间,是不能用“==”的,原因如下源码解释:public static Long valueOf(long l) { ...
2018-04-17 08:24:15
38182
1
原创 Spring应用上下文
spring加载应用上下文的几种方式1、AnnotationConfigApplicationContext:从一个或多个基于Java配置类中加载spring应用上下文,适用于Java注解方式;如果想从Java配置中加载应用上线文,可以按照如下方式加载:ApplicationContext context = new AnnotationConfigApplicationContext(com.s...
2018-04-16 08:54:12
416
转载 Maven最佳实践 划分模块 配置多模块项目 pom modules
原文地址:http://juvenshun.iteye.com/blog/305865 http://blog.csdn.net/woxueliuyun/article/details/9170369“分天下为三十六郡,郡置守,尉,监” —— 《史记·秦始皇本纪》 所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml。它们之间通过继...
2018-04-02 16:34:01
188
原创 如何配置Tomcat进行远程debug
在Tomcat的startup.bat文件加上红框内的内容,address代表端口号在idea中配置远程debug
2018-03-15 11:54:34
890
1
转载 Java中String直接赋字符串和new String的区别
解析Java中的String对象的数据类型 1. String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; 3. String str=”kvill”; Stri
2018-01-29 23:11:20
342
1
转载 git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
1 查看远程分支[plain] view plain copy$ git branch -a * br-2.1.2.2 master remotes/origin/HEAD -> origin/master remotes/origin/br-2.1.2.1 remotes/origin/br-2
2018-01-17 09:13:33
1537
转载 vscdoe常用快捷键
主命令框F1 或 Ctrl+Shift+P: 打开命令面板。在打开的输入框内,可以输入任何命令,例如:按一下 Backspace 会进入到 Ctrl+P 模式在 Ctrl+P 下输入 > 可以进入 Ctrl+Shift+P 模式在 Ctrl+P 窗口下还可以:直接输入文件名,跳转到文件? 列出当前可执行的动作! 显示 Errors或 Warnings,也可以 Ctr
2018-01-04 12:33:18
1157
翻译 DataMapper Flat-to-Structured and Structured-to-Flat Mapping(官方例子)
CSV to XML用于本示例的文件Input CSV File 123Name,Last Name,Street 1,ZipCode 1,Street 2,ZipCode 2John,Doe,123 Main Street,111,987 Cypress Avenue,222Jane,Doe,345 Main Street,111,
2017-12-26 15:13:41
235
翻译 DataMapper(一)
在Mule 3的所有当前版本和未来版本中,DataMapper都得到了完全的支持。但是,它将在Mule 4.0中被删除,以支持转换消息组件(基于DataWeave代码)。我们建议,如果您希望利用数据编织的新功能,或者如果您开始新的项目,现在就升级。现在,一个迁移工具被包含在Anypoint Studio中,它帮助将DataMapper映射转换为DataWeave。在AnypointStud
2017-12-25 10:21:08
2100
翻译 HTTP Request Connector(二)
在POST请求中发送表单参数为了在POST请求中发送参数,Mule消息的有效负载应(payload)该是一个带有要发送的参数的名称和值的映射。因此,在您的请求中发送表单参数的一种方法是在HTTP请求连接器之前添加一个Set payload元素,以便将消息的payload设置为发送的表单参数:例如,如果您使用Set payload元素来设置您的payload:#[{'ke
2017-12-24 21:29:22
309
翻译 HTTP Request Connector(一)
HTTP RequestConnectorHTTP请求连接器提供了最实用的使用外部HTTP服务的方法。在发送HTTP请求时,您可以选择使用什么方法(GET、POST等),可能包括一个主体(body)、头(header)、附件(attachment)、查询参数(query parameters)、表单参数和URI参数。然后,连接器接收响应,并将其传递给流中的下一个元素。该连接器还可以实现
2017-12-22 18:05:38
856
翻译 Mule消息结构
Mule消息是通过一个或多个流传递应用程序的数据。它由两个主要部分组成:. 消息头(Message Header),它包含关于消息的元数据.消息有效负载(Message Payload),它包含您的特定的业务数据。Mule消息本身嵌入在Mule消息对象(mule message object )中。一些Mule消息对象可能包含变量(variables)、附件(attachm
2017-12-22 08:56:18
1080
翻译 DevGuide-设计可重用的api以节省时间
在MuleSoft,我们经常讨论api引导的连接如何加速您的开发周期,我将在这里指导您如何完成它。api主导的方法是开发库、编写可理解的markdown文件并在GitHub上共享它们的自然演化。 我们都继承了一些人花时间构建一个可消费的库的好处,而像API这样的资源是这个思想过程的一个更强大的版本。这一过程值得一做,从头做起。这意味着首先要设计API规范。 在这个由三部分进行的系列文章中,我将介
2017-12-19 11:06:24
332
翻译 What is Mule esb
Mule是Anypoint平台的运行时引擎,它是一种轻量级的基于java的企业服务总线(enterprise service bus,ESB)和集成平台,允许开发人员快速、方便地将应用程序连接到一起,使他们能够交换数据。它可以轻松地集成现有系统,而不管应用程序使用的不同技术,包括JMS、Web服务、JDBC、HTTP等等。ESB可以在任何地方部署,可以实时或批量地集成和编排事件,并且具有通用连接性
2017-12-18 18:02:20
353
原创 IoC容器系列的设计与实现:BeanFactory和ApplicationContext
在Spring IoC容器的设计中,我们可以看到两个主要的容器系列,一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器的基本功能,另一个是ApplicationContext应用上下文,它作为容器的高级而存在。应用上下文在简单容器的基础上增加了许多面向框架的特性,同时对应用环境做了许多适配。下面就对Spring IOC容器中这两个系列的设计与实现进行一个简单的分析。1、
2017-09-29 21:34:23
280
原创 Java反射机制
一、概念 反射就是把Java的各种成分映射成Java相应的类。 反射是Java语言的一个特性,它允许程序在运行时来进行自我检查并对内部的成员进行操作,它允许一个Java的类去获取它所有的成员变量和方法并显示出来。 —–come from sun 反射是从jdk1.2就有的,ssh框
2015-11-23 15:28:42
279
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人