
Java高级
L-Zhang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
依赖注入框架Google Guice
Spring框架的依赖注入是家喻户晓的,但是在实际的开发中我们想使用便捷的依赖注入功能,但是又不想引入Spring框架的复杂性,该怎么办呢?有了Google Guice,这个问题便简单了,首先在你的maven项目里引入官方文档里给出的例子又臭又长,我不使用官方的例子,下面我们来写个最简单的HelloWorld我们使用Guice创建了一个注射器Injector,然后从Inject...原创 2019-10-21 17:58:48 · 480 阅读 · 0 评论 -
JMX的用处及用法
JMX最常见的场景是监控Java程序的基本信息和运行情况,任何Java程序都可以开启JMX,然后使用JConsole或Visual VM进行预览。下图是使用Jconsle通过JMX查看Java程序的运行信息1.png为Java程序开启JMX很简单,只要在运行Java程序的命令后面指定如下命令即可-Djava.rmi.server.hostname=127.0.0.1-Dcom....原创 2019-10-21 11:34:40 · 1474 阅读 · 0 评论 -
深入了解JAVA可变长度的参数(Varargs)
到J2SE 1.4为止,一直无法在Java程序里定义实参个数可变的方法——因为Java要求实参(Arguments)和形参(Parameters)的数量和类型都必须逐一匹配,而形参的数目是在定义方法时就已经固定下来了。尽管可以通过重载机制,为同一个方法提供带有不同数量的形参的版本,但是这仍然不能达到让实参数量任意变化的目的。然而,有些方法的语义要求它们必须能接受个数可变的实参——例如著名的转载 2017-09-11 17:00:35 · 284 阅读 · 0 评论 -
Git学习教程
由于工作需要,使用Git管理代码版本,从网络上搜索Git的学习教程。相当不错的git学习教程,该教程有一下两大特点: 1.绝对面向初学者,没有接触过版本控制概念的读者也可以轻松入门,不必担心起步难度; 2.实用性超强,边学边练,一点也不觉得枯燥。牛人如何牛: 1991年Linus创建了Linux; 2002年前Linus通过手工合并志愿者的代码; 十年的发展,代码库的庞大,不得不使用版本控原创 2017-10-11 14:34:29 · 282 阅读 · 0 评论 -
XStream和Dom4j
对于搞技术的人来说,xml文件的处理应该并不陌生吧,先总述下,个人感觉XStream在处理XML文件和JavaBean对象互转时比较好,dom4j对常用的xml配置文件操作比较好点;首先,Dom4j 处理xml应该是公认的易操作、高效率,特别是对读取和修改xml文件中内容 也提供了丰富的API接口,但是在dom4j在处理XML文件和JavaBean对象互转时,会有些小麻烦,特别是 XML 文件的内转载 2017-10-10 10:14:21 · 695 阅读 · 0 评论 -
commons lang使用
一个优秀的类应该重写toString,hashCode,equals,compareTo方法,我们来看一下apache如何带我们简化这些操作,以下示例支持两种形式,一种是通过逐个参数添加从而精细控制那些参数参与比较和输出,另一种是通过反射让全部参数都参与比较和输出 Builder系列 [java] view plain copy //ToStringBu转载 2017-10-10 10:39:05 · 554 阅读 · 0 评论 -
StringBuilder在高性能场景下的正确用法
StringBuilder在高性能场景下的正确用法 关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗吗?还有些同学,还听过三句似是而非的经验:1. Java编译优化后+和StringBuilder的效果一样;2. StringBuilde转载 2017-08-18 14:53:32 · 1923 阅读 · 0 评论 -
commons-lang介绍
跟java.lang这个包的作用类似,Commons Lang这一组API也是提供一些基础的、通用的操作和处理,如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理等等。commons.lang包这一组API的所有包名都以org.apache.commons.lang开头,共有如下8个包:org.apache.commons.la原创 2017-10-10 10:33:46 · 14835 阅读 · 0 评论 -
Java中的枚举与values()方法
在编写Java程序时经常会用到枚举(后面统一用enum描述)类型,今天我们就来看一下enum中常用到的values()方法。首先,我们在Eclipse中编写一个简单的类:public class EnumTest { private enum Directions { NORTH, SOUTH, EAST, WEST }}在这里,我们定义了一个名叫Di转载 2017-12-07 11:56:50 · 11274 阅读 · 1 评论 -
Java 8 Stream – Read a file line by line
In Java 8, you can use Files.lines to read file as Stream.c://lines.txt – A simple text file for testingline1line2line3line4line51. Java 8 Read File + StreamTestReadFile.javapackage com.转载 2017-12-07 14:17:05 · 2356 阅读 · 0 评论 -
java文件读写操作大全
一.获得控制台用户输入的信息 public String getInputMessage() throws IOException...{ System.out.println("请输入您的命令∶"); byte buffer[]=new byte[1024]; int count=System.in.read(buffe转载 2017-09-18 17:52:53 · 426 阅读 · 0 评论 -
Java NIO 系列教程
Java NIO 系列教程原文地址 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Java NIO: Channels and Buffers(通道和缓冲区)标准的IO基于字节流和字符流转载 2017-08-30 17:58:35 · 898 阅读 · 0 评论 -
Java异常类处理层次
异常处理简介 异常在java的开发中可能没有那么被重视。一般遇到异常,直接上抛,或者随便catch一下处理之后对于程序整体运行也没有什么大的影响。 不过在企业级设计开发中,异常的设计与处理的好坏,往往就关系着这个系统整体的健壮性。一个好的系统的异常对于开发者来说,处理应该统一,避免各处散落很多异常处理逻辑;对于系统 来说,异常应该是可控的,并且是易于运维的,某些异常出现后,原创 2017-08-14 14:55:00 · 1185 阅读 · 0 评论 -
Java 8的新特性—终极版
前言: Java 8 已经发布很久了,很多报道表明java8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class转载 2017-08-07 15:12:10 · 1067 阅读 · 0 评论 -
JDK动态代理为什么必须用接口
JDK动态代理为什么必须用接口JDK动态代理与CGLIB动态代理。从Spring的AOP框架介绍中得知对于使用接口的类,Spring使用JDK动态代理,没有接口的就使用别的AOP框架aspectj,但这些都是依赖于Java字节码工具ASM生成一个原类的新类,调用Callback 。但是JDK动态代理为什么必须使用接口呢,难道原理不是像ASM一样修改字节码吗?带着这个疑问,开始看JD原创 2017-08-23 14:00:51 · 7830 阅读 · 0 评论 -
CGlib无入侵代理入门使用
CGlib是什么? CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。 当然这些实际的功能是asm所提供的,asm又是什么?Java字节码操控框架,具体是什么大家可以上网查一查,毕竟我们这里所要讨论的是cglib,cglib就是封装了asm,简化了asm的操作,实现了在运行期动态生成新的class。 可能大家还感觉转载 2017-08-23 18:45:33 · 1127 阅读 · 0 评论 -
HashMap死循环,CPU100%
在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出现问题。但是,我发现近几年,很多人都经历过这个事(在网上查“HashMap Infini转载 2017-08-24 10:40:45 · 1026 阅读 · 0 评论 -
Java BigDecimal和double
BigDecimal类对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。BigDecimal类的常用方法如表11-15所示。表11-15 BigDecimal类的常用方法序号方 法类型描转载 2017-09-14 15:29:34 · 720 阅读 · 0 评论 -
JUnit源码分析
JUnitJUnit源码学习和经验分享。源代码里没有密码,好多开源框架都出自大牛大师之手,是学习的好例子,可惜自己没啥耐心去看,网上搜索到网友牛人解析,记录下来,学习学习。深入JUnit源码之Runner深入JUnit源码之Statement深入JUnit源码之Rule深入JUnit源码之Builder、Request与J原创 2017-09-15 17:55:05 · 340 阅读 · 0 评论 -
Jetty源码学习
JettyJetty源码学习、经验等源代码里没有密码,好多开源框架都出自大牛大师之手,是学习的好例子,可惜自己没啥耐心去看,网上搜索到网友牛人解析,记录下来,学习学习。http://www.blogjava.net/DLevin/category/54908.html?Show=All原创 2017-09-15 18:00:03 · 338 阅读 · 0 评论 -
分布式通信协议
分布式基础通信协议:paxos,totem和gossip背景:在分布式中,最难解决的一个问题就是多个节点间数据同步问题。为了解决这样的问题,涌现出了各种奇思妙想。只有在解决了如何进行信息同步的基础之上才衍生出形形色色的应用。这里开始介绍几种分布式通信协议。简单即有效——totem协议:totem协议也许你还比较陌生,但是corosyn原创 2017-08-30 16:59:05 · 1776 阅读 · 0 评论 -
HttpURLConnection 设置Host 头部无效
最近做了一个服务,对外提供http接口,采用nginx反代,使用域名访问但是为了容灾,客户端需要指定ip访问该服务,如果该ip坏掉,客户端就切换到另个一ip(靠dns解析太慢)nginx上只配置了域名的分发,没有配置ip分发于是在http请求上做了点处理,url配置ip,同时配置http头部的Host参数为该域名,HttpURLConnection 有setRequestPro转载 2018-01-11 09:15:27 · 9129 阅读 · 1 评论 -
Java 常见异常种类
Java Exception:1、Error 2、Runtime Exception 运行时异常3、Exception 4、throw 用户自定义异常异常类分两大类型:Error类代表了编译和系统的错误,不允许捕获;Exception类代表了标准Java库方法所激发的异常。Exception类还包含运行异常类Runtime_Exception和非运行异常类Non_Runtime转载 2018-01-23 15:28:04 · 461 阅读 · 0 评论 -
HttpClient 重定向 302
使用HttpClient访问http地址,有时候会报302错误。通过上网搜索,发现问题所在,报302是因为访问的http地址在服务端做了访问重定向,需要请求重定向后的URI。1.简单实例,http访问返回302,此时需要获取重定向地址,继续进行重定向访问,以获取最终结果:public class TestLogin { public static void main(Str...原创 2018-09-27 18:17:20 · 8718 阅读 · 0 评论 -
Annotation实战【自定义AbstractProcessor】
Annotation实战【自定义AbstractProcessor】前言在使用Java的过程中,每个开发人员都接触过@Override, @Deprecated等等各式各样的注解,这些东西是java最基础的一些原生定义好的annotation。本文通过一个实例演示如果自定义自己的annotation,使得在编译源码代码阶段进行额外操作。案例源码预热简单说一下annotation的基...转载 2019-03-22 17:27:15 · 757 阅读 · 0 评论 -
Mybatis根据数据库表自动生成实体类和xml映射文件及dao
通常在开发过程中,大家都会使用mybatis操作数据库。一般步骤都是先创建好数据库表,然后创建mybatis一套。实体类、相应的dao和mybatis mapper文件,都相当麻烦。mybatis提供了对应的插件工具,方便自动生成,不用手动敲代码了。下面以maven、idea开发环境下的操作步骤为示例:1. 配置pom文件spring及mybatis依赖包:<d...原创 2019-04-04 14:27:50 · 5903 阅读 · 0 评论 -
Java 注解及自定义注解处理器
注解介绍注解,也被称为元数据(所谓的元数据,就是描述数据的数据)。所以注解的主要作用就是给指定代码一些描述信息。这些指定代码可以是一个类、一个方法或者是一个属性。Java注解是在Java SE5中被引入进来的,在Java中内置了三种注解以及四种元注解。内置注解内置注解 说明 @Override 表示当前的方法定义将覆盖超类中的方法,如果方法名或者参数有误,那么编...转载 2019-03-29 10:54:56 · 833 阅读 · 0 评论 -
Spring中使用注解@Value读取properties配置文件信息
Spring开发中经常设计调用各种资源的情况,包括普通文件、网址、配置文件、系统环境变量等,可以使用Spring的表达式语言实现资源的注入。示例演示:注入普通字符、系统属性、表达式运算结果、其他bean的属性、文件、网站内容、属性文件EIConfig.java配置类import org.apache.commons.io.IOUtils;import org.springframew...转载 2019-05-15 09:15:07 · 5891 阅读 · 0 评论 -
Java SPI机制简介
SPI 简介SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,而后,把新加的实现描述给JDK知道就行啦(通过改一个文本文件即可) 公司内部,目前Dubbo框架就基于SPI机制提...转载 2019-07-05 11:03:24 · 266 阅读 · 0 评论 -
junit 单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
今天在写代码的时候想把老系统里面加上单元测试,所以用最近做的springmvc上的一个项目中的junit扒一个下来:junit-4.12.jar 但是很奇怪在原来系统中好好能运行的,放到现在的项目中就老是报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing。疯掉了后来查发现有人说换一个低版本的就行了,引入...转载 2019-07-05 11:12:23 · 860 阅读 · 0 评论 -
java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
java 异常捕捉 ( try catch finally ) 你真的掌握了吗?前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.exit() 方法怎么处理?当 catch 和 finally 体里同时遇上 return 怎么办?相信你在处理异常的时候不...转载 2019-07-05 11:33:18 · 1736 阅读 · 0 评论 -
BTrace小试 - 动态日志跟踪
BTrace动态日志跟踪笔记BTrace是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目。BTrace是一个很“有趣”的VisualVM插件,本身也是可以独立运行的程序。它的作用是在不停止目标程序运行的前提下,通过HotSpot虚拟机的HotSwap技术动态加入原本并不存在的调试代码。这项功能对实际生产中的程序很有意义:经常遇到程序出现问题,但排查错误的一...原创 2019-08-02 10:39:03 · 610 阅读 · 0 评论 -
深入理解LinkedHashMap和LRU缓存
LinkedHashMap 概述笔者曾提到,HashMap 是 Java Collection Framework 的重要成员,也是Map族(如下图所示)中我们最为常用的一种。不过遗憾的是,HashMap是无序的,也就是说,迭代HashMap所得到的元素顺序并不是它们最初放置到HashMap的顺序。HashMap的这一缺点往往会造成诸多不便,因为在有些场景中,我们确需要用到一个可以保...转载 2019-03-21 10:33:37 · 586 阅读 · 0 评论 -
java中的深复制和浅复制
java中的深复制和浅复制Java 语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念。并且由于Java不能通过简单 的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。本文会让你了解什么是影子clone与深度clone,认识它 们的区别、优点及缺点。 看到这个标题,是不是有点困惑...转载 2019-03-20 09:08:10 · 176 阅读 · 0 评论 -
getClassLoader()和getContextClassLoader()的区别
区别一: getClassLoader()是当前类加载器,而getContextClassLoader是当前线程的类加载器 区别二: getClassLoader是使用双亲委派模型来加载类的,而getContextClassLoader就是为了避开双亲委派模型的加载方式的,也就是说它不是用这种方式来加载类当前类加载器加载和定义当前方法所...转载 2019-02-13 17:46:59 · 7499 阅读 · 2 评论 -
单点登录 - cookie
单点登录:1、登录系统登录,设置cookie;2、非登录系统获取cookie信息;3、cookie不存在,重定向到登录系统进行第一步,然后再返回;通过浏览器可以查看cookie信息:Chrome浏览器如何查看 & 编辑Cookie:https://jingyan.baidu.com/article/37bce2be5c93961002f3a2fd.htmlFireFox如何查看Cookie...原创 2018-03-06 20:47:16 · 470 阅读 · 0 评论 -
java内存泄漏的定位与分析
1、为什么会发生内存泄漏Java如何检测内在泄漏呢?我们需要一些工具进行检测,并发现内存泄漏问题,不然很容易发生down机问题。编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Heap...转载 2018-09-10 09:56:04 · 493 阅读 · 0 评论 -
Apache POI
什么是Apache POI?Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。Apache POI组件Apache POI包含类和方法,来将MS Office...转载 2018-09-07 15:00:21 · 768 阅读 · 0 评论 -
HTTPClient使用
HttpClient常用HttpGet和HttpPost这两个类,分别对应Get方式和Post方式。无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。 1.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。 2.使用DefaultHttpClie...转载 2018-09-27 17:32:43 · 215 阅读 · 0 评论 -
单源调用Single Call 模式
在进行面向对象得分析与设计的实践过程中我们经常会遇到聚合(Aggregations)与组合(Composition)这两种关系,聚合是一种关联形式,它指明一个聚集(整体)和组成部分之间的整体与部分的关系。组合是指一种带有很强主从关系,成分的生命期一致的聚集关联形式。一个部分可以仅属于一个组成。没有固定多重性的部分可以在组成创建后再被创建。但是一旦被创建,这些部分将与组成同时存在并同时消亡(共享生存...转载 2018-10-17 16:39:28 · 563 阅读 · 0 评论