自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 ActiveMQ支持的消息协议

ActiveMQ支持哪些协议ActiveMQ支持多种协议传输和传输方式,允许客户端使用多种协议连接ActiveMQ支持的协议:AUTO,OpenWire,AMQP,Stomp,MQTT等ActiveMQ支持的基础传输方式:VM,TCP,SSL,UDP,Peer,Multicast,HTTP(S)等,以及更高级的Failover,Fanout,Discovery,ZerConf方式Activ...

2020-04-20 20:22:25 313

原创 ActiveMQ入门

Apache ActiveMQ是当前最流行的开源的,支持多协议的,基于Java的消息中间件,官网的原话是:Apache ActiveMQ™ is the most popular open source, multi-protocol, Java-based messaging server.ActiveMQ是一个完全支持JMS1.1和J2EE规范的JMS Provider实现,尽管JMS规范出...

2020-04-16 19:36:18 360

原创 Docker Swarm资源管理

Docker SwarmDocker Swarm是Docker官方项目之一,是使用SwarmKit构建的Docker引擎内置的集群管理和编排工具,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案。使用它,用户可以将多个Docker主机封装为单个大型虚拟Docker主机,快速打造一套容器云平台。节点运行Docker的主机可以主动初始化一个Swarm集群或者加入一个...

2020-04-09 20:23:29 451

原创 基于Graylog的容器日志监控

Docker日志当一个容器启动的时候,它其实是docker deamon的一个子进程,docker daemon可以拿到容器里面进程的标准输出,然后通过自身的LogDriver模块来处理,LogDriver支持的方式很多,默认写到本地文件,也可以发送到syslog等。Docker会默认收集应用程序的标准输出到一个json.log文件中,以一行一条JSON存储数据,文件的格式如下:{"log...

2019-12-24 20:03:07 624

原创 Docker容器监控

利用docker compose组合应用并利用scale可以快速对容器进行扩充,而docker compose启动的服务容器都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的运行情况,如:CPU使用率,内存使用率,网络状态,磁盘空间等一系列随时间变化的时序数据信息,都需要进行了解,因此监控是必须的。容器监控方案选择对于容器的监控方案可谓多种多样,除了docker本身自带的 dock...

2019-12-19 19:28:42 1281

原创 Docker Compose集成式应用组合及service编排

Compose简介Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。其代码目前在 https://github.com/docker/compose 开源。Compose定位是定义和运行多个Docker容器的应用,其前身是开源项目Fig。使用一个Dockerfile模板文件,可以很方便的定义一个单独的应用容器,然而在日常工作中,经常会碰到需要多个容器相...

2019-12-12 20:17:56 482

原创 Docker数据挂载

Docker数据管理在容器中管理数据主要有两种方式:数据卷(Volumes)挂载主机目录(Bind mounts)数据卷数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:数据卷可以在容器之间共享和重用对数据卷的修改会立马生效对数据卷的更新不会影响镜像数据卷默认会一直存在,即使容器被删除注意:数据卷的使用,类似于Linux下目录的使用或...

2019-12-10 19:15:42 216

原创 Docker 构建私有仓库

1.1.6 构建私有仓库Docker Hub目前Docker官方维护了一个公共仓库Docker Hub,其中已经包含了数量超过15000的镜像。大部分需求都可以通过在Docker Hub中直接下载镜像来实现。可以在https://hub.docker.com 免费注册一个Docker账号。在命令行输入执行docker login,输入用户名及密码可以登录Docker Hub,可以通过doc...

2019-12-08 21:04:43 180

原创 Dockerfile构建私有镜像

构建第一个镜像镜像的定制实际上就是定制每一层所添加的配置,文件。我们可以把每一层修改,安装,构建,操作的命令都写入一个脚本,这个脚本就是Dockerfile。Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容就是该层因该如何构建。接下来我们以官方nginx镜像为例,使用Dockerfile来定制镜像。在一个空白的目录中,建立一个文本文件,并...

2019-12-05 19:56:47 755

原创 Docker常用命令

Docker中最核心最基本的概念就是镜像(Image),容器(Container),以及仓库(Repository),其常用的操作命令也就是围绕这三个进行。查看本地镜像docker image ls [OPTIONS] [REPOSITORY[:TAG]]docker images [OPTIONS] [REPOSITORY[:TAG]]OPTIONS说明:-all, -a :列出本...

2019-11-27 21:22:29 907

原创 Docker基础概念与安装

Docker是什么Docker最初是dotCloud公司的创始人Solomon Hyks在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于2013年3月以Apache 2.0授权协议开源,主要项目代码在GitHub上进行维护。Docker后来还加入了Linux基金会,并成立推动开放容器联盟(OCI)。Docker是使用Google公司推出的Go语言进行...

2019-11-19 21:09:29 174

原创 JVM参数及调优

调优基本概念在调整JVM性能时,通常有三个组件需要考虑:堆大小调整垃圾收集器调整JIT编译器大多数调优选项都与调整堆大小和选择合适的垃圾收集器有关,JIT编译器对性能也有很大影响,但很少需要对其进行调优,尤其是针对较新版本的JVM。通常,在进行Java程序调优的时候,会重点关注两个主要指标:响应性:应用程序对请求进行响应的速度,对于专注响应性的应用程序,长时间的暂停是不可接受的...

2019-11-07 22:03:52 469

原创 JDK内置工具命令

javapJava反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件用法:javap 用法描述javap -help --help -?输出此用法消息javap -version版本消息javap -v -verbose输出附加信息javap -l输出行号和本地变量表javap -public仅显示公共类和成员j...

2019-11-04 20:11:10 166

原创 Java垃圾回收机制

Java 内存运行时区域中的程序计数器、虚拟机栈、本地方法栈随线程而生灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由 JIT 编译器进行一些优化),因此这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而 Java 堆不一样,一个接...

