自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

原创 组合与继承

组合优于继承这里说一下继承的缺点: 1. 继承导致类爆炸, 使用继承的方式添加功能会导致一个功能一个类, 累积起来就会导致类的数量爆炸. 2. 继承导致代码重复: 实现类似的功能必然会导致相似的代码, 而这些相似的代码位于不同的类中导致大量的重复代码. 3. 当你试图提取重复代码到父类时, 你就会发现你有一个巨无霸类!!!那么现在假设你只有一个类, 如何让它产生不同的功能? ...

2018-03-07 22:47:56 181

原创 关于语言的一些想法

各种编程语言的首要作用是沟通, 其次是运行. 就目前而言, 我们所需要的基本沟通要素:结构定义,算术表达式,逻辑表达式,条件语句等在目前流行的各个语言中都有相似的实现, 相同的概念, 所以当不同语言的程序员在沟通时任然不会有太多的障碍. 这一切都得益于统一的语言基本要素.但是在DSL中, 作者可以假借特定领域的接口发明一些莫名其妙的语法, 给沟通增加了很大的成本. 大部分 DSL ...

2018-03-06 21:29:11 223

原创 关于单元测试的一些思考

整洁代码代码逻辑直接了当尽量少的依赖干净利落的抽象以及直截了当的控制语句没有改进的余地 以上内容都提取自<代码整洁之道>总结下来就是: 简单, 简洁, 简短.单元测试 那么提高程序正确性最有效的方法是什么呢?在我看来,最有效的方法莫过于对代码反复琢磨推敲,让它变得简单,...

2018-03-05 22:43:10 218

原创 数据结构 --- 散列表

Why散列表是数组的升级版, 在数组中, 我们可以使用整数索引作为key, 而在散列表中, 我们可以使用任意的类型作为key.当然这其中需要一个转化: AnyType –> Int, 而这个转化函数就是散列函数.散列冲突AnyType –> Int 这个散列函数中, 由于数组是定长的, 而AnyType是无限的, 所以可能出现不同的AnyType 会散列到相同的 Int...

2018-03-04 19:14:41 190

原创 数据结构 --- 二叉查找树

树实现// 扩展版的链表public class Node<T> { public T data; public Node<T> left; // small public Node<T> right; //large}插入public Node<T> insert(Node<T...

2018-03-04 15:22:37 102

原创 并发 --- 常见术语区分

