- 博客(29)
- 资源 (9)
- 收藏
- 关注
原创 设计模式——门面模式
门面模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。 门面模式提供一个高层次的接口, 使得子系统更易于使用。 系统中各个模块,统一在门面中对外提供访问。 示例代码:// 模块Apublic class ClassA { public void methodA(){ // 具体业务逻辑 }}// 模块Bpublic class
2018-01-31 17:04:45 186
原创 设计模式——观察者模式
观察者模式也叫发布订阅模式,定义对象间的一种一对多的关系,使得每当一个对象改变状态,则所有依赖于它的对象都会收到通知并自动更新。 四种角色: - Subject 被观察者,能够动态的添加和取消观察者,管理观察者并通知观察者。 - Observer 观察者,观察者收到通知后,执行自己的操作,对消息进行处理。 - ConcreteSubject 具体的被观察者,定义被观察者具体的业务逻辑。
2018-01-31 00:33:00 169
原创 设计模式——组合模式
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构, 使得用户对单个对象和组合对象的使用具有一致性。 示例代码:// 抽象组件public abstract class Component { public void method(){ // 共有的业务逻辑 }}// 非叶子节点public class Composite exte
2018-01-30 18:26:24 162
原创 设计模式——适配器模式
适配器模式,将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 UML类图: 示例代码:// 目标角色public interface Target { // 目标角色的方法 public void request();}// 目标角色的一个具体实现类public class Concrete
2018-01-30 10:35:44 150
原创 设计模式——责任链模式
责任链模式,使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系。 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有对象处理它为止。 在责任链模式中一个请求发送到链中后, 前一节点消费部分消息, 然后交由后续 节点继续处理。 实例代码:// 处理等级public class Level {}// 请求类public class Request
2018-01-29 18:01:10 179
原创 ElasticSearch6.1的增删改查Rest API
ElasticSearch 6.x 的 Rest API 基本没有变化,只是对 HTTP 请求的 contentType 进行了严格的规定,如果有请求体,那么必须在请求中说明请求体的格式。具体见官网的这篇文章:https://www.elastic.co/blog/strict-content-type-checking-for-elasticsearch-rest-requestsREST
2018-01-29 15:19:04 651
原创 ElasticSearch基础
ElasticSearch 是基于 Apache Lucene 全文检索的一个检索引擎。全文检索Lucene词汇表Apache Lucene 有一些基本概念: - 文档 索引和搜索时使用的主要载体,包含一个或多个存有数据的字段 - 字段 文档的一部分,包含名称和值两部分 - 词 一个搜索单元,表示文本的一个词 - 标记 表示在字段文本中出现的词,由这个词的文本、
2018-01-28 15:30:12 186
原创 设计模式——命令模式
命令模式是一个高内聚的模式,将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 1.Receive接收者角色 该角色就是干活的角色,命令传递到这里是应该被执行的。 2. Command命令角色 需要执行的所有命令都在这里声明。 3. Invoker调用者角色 接收到命令,并执行命令。 示例代码如下:/
2018-01-27 21:16:26 145
原创 设计模式——代理模式
代理模式代理模式,为其他对象提供一种代理以控制对这个对象的访问。 代理模式的三种角色: 1. 抽象业务角色,抽象类或者接口; 2. 真实业务角色,继承或实现抽象业务角色,是业务的真正执行者。 3. 代理角色,控制真实业务角色,抽象类的方法,在真实业务角色中实现,可以在真实角色执行方法的过程前后加入预处理或者结束后的处理方法。// 抽象业务角色public abstract c
2018-01-26 14:29:55 220
原创 MongoDB导出工具mongoexport的使用
mongoexport 工具的基本用法: -u 数据库用户名 -p 数据库密码 -d 数据库名 -c 集合名 -q 查询条件 -o 输出文件路径 示例:mongoexport -u username -p password -d database -c collection -q '{"status":{$exists: true}}' -o /home/result.json
2018-01-25 10:24:54 644
原创 设计模式——原型模式
建造者模式也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。// 产品类public class Product { public void doSomething(){ // TODO }}// 抽象建造者public abstract class Builder { public abstract void setP
2018-01-24 22:40:28 251
原创 设计模式——模板方法模式
在开发中,如果遇到某个方法的实现需要调用多个方法,这些方法有些是固定不变的,有些是发生变化的,就可以采用模板方法模式。将每个步骤对应的方法作为基本方法,而调用这些方法同时定义步骤顺序的方法称为模板方法。 模板方法模式的定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 基本方法也叫做基本操作,是由子类实现的方法,
2018-01-23 22:03:38 147
原创 Java多线程中的死锁
Java多线程中的死锁,最简单的例子就是,线程 T1 持有对象 O1 的锁,然后去申请对象 O2 的锁;而线程 T2 持有对象 O2 的锁,然后去申请对象 O1 的锁。默认的锁申请操作都是阻塞的,这样就造成了线程互相持有对方的锁,造成死锁。复杂一些的情况可能会出现多个线程死锁的环路。 其根本原因是一个线程在持有一个锁 LOCK1 的时候,去申请另一个锁 LOCK2,即 LOCK1 没有释放,又去
2018-01-23 16:22:07 191
原创 设计模式——抽象工厂模式
抽象工厂可以看作是工厂方法模式的升级版,在有多个业务品种,业务分类时,使用抽象工厂模式比较合适。比如一个工厂,可以生产 A,B 两种不同的产品,且均有普通和高端两种品质之分。实例代码如下:// A产品的抽象类public abstract class AbstractProductA { public void share(){ // 每个产品共有方法
2018-01-23 11:15:24 136
原创 设计模式——工厂方法模式
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实现延迟到其子类。 示例代码如下:// 抽象产品类代码public abstract class Product { public void method1(){ // 公共方法 } // 抽象方法 public abstract void method2();}//
2018-01-22 16:57:41 164
原创 Java多线程中的wait/notify
关于对象锁:对象锁 - http://blog.csdn.net/yx0628/article/details/79086511 wait 方法在使用之前,必须先获得此对象的对象锁,所以必须在同步方法或者同步块中使用,执行 wait 方法后,当前线程释放该对象的锁。wait 返回之前,此线程需要和其他等待对象的线程竞争来获得锁,才能继续执行 wait 后的处理。 notify 方法也必须在同步
2018-01-22 10:45:59 224
转载 Java中Volatile关键字详解
转载自 : Java中Volatile关键字详解–http://www.cnblogs.com/zhengbin/p/5654805.html基本概念先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对
2018-01-19 10:42:45 171
原创 Java中synchronized同步锁用法及作用范围
Java 中的 synchronized 关键字可以在多线程环境下用来作为线程安全的同步锁。本文主要对 synchronized 的作用,以及其有效范围进行讨论。 Java中的对象锁和类锁:java的对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是,两个锁实际是有很大的区别的,对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的
2018-01-18 13:33:52 76021 13
原创 Java中竞态条件和使用synchronized关键字同步
首先举一个例子: 定义一个 CountThread 类,如下,在 run 函数中进行全局变量的自增操作。public class CountThread extends Thread{ private int count = 0; @Override public void run() { count++; System.out
2018-01-17 16:37:26 382
原创 MongoDB填充因子和更新优化
MongoDB填充因子(padding factor)是MongoDB为文档的扩展而预留的增长空间,因为MongoDB的文档是以顺序表的方式存储的,每个文档之间会非常紧凑。 如图,元素之间没有多余的可增长空间,当我们对顺序表中某个元素的大小进行增长的时候,就会导致原来分配的空间不足,放不回去原位了,只能要求其放于最后的位置。然后,后续插入的文档都会提供一定的填充因子,以便于文档频繁的修改,如
2018-01-13 17:40:23 1925
原创 MongoDB内嵌与引用
MongoDB的范式化,是将数据分散到不同的集合中,不同的集合之间可以相互引用数据。如果需要修改某一块数据,只需要修改保存这块数据的文档即可,但查询时,需要在不同集合之间执行连接查询,需多次查询实现。 反范式化,将每个文档所需的数据都嵌入在文档内部,每个文档都拥有自己的数据副本,而不是所有文档共同引用同一个数据副本。如果信息发生了变化,所有相关的文档都要进行更新。但是执行查询时,只需要一次查询。
2018-01-12 17:17:55 7708
原创 MongoDB聚合
使用聚合框架可以对集合中的文档进行变换和组合。管道操作符每个操作符都会接受一连串的文档,对这些文档做一些类型转换,最后将转换后的文档作为结果传递给下一个操作符。最后一个管道操作符,将结果返回给客户端。$matchmatch用于对文档集合进行筛选,之后可以在筛选得到的文档子集上做聚合。例如想对年龄 age 为 21 的用户做统计,可以使用{$match : {"age
2018-01-12 14:14:57 295
原创 MongoDB索引
首先,创建测试样例数据,创建一百万个用户名和年龄的文档:> for(i=0; i<1000000; i++){ db.testuser.insert( { "i":i, "username":"user"+i, "age":Math.floor(Math.random()*120),
2018-01-11 17:19:35 370
原创 MongoDB游标
MongoDB数据库使用游标返回 find 的执行结果。客户端对游标的实现通常能够对最终结果进行有效的控制,可以限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行各种排序,或者是执行其他一些强大的操作。> var cursor = db.mycollection.find();这查询的结果就放在 cursor 变量中了,可以一次查看一条结果。而如果没有放在变量中,she
2018-01-10 17:40:50 927
原创 MongoDB的查询命令
find查询> db.mycollection.find({"name":"foo"})多个条件时,逗号分割开查询条件即可:> db.mycollection.find({"name":"foo", "age":20})指定需要返回的键可以通过第二个参数来获取指定的键,这样节省传输的数据量,同时也节省客户端解码文档的时间和内存消耗。> db.mycollection.find({},{"name":
2018-01-10 15:45:24 1325
原创 MongoDB创建、更新和删除等指令
首先推荐一个很好用的MongoDB客户端:RoboMongo 可以去官网上下载:https://robomongo.org/downloadMongoDB的一些基础语法:创建库和集合创建数据库testdb,直接使用选库命令,不存在则会新建:> use testdbswitched to db newdb创建collection集合,如创建 mycollection> db.createColle
2018-01-08 15:56:46 1839
原创 MongoDB的自增主键 _id 的生成机制
如果插入文档时没有 _id 键,系统会自动创建。MongoDB中存储的文档必须有这个“_id”键。这个键的值可以是任意类型,默认是个ObjectId对象,每个文档有唯一的 _id ,确保集合中的每个文档都会被唯一标示。 ObjectId是 _id 的默认类型,不同的机器都能用全局唯一的同种方法方便的生成。因为MongoDB初衷是用作分布式数据库,在多个服务器的分片环境中生成唯一标识符非常重要。
2018-01-07 21:25:52 12972 1
原创 MongoDB的安装与配置
首先下载对应机器的安装版本,可以去官网选择版本获得其对应的下载链接,官网地址:https://www.mongodb.com/download-center#production 以centOS7.0版本的3.6.1版本mongoDB为例:# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.1.tgz
2018-01-07 20:00:03 211
原创 MongoDB基础
文档是MongoDB中数据的基本单元。 集合可以看作是一个拥有动态模式的表。 每一个文档都有一个特殊的键 _id ,这个键在所属集合中是唯一的。文档文档是MongoDB的核心概念,文档就是键值对的一个有序集合
2018-01-02 15:56:04 220
Spring定时任务@Scheduled例子
2018-07-01
android带百分比进度条的文件上传,使用AsyncTask异步上传
2013-08-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人