2019-10-22 20:25:23 422

原创 JVM类加载机制

Java的程序要运行需要将编译好的class文件加载到JVM运行时数据区。在了解类的加载机制之前,我们需要了解一下类的生命周期。Java类从被加载到JVM内存开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Un...

2019-10-15 20:23:19 304

原创 Netty中粘包和拆包的解决方案

粘包和拆包是TCP网络编程中不可避免的,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制。TCP粘包和拆包TCP是个“流”协议,所谓流,就是没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发...

2019-10-10 21:27:50 644

原创 Java网络编程--Netty中的ByteBuf

由于JDK中提供的ByteBuffer无法动态扩容,并且API使用复杂等原因,Netty中提供了ByteBuf。Bytebuf的API操作更加便捷,可以动态扩容,提供了多种ByteBuf的实现,以及高效的零拷贝机制。ByteBuf的操作ByteBuf有三个重要的属性:capacity容量,readerIndex读取位置,writerIndex写入位置提供了readerIndex和weite...

2019-10-06 20:52:01 940

原创 Java网络编程--Netty中的责任链

Netty中的责任链设计模式 - 责任链模式责任链模式(Chain of Responsibility Pattern)是一种是行为型设计模式,它为请求创建了一个处理对象的链。其链中每一个节点都看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。责任链模式主要解决了发起请求...

2019-09-26 20:55:59 333

原创 Java网络编程 -- Netty入门

Netty简介Netty是一个高性能,高可扩展性的异步事件驱动的网络应用程序框架,它极大的简化了TCP和UDP客户端和服务器端网络开发。它是一个NIO框架,对Java NIO进行了良好的封装。作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。Netty的特性统一的API,适用于不...

2019-09-10 21:45:49 385

原创 Reactor模式

什么是Reactor模式Reactor模式是一种设计模式,它是基于事件驱动的,可以并发的处理多个服务请求,当请求抵达后,依据多路复用策略,同步的派发这些请求至相关的请求处理程序。Reactor模式角色构成在早先的论文An Object Behavioral Pattern forDemultiplexing and Dispatching Handles for Synchronous E...

2019-09-08 09:59:56 1697

原创 Java网络编程 -- AIO异步网络编程

