- 博客(89)
- 收藏
- 关注
原创 Hadoop学习记录-01安装Hadoop0.20.2
安装jdk如图jdk路径配置环境变量编辑/etc/profile文件,在结尾加上如下代码# jdkexport JAVA_HOME=/usr/local/jdk1.8.0_151export PATH=$PATH:$JAVA_HOME/binexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar刷新环境变量sourc
2017-12-26 16:46:34
289
原创 jvm学习记录--10 虚拟机类加载机制
类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态
2017-11-21 17:07:44
252
转载 jvm学习记录--09 Class文件结构
不仅跨平台,还能跨语言Java能够跨平台在window,linux,mac等不同平台的操作系统上运行是因为Java虚拟机的存在,Javac把Java代码编译成class文件,Java虚拟机执行class文件,由于Java虚拟机在多个不同操作系统平台都有实现。所有Java语音才能跨平台执行。但时至今日,商业机构和开源机构已经在Java语言之外发展出一大批在Java虚拟机之上运行的语言,如Clojure
2017-11-16 11:54:21
256
原创 jvm学习记录--08 性能监控Java工具篇
前言在jdk中提供了一些工具帮助开发人员解决一些问题。上一篇中提到的jps,jstack就是出自jdk。 jdk/bin目录下提供了很多exe文件其实都是jar文件的包装,真正的实现在jdk/lib/tools.jar中jps–查看Java进程jps命令可以查看所有的Java进程jps存放在JAVA_HOME/bin/jps,使用时为了方便请将JAVA_HOME/bin/加入到Path。[no1@
2017-11-14 16:43:17
424
原创 jvm学习记录--07 性能监控操作系统篇
linux系统监控工具top命令top命令可以从宏观上观察操作系统的cpu,内存使用情况,以及每个进程的使用cpu情况,内存情况。参数说明-b : 批处理-c : 显示完整的命令-I : 忽略失效过程-s : 保密模式-S : 累积模式-i<时间> : 设置间隔时间-u<用户名> : 指定用户名-p
2017-11-13 11:29:15
806
原创 jvm学习记录--06 垃圾回收对象内存分配策略
堆内存分配示意图对象优先进入EdenHotSpot虚拟机新生代内存布局及算法 (1)、将新生代内存分为一块较大的Eden空间和两块较小的Survivor空间; (2)、每次使用Eden和其中一块Survivor; (3)、当回收时,将Eden和使用中的Survivor中还存活的对象一次性复制到另外一块Survivor; (4)、而后清理
2017-11-10 15:07:04
205
原创 jvm学习记录--05 垃圾收集器分类
前言垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法等)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。不同的垃圾收集器有不同的特性,适用于不同的场景。没有最好的收集器,更没有万能的收集;选择的只能是适合具体应用场景的收集器。垃圾收集器的组合图中展示了7种不同分代的收集器: Serial、ParNew、Pa
2017-11-10 10:51:47
177
原创 jvm学习记录--04 垃圾回收概念与垃圾回收算法
垃圾回收存在与内存中,但是没有被使用的对象。这些对象如果不清除,就会一直保留到程序结束。如果这些对象占据着内存空间,而其他对象需要使用内存空间的时候发现内存又不够。那么就会出现内存溢出,垃圾回收就是要清理这些没有被使用的对象,释放内存空间。在c/c++等语言中对象的释放是通过程序员手动释放的。 在Java语言中对象的释放是由垃圾回收机制自动的释放的,不需要程序员来参与。垃圾回收有三个需要完成的过程
2017-11-09 14:44:10
219
原创 jvm学习记录--03 jvm参数配置
前言通过虚拟机参数可以对虚拟机进行设置(如设置堆大小,栈深度等),可以对虚拟机进行跟踪(跟踪垃圾回收信息,类加载情况)。 通过对虚拟机参数的设置来解决诊断问题与性能优化。参数的使用有三种 -XX:+ 开启参数-XX:- 关闭参数-XX:= 将option参数的值设置为value跟踪Java虚拟机垃圾回收-XX:+PrintGC使用参数-XX:+PrintGC
2017-11-08 11:50:27
229
原创 jvm学习记录--02 jvm运行时数据区域(内存区域)
jvm运行时数据区域JVM主要由类加载器子系统、运行时数据区(内存空间)、执行引擎以及与本地方法接口等组成。其中运行时数据区又由方法区、堆、Java栈、PC寄存器、本地方法栈,直接内存组成。其中本地方法栈与直接内存由操作系统提供,jvm负责调用。PC寄存器PC寄存器又称作程序计数器,每一个线程都是私有的。用于保存当前线程正在执行的位置,由于Java是支持多线程执行的,所以程序执行的轨迹不可能一直都是
2017-11-07 15:31:57
189
原创 jvm学习记录--01 jvm的基本架构
前言Visual,VMware属于系统系统虚拟机。运行与系统操作系统上的一款软件,提供仿真硬件环境,可以运行一些其他操作系统的软件平台. Java虚拟机是一个虚拟机,属于程序虚拟机。我们编写的程序运行与Java虚拟机上,再由Java虚拟机与操作系统进行交互从而运行我们编写的程序. Java虚拟机有多个版本(hotspot,Openjdk,J9等),这里所述基于hotspot,因为这个版本是使用最
2017-11-07 13:54:33
183
原创 设计模式(整理)
前言1 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 2 设计模式不仅仅23中 。 GOF的23中模式,不是GOF自己发明创造。而是选取了现实开发中基于上述设计思路所形成的23种常见设计模式进行归纳总结 3 不要为了使用设计模式而使用设计模式,这样会造成过度设计。应该在特定的场合,选择合理的方式处理解决问题,不一定是23种设计模式中的一
2017-11-03 15:16:41
302
原创 zookeeper学习记录-09 Zookeeper系统模型
数据模型Zookeeper的数据节点称为ZNode,ZNode是Zookeeper中数据的最小单元,每个ZNode都可以保存数据,同时还可以挂载子节点,因此构成了一个层次化的命名空间,称为树。在Zookeeper中,事务是指能够改变Zookeeper服务器状态的操作,一般包括节点创建与删除,数据节点内容更新和客户端会话创建与失效,对于每个事务请求,Zookeeper都会为其分配一个全局唯一的事务ID
2017-10-24 14:17:12
251
原创 zookeeper学习记录-08 Zookeeper典型使用场景及实现
前言Zookeeper是一个典型的发布/订阅模式高可用的分布式数据管理和协调框架,并且能够很好的保证分布式环境中数据的一致性。通过对Zookeeper中丰富的数据节点类型进行交叉使用,配合Watcher事件通知机制,可以非常方便的构建一系列分布式应用中都会涉及到的核心功能,如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁以及分布式队列,计算器等。在越来越多
2017-10-24 11:14:25
296
原创 zookeeper学习记录-07 Zookeeper Java 开源客户端
前言前面一篇使用Zookeeper提供的原生态Java API客户端进行操作,这里使用Zookeeper的开源客户端ZkClient和Curator进行操作.ZkClient准备工作–引入依赖在pom.xml中 加入依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookee
2017-10-23 15:02:45
312
原创 zookeeper学习记录-06 Zookeeper JavaAPI操作
新建一个maven项目引入依赖jar包pom.xml引入依赖jar包,实际上还需要sla4j和log4j,但是maven会自动帮忙我们引入这里只需要引入Zookeeper的即可<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <versio
2017-10-20 16:51:17
257
原创 zookeeper学习记录-05 Zookeeper命令行操作
准备工作这里用单机模式启动Zookeeper. 打开/usr/local/zk/zkp01/conf/zoo.cfg文件进行编辑 注释掉server.2=xxx server.3=xxx 只保留 server.1=xxx启动服务sh zkServer.sh start (start启动,stop,停止,restart重启)客户端连接sh zkCli.sh -server 127.0
2017-10-20 14:49:33
259
原创 zookeeper学习记录-04 Zookeeper安装(linux系统,伪集群)
下载https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz安装1 将下载文件解压到/usr/local/zk,解压出来的文件夹命名为zkp01,并且在zkp01目录下新建一个文件夹datadir,并且在datadir下新建一个文件myid内容暂时为空2 在zkp01/
2017-10-19 16:29:03
215
原创 zookeeper学习记录-03 Zookeeper与Paxos
Zookeeper介绍Apache Zookeeper是由Apache Hadoop的子项目发展而来,于2010年11月正式成为了Apache的顶级项目。Zookeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如数据发布/发布、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。在解决分布式数据一致性方面,Zookeeper并没有直接采用Pa
2017-10-19 14:01:00
269
原创 zookeeper学习记录-02一致性协议
前言在对一个分布式系统进行架构设计的过程中,往往会在系统的可用性和数据一致性之间进行反复权衡,于是就产生了一系列的一致性协议,在长期的探索研究过程中,涌现了一大批经典的一致性协议算法,其中最著名的就是二阶段提交协议(2PC),三阶段提交协议(3PC)和Paxos算法我: 老王,今晚7点老地方,搓够48圈不见不散!……(第二天凌晨3点) 隔壁老王: 没问题! // 消息延迟我: ……
2017-10-18 16:17:46
249
原创 zookeeper学习记录-01分布式架构
前言随着计算机系统规模变得越来越大,将所有业务单元集中部署在一个或者若干个大型机 上的体系结构物,已经越来越不能满足当今计算机系统,尤其是大型互联网系统的快速发展,各种灵活多变的系统架构模型层出不穷。同时,随着微型计算机的出 现,越来越多廉价的PC机成为了各大IT企业架构的首选,分布式的处理方式越来越受到业界的青睐—-计算机系统正在经历一场前所未有的从集中式到分布 式架构的变革。从集中式到分布式自从
2017-10-18 14:28:45
302
原创 实战Java高并发程序设计-07原子操作
悲观与乐观对于并发而言,锁是一种悲观策略。总是假设每一次临界区操作都会产生冲突,因此,必须每次操作都小心翼翼。如果有多个线程访问临界区资源,就牺牲性能让线程进行等待,使得线程阻塞。而无锁是一种乐观的策略,它会假设对资源的访问时没有冲突的,不需要等待,所有线程都可用不停顿的执行。那么在遇到冲突的情况下采用一种叫做比较交换技术(CAS Compare And Swap)来鉴别线程冲突,一旦检查到冲
2017-07-14 14:08:22
350
原创 实战Java高并发程序设计-06 Java并发包并发集合
ConcurrentHashMap这是一个高效的并发hashmap,可以理解为一个线程安全的hashmap。CopyOnWriteArrayList这是一个线程安全的List,在读多写少的场合,这个list性能非常好,远远好于Vector.ConcurrentLinkedQueue高效的并发队列,使用链表实现,可以看做一个线程安全的LinkedListBlockingQueue这是一个接口,JDK内
2017-07-10 11:40:41
316
原创 实战Java高并发程序设计-05 Java并发包线程池
概念线程的创建与销毁都需要销毁资源,为了避免频繁的创建与销毁线程,可以让创建的线程进行复用。类似数据库连接池的概念,Java中的线程池Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并
2017-07-04 11:12:51
379
原创 实战Java高并发程序设计-04 Java并发包锁和其他工具的使用
并发包(java.util.concurrent)为了更好的支持并发程序,jdk内部提供了大量实用的API和框架同步控制(锁)锁(lock)可以完全代替关键字synchronize. jdk中锁是一个接口,提供了三个实现类,读锁,写锁,重入锁. 读写锁读写锁拆成读锁和写锁来理解。读锁可以共享,多个线程可以同时拥有读锁,但是写锁却只能只有一个线程拥有,而且获取写锁的时
2017-06-30 16:04:38
331
原创 实战Java高并发程序设计-03 Java线程
概念线程的生命周期线程的状态定义在 java.lang.Thread.State 中 NEW创建状态并未执行,通过start()方法开始线程执行,进入RUNNABLERUNNABLE运行状态BLOCKED阻塞状态,如果在执行的过程中遇到了synchronize 关键字标注的同步块,就会进入阻塞状态WAITING等待状态,表示线程进入了等待状态,直到notify()方法执行通知后,线程继续进入运行状态
2017-06-23 11:47:25
338
原创 实战Java高并发程序设计-02几个重要概念
同步与异步概念同步和异步通常用来形容一次方法调用。同步方法调用一旦开始,调用者必须等到方法调用完成并返回后,才能继续后续的工作。异步方法调用更像一个消息传递,被调用之后,调用者马上开始后续工作。而异步方法通常在另外一个线程中“真实”地执行。整个过程不会阻碍调用者的工作,如果异步调用需要返回结果,那么当这个异步调用真实完成时,则会通知调用者。举例说明同步: 去超市买食物,通
2017-06-22 16:54:18
358
原创 实战Java高并发程序设计-01历史概述
摩尔定律的失败摩尔定律是由英特尔创始人之一的戈登*摩尔提出来的,内容为:集成电路上可容纳的电晶体数目,大约每隔24个月就会增加一倍,这是芯片性能会提高一倍。 说的直白一点就是没24个月,我们的计算机性能就能翻一番。 但是摩尔定律并不是一种自然法则或者物理定律,它只是基于人为观测数据后,对未来的预测。按照预测,我们的计算机性能会不断增加。 摩尔定律的有效性超过半个世纪,然而2004年,intel
2017-06-06 16:00:27
343
原创 Java加密与解密学习记录06-数字签名算法
概述在超时购买东西刷银行卡支付时,我们都会签下自己的名字,这种行为称之为 手写签名 。签名与使用者一一绑定,称为防止使用者否认的一种手段。如果使用者对自己的行为表示质疑,可以鉴定签名是否一致,判断签名是否有效。 数字签名是计算机软件应用中的一种体现,手写签名用于纸张,数字签名用于数据。数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。也就是说,数字签名算法是非对称加密
2017-06-02 13:46:17
704
原创 Java加密与解密学习记录05-非对称加密算法
概述1、与对称加密算法的主要差别在于,加密和解密的密钥不相同,一个公开(公钥),一个保密(私钥)。主要解决了对称加密算法密钥分配管理的问题,提高了算法安全性。 2、非对称加密算法的加密、解密的效率比较低。在算法设计上,非对称加密算法对待加密的数据长度有着苛刻的要求。例如RSA算法要求待加密的数据不得大于53个字节。 3、非对称加密算法主要用于 交换对称加密算法的密钥,而非数据交换
2017-06-02 10:37:00
585
原创 Java加密与解密学习记录04-对称加密算法
概述对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知
2017-06-02 09:49:58
730
原创 Java加密与解密学习记录03-消息摘要算法
概述在下载很多软件,特别是大型软件园的时候,一般都会有一个校验值。如下图 有些时候网络原因下载到破损的文件。更有甚至下载的软件园被篡改,加入一些其他东西。那么就需要校验来验证下载的软件的一致性了,这里消息摘要算法就发挥作用了.消息摘要算法的分类消息摘要算法主要分为三大类:md(message digest,消息摘要算法),SHA(secure hash algorithm,安全散列算法)和MA
2017-06-01 14:28:04
350
原创 Java加密与解密学习记录02-Base64
概述Base64编码,是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!有时候,我们学习转换的思路后,我们其实也可以结合自己的实际需要,构造一
2017-05-31 15:02:37
279
原创 Java加密与解密学习记录01-加密分类
对称密码采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 工作过程甲和乙是一对生意搭档,他们住在不同的城市。由于生意上的需要,他们经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定制作一个保险盒,将物品放入其中。他们打造了两把相同的钥匙分别保管,以便在收到包裹时用这个钥匙打开保险盒,以及在邮寄货物前用这把钥匙锁上保险盒。 上
2017-05-31 11:31:08
438
原创 深入I/O学习记录-02java NIO工作机制
为什么需要NIO标准IO 也就是 阻塞I/O(后面统一称为I/O),不管是网络I/O还是磁盘I/O数据写(outputStream)或者读(inputStream)都会存在阻塞,一旦出现了阻塞,线程将失去cpu的使用权。在网络I/O中可以用一个客户端在服务端就对应一个线程,出现阻塞只会阻塞一个线程而不影响其他的线程。或者使用线程池技术来减少开销。 但对于连接生存期比较长的协议来说,线程池的大小仍然
2017-05-24 13:36:38
320
原创 深入I/O学习记录-01java I/O工作机制
概述I/O在web中随处可见,网络传输,文件读取java I/O分类基于字节操作的I/O : inputStream 和 outputStream基于字符操作的I/O : Writer 和 Reader基于磁盘操作的I/O : File基于网络操作的I/O : Socket这里分为四组,前两组是数据传输的格式,后两组是数据传输的方式。虽然Socket并不在I/O包下,但是I/O的核心就是把什么样子(
2017-05-23 12:01:09
554
原创 深入javaweb学习记录-01web请求过程
web2.0时代的到来,互联网的网络架构已经逐步替代传统C/S架构.B/S架构的好处1 客户端使用统一的浏览器,浏览器具有统一性,不需要配置,使用简单。2 服务端基于统一的HTTP。 简化的开发B/S网络架构概述B/S网络架构得到了简化,是基于统一的应用层协议HTTP来交互。与C/S架构的互联网程序采用长连接的交互模式不同,HTTP采用无状态的短连接通信,通常情况下一次请求就完成了一次数据交互
2017-05-22 17:30:09
371
原创 spring4学习记录08-调用远程服务RPC(异步,activeMQ)
简介上一篇文章说的是应用之间同步进行交互的场景,这里介绍异步的使用。概念同步,当客户端调用远程方法时,客户端必须等待远程方法完成之后,才能继续执行,即使远程方法并不返回任何消息,客户端也必须阻塞到服务完成。 异步,客户端不需要等待服务器处理消息,甚至不需要等待客户端把消息发送给了服务端,就可以继续执行后面的流程,这是因为客户端假定服务端最终可以收到并处理这条消息。发送消息在异步消息中主要有两个概念
2017-05-18 16:00:50
1109
原创 spring4学习记录07-调用远程服务RPC(同步)
概念远程调用与本地调用的区别在于距离,程序内部直接调用叫做本地调用,一个程序访问另外一个程序提供的服务就叫做远程调用。 类似于人与人之间的交流,两个人在会议室讨论一个话题,这种面对面的形式就是本地交流。而如果我们拿起电话跟另外一个城市的人打电话来交流,这就是远程调用(Remote procedure call , RPC)spring提供的远程调用模型(这里主要说明RMI) RPC模型 适
2017-05-18 09:50:12
2374
原创 nginx学习记录02-配置说明
基本配置用于调试定位问题的配置daemon on|off是否以守护进程的方式运行nginx,默认onmaster_process on|off是否以master/worker的方式工作error_log path level默认 error_log logs/error.log error path代表的是一个具体的日志存储文件地址,可以是相对的也可以是绝对的
2017-05-16 15:11:10
311
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人