- 博客(36)
- 资源 (21)
- 收藏
- 关注
原创 Java RMI远程对象调用
RMI调用RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程对象都必须直接或间接实现此接口。只有在“远程接口”(扩展 java.rmi.Remote 的
2017-04-26 22:35:33 742
原创 Java动态编译
JDK6.0引入了新的编译API新API功能简介JDK 6 提供了在运行时调用编译器的 API,后面我们将假设把此 API 应用在 JSP 技术中。在传统的 JSP 技术中,服务器处理 JSP 通常需要进行下面 6 个步骤 1. 分析 JSP 代码; 2. 生成 Java 代码; 3. 将 Java 代码写入存储器; 4. 启动另外一个进程并运行编译器编译 Java 代码; 5. 将类文件
2017-04-24 21:12:10 449
原创 Kafka分区与group
Kafka 分区与group1.原理图 2.原理描述 一个topic 可以配置几个partition,produce发送的消息分发到不同的partition中,consumer接受数据的时候是按照group来接受,kafka确保每个partition只能同一个group中的同一个consumer消费,如果想要重复消费,那么需要其他的组来消费。Zookeerper中保存这每个topic下的每个pa
2017-04-24 16:29:45 33352 4
原创 Java平台的脚本
Java可以通过脚本引擎来调用脚本语言,比如JavaScript,Groovy等 脚本引擎 脚本引擎是一个可以执行用某种特定语言编写的脚本的类库。当虚拟机启动的时候,它会发现可用的脚本引擎。获取引擎并执行JavaScript脚本public class ScriptStudy { public static void main(String[] args) throws Script
2017-04-23 22:30:37 961
原创 Java安全之消息摘要
什么是消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。 消息摘要采用单向Hash 函数将需加密的明文”摘要”成一串128b
2017-04-22 15:11:52 1597
原创 Java类加载器
产生JDK1.0 概念将字节码加载到虚拟机加载器的种类系统加载器 其他加载器系统加载器引导类加载器 用来加载Java的核心库,使用原生代码实现的,并不继承java.lang.ClassLoader扩展类加载器 用来加载Java的扩展库。Java虚拟机会提供一个扩展库目录。该类加载这个目录的Java类系统类加载器 根据Java的classpath加载Java类。一般Java应用的类都是由
2017-04-22 12:27:10 434
原创 Java本地方法
什么是本地方法在Java中,有些方法涉及到与操作系统交互,获取和使用操作系统的硬件或软件的资源,单纯的用Java实现要么实现很困难,或者不能实现,这时候就要使用本地方法,本地方法就是用其他语言写的方法,然后在JVM中调用本地方法的定义本地方法在很多类中都有所见,比如Object类的clone方法protected native Object clone() throws CloneNotSuppor
2017-04-21 00:08:06 1999
原创 Java多线程探究-读写锁ReentrantReadWriteLock
读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者读写锁的场景 如果很多线程从一个数
2017-04-16 14:14:13 754
原创 Java多线程探究-阻塞队列
Java 中的阻塞队列 BlockingQueue 方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四种形式的处理方式不同:第一种是抛出一个异常,第二种是返回一个特殊值(null 或 false,具体取决于操作),第三种是在操作可以成功前,无限期地阻塞当前线程,第四种是在放弃前只在给定的最大时间限制内阻塞。下表中总结了这些方法: BlockingQueue接口主要有
2017-04-14 23:26:39 400
原创 Flink实现WordCount
import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.java.DataSet;import org.apache.flink.api.java.ExecutionEnvironment;import org.apache.flink.api.java.tuple.Tup
2017-04-14 15:29:02 4281
原创 Java多线程探究-死锁例子
Java死锁例子public class ThreadSyn2 implements Runnable { private static Object obj1 = new Object(); private static Object obj2 = new Object(); /** * @param args */ public static voi
2017-04-14 10:19:14 569
原创 Java多线程探究-死锁原因
进程死锁及解决办法 一、要点提示(1) 掌握死锁的概念和产生死锁的根本原因。(2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。(3) 记住解决死锁的一般方法,掌握死锁的预防和死锁的避免二者的基本思想。(4) 掌握死锁的预防策略中资源有序分配策略。(5) 理解进程安全序列的概念,理解死锁与安全序列的关系。(6
2017-04-14 10:14:49 798
转载 Java多线程探究-关键字volatile解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们
2017-04-13 11:31:05 582
原创 Java多线程探究-线程局部变量ThreadLocal
TheadLocal可以为各个线程提供各自的实例。例如SimpleDateFormat是非线程安全的 假设有一个静态变量 public static final SimpleDateFormat dateFormat = new SimpleDateFormat(‘yyyy-MM-dd); 如果两个线程都执行下列操作: String dateStamp = dateFormat.format
2017-04-12 22:43:46 5576
原创 Java多线程探究-线程属性
线程优先级Java中,每一个线程都有一个线程优先级。默认情况下,一个线程继承它的父线程的优先级。 设置优先级,使用Thread的setPriority方法 优先级的范围为Thread.MIN_PRIORITY 到 Thread.MAX_PRIORITY 这两个代表1到10,setPriority的参数必须在1到10之间,否则会抛异常,Thread.NORM_PRIORITY为5 当线程
2017-04-12 20:18:16 774
原创 Java多线程探究-Lock对象锁条件变量
Lock锁的条件变量 设想这样的一种情况,现在有一个盘子,一个线程负责往盘子里放一个苹果,一个线程从盘子取一个苹果,如何保证线程A放一个苹果,线程B就把这个苹果取了,不会出现已经放了好几个了,线程B才一个一个的取,现在限定一个条件,盘子里每次只能放一个苹果,由于两个线程随机执行,不能保证线程A刚放了苹果,线程B就刚好取了。如果用通用的思想的话怎么做呢应该是加条件判断,线程A每次放的时候,判断盘
2017-04-12 18:08:50 3294
原创 Java多线程探究-Lock锁对象
Lock是JDK1.5后提供的对象锁 看一下Lock类的类图 Lock的使用class MyRunnable implements Runnable { private int ticket = 100; private Lock myLock = new ReentrantLock(); @Override public void run() {
2017-04-12 15:37:09 816
原创 Java多线程探究-线程异常逃逸
线程逃逸 在Thread的run方法中,Java是不允许抛出受检异常的,所以必须由自己捕获,但是对于一些运行时的异常,难免有时候完全捕获到,继而传递到上一层,导致不可预料的程序终止,所以需要在上一层捕获来看看我们到底不能捕获未受检异常 异常类class MyRunnable implements Runnable { private int ticket = 10000;
2017-04-12 14:45:24 3997
原创 Java多线程探究-线程状态
1.new(新建)当创建一个线程以后,还没有执行start方法,这时候这个线程的状态就是new,该线程并没有开始执行2.Runnable(可运行)调用start方法以后,该状态的线程位于可运行线程池中,等待CPU的时间来运行3.Running(运行)可用行的线程获得了CPU时间片,运行代码4.Blocked(阻塞)线程因为某种原因放弃了CPU使用权,暂时停止运行,直到线程进入runnable状态,才
2017-04-11 19:05:22 661
原创 Java多线程探究-synchonrized原理分析
为了学习synchonrized,现在用javap 查看一下类的字节码1. 同步代码块public void salseTicket1() { synchronized (this) { if (ticket > 0) { System.out.println("线程 " + Thread.currentThread().
2017-04-11 16:13:40 1563
原创 Java多线程探究-线程同步
什么是线程同步 线程同步是解决多个线程同时对同一数据进行操作,而导致的数据破坏 就像前面我写的卖票的例子,就出现了卖出-1的票,这样就出现了问题线程同步的方式1. synchronized关键字1. 同步方法在方便声明上加入synchronized,这样,这个方法就是同步了,每次只有一个线程可以执行方法的代码,如果这个线程没有离开方法,那么 其他线程只能处于阻塞状态,这样就保证了一次只
2017-04-11 13:24:10 504
原创 Java多线程探究-多线程安全问题
接着Java多线程买票的程序来说class MyRunnable implements Runnable{ private int ticket =100; public void run() { while(true){ if(ticket>0){ System.out.println(Thread.cu
2017-04-10 23:50:03 530
原创 Java多线程探究-创建多线程
何为线程 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行 线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同
2017-04-10 23:22:36 403
转载 CentOS安装Python2.7
CentOS下面Python在升级到2.7.6的时候,没有找到安装包直接安装,只能通过源代码编译的方式来安装Python 2.7.6版本。这篇是编译和安装Python2.7.6的过程记录。CentOS系统中安装了development tools。要编译安装Python,执行下面代码:$ pushd /usr/local/src$ sudo mkdir python$ sudo c
2017-04-10 16:35:43 1284
原创 pip安装pkg_resources.DistributionNotFound: pip==9.0.1
执行pip命令报错Traceback (most recent call last): File "./pip", line 5, in <module> from pkg_resources import load_entry_point File "/opt/soft/distribute-0.7.3/pkg_resources.py", line 2989, in <modul
2017-04-10 13:40:44 38976 1
原创 Elasticsearch系列篇之Delete document
删除一个document需要指定index,type,idcurl -XDELETE http://localhost:9200/twitter/tweet/1Routing 当创建index的时候如果指定了routing,那么在删除的时候要同时指定文档的id和routing,如果routing不匹配,光是id匹配也不会删除curl -XDELETE http://localhost:9200/t
2017-04-08 18:56:41 16627
原创 Elasticsearch系列篇之Get document
GET 一条document根据document的id获取一条JSON格式的文档。curl -XGET http://localhost:9200/twitter/tweet/0返回结果:{ "_index" : "twitter", "_type" : "tweet", "_id" : "0", "_version" : 1, "found": true,
2017-04-08 17:50:44 1665
原创 azkaban 创建工作流
azkban的特点就是可以创建工作流,每个工作流可以包含多个job,这些job之间可以有多种依赖关系,azkaban可以根据他们的依赖关系进行任务调度创建工作流创建job每个job以文件形式存在,后缀名为.job#first jobtype=command #job的类型,这里是命令类型command=echo "Hello World" #这个job执行linux命令,输出Hello Wo
2017-04-08 16:54:28 6851 2
原创 azkaban配置
azkaban web server配置1. 主要配置 参数 说明 默认 azkaban.name azkaban网页UI显示名称 Local azkaban.label 对azkaban的描述 My Local Azkaban azkaban.color Azkaban UI的颜色设置 FF3601 web.resource.dir 页面的CS
2017-04-08 15:46:42 6091
原创 azkaban安装使用
什么是azkaban Azkaban是一款基于Java编写的任务调度系统 任务调度 任务调度:有四个任务脚A、B、C、D,其中任务A与任务B可以并行运行,然后任务C依赖任务A和任务B的运行结果,任务D依赖任务C的运行结果,此时整个过程可以等效为一个有向无环图,而给所有的任务运行定一个运行规则就可以理解为任务调度AzKaban组成 1.MySQL数据库 2.azkaban-s
2017-04-07 18:38:07 3950
原创 cglib动态代理学习
CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP和dynaop,为他们提供方法的interception(拦截)。最流行的OR Mapping工具hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联(对集合的延迟抓取,是采用其他机制实现的)。EasyMock和jMock是通过使用模仿(mock)对象来测试java
2017-04-07 16:51:37 904
原创 azkaban java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"
执行/bin/azkaban-web-start.sh报错报错:Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"解决办法: 在Azkaban-web-server 的conf目录下创建文件夹conf/log4j.properties: 写入一下内容
2017-04-07 13:29:29 8330
原创 Elasticsearch系列篇之创建document
Elasticsearch中,一条index被成为一条document,每条document以json格式存在创建一条记录(document) 添加一条记录到twitter的user type中,id=1curl -XPOST -uadminName:daiyutage 'http://localhost:9200/twitter/user/1' -d'{ "username":"xiaom
2017-04-05 16:51:37 3748
原创 Elasticsearch系列篇之Get Index
Elasticsearch Get Index 查询index的信息 默认会返回此index的所有信息,包括setting,mappingscurl -XGET http://localhost:9200/twitter?pretty查看结果 返回的json包含aliases,mappings,settings,warmers可以指定返回的指标 下面的命令只返回setting的部分curl
2017-04-05 15:58:48 2500
原创 Elasticsearch系列篇之删除索引
Elasticsearch删除索引Elasticsearch可以删除索引,但是不能像数据库一样直接删除type,如果想要删除type有两种方式 a.删除index,这样会把所有该index的所有的type都会删除 b.重新创建一个新的type,使用新的type,这种方式安全一点 如果一个index下面只有一个type,那么就可以直接删除index 如果一个index下面有多个type
2017-04-05 14:32:53 49478
原创 Elasticsearch系列篇之创建索引
Elasticsearch的index类似于关系型数据库的库的概念,在保存数据前,要先创建索引 使用curl命令创建 创建一个新的索引,并设置分片数和副本数 创建一个twitter的索引, 设置为3个分片,2个副本,默认5个分片,1个副本curl -XPUT http://localhost:9200/twitter -d'{ "settings" : { "inde
2017-04-05 14:17:49 22571
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人