AIO中的A即Asynchronous,AIO即异步IO。它是异步非阻塞的,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般我们的业务处理逻辑会变成一个回调函数,等待IO操作完成后,由系统自动触发。在进行读写操作时,只需直接调用API的read/write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通...

2019-08-28 21:18:44 332

原创 Java网络编程 -- NIO非阻塞网络编程

从Java1.4开始,为了替代Java IO和网络相关的API,提高程序的运行速度,Java提供了新的IO操作非阻塞的API即Java NIO。NIO中有三大核心组件:Buffer(缓冲区),Channel(通道),Selector(选择器)。NIO基于Channel(通道)和Buffer(缓冲区))进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中,而Selector(选择器)主要...

2019-08-26 21:53:25 187

原创 Java网络编程 -- BIO 阻塞式网络编程

阻塞IO的含义阻塞(blocking)IO :阻塞是指结果返回之前,线程会被挂起,函数只有在得到结果之后(或超时)才会返回非阻塞(non-blocking)IO :非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回同步(synchronous)IO :应用阻塞在发送或接受数据的状态,直至数据成功传输(或返回失败),简单来说就是必须一件一件事做,等前一件做...

2019-08-22 20:15:56 250

原创 Java网络编程 -- 网络协议

OSI网络七层协议为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。OSI网络七层协议就是在这个基础上制定出来的,其从最底层开始依次是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。各层主要功能物理层:使原始的数据比特流能在物理介质上传输数据链路层:通过校验,确认和反馈重发等手段,形成稳定的数据链路网络层:进...

2019-08-14 20:12:19 151

原创 自定义FutureTask实现

