
Java
文章平均质量分 77
sylar哇咔咔
勤于探索渴于求知
展开
-
JAVA线程间的状态转换
线程间的状态转换: 1. 新建(new):新创建了一个线程对象。2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(running):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。转载 2018-01-16 09:07:50 · 273 阅读 · 0 评论 -
【java基础】java通过相对路径读取文件
1.new File()代表的所有javaIO文件读取 new File("box.txt"): 读取的是程序(src)同目录下的box.txt。它的当前目录是程序(src)所在目录; new File("/box.txt"):读取的是程序所在磁盘下的box.txt(假设程序文件在E盘,则对应文件目录为:D:/box.txt);2.类名.class.getResour原创 2015-12-24 11:49:08 · 559 阅读 · 0 评论 -
使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
RESTful Web 服务简介REST 在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一。REST 中最重要的概念是资源(resources),使用全球 ID(通常使用 URI)标识。客户端应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操作资源或资源集。RESTful Web 服务是使转载 2016-03-25 14:22:47 · 767 阅读 · 0 评论 -
Apache Shiro 快速入门教程
第一部分 什么是Apache Shiro1、什么是 apache shiro :Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理如同 Spring security 一样都是是一个权限安全框架,但是与Spring Security相比,在于他使用了和比较简洁易懂的认证和授权方式。2、A转载 2016-04-07 08:53:16 · 529 阅读 · 0 评论 -
【Java基础】理解 Java 垃圾回收机制
理解java垃圾回收机制有什么好处呢?作为一个软件工程师,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写出更好的Java应用程序。这是我个人的主观观点,但我相信一个人精通了GC,往往会是一个更好的Java程序员。如果你对GC感兴趣,那就意味着你有一定大规模应用开发的经验。如果你已经仔细过考虑选择合适的GC算法,这意味着你完全理解你开发的应用程序的功能。当然,这转载 2016-02-29 16:09:20 · 319 阅读 · 0 评论 -
【java基础】线程安全的单例模式
线程安全的单例模式实现有几种思路,个人认为第2种方案最优雅:、饿汉式、借助内部类、普通加锁解决、双重检测,但要注意写法,如果单体模式继续扩展为N元单体模式,那就是对象池模式了1、饿汉式单例 public class Singleton { private final static Singleton INSTANCE = new Singleton(); private转载 2016-02-29 11:22:36 · 331 阅读 · 0 评论 -
【日志】Java 流行框架(Spring/Struts2/Hibernate/iBatis)都在使用什么日志组件
做 Java Web 应用我想多会采用这两种框架组合,SSH 和 SSI,其实我是不太喜欢用这两种缩写方式:SSH = Spring + Struts + Hibernate,SSH 由久已久所代表的是 Secure Shell,像 httpsSSI = Spring + Struts + iBatis,SSI 在很久以前就是 Server Side Include,像 shtml,而 i转载 2015-11-20 10:41:21 · 890 阅读 · 0 评论 -
【Java基础】JPA入门例子(采用JPA的hibernate实现版本)
(1)、JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。 为什么要使用JAP? 在说为什么要使用JPA之前,我们有必转载 2015-11-24 12:36:35 · 489 阅读 · 0 评论 -
【Hibernate】hibernate的二级缓存(spring)
hibernate3.X二级缓存的使用(一)Hibernate的二级缓存策略的一般过程如下:1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。2) 把获得的所有数据对象根据ID放入到第二级缓存中。 3) 当Hibernate根据ID访问数据对象的时候,转载 2015-11-24 12:39:36 · 353 阅读 · 0 评论 -
【Java基础】JPA详解(part1)
1.JPA简介:Java持久化规范,是从EJB2.x以前的实体Bean(Entitybean)分离出来的,EJB3以后不再有实体bean,而是将实体bean放到JPA中实现。JPA是sun提出的一个对象持久化规范,各JavaEE应用服务器自主选择具体实现,JPA的设计者是Hibernate框架的作者,因此Hibernate作为Jboss服务器中JPA的默认实现,Oracle的Weblogic使转载 2015-11-25 14:26:52 · 45045 阅读 · 0 评论 -
【java基础】JPA详解(part2)
1.JPA的实体生命周期:JPA的实体有以下4中生命周期状态:(1).New:瞬时对象,尚未有id,还未和Persistence Context建立关联的对象。(2).Managed:持久化受管对象,有id值,已经和Persistence Context建立了关联的对象。(3).Datached:游离态离线对象,有id值,但没有和Persistence Context建立关联的对象转载 2015-11-25 14:29:09 · 362 阅读 · 0 评论 -
【Jboss】在jboss上部署web应用
1、JBoss介绍JBoss完全实现了J2EE的服务栈:EJB (Enterprise JavaBeans)JMS (Java Message Service)JTS/JTA (Java Transaction Service / Java Transaction API)Servlet and JSP (JavaServer Pages)JNDI (Java Naming转载 2015-11-27 10:45:16 · 485 阅读 · 0 评论 -
【网络】远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比
总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式。优点是跨语言跨平台,C端、S端有更大的独转载 2015-11-26 17:40:16 · 738 阅读 · 0 评论 -
【java基础】关于JNDI and EJB
JNDI (The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。借助于JNDI提供的接口,能够通过名字定位用户、机器、网络、对象服务等。 命名服务:就像DNS一样,通过命名服务器提供服务,大部分的J2EE服转载 2015-11-27 13:03:44 · 440 阅读 · 0 评论 -
【java基础】Java邮件开发
前面介绍了电子邮件系统的基本知识(Java邮件开发-----电子邮件的基本概念),那篇博客知识对基础理论知识做一些简要介绍,并不妨碍我们做邮件开发。现在开始Java邮件开发。 一、JavaMail简介 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。Ja转载 2015-11-30 09:46:19 · 536 阅读 · 0 评论 -
【java基础】运行jar应用程序引用其他jar包的四种方法
大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口。 具体的方法是修改jar包内目录META-INF下的MANIFEST.MF文件。 比如有个叫做test.jar的jar包,里面有一个拥有main函数的main class:test.someClassName我们就只要在MANIFEST.MF转载 2015-12-01 10:14:56 · 1101 阅读 · 0 评论 -
【OSGI】实例讲解OSGI开发
OSGI,或者通俗点说JAVA动态模块系统,定义了一套模块应用开发的框架。OSGI容器实现方案如Knopflerfish, Equinox, and Apache Felix允许你把你的应用分成多个功能模块,这样通过依赖管理这些功能会更加方便。和Servlet和EJB规范类似,OSGI规范包含两大块:一个OSGI容器需要实现的服务集合;一种OSGI容器和应用之间通信的机制。开发OSGI平台转载 2015-12-01 09:59:14 · 355 阅读 · 0 评论 -
SpringMVC整合Shiro
摘要 SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。第一步:配置web.xml ?1234567891011121314151617 --> filter>转载 2016-04-11 15:42:33 · 250 阅读 · 0 评论 -
java 解释器与JIT编译器
早在Java1.0版本的时候,Sun公司发布了一款名为Sun Classic VM的Java虚拟机,它同时也是世界上第一款商用Java虚拟机,在当时这款虚拟机内部只提供解释器,用今天的眼光来看待必然是效率低下的,因为如果Java虚拟机只能够在运行时对代码采用逐行解释执行,程序的运行性能可想而知。但是如今的HotSpot VM中不仅内置有解释器,还内置有先进的JIT(Just In Time Com转载 2016-07-22 14:20:33 · 852 阅读 · 0 评论 -
基于Java的ProtocolBuffer
这篇博客既是帮助一些初学者深入理解protocolBuffer,也是为了方便自己记忆和进一步学习。本文主要介绍了三个方面,包括:· 在一个.proto文件里面如何定义消息格式· 如何使用protocol buffer的编译器· 如何使用java protocol buffer的API来读写消息首先,让我们来了解一下为什么要使用protocolBuffer?假设我们现在要做一转载 2016-07-06 17:43:29 · 308 阅读 · 0 评论 -
Spring MVC的异步模式
Spring MVC的异步模式我承认有些标题党了,不过话说这样其实也没错,关于“异步”处理的文章已经不少,代码例子也能找到很多,但我还是打算发表这篇我写了好长一段时间,却一直没发表的文章,以一个更简单的视角,把异步模式讲清楚。什么是异步模式要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式:(图1)浏览器发起请求,Web服务转载 2018-01-15 09:44:05 · 382 阅读 · 0 评论 -
OutOfMemoryError详解
我们都知道JVM的内存管理是自动化的,Java语言的程序指针也不需要开发人员手工释放,JVM的GC会自动的进行回收,但是,如果编程不当,JVM仍然会发生内存泄露,导致Java程序产生了OutOfMemoryError(OOM)错误。产生OutOfMemoryError错误的原因包括:java.lang.OutOfMemoryError: Java heap spacejava.la转载 2017-12-18 16:49:14 · 388 阅读 · 0 评论 -
JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同转载 2017-12-18 16:28:21 · 212 阅读 · 0 评论 -
jstat命令详解
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。jstat工具特别强大,有众多转载 2017-12-18 16:10:44 · 473 阅读 · 0 评论 -
jvm调优--查找最耗CPU的代码
jvm调优--查找最耗CPU的代码1.场景今天在公司用mvn编译的时候,出现机器卡死的情况,让我深深的反省了一下。[java] view plain copy../apache-maven-3.0.5/bin/mvn -Dhadoop.version=0.20.2-cdh3u5 -DskipTests clean packa转载 2017-12-18 15:37:17 · 472 阅读 · 0 评论 -
java基础知识3--如何获取资源文件(Java中获取资源文件的url)
java开发中,常见的resource文件有:.xml,.properties,.txt文件等,后台开发中经常用到读取资源文件,处理业务逻辑,然后返回结果。获取资源文件的方法说明getResource()返回:URLgetResourceAsStream () 返回的是inputstream,需要定义一个InputStream接收//Class.getResource和Class.getRes转载 2017-12-13 11:26:39 · 487 阅读 · 0 评论 -
【java基础】Java邮件开发(基本概念介绍 )
电子邮件用于网上的信心传递和交流,它是最重要的Internet服务之一。据统计Internet有30%的业务是电子邮件有关的。同时我们也不可否认它在我们的日常生活、工作办公方面扮演着很重要的角色。譬如:许多办公自动化项目(OA)中都要附带发送邮件的功能,如果还要使用OutLook等手工方式就不适合,在这个高速的时代,我们需要提供工作效率,让工作能够自动化。同时在许多网站中也都需要附带发送邮件的功能转载 2015-11-30 09:44:08 · 460 阅读 · 0 评论 -
【java基础】关于java使用unicode编码及java编码解码测试数据
测试文件1:UnicodeTest1.java-----该文件自身编码为utf-8package com.java.unicode;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.util.Arrays;/** * 本java文件编码为UTF-8 * */public原创 2015-12-12 22:57:18 · 936 阅读 · 0 评论 -
JVM学习笔记(二)------Java代码编译和执行的整个过程
Java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机制Java 源码编译由以下三个过程组成:分析和输入到符号表注解处理语义分析和生成class文件流程图如下所转载 2017-02-27 10:17:24 · 266 阅读 · 0 评论 -
java并发:同步容器&并发容器
第一节、同步容器与并发容器1.简述同步容器与并发容器 在Java并发编程中,经常听到同步容器、并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如Vector、Hashtable以及SynchronizedList等容器,如果有多个线程调用同步容器的方法,它们将会串行执行。 可以通过查看Vector、Ha转载 2017-03-08 14:31:01 · 384 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除转载 2017-02-28 16:26:13 · 319 阅读 · 0 评论 -
ZooKeeper原理及使用
ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。今天这篇文章分为三个部分来介绍ZooKeeper,第一部分介绍ZooKeeper的基本原理,第二部分介绍ZooKeeper提供的Client API的使用,第三部分介绍一些ZooKeeper典型的应用场景转载 2017-01-16 16:40:01 · 319 阅读 · 0 评论 -
java版的Metric工具介绍
Metrics是一个给JAVA服务的各项指标提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同时,Metrics能够很好的跟Ganlia、Graphite结合,方便的提供图形化接口。基本使用方式直接将core包(目前稳定版本3.0.1)导入pom文件即可,配置如下: com.codahale.metricsgroupId> metrics-core转载 2016-06-23 09:16:43 · 1623 阅读 · 0 评论 -
【Java基础】Java内存模型总结
Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。1、多线程通信1.1 内存模型Java线程之间的通信由Java内存模型(JMM)控制,转载 2015-12-07 17:06:21 · 510 阅读 · 0 评论 -
【java基础】Java 中的进程与线程
进程与线程在程序开发中无疑占有极其重要的地位,而 Java 语言为了能提供统一的、与平台无关的关于进程和线程的编程接口,必然要对操作系统提供的相关功能做进一步封装。本文主要介绍 Java 中关于进程与线程的相关封装类,揭示如何创建 Java 进程与线程,Java 封装类和实际的系统本地进程和线程是如何对应的,以及使用 Java 进程和线程的一些限制。概述进程与线程,本质意义上说,转载 2015-12-07 16:08:22 · 327 阅读 · 0 评论 -
【Java基础】深入Java内存区域
概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工作的劳动人民—既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。 对于Java程序员来说,在虚拟机的自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,而且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机转载 2015-12-07 17:33:43 · 306 阅读 · 0 评论 -
【Java并发编程实战】—–MCS队列锁
与CLH类似,MCS也是由QNode对象构成的链表,每个QNode表示一个锁持有者,表示一个线程要么已经获取锁,要么正在等待锁。它与CLH不同的是,队列是一个显示链表,是通过next指针串起来的。实现MCS队列锁的具体实现如下:1、如图(a)所示,队列初始化时没有结点,tail=null;2、如图(b)所示,线程A想要获取锁,于是将自己置于队尾,由于它是第一个结点,转载 2015-12-08 18:13:42 · 447 阅读 · 0 评论 -
【Java并发编程实战】-----“J.U.C”:Exchanger
前面介绍了三个同步辅助类:CyclicBarrier、Barrier、Phaser,这篇博客介绍最后一个:Exchanger。JDK API是这样介绍的:可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchang转载 2015-11-30 10:37:04 · 324 阅读 · 0 评论 -
【Java并发编程实战】-----线程基本概念
在学习Java并发之前我们需要先理解一些基本的概念:共享、可变、线程安全性、线程同步、原子性、可见性、有序性。共享和可变要编写线程安全的代码,其核心在于对共享的和可变的状态进行访问。“共享”就意味着变量可以被多个线程同时访问。我们知道系统中的资源是有限的,不同的线程对资源都是具有着同等的使用权。有限、公平就意味着竞争,竞争就有可能会引发线程问题。“可变”是指变量的值转载 2015-11-30 10:14:11 · 365 阅读 · 0 评论 -
【Java并发编程实战】—–synchronized
在我们的实际应用当中可能经常会遇到这样一个场景:多个线程读或者、写相同的数据,访问相同的文件等等。对于这种情况如果我们不加以控制,是非常容易导致错误的。在java中,为了解决这个问题,引入临界区概念。所谓临界区是指一个访问共用资源的程序片段,而这些共用资源又无法同时被多个线程访问。在java中为了实现临界区提供了同步机制。当一个线程试图访问一个临界区时,他将使用一种同步机制来查看是不是已经转载 2015-11-30 10:16:33 · 497 阅读 · 0 评论