自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基本vi操作

1,复制一行yy从当前行开始复制,复制n行n+yy2,粘贴p3,回退一步u4,跳行,快速定位到第n行:set nun+G跳到最后一行:set nuG5,剪切n行,如果剪切1行,1可以省略n+dd6,查找,n是查找下一个的意思,并不是一个数字,应该是next的第一个字母/xxxn

2017-04-29 21:41:48 203

原创 3,redis主从复制跟哨兵机制

意思就是把数据从master复制到slave 目的是实现一个读写分离的机制,master负责写入,slave负责读 1,一个master可以拥有多个slave 2, slave不光可以连接到master,还可以连接到其他的slave(很少这么干,一般是一主多从) 3,在进行主从复制的时候,不影响master跟client进行交互。也就是说master在任何时候都是不阻塞的。主从复制过程 1

2017-04-29 20:45:17 316

原创 2,redis的配置文件简介

# Redis 配置文件# 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写)## 1k =>1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb =>1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1

2017-04-29 18:41:01 266

原创 1,redis单节点的安装

redis是源码包安装,所以在安装之前要确定机器已经安装了gcc。解压之后,会发现已经存在了MakeFile文件,直接运行make命令,会在src目录中,得到几个文件。如redis-cli,redis-server等等。将这几个文件copy到自己所建的一个工作目录(redis.conf也要copy进来),可以直接运行redis-server redis.conf 来启动redis。此时单节点就创建了

2017-04-29 16:47:07 341

原创 linux jar包启动脚本

#!/bin/bash#java env#shell脚本有时候调用linux的环境变量会有问题,所以这里还是把用到的java环境再设置一下export JAVA_HOME=/usr/local/jdk1.7#app name 为了确保脚本通用APP_NAME=lagou-serviceSERVICE_DIR=/home/lagou/$APP_NAMESERVICE_NAME=lagou-se

2017-04-27 15:47:42 5097

原创 dubbo服务的启动方式

有三种启动方式1,tomcat等servlet容器启动(不建议,因为会使的系统更复杂,而且增加内存的消耗)2,自定义main函数启动(不建议,可能会出现一些未知问题,比如不能优雅关机,导致数据丢失)3,使用dubbo提供的main函数启动建议使用这种方式。可以优雅的关机。对于服务端来说,不再接受新的请求,依然处理老请求,直到结果返回或者超时。对于消费端来说,不再发送新的请求,但是依

2017-04-27 08:52:51 1139

原创 maven 打fat包

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <configuration>

2017-04-19 15:40:01 898

原创 j2ee规范

在说javaweb规范之前,先要来认识一下j2ee规范 j2ee是sun公司为了java的企业级应用而制定的一套规范。注意,企业级应用不是指web应用,web应用只是企业级应用的一部分。J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于篇幅,这里只能进行简单的描述):

2017-04-18 09:03:56 605

原创 使用spring来开发jms

spring消息发送的核心架构是JmsTemplate,隔离了像打开,关闭Session和Producer的繁琐操作,因此应用开发人员仅仅需要关注实际的业务逻辑。不建议使用JmsTemplate的receive()调用,因为在JmsTemplate上的所有调用都是同步的,这意味着调用线程需要被阻塞,直到方法返回,这对性能影响很大。建议使用监听器来做消息的接收,这个是异步的。 具体是使用Defalu

2017-04-17 00:57:33 233

原创 activemq消费者过滤器

消息过滤器基于sql的语法。producer部分代码MapMessage message1 = session.createMapMessage(); message1.setIntProperty("age",32); message1.setString("name", "张三"); message1.setInt("age", 32);

2017-04-16 20:17:26 565

原创 ActiveMq持久订阅小例子

