java
linhao19891124
这个作者很懒,什么都没留下…
展开
-
maven仓库镜像
国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用。 ```http://maven.wso2.org/nexus/content/groups/public/``````http://jcenter.bintray.com/``````xml CN OSChina Central http转载 2016-11-05 21:40:19 · 295 阅读 · 0 评论 -
java编程思想--注解
注解Annotation又叫元数据,是JDK5中引入的一种以通用格式为程序提供配置信息的方式。使用注解Annotation可以使元数据写在程序源码中,使得代码看起来简洁,同时编译器也提供了对注解Annotation的类型检查,使得在编译期间就可以排除语法错误。1JDK内置的3中Annotation:在JDK5中,内置了3个通用目的的注解Annotation,这三个内置的注解在Jav转载 2017-03-30 21:54:01 · 222 阅读 · 0 评论 -
生产者/消费者问题的多种Java实现方式
生产者/消费者问题的多种Java实现方式 实质上,很多后台服务程序并发控制的基本原理都可以归纳为生产者/消费者模式,而这是恰恰是在本科操作系统课堂上老师反复讲解,而我们却视而不见不以为然的。在博文《一种面向作业流(工作流)的轻量级可复用的异步流水开发框架的设计与实现》中将介绍一种生产者/消费者模式的具体应用。生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作转载 2017-05-02 11:22:27 · 233 阅读 · 0 评论 -
三个线程交替打印ABC
public class ABCLock { public static void main(String[] args){ //共用的对象,保证是同个锁 final PrintABC printABC= new PrintABC(); new Thread(new Runnable() { @Override原创 2017-05-03 21:44:47 · 2036 阅读 · 0 评论 -
线程可见性
1.可见性一个线程对共享变量值得修改,能够及时的被其他线程看到。2.共享变量如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。3.Java内存模型描述了Java程序中各种变量(线程共享变量)的访问规则,以及在jvm中将变量存储到内存和内存中读取出变量这样的底层细节。所有的变量都存储在主内存中。每股线程都有自己独立的工作内存,里面转载 2017-05-03 22:12:38 · 355 阅读 · 0 评论 -
JAVABEAN EJB POJO区别
JAVABEAN EJB POJO区别1、POJO POJO(Plain Old Java Object)这种叫法是Martin Fowler、Rebecca Parsons和Josh MacKenzie在2000年的一次演讲的时候提出来的。按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的ja转载 2017-05-14 15:26:38 · 188 阅读 · 0 评论 -
白话threadlocal类
每一个线程Thread都是持有一个map,叫ThreadLocalMap,而ThreadLocalMap是threadlocal类的静态内部类,所以写成ThreadLocal.ThreadLocalMapThread源码,起初这个map是空的:ThreadLocal.ThreadLocalMap threadLocals = null;当我们使用thread原创 2017-05-05 22:28:16 · 312 阅读 · 0 评论 -
java中的hashset
HashSet 的实现 对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码: Java代码 public class HashSet extends AbstractSet im转载 2017-05-07 11:15:12 · 281 阅读 · 0 评论 -
Java中几种常量池的区分
原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上说法都有问题,笔者尝试着来区分一下这几个概念。1.全局字符串转载 2017-05-15 23:10:08 · 416 阅读 · 0 评论 -
java enum(枚举)使用详解 + 总结
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容:1. 原始的接口定义常量2. 语法(定义)3. 遍历、switch 等常用操作4. enum 对象的常用方法介绍5. 给 enum 自定义属性和方法6转载 2017-05-31 11:44:10 · 300 阅读 · 0 评论 -
java类路径,工程根路径
package main.java;import java.io.File;public class TestPath { public static void main(String[] args) throws Exception{ //如果不加“/” 采用“” 获取当前类的加载目录 String path=TestPath.class.getResour原创 2017-06-29 22:58:18 · 2109 阅读 · 0 评论 -
String intern() method in Java. Why we use it?
Briefly, Java’s String class has a public method intern() that returns a canonical representation for the string object. Java’s String class privately maintains a pool of strings, where String literals翻译 2017-06-30 11:50:22 · 257 阅读 · 0 评论 -
Stringstr=new String("abc") 这行代码究竟创建了几个对象?
Stringstr=new String(“abc”); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。 我们可以把上面这行代码分成Stringstr、=、”abc”和new String()四部分来看待。Stringst转载 2017-06-30 14:58:52 · 315 阅读 · 0 评论 -
新手如何学习Java——Java学习路线图
怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西:首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard Edition,我们经常说到的JDK,就主要指的这个,它是三者的基础,属于桌面级应用开发,这部分如果学得好很容易拓展J2EE和J2ME。J2ME,The转载 2017-06-11 22:10:34 · 243 阅读 · 0 评论 -
Java泛型-类型擦除
Java泛型-类型擦除一、概述 Java泛型在使用过程有诸多的问题,如不存在List.class, List不能赋值给List(不可协变),奇怪的ClassCastException等。 正确的使用Java泛型需要深入的了解Java的一些概念,如协变,桥接方法,以及这篇笔记记录的类型擦除。Java泛型的处理几乎都在编译器中进行,编译器生成的bytecode是不包涵泛型信息的,转载 2017-07-14 22:02:28 · 309 阅读 · 0 评论 -
Java NIO浅析
NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。那么NIO的本质是什么样的呢?它是怎样与事件模型结合来解放线程、提高系统吞吐的呢?本文会从传统的阻塞I/O和线程池模型面临的问题讲起,然后对比几种常见I/O转载 2017-07-16 18:13:54 · 198 阅读 · 0 评论 -
Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 ⑵深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有转载 2017-09-04 15:10:52 · 446 阅读 · 0 评论 -
Java静态代理和动态代理
本文动态代理部分内容大量引自:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/一、代理概念为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。转载 2017-11-01 18:55:04 · 166 阅读 · 0 评论 -
Java RMI之HelloWorld篇
Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。 Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术。大名鼎鼎的EJB都是建立在rmi基础之上的,现转载 2017-03-30 21:27:38 · 153 阅读 · 0 评论 -
缓存技术
import java.util.Map;import java.util.WeakHashMap;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public fina转载 2017-03-21 21:56:13 · 204 阅读 · 0 评论 -
关于 Java 数组的 12 个最佳方法
1,数组的声明由几种方式:,(1),String []a = new String[length];再赋值a[0]=?;.......(2),new完就直接初始化:String []a = new String[]{?,?...};(3).你甚至不必new:String []a = {?,?....}同样没问题。2. 输出一个数转载 2017-02-26 21:58:35 · 192 阅读 · 0 评论 -
java构造器
构造器是创建java对象的途径,是不是说构造器完全负责创建java对象?不是,构造器是创建java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该类的对象,但这个对象并不是完全由构造器负责创建。实际上,当程序员调用构造器时,系统会为该对象分配内存空间,并为这个对象执行默认初始化,这个对象已经产生了---这些操作都在构造器执行之前都完成了。也就是说,当系统开始执行构造器原创 2016-10-25 22:54:46 · 424 阅读 · 0 评论 -
编译spark源码步骤
为了阅读spark的源码,我们需要对它先进行编译,从而使Intelij能够跳转,从而方便阅读。1,先下载spark压缩包2,解压3,通过观察,我们发现可以使用maven进行编译。是maven工程。因为存在pom.xml文件。4,安装maven,请自行百度。 存在pom.xml就是一个模块。所以我们将用intellij查看spark原创 2016-11-07 22:48:22 · 2691 阅读 · 0 评论 -
final修饰基本类型和引用类型变量的区别
当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用类型的变量而言,它保存的仅仅是一个引用,final只保证这个引用所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生改变。final int[] iArr={6,8,9,10}//对数组进行排序,合法Arrays.sort(iArr);System.out.p原创 2016-10-30 11:26:40 · 7068 阅读 · 0 评论 -
缓存的简单实现例子
缓存是软件设计中一个非常有用的模式,缓存的实现方式很多,不同的实现方式可能存在较大的性能差别。本节使用一个数组来作为缓存池,从而实现一个具有实例缓存的不可变类public class CacheImmutable{ private final String name; private static CacheImmutable[] cache=new CacheI原创 2016-10-30 15:32:50 · 1310 阅读 · 0 评论 -
接口和抽象类异同
接口作为系统与外界交互的窗口,接口体现的是一种规范。当在一个程序中使用接口时,接口是多个模块间的耦合标准;当在多个应用程序之间使用接口时,接口是多个程序之间的通信标准。从某种程度上来看:接口类似于整个系统的总纲,它制定了系统各模块应该遵循的标准,因此一个系统中的接口不应该经常改变。一旦接口被改变,对整个系统甚至其他系统的影响是辐射的,导致系统中大部分类都需要改写。抽象类作为原创 2016-10-30 16:42:44 · 239 阅读 · 0 评论 -
java内部类
在某些情况下,我们把一个类放在另一个类的内部定义,这个定义在其他类内部的类称为内部类。作用:1,不允许同一个包中的其他类访问该类。2,内部类成员可以直接访问外部类的私有数据,因为内部类是外部类的成员。但外部类不能访问内部类的实现细节,例如内部类的属性。3,匿名内部类适用于使用一次的类注意:方法里定义的内部类称为局部内部类与方法,属性一个层级的称为成员内部类。原创 2016-10-30 21:15:32 · 180 阅读 · 0 评论 -
jar包生成及使用
jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法。JAR(Java ARchive)是将一系列文件合并到单个压缩文件里,就象Zip那样。要生成jar包,首先要编译成class文件。而编译时要在正确目录下执行javac。否则会找不到程序包。我们的java文件一般首行是包的原创 2016-11-23 22:02:46 · 4106 阅读 · 0 评论 -
java泛型
java的参数化类型被称为泛型(顾名思义,类型用传入参数来确定)泛型定义类:只有定义方法时才可以使用数据形参,当调用方法时必须为数据形参传入实际的数据;与此类似,类,接口中的类型形参,只有在定义类,接口时才可以使用类型参数,当使用类,接口时应为类型形参传入实际的类型。public class Bpublic class Applepublic class A extends A原创 2016-11-27 20:22:46 · 182 阅读 · 0 评论 -
java线程类
创建多线程两种方式:1,继承Thread类,并重写该类的run方法。2,实现Runnable接口。重写run方法。举例:SecondThread extends RunnableSecondThread st=new SecondThread();new Thread(st,"one").start();new Thread(st,"two").start();区原创 2016-12-15 23:05:06 · 267 阅读 · 0 评论 -
java类加载
当我们调用Java命令运行某个Java程序时,该命令将会启动一条java虚拟机进程。不管该Java程序有多复杂,该程序启动多少个线程,他们都处于该java虚拟机进程里,都使用该jvm进程的内存区。类的加载:当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载,连接,初始化3个步骤来对该类进行初始化,如果没有意外,jvm会连续完成3个步骤,这就是类加载或类初始化。类原创 2016-12-18 15:52:33 · 240 阅读 · 0 评论 -
JVM优化系列(-Xss调整Stack Space的大小)
Java程序中,每个线程都有自己的Stack Space(堆栈)。这个Stack Space不是来自Heap的分配。所以Stack Space的大小不会受到-Xmx和-Xms的影响,这2个JVM参数仅仅是影响Heap的大小。Stack Space用来做方法的递归调用时压入Stack Frame(栈帧)。所以当递归调用太深的时候,就有可能耗尽Stack Space,爆出StackOver转载 2016-12-25 20:25:31 · 434 阅读 · 0 评论 -
会话技术
一、会话技术:1).隐藏表单域:,非常适合步需要大量数据存储的会话应用。2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。 见http://blog.csdn.net/xh16319/article/details/84640553).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它转载 2017-01-15 21:27:37 · 307 阅读 · 0 评论 -
java中实现类似函数指针的功能
public class FunctionPointerTest { public static void main(String... args){ Player[] players = new Player[5]; for(int i = 0;i<players.length;i++){ players[i] = new Player(); } pressButton(转载 2017-02-17 22:35:13 · 820 阅读 · 0 评论 -
外观模式
class Stock{ public String getName() { return name; } public void setName(String name) { this.name = name; } private String name; public void Sell(){原创 2017-02-18 21:25:15 · 192 阅读 · 0 评论 -
java匿名内部类
匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法12345678910111213转载 2017-02-18 21:31:18 · 187 阅读 · 0 评论 -
java == equals
在初学Java时,可能会经常碰到下面的代码:1 String str1 = new String("hello");2 String str2 = new String("hello");3 4 System.out.println(str1==str2);5 System.out.println(str1.equals(str2)); 为什么第4行和转载 2017-02-23 20:53:09 · 188 阅读 · 0 评论 -
线程wait和sleep
public class TestSynchronized { public static void main(String[] args){ final Object A=new Object(); ExecutorService exec = Executors.newFixedThreadPool(4); Runnable add原创 2017-03-08 21:18:17 · 275 阅读 · 0 评论 -
Java8内存模型—永久代(PermGen)和元空间(Metaspace)
一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等信息。栈的大小可以固定也可以动态扩展。当栈调用深度大于JVM所允许的范围,会抛转载 2017-10-24 22:36:27 · 219 阅读 · 0 评论