同步(Synchronous) && 异步(Asynchronous)同步: 调用方法并等待方法返回或者结束. 异步: 调用方法同步和异步的区别在于调用方是否需要等待方法返回.异步通常在一些耗时的操作上使用, 比如发送邮件: 用户注册之后需要发送一封邮件, 你可以同步操作:function registration(){注册()发邮件() // 耗时3...

2018-03-04 09:49:14 262

原创 数据结构--栈和队列

栈数组实现插入(push)data[lastIndex] = newElement 需要一个字段记录lastIndex, 初始为-1删除(pop)return data[lastIndex--]取出最后的元素并把索引减少达到删除的目的.链表实现使用单链表, 保留对头部的引用, 其余操作和插入任意元素是一样的.队列实现循环数组 头索引(删除...

2018-03-03 22:24:00 89

原创 数据结构 -- 表

声明: 本文章只是作为本人的个人笔记使用, 不保证可读性以及正确性.有界表(ArrayList)内部数据结构一般使用数组实现, 如 Object[] data = new Object[capacity];插入到尾部数组插入data[???] = ObjectToInsert 插入的时候我们需要知道数组中的应该插入位置的索引, 因此需要一个字段记录当前的索引, 如 i...

2018-03-03 20:22:38 163

原创 Java Collection --- 综述

Collection 框架是用于表示”容器”的对象, 最高层次的抽象是Collection接口.分类可变容器: 初始化之后可以修改, 如add(), remove()不可变容器: 初始化之后只可以查询, 如size(), contains()AbstractCollection一般来说, 我们只需要有接口并且实现就可以了, 但是集合框架给我们提供了一个抽象骨架来减少实现时的重复代码. 比如:

2018-01-05 14:00:10 137

原创 编程范式

过程式面向对象并发函数式

2018-01-02 23:14:45 199

原创 Java --- 异常

首先根据Oracle官方文档总结一下: 异常分为三种:受检异常(checked exception):写代码时应该预料并可以恢复的异常.运行时异常( runtime exception): 写代码时无法预料以及恢复的异常.错误(error):写代码时无法预料以及恢复的异常.然后分析一下:预料(anticipate): 程序应该处理的情况, 但是很少出现(非主流程).恢复(recover

2018-01-02 22:55:02 123

转载 JVM 常见参数分类

There are hundreds of JVM options available. Basically they are classified into three types:Standard Options,Non-standard X options,Non-standard XX options,List of few standard options: [To see com

2017-12-28 15:27:02 145

原创 代理模式

代理模式是在委托请求给被代理类时做一些处理:缓存: 在进行耗时操作前查询缓存, 在进行耗时操作后更新缓存, 确保耗时操作只进行一次.访问控制: 在委托请求前进行权限校验.代理模式使用组合的方式给被代理类添加一些新的功能和优化, 同时也是AOP的基础.

2017-12-26 23:21:40 91

原创 Linux运维 --- 包管理

RPMRPM类似Windows中控制面板中的程序管理, 它在本地(/var/lib/rpm)中保存了本机中所安装软件的所有数据, 以数据库的形式存在.安装软件包: rpm -ivh packagename.rpm安装远程安装包: rpm -ivh url 卸载软件包: rpm -e packagename查询已安装的软件: rpm -q packagenameYUMYUM是更加智能的包管理

2017-12-25 22:49:55 163

原创 适配器模式

适配器模式的主要作用是代码重用. 当代码库中已有的代码基本满足需求, 但是接口与需求不匹配, 这时可以用适配器模式来进行接口转换.实现过程也很简单, 就是把已有的对象作为成员变量, 然后把请求都委托给它.这里不再对代码和UML进行说明, 需要的话参考:适配器模式下面说明一下关于设计模式实现的一些基本套路: 1. 继承: 有问题找父母. 2. 组合: 有问题找其他人帮你做.继承的缺点很明显,

2017-12-25 13:34:18 134

原创 迭代器模式

迭代器模式是对集合类内部实现的封装.public class IteratorDemo { public static class Before { private List<String> strings; public Before(List<String> strings) { this.strings = strings;

2017-12-24 23:23:46 113

原创 设计原则

单一职责原则(如何封装变化) 就一个类而言, 应该仅有一个引起它变化的原因. 解读: 这个原则告诉我们一个类应该足够小, 足够简单. 但是开发经验告诉我们, 这个简单的类是很少存在的. 那么如何弥补二者之间的差距呢? 分离职责! 把一个复杂的类切分成几个简单的类, 然后通过委托来组合原有的功能.开放封闭原则(如何应对变化) 软件应该是可扩展的, 但是不可修改的. 解读:当你升级笔记本硬盘时

2017-12-24 17:10:42 132

原创 事情其实很简单

当然这篇文章也是关于编程的, 在讨论之前我们先看看什么是复杂. 举例来说: 复杂就是现阶段市面上的设计模式图书, 看了很多本还是看不懂.我们先来分析一下上述的案例, 为什么会变复杂?大部分设计模式图书都会在前两章讲UML, 其实这东西和设计模式没什么关系.UML是用来沟通的, 不是用来授课的. 你的注意力会被那些箭头和方框给分散.大部分设计模式图书的作者会忘记了写作的目的:教学. 就像课本分

2017-12-24 11:50:11 314

原创 进程

什么是进程? 运行中的程序.什么是程序? 可执行的代码.程序如何转化为进程? 一个已经存在的进程使用系统调用创建新进程. fork –> 创建新进程, 父进程的副本. exec –> 替换父进程中的代码.如何停止进程? 进程中的代码正常退出或者是出错退出. 被操作系统终止.进程的状态? 进程元信息. Process control information is used by

2017-12-13 22:57:55 133

原创 Nutz 设计模式应用 --- Facade 模式

Facade模式是最常用的一个模式, 并且大多数时候我们都是无意识的使用这个模式. 以Java Web中的Service为例, 它内部封装了一个或者多个Dao来进行业务逻辑, 而我们只需要使用Service提供的接口而不必关心内部的实现.

2017-12-12 21:36:50 144

原创 Nutz 设计模式应用 --- 静态工厂方法

静态工厂方法比较简单, 与其说是设计模式, 倒不如认为是一个工具类(utils). 静态工厂方法的实现是使用静态方法, 目的也是为了避免构造函数过多而引起的可读性下降, 以Java8中的LocalDate为例:public class Demo { public static void main(String[] args) { LocalDate.of(2017, 12, 1

2017-12-11 23:06:47 257

原创 Nutz 设计模式应用 --- 工厂方法

工厂方法把类的初始化工作封装到了一个单独的类中, 这个类被称为工厂类.首先需要一个工厂接口和产品接口:public interface IFactory { IProduct create();}public interface IProduct {}接下来, 创建一个具体的产品类A:public class ProductA implements IProduct {}我们希望把A实例

2017-12-10 21:42:25 219

原创 Nutz 设计模式应用 --- 单例模式

在IOC容器中, 所有的对象默认都是单例, 我们只需要把对象加载到IOC容器中即可.nutz demo:@IocBeanpublic class SingletonDemo {}public class SingletonDemoTest { private static Ioc ioc; @BeforeClass public static void setUp() thro

2017-12-10 15:36:44 397

原创 Nutz 设计模式应用 --- 前言

这个系列的主题是什么? 设计模式的一些学习笔记以及应用, 主要依托于Nutz这个框架.为什么不用Spring? 首先公司的框架就是基于Nutz的, 用起来熟悉一点. 其次, 设计模式是一种较高层次的抽象, 不依托于任何依赖注入框架都可以实现, 所以框架在这个系列中不是主要讨论内容. 最后, 关于Nutz的博客比较少, 想做点微小的贡献.

2017-12-10 13:43:44 206

Hibernate实战 第2版 清华大学出版社

正版 Hibernate实战(第2版) 计算机网络 程序设计 Hibernate用户参考书籍 计算机与互联网 编程语言与程序设计 Christian Bauer

2018-10-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除