public class ProducerTopic { public static void main(String[] args) throws JMSException { String user = ActiveMQConnectionFactory.DEFAULT_USER; String password = ActiveMQConnectionF

2017-04-16 11:45:25 249

原创 jms简介

jms是j2ee的一门技术,j2ee是一个包含20多门技术的总和。jms定义了java中访问消息中间件的接口。并没有给予实现。将实现了jms接口的中间件叫做jms provider,比如activemaq.jms消息分为三部分 1,消息头:每个消息头字段都有相应的get和set方法 2,消息属性:如果需要除消息头字段以外的值,可以用消息属性 3,消息体:封装具体的消息jms producer

2017-04-15 13:59:23 534

原创 netty学习笔记(5)_心跳机制

举个例子,在负载均衡中,用心跳机制收集的客户端信息,决定连哪一台机器去做运算。

2017-04-14 22:38:29 221

转载 sigar API简介

使用时需要把对应的操作系统的脚本放到java安装包的bin目录下。举个例子package com.suosong.sigar;import java.net.InetAddress;import java.net.UnknownHostException;import java.util.Map;import java.util.Properties;import org.hyperic.si

2017-04-14 20:50:09 5340 3

原创 netty学习笔记(4)_线程模型解析

我们知道,在网上大多数NIO的入门例子中,是用一个线程来处理selector轮询出的Key的。这样效率肯定是不高。 但是简单的对key加多线程的话,肯定会抛空指针异常。原因是多线程还没来得及处理Key,selector线程就开始了新一轮的select()。又得到了Key,这个key跟刚才的key是一样的。都是绑定了accept事件,那么还会去执行accept方法SocketChannel sock

2017-04-14 15:10:03 964 2

原创 curator框架

curator是对zookeeper原生api的封装。原生的api特别难用。 curator提供了流式编程风格,做的非常不错,是目前使用率最高的一种zookeeper框架。 maven依赖<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework<

2017-04-12 19:42:35 614

原创 创建maven私服

Nexus是典型的java web应用,它有两种安装包,一种是包含jetty容器的Bundle包,另一种是不包含web容器的war包。本文用的nexus版本为2.5用的服务器为linux解压后,进入目录 ./bin/jsw/linux-x86-32(我的机器是32位)然后运行./nexus console 意思是用控制台启动,也可以认为是前台启动。注意,不能用root账户启动。http://ip:

2017-04-11 17:33:14 367

转载 JVM参数设置、分析(转)

原博客地址:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具

2017-04-10 14:36:41 217

原创 netty学习笔记(3)_编解码技术

编解码技术,其实就是指java的序列化技术。序列化的目的无非是两个:网络传输和对象持久化。对于netty来说,重点在于网络传输。 java序列化仅仅是java编解码技术的一种,由于它的种种缺陷,衍生出了多种编解码技术和框架。比如 MessagePack Google Protobuf JBoss Marshalling 本文都会一一介绍在远程服务调用(RPC)时,很少直接使用Java序列化

2017-04-09 23:27:02 244

原创 netty学习笔记(2)_tcp拆包/粘包问题

tcp是个流协议,所谓流,就是没有界限的一串数据。tcp底层并不了解上层业务的具体含义,它会根据tcp缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被tcp拆分为多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送。这就是所谓的tcp拆包/粘包问题。问题发生的原因有3个: 1,应用程序write写入的字节大小大于套接口发送缓冲区大小 2,进行MSS大小的tcp分段

2017-04-09 20:48:19 296

原创 netty学习笔记(1)_一些核心概念

netty是一个非阻塞,事件驱动的网络框架。netty实际上是使用多线程处理io事件,对于熟悉多线程编程的人来说,可能会想到netty需要进行代码同步。但是这样的方式不好,因为同步会影响程序的性能,netty的设计者保证了程序处理事件不会有同步。netty的EventLoopGroup包含一个或者多个EventLoop,而EventLoop就是一个Channel执行实际工作的线程。EventLoop

2017-04-09 16:17:25 306

原创 回调(callback)

之前看了网上很多讲回调的博客,说实话,很晕。 也许每个人都对回调有自己的理解。也许回调本来就是被赋予了多重的含义。就像中文中的多音字。每一个读法都有自己的意思。这里介绍一种对回调的理解。应该也是最简单的一种。 回调按照字面意思来理解,可以理解为回头再调用。有人将回调称为钩子(Hook),就是指在写方法的时候,写了一半,不知道该怎么写了(可能会有很多种写法),那就在这里放一个钩子,然后接着往下写。

2017-04-09 12:29:06 360

转载 信号量 Semaphore

信号量为多线程协作提供了更为强大的控制方法。广义上说,信号量是对锁的扩展。信号量可以指定多个线程,同时访问一个资源。public Semaphore(int permits)public Semaphore(int permits,boolean fair)下面给一个例子,有20个人吃饭,但是只有5张桌子,所以要用信号量控制一下。public class SemaphoreTest { p

2017-04-07 10:22:49 223

原创 CyclicBarrier

循环栅栏的意思,除了能实现CountDownLatch的作用外,更加强大的地方在于循环。run方法有几个await,就循环几次。把所有的await凑齐,就是一次循环结束。新增加的特性是每次循环一遍,就会执行我们指定的一个线程,这个Runnable对象从CyclicBarrier构造函数传进去。下面的代码模拟了这样一个场景,长官集合队伍,把人集合完毕后,下命令干活。都干完活后,下命令收队。public

2017-04-07 09:51:50 202

原创 线程池

线程池是并发包里的东西。有个Executors工厂类,可以直接搞到我们常用的几个线程池对象,前提是对原理比较理解,才可以放心大胆的使用。java之前有个Timer类,当定时器使。现在线程池也提供类类似的功能,有了这个,完全可以不用使用那个Timer类了。上一段代码public static void main(String[] args) { ScheduledExecutorSer

2017-04-06 22:51:57 281

原创 常见的并发设计模式

Future模式 并发的精髓应该是不等待,但是有些请求可能处理时间会比较长,必须等待。此时就做一个折中,就是服务端立马把请求返回,不让客户端等待结果,返回的是一个假结果,可能客户端这个时候也不着急,得到结果后就去做别的事了,服务端会接着去处理请求,处理完毕后,会通知客户端(回调)。这个时候客户端才会拿到真正想要的结果。Master-Worker模式 一种典型的分治思想,Master-Worker

2017-04-06 18:47:32 598

原创 copy-on-write容器

写时复制,见名知义,就是在写的时候,进行复制。 jdk中的CopyOnWriteArrayList实现了这种技术。在高并发的读多写少的场景下,比如系统级别的信息,往往只是需要加载到内存,很少有修改的必要。在高并发场景下,虽然有读写锁的概念,但是读跟写依然是串行的。如果我们为了高效的读,可以容忍写慢一点,可以用这样一种机制,就是读的时候是无锁的,哪怕是读写同时进行,那么如果保持数据的一致性呢?我们知

2017-04-05 20:52:40 527

原创 单例模式的正确打开方式

public class SingleFactory { private static class Single{ private static Single single = new Single(); } public Single getInstance(){ return Single.single; }}这是一种懒汉式单例,

2017-04-05 15:16:57 260

原创 用wait和notify模拟阻塞队列

public class MyBlockedQueue { private int[] array; private int head; private int last; private int size; public MyBlockedQueue(int maxSize) { this.head = 0; this.last

2017-04-05 14:37:54 512

转载 java NIO简介

java NIO的底层基础是IO多路复用技术。所谓多路复用,就是把多个IO的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统多线程模型比,IO多路复用的最大优势就是系统开销小,系统不需要创建新的额外的线程,也不需要维护这些线程,降低了系统的维护工作量,节省了系统资源。IO多路复用的主要应用场景如下:1,服务器需要同时处理多个处于监

2017-04-04 19:00:40 324

转载 同步与异步,阻塞与非阻塞

先上一个来自网络的例子老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~

2017-04-04 17:35:45 167

空空如也

空空如也

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

TA关注的人

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