FutureTaskFutureTask是Future的实现,用来异步任务的获取结果,可以启动和取消异步任务,查询异步任务是否计算结束以及获取最终的异步任务的结果。通过get()方法来获取异步任务的结果,但是会阻塞当前线程直至异步任务执行结束。一旦任务执行结束,任务不能重新启动或取消,除非调用runAndReset()方法。代码示例:public class ThreadTest { ...

2019-08-11 21:02:53 268

原创 JDK容器类List,Set,Queue源码解读

List,Set,Queue都是继承Collection接口的单列集合接口。List常用的实现主要有ArrayList,LinkedList,List中的数据是有序可重复的。Set常用的实现主要是HashSet,Set中的数据是无序不可重复的。Queue常用的实现主要有ArrayBlockingQueue,LinkedBlockingQueue,Queue是一个保持先进先出的顺序队列,不允许随机访...

2019-08-05 20:22:04 83

原创 JDK容器类Map源码解读

java.util.Map接口是JDK1.2开始提供的一个基于键值对的散列表接口,其设计的初衷是为了替换JDK1.0中的java.util.Dictionary抽象类。Dictionary是JDK最初的键值对类,它不可以存储null作为key和value,目前这个类早已不被使用了。目前都是在使用Map接口,它是可以存储null值作为key和value,但Map的key是不可以重复的。其常用的实现类...

2019-07-29 20:49:29 109

原创 深入理解Java中的锁(三)

ReadWriteLock接口读写锁维护一对关联锁,一个只用于读操作,一个只用于写操作。读锁可以由多个线程同时持有,又称共享锁。写锁同一时间只能由一个线程持有,又称互斥锁。同一时间,两把锁不能被不同线程持有。读写锁适合读取操作多于写入操作的场景,改进互斥锁的性能,比如集合的并发安全性改造,缓存组件等。ReentrantReadWriteLock实现原理分析ReentrantReadWrit...

2019-07-28 22:23:52 219

原创 深入理解Java中的锁(二)

locks包结构层次[外链图片转存失败(img-tUF9Pwex-1564060844952)(https://gitee.com/mo-se-de-feng/notes/raw/master/images/1.3.1 locks包类层次结构.PNG)]Lock 接口方法签名描述void lock();获取锁(不死不休)boolean tryLock();获取锁...

2019-07-25 21:21:29 123

原创 深入理解Java中的锁(一)

Java中锁的概念自旋锁 : 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断判断锁是否能够被成功获取,直到获取到锁才会退出循环。乐观锁 : 假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改悲观锁 :假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁独享锁(写) : 给资源加上写锁,拥有该锁的线程可以...

2019-07-23 22:56:31 491

原创 线程安全之原子操作

原子操作原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。原子操作可以是一个步骤,也可以是多个步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征。首先我们来看一个非原子操作的示例:public class Counter { vol...

2019-07-17 20:01:14 327

原创 Java程序运行原理分析

class文件内容class文件包含Java程序执行的字节码数据严格按照格式紧凑排列在class文件的二进制流,中间无分割符文件开头有一个0xcafebabe(16进制)特殊的标志JVM运行时数据区线程独占: 每个线程都会有它独立的空间,随线程的生命周而创建和销毁线程共享: 所有线程都能访问这块内存数据,随虚拟机或GC而创建和销毁方法区方法区是各个线程共享的内存区域用于...

2019-07-16 21:28:43 171

原创 CPU缓存和内存屏障

CPU性能优化手段 - 缓存为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能多级缓存L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和指令缓存, 一般服务器CPU的L1缓存的容量通常在32-4096kbL2 Cache (二级缓存) 由于L1高速缓存的容量...

2019-07-15 21:38:59 204

原创 Java中实现线程的方式

Java中实现线程的方式Java中实现多线程的方式的方式中最核心的就是 run()方法,不管何种方式其最终都是通过run()来运行。Java刚发布时也就是JDK 1.0版本提供了两种实现方式,一个是继承Thread类,一个是实现Runnable接口。两种方式都是去重写run()方法,在run()方法中去实现具体的业务代码。但这两种方式有一个共同的弊端,就是由于run()方法是没有返回值的,所...

2019-07-12 20:38:49 409

原创 线程终止

线程终止不正确的线程终止 - stopstop: 终止线程, 并且清楚监视器锁的信息, 但是可能导致线程安全问题, JDK不建议使用正确的线程终止 - interrupt如果目标线程在调用Object class的wait方法, join方法或sleep方法时被阻塞, 那么interrupt会生效, 该线程的中断状态将被清除,抛出InterruptedException如果目标线程是被I...

2019-07-09 22:39:17 408

原创 全文检索Lucene(四)---Compass框架

Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架。 Compass之于Lucene,就像Hibernate之于JDBC,Compass就是把Lucene封装了一层。 Compass目前版本是2.2.0,已经很久没有更新与维护。Compass2.2的版本所对应的Lucene2.4.1。下载地

2017-07-12 21:51:41 953 1

原创 全文检索Lucene(三)----查询,分词器,排序,过滤,高亮

Lucene查询: 查询出所有 关键词查询 范围查询 通配符查询 模糊查询 短语查询 布尔查询QueryParser与MultiFieldQueryParser的区别 QueryParser:只在一个字段中查询 MultiFieldQueryParser:可以在多个字段查询布尔查询: public void add(Query query, Occur occur)Occur 用

2017-07-12 21:12:21 2011

原创 全文检索Lucene(二)---索引库维护

维护索引库 1,创建索引库 2,删除索引库 3,更新索引库 4,索引库的优化索引设置的一些建议: 1) 尽量减少不必要的存储 2) 不需要检索的内容不要建立索引 3) 非文本格式需要提前转化 4)需要整体存放的内容不要分词数据与Document、Field的转换 我们在应用程序中使用对象表示数据。在数据库中使用的是表记录,所以存在来回转换的问题。同样,要索引库中使用的是Docume

2017-07-11 22:32:38 400

原创 全文检索Lucene(一)---快速入门

全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程。 对于搜索,按被搜索的资源类型,分为两种:可以分为文本类型和多媒体类型。 全文检索(Full-Text Retrieval)是指以文本作为检索对象,找出含有指定词汇的文本。全面、准确和快速是衡量全文检索系统的关键指标。 关于

2017-07-11 21:45:36 469

原创 基于RESTful类型的webService

RESTful是基于jax-rs的WebService.它即支持XML也支持JSON. JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services的简写,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java标注来简化Web服务的客户

2017-07-10 21:15:23 3008

空空如也

空空如也

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

TA关注的人

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