逐本溯源
zc搬码工
抬头不是自负,而是仰望星空;低头不是自卑,而是脚踏实地。
展开
-
真正的RESTFUL-API
转载:如何设计出优秀的Restful API?1 你一直在错误的使用http协议现在微服务真是火的一塌糊涂!大街小巷,逢人必谈微服务,各路大神纷纷忙着把自家的单体服务拆解成多个Web微小服务!而作为微服务之间通信的桥梁,Web API的设计就显得非常重要。Http是目前互联网使用最多的协议,没有之一!但是作为Http协议创始人之一的Roy Fielding认为,过去十年,大家都在错误的使用Http协议。删除一个数据,路径往往是 delete/{id} , 更新一条数据,路径往往被定义为update/{转载 2020-09-18 16:21:47 · 293 阅读 · 0 评论 -
快速上手设计模式5 - 适配器模式
前面四篇博客已经把五种创建型的设计模式已经整理完,工厂方法模式和抽象工厂模式在我看来其实属于同一类型,详见快速上手设计模式2 - 工厂方法模式与抽象工厂模式 现在开始整理结构型的设计模式。 适配器模式概念:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。例子:我新买的充电器只能充安卓手机的电,但是我朋友的苹果手机也想充电,如果有一...原创 2018-06-12 15:44:56 · 230 阅读 · 0 评论 -
快速上手设计模式3 - 建造者模式
建造者模式概念:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。不懂?换个解释: 想玩吃鸡,需要一个性能好一点的电脑主机,可是电脑主机有CPU、主板、内存等配件,如果每个配件都单独购买,就要考虑CPU与主板之间有匹配问题,主板与内存条之间也有匹配问题,作为小白的我不知道怎么办。所以商家直接给出了几个主机套装方案,我只需要选择一个套装方案,付钱,然后等装机师傅组装好就能...原创 2018-06-05 16:57:51 · 209 阅读 · 0 评论 -
快速上手设计模式6 - 桥接模式
桥接模式概念:把抽象化与实现化解耦,使得二者可以独立变化。不懂,举例:每个公司都有电话转接器,每当客户打电话到总台,然后输入对应的分机号,就可以转接到对应工号的电话上了。这里的电话转接器就作为一个桥,起了桥接的作用,这就是桥接模式。首先创建电话接口,声明接电话方法public interface Phone { void sayHello();}然后至少创建两个实现类...原创 2018-06-12 17:36:44 · 187 阅读 · 0 评论 -
java常用日志框架介绍
转载自:java常用日志框架介绍java日志概述对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,基于日志的业务逻辑统计分析等都离不日志。java领域存在多种日志框架,目前常用的日志框架包括Log4j,Log4j 2,Commons Logging,Slf4j,Logback,Jul。java常用日志框架类别介绍Log4j Apache Log4j是一个基于J...转载 2018-06-13 11:46:27 · 261 阅读 · 0 评论 -
快速上手设计模式7 - 代理模式
代理模式概念:给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。简单的例子:我请代理律师帮忙打官司,他知道法律相关的东西,而我不了解法律,我只知道签字,如果叫我去打官司我肯定打不赢,所以我叫代理律师代替我去打官司。创建接口public interface Sourceable { /* 打官司 */ public void lawsuit();}接口实...原创 2018-06-15 11:21:17 · 222 阅读 · 0 评论 -
快速上手设计模式1 - 单例模式
很久没有写博客了,最近抽时间来温习一下设计模式,首先整理一下最简单最基础的单例模式,它属于创建型的设计模式。废话不多说,直接上干货。概念:保证一个类只存在一个实例,并将这个实例供整个系统访问。常见的单例模式有五种:饿汉式、懒汉式、双重检查锁、静态内部类、枚举类型饿汉式:这个对象很饿、很急,程序加载就创建实例。关键词:staticpublic static class Singlet...原创 2018-06-01 15:11:13 · 304 阅读 · 0 评论 -
快速上手设计模式8 - 装饰模式
装饰模式概念:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。例子:还是以打官司为例子,不管过程和结果怎么样,我只是签字而已,可是对外我不能跟人说我只是签个字就赢了这个官司,此时我就需要把这全部的事迹请包装公司包装一下,然后由包装公司帮我对外说我是怎么怎么做才赢下的官司。还是先创建接口public interface Sourceable { /* 打官司 */...原创 2018-06-15 18:12:30 · 178 阅读 · 0 评论 -
快速上手设计模式9 - 组合模式
组合模式概念:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。例子:网页通常有导航菜单,菜单分为一级菜单、二级菜单、三级菜单甚至更多,此时就适合用组合模式,表示菜单的树形结构。创建菜单类,同时提供引用自身对象的listpublic class Menu { /* 菜单等级 */ String level; /* ...原创 2018-07-04 13:49:23 · 173 阅读 · 0 评论 -
快速上手设计模式10 - 外观模式
外观模式概念:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口很好理解的例子:电脑买好了,只需要按“开机”键就开机了,但对系统来讲开机过程其实挺复杂的,这个开机键就是外观模式的接口,而系统内部的复杂操作不需要外界知道。开机过程需要启动主板、CPU、内存/** 主板类 */public class Mainboard { public void startMain...原创 2018-07-05 11:07:41 · 166 阅读 · 0 评论 -
快速上手设计模式11 - 享元模式
享元模式概念:使用共享对象进而有效地支持大量的细粒度的对象首先理解两个概念:内部状态、外部状态内部状态:在享元对象内部不随外界环境改变而改变的共享部分。外部状态:随着环境的改变而改变,不能够共享的状态就是外部状态。都不懂,很简单:现在有一个画图软件,能画出各种颜色的圆形。我们就可以把圆形作为享元对象,颜色就作为内部状态是可以共享的。首先创建享元类,圆形public cla...原创 2018-07-05 15:49:58 · 211 阅读 · 0 评论 -
WEB基本表单及代码(HTML)
由于前两年csdn内容整改导致之前的博客内容排版都错乱了,于是我将内容进行修复,同时放到我的个人博客网站里面,网站才建立不久,很多功能也存在bug,所以暂时不对外开放,欢迎你来吐槽哟。我进大学学的第一个东西就是html(超文本标记语言),简单的理解就是用一个一个的标签,把一个界面所有的东西都展示出来。表单也是一个html标签,不过他允许提交数据到后台,于是,我开始从事web开发。 ...原创 2014-09-23 20:01:00 · 4354 阅读 · 0 评论 -
JavaScript基础
JavaScript(Java脚本)是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。简单的说,js能完成前端页面的逻辑操作。举个例子:<script>function displayDate(){ alert(Date());}</script><button type="button" oncl...原创 2014-09-23 20:47:23 · 835 阅读 · 0 评论 -
javascript基础
JavaScript(Java脚本)是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。简单的说,js能完成前端页面的逻辑操作。举个例子:<script>function displayDate(){ alert(Date());}</script><button type="button" onclick="...原创 2018-11-16 14:14:40 · 163 阅读 · 0 评论 -
快速上手设计模式12 - 责任链模式
终于把项目昨晚了,抽时间开始整理行为型的设计模式,责任链模式;责任链模式概述:责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。不是很理解,举个简单的例子:我要请...原创 2018-12-18 11:19:58 · 150 阅读 · 0 评论 -
深入理解js闭包
一直觉得js闭包(closure)很神秘,今天就来看看js闭包是什么东西。谈到js闭包,就要说到变量的作用域,js中的变量作用域和java差不多,应该很好理解。一、变量的作用域变量的作用域无非就是两种:全局变量和局部变量。var n = 999;function f1(){ console.log(n);}f1(); //999n作为全局变量,函数内部也能获取到;换言之,...原创 2019-01-07 17:40:07 · 484 阅读 · 0 评论 -
快速上手设计模式2 - 工厂方法模式与抽象工厂模式
工厂方法模式和抽象工厂模式是两个不同的设计模式,但个人认为两种模式放到一起会更容易理解他们。工厂方法模式的概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类,不懂?接着往下看。常见的工厂方法模式有几种:简单工厂、多方法工厂,工厂方法举例:通过工厂方法模式创建并获取一个因特尔CPU对象,假设这个CPU对象的创建过程很复杂。简单(静态)工厂:工厂静态声明了各个产品的创建接口和参...原创 2018-06-05 11:48:00 · 247 阅读 · 0 评论 -
快速上手设计模式4 - 原型模式
概念:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。关键词:拷贝。获取对象不是通过new(类实例化)的方式,而是通过clone(拷贝)的方式最主要的优点:对象创建速度快,显著提升性能。适用场景:直接创建对象需要花费大量的资源,同时该对象需要大量重复的创建。例子:10000人的公司需要统一使用办公电脑,硬件环境每个人都一样,软件环境则根据每个人的需要自行安装。假设每...原创 2018-06-11 16:24:35 · 189 阅读 · 0 评论 -
数据结构整理(一)Collection与Map
名词解释:Collection:接口,所有集合接口的父接口,提供更具体的子接口(如 Set 和 List)实现;Collections:类,为集合提供服务的工具类;Map:接口,图,不同于集合,以key-value键值对对数据进行存取;Collection与Map关系Collection├ List│ ├ LinkedList│ ├ ArrayList│ └原创 2017-04-07 16:01:06 · 418 阅读 · 0 评论 -
数据结构整理(二)Collection集合接口
本文主要整理Collection集合相关接口。Collection接口下有两个子接口List和Set,本着大家浅显易懂和便于自我整理的思想,本人整理了一个表。List:List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引来访问List中的元素,这类似于Java的数组。Set:不包含重复的元素的Collection,即任意的两个元素e1和e2都有原创 2017-04-07 17:14:38 · 349 阅读 · 0 评论 -
深入理解编码字符的发展史
1.鼻祖,ascii,7位(bit)范围128计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码。ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符。2.随之出现扩展ascii,8位范围256后来他们突然发现,如果需要按照表格方式打印这些字符的时候,缺少了“制表符”。于是又扩展了ASCII的定义,使用一个字节的全部...原创 2017-04-01 13:49:24 · 1843 阅读 · 0 评论 -
单例模式的八种写法比较
原文 http://tianweili.github.io/blog/2015/03/02/singleton-pattern/ 单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式。但是除了这两种方式,本文还会介绍其他几种实现单例的方式,让我们来一起看看吧。简介单例模式是一种常用的软件设计模式,其定义是单例原创 2017-04-01 15:04:03 · 286 阅读 · 0 评论 -
数据结构整理(三)map接口
本文由本人对常见map接口下相关实现类进行整理,包括HashMap、HashTable、WeanHashMap、LinkedHashMap、TreeMap用表进行整理,一目了然,方便大家理解各map概念与用法。 是否有序存储形式是否线程同步(安全)是否允许空(null)值是否允许相同元素其他特性HashMap无序数组+链表不同步原创 2017-04-11 13:39:04 · 355 阅读 · 0 评论 -
一分钟理解乐观锁与悲观锁
悲观锁:很悲观,认为每个数据库操作都想修改数据,因此所有数据库操作(增删查改)都加锁。比较安全,能够实时反映完整数据,但是性能较低。 乐观锁:很乐观,认为每个数据库操作都不会冲突(同一时刻不会有另一个线程进行数据库修改操作)。于是就不加锁了,但是简单的这样实现肯定会出问题(万一同一时刻真有另一个线程进行修改操作呢),于是在每次进行数据更新操作时加锁,判断一下此次更新是否只有我一个人操作。较悲观锁性原创 2017-04-11 17:51:32 · 288 阅读 · 0 评论 -
一分钟搞懂mysql、oracle、sql server分页查询
假设表db_table里有100条记录,每页展示十条记录,现在分别用mysql、oracle、sql server实现分页查询第二页记录。 mysql:/** * select * from table limit firstIndex,pageSize * 说明:limit后第一个参数为起始下标,第二个参数为需要查询的记录数 * firstIndex:起始下标(从0开始) * pageS原创 2017-04-14 10:00:13 · 386 阅读 · 0 评论 -
JUnit自动化单元测试(四):@RunWith测试套件运行器的使用
一些常用的测试方法前面已经说了,但有人又说了,JUnit为项目里每个类都创建一个对应的测试类,虽然一次能把类里面所有的方法都测试一遍,但是,我一个项目有可能有上千百个类,总不能每个类都点一下进行测试吧。 没错,@RunWith注解就是为了这种情况,我们先声明用套件运行器进行测试,然后把需要进行测试的所有类放进套件(集合)里面,一次就可以把所有类所有方法测试完,也叫打包测试。当我们没有声明的时候默认原创 2017-05-23 14:20:20 · 9641 阅读 · 2 评论 -
JUnit自动化单元测试(五):参数化测试
要成为JUnit测试高手必不可少的一项技能就是参数化测试了,现在有一个方法根据不同的参数会有不同的结果,为了测试全面如果把所有可能的情况都逐个写出来测试一遍那未免太low了,此时就可以用参数化测试,举个例子:package junit.demo;import static org.junit.Assert.assertEquals;import java.util.Arrays;import原创 2017-05-23 15:39:21 · 4938 阅读 · 2 评论 -
一分钟理解自动化单元测试
一直以来都对自动化测试颇有好感,最近利用空闲时间了解了一下,分享给大家。首先科普一下测试界的金字塔。 UI测试表示面向用户的界面测试,也就是外部质量。单元测试表示内部代码的逻辑测试,也就是内部质量。集成/接口测试则是系统各模块间的测试,连接系统内外的测试。根据金字塔,很显然UI测试很重要在金字塔顶端,但是在如今的软件行业,我们应该把测试的重心放到单元测试上,其次再到接口测试,有了底层内部质量的保证原创 2017-05-18 11:03:22 · 1652 阅读 · 0 评论 -
JUnit自动化单元测试(一):生成测试类
废话不多说,直接上步骤。第一步:导入Junit4包到项目中。可以自己到网上下载junit4 jar包,也可以用JDE自带junit测试工具包。以Eclipse为例第二步,创建测试类。现有Calcuate类,要测试其加减乘除四个方法,在该类的包点击右键 new other… ,新建JUnit Test Case, 填好各参数下一步,选择要测试的函数完成。 第三步,生成测试类,可以开始测试原创 2017-05-19 11:42:32 · 12345 阅读 · 0 评论 -
JUnit自动化单元测试(二):简单测试实例讲解
自第一篇起,我们现在有了测试类TestCalcuate,默认是这样的package junit.demo;import static org.junit.Assert.*;import org.junit.Test;public class TestCalcuate { @Test public void testAdd() { fail("Not yet im原创 2017-05-22 10:36:39 · 2856 阅读 · 0 评论 -
JUnit自动化单元测试(三):各常用注解和测试函数详细讲解
@Test:将一个方法修饰成一个可测试的方法;只有@Test修饰之后,这个方法才会被JUnit执行。@Test(expected=XXException.class):表示这个方法一定会抛出某个异常;如果没有抛出该异常则测试失败。 //测试代码 @Test(expected = ArithmeticException.class) public void testDiv()原创 2017-05-22 14:04:29 · 2243 阅读 · 0 评论 -
一分钟了解String、StringBuffer、StringBuilder的区别
对于String和StringBuffer的区别与联系,相信大多数人都知道: String是不可变的,一旦定义就不会改变,重新赋值只是新建了一个String对象。 StringBuffer是可变的,每次改变是对自身进行修改,因此在经常要对字符串进行拼接的情况最好用StringBuffer。 那为什么会有StringBuilder呢? 可以这么理解,StringBuffer和StringBui原创 2017-06-21 14:15:39 · 389 阅读 · 0 评论 -
如何理解数据库事务?我的回答是:
数据库事务(简称‘事务’)数据库事务是指作为单个逻辑工作单元执行的一系列数据库操作事务的特性ACID(Atomicity-原子性;Consistency-一致性;Isolation-隔离性;Durability-持久性)原子性:把整个事务执行看作一个不可再分的原子,也就是整个事务里的操作要么全部执行,要么都不执行(回滚-ROLLBACK)一致性:事务开始前和结束后,数据库原...原创 2018-03-05 13:42:12 · 3941 阅读 · 2 评论 -
JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
在linux环境下配置项目运行环境时,部署的人员都会分配一下内存,以保证程序正常的运行。其实在开发的时候(window系统),就已经涉及到内存分配了,只是这些参数有默认值,因此一直没有去重视它。 以Myeclipse为例,在Preferences->Java->Installed JREs下面,就有设置jvm内存分配。 这里我们就可以配置内存,一般我们见到的都是-Xms128m -Xmx512m原创 2017-04-07 11:29:33 · 31996 阅读 · 2 评论