Core Java
yangxi_001
这个作者很懒,什么都没留下…
展开
-
JAVA学习篇--静态代理VS动态代理
本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢?原因:1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者的区别是什么呢?2,通过学习动态代理了解到动态代理是一种符合AOP设计思想的技术,那么什么又是AOP?下面是我对它们的理解! 代理Proxy: Proxy代理模式是一种结构转载 2016-04-15 18:45:02 · 811 阅读 · 0 评论 -
java静态代理和动态代理
一、代理概念 为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。 图1:代理模式 从图中可以看出,代理接口(Subject)、代理类(ProxySubject)、委托类(RealSubject)形成一个转载 2016-04-15 18:25:44 · 1966 阅读 · 0 评论 -
android byte[] 和short[]的转换
public class BytesTransUtil { private String TAG = "BytesTransUtil"; private static BytesTransUtil instance = null; private BytesTransUtil() { // Log.i(TAG, "instance BytesTransUtil"); } pub转载 2015-08-25 18:16:15 · 1667 阅读 · 0 评论 -
JDK配置环境变量
配置环境变量的常用方法有以下几种:(一) 配置环境变量:(相对路径)1.新建系统变量 JAVA_HOME:C:/Program Files/Java/jdk1.5.0_06; 用%JAVA_HOME%就可以取代:C:/Program Files/Java/jdk1.5.0_06这一部分2.新建系统变量 CLASSPATH:./;%JAVA_H原创 2015-01-21 17:17:28 · 522 阅读 · 0 评论 -
android 根据设置的日期获取星期几
/** * 判断当前日期是星期几 * * @param pTime 设置的需要判断的时间 //格式如2012-09-08 * * @return dayForWeek 判断结果 * @Exception 发生异常 */// String pTime = "2012-03-12"; private String getWe转载 2014-11-13 17:09:33 · 1211 阅读 · 0 评论 -
java计算时间差及比较时间
Date d1 = df.parse("2012-11-05 12:00:00"); //后的时间 Date d2 = df.parse("2012-11-04 11:10:00"); //前的时间 Long diff = d1.ge转载 2014-10-22 20:33:28 · 703 阅读 · 0 评论 -
String和Date、Timestamp之间的转换
一、String与Date(java.util.Date)互转 1.1 String -> Date Java代码 String dateStr = "2010/05/04 12:34:23"; Date date = new Date(); //注意format的格式要与日期String的转载 2014-10-21 19:29:06 · 854 阅读 · 0 评论 -
回调函数透彻理解Java
回调函数,第一次见是在Java编程思想中,以及后来的观察者模式也应用了回调函数的思想。但是一直都没有重视,终于在一次面试的时候吃亏了,越来越理解为什么很多人说Java编程思想这本书要一遍遍的看,吃透! 首先在网络上搜索很多文章介绍什么是回调函数,看的云里雾里的。后来自己一步步分解终于理解了,记录如下。 从维基百科上面摘抄定义:(看完本篇文章再来理解这个定转载 2014-09-24 20:00:53 · 672 阅读 · 0 评论 -
WeakHashMap
WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,见实例:此例子中声明了两个Map对象,一个是HashMap,一个是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMap remove掉a 并且将a、b都指向null时,WeakHashMap中的a将自动被回收掉。出现这个状况的原因是,对于转载 2014-03-10 16:00:20 · 661 阅读 · 0 评论 -
WeakHashMap
WeakHashMappublic class WeakHashMapextends AbstractMapimplements Map以弱键实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,转载 2014-03-10 16:59:45 · 609 阅读 · 0 评论 -
JAVA获取时间戳,哪个更快
目前获取毫秒值大概有下面三种方法 Java代码 //方法 一 System.currentTimeMillis(); //方法 二 Calendar.getInstance().getTimeInMillis(); //方法 三 new Date().getTime(); 最近做监控系统,发现代码中有前两种方法,转载 2016-09-28 12:25:33 · 1308 阅读 · 0 评论 -
阿里java面试题
一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?答: 1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。2、String不可变是因为在JDK中String类被声明为一个final类。3、StringB转载 2017-06-02 14:06:03 · 522 阅读 · 0 评论 -
从一道面试题来认识java类加载时机与过程
1 开门见山以前曾经看到过一个java的面试题,当时觉得此题很简单,可是自己把代码运行起来,可是结果并不是自己想象的那样。题目如下: class SingleTon { private static SingleTon singleTon = new SingleTon(); public static int count1; public static i转载 2017-12-13 17:52:45 · 839 阅读 · 0 评论 -
Java中final与static final的区别
看到一个程序讲final与static final的区别,class SelfCounter{ private static int counter; private int id = counter ++; public String toString(){ r转载 2017-06-08 00:06:19 · 1090 阅读 · 0 评论 -
Java集合---面试题
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入转载 2017-06-02 16:58:19 · 344 阅读 · 0 评论 -
Java集合---ConcurrentHashMap原理分析
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅转载 2017-06-02 16:57:16 · 270 阅读 · 0 评论 -
Java集合---Arrays类源码解析
一、Arrays.sort()数组排序Java Arrays中提供了对所有类型的排序。其中主要分为Primitive(8种基本类型)和Object两大类。 基本类型:采用调优的快速排序; 对象类型:采用改进的归并排序。 1、对于基本类型源码分析如下(以int[]为例): Java对Primitive(int,float等原型数据)数组采用快速排转载 2017-06-02 16:56:10 · 367 阅读 · 0 评论 -
Java集合---LinkedList源码解析
一、源码解析1、 LinkedList类定义2、LinkedList数据结构原理3、私有属性4、构造方法5、元素添加add()及原理6、删除数据remove()7、数据获取get()8、数据复制clone()与toArray()9、遍历数据:Iterator()二、ListItr 一、源码解析 1、 LinkedLis转载 2017-06-02 16:53:30 · 311 阅读 · 0 评论 -
Java集合---ArrayList的实现原理
一、 ArrayList概述 二、 ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除转载 2017-06-02 16:52:03 · 253 阅读 · 0 评论 -
Java集合---HashSet的源码分析
一、 HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 二、 HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比转载 2017-06-02 16:50:17 · 401 阅读 · 0 评论 -
Java集合---HashMap源码剖析
一、HashMap概述二、HashMap的数据结构三、HashMap源码分析 1、关键属性 2、构造方法 3、存储数据 4、调整大小 5、数据读取 6、HashMap的性能参数 7、Fail-Fast机制 一、Has转载 2017-06-02 16:48:39 · 290 阅读 · 0 评论 -
LinkedHashMap
public class LinkedHashMap extends HashMap implements Map LinkedHashMap是Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。 此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。 此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。 注转载 2014-03-10 16:59:14 · 536 阅读 · 0 评论 -
SoftReference,WeakReference&WeakHashMap
在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再把它捡回来使用就不可能了。 但有时候情况并不这么简单,你可能会遇到类似鸡肋一样的物品,食之无味,弃之可惜转载 2014-03-10 16:04:29 · 482 阅读 · 0 评论 -
Java instanceof 关键字是如何实现的?
在进入正题前先得提一句:既然楼主提问的背景是“被面试问到”,那很重要的一点是揣摩面试官提问的意图。按照楼主的简单描述,面试官问的是“Java的instanceof关键字是如何实现的”,那要选择怎样的答案就得看面试官有怎样的背景。比较安全的应对方法是请求面试官澄清/细化他的问题——他想要的“底层”底到什么程度。-----------------------------------------转载 2013-12-20 14:43:33 · 1918 阅读 · 1 评论 -
使用String.intern减少内存使用
最近写一个程序,从文件中读取一些字/词,然后存储起来供别的类引用。对每个读入的词创建一个String,结果许多同样内容的也会存储多份,会占用大量内存。开始的一个想法是使用map/set来存储所有遇到的词,这样就没有重复的了。然后别的类只需要引用这些词就可以了。这样还需要一些工作量,经别人介绍,发现了String.intern方法。例如下面代码String a转载 2013-12-05 16:20:38 · 756 阅读 · 0 评论 -
String中intern的方法
首先查看官方API那个的解释:———————————————————————————————————————internpublic String intern()返回字符串对象的规范化表示形式。一个初始时为空的字符串池,它由类 String 私有地维护。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 e转载 2013-12-05 16:28:52 · 754 阅读 · 0 评论 -
Android内存分析和调优(中)
在前文中讨论了如果使用adb shell procrank, dumpsys meminfo和showmaps分析进程的内存占用情况。本文将继续细化,具体分析导致内存过大的dalvik heap。Dalvik heap分析和优化Dalkvik heap是最常见的android应用内存优化的对象。通过上文的分析,我们可以通过adb shell的命令,知道用了多少dal转载 2013-12-05 16:29:57 · 549 阅读 · 0 评论 -
JAVA中的指针,引用及对象的clone
看到这个标题,是不是有点困惑:Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于使用早已臭名昭著的"GOTO"语句。Java放弃指针的概念绝对是极其明智的。但这只是在Java语言中没有明确的指针定义,实质上每一个new语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个"指针转载 2013-12-05 19:22:09 · 616 阅读 · 0 评论 -
Android内存分析和调优(下)
最后一部分是关于native heap,.dex,/dev/other的优化。Native Heap分析和优化android的DDMS可以帮助查看c++ native heap的使用,但需要一定的配置,而且必须是root的手机。在~/.android/ddms.cfg增加"native=true"。这样子ddms才会有native heap的tab。指向下面adb命令打开m转载 2013-12-05 16:30:23 · 765 阅读 · 0 评论 -
Java:多线程等待所有线程结束(CountDownLatch/CyclicBarrier) .
本文主要是参考官方文档做一学习用途。官方链接:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.htmlhttp://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CyclicBarrier.转载 2013-11-29 10:40:56 · 706 阅读 · 0 评论 -
AsyncTask实现代码原理
Android从1.5开始引入了AsyncTask这个类,可以帮助我们解决线程和界面刷新问题,主要是对Thread+Handler这样的封装,但在设计模式和代码维护方面都有不错的表现。早在2008年时Google推出了一个示例应用叫PhotoStream来演示UI在多线程网络慢速I/O下的刷新问题,里面的线程构造使用的正是AsyncTask的雏形,由于内部使用Java 1.5的并发库比普通初级An转载 2013-11-13 19:50:43 · 498 阅读 · 0 评论 -
Java对URL和URI的区分
Java代码 String urlString = "http://192.168.21.77:8080/swp/mainPage?aa=11&bb%3D22"; URI uri = URI.create(urlString); System.out.println(uri.getPath()); System.out.print转载 2013-11-22 11:21:42 · 1022 阅读 · 0 评论 -
Java回调机制分析
Java回调是一种双向调用模式,什么意思呢,就是说,被调用方在被调用时也会调用对方,这就叫回调。“If you call me, i will call back”。 不理解?没关系,先看看这个可以说比较 经典的使用回调的方式: class A实现接口InA ——背景1class A中包含一个class B的引用b ——背景2class B有一个参数为InA的方法test(In转载 2013-09-18 15:09:57 · 583 阅读 · 0 评论 -
serialVersionUID的作用
简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。(InvalidCastException)serialVersion转载 2014-01-14 15:06:03 · 600 阅读 · 0 评论 -
深入理解Java序列化中的SerialVersionUid
一、前言SerialVersionUid,简言之,其目的是序列化对象版本控制,有关各版本反序列化时是否兼容。如果在新版本中这个值修改了,新版本就不兼容旧版本,反序列化时会抛出InvalidClassException异常。如果修改较小,比如仅仅是增加了一个属性,我们希望向下兼容,老版本的数据都能保留,那就不用修改;如果我们删除了一个属性,或者更改了类的继承关系,必然不兼容旧数据,这时就应该转载 2014-01-14 15:09:58 · 799 阅读 · 0 评论 -
String s=new String("abc")创建了几个对象?
String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。 我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待转载 2014-03-11 15:40:08 · 1172 阅读 · 0 评论 -
java利用FutureTask、ExecutorService 在多核时代充分利用CPU运算
FutureTask、ExecutorService 相关知识,请看java,API一个使用FutureTask简单的例子: package com.spell.threads;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.u转载 2014-03-11 13:23:23 · 988 阅读 · 0 评论 -
Java弱引用与WeakHashMap
在《Effective Java 2nd Edition》中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池、缓存中的过期对象都有可能引发内存泄露的问题。书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题。之前也确实遇到过类似问题,但是没有接触过“弱引用”相关的问题,于是查阅了一些资料。转载 2014-03-11 13:22:25 · 549 阅读 · 0 评论 -
Java中的String与常量池
string是java中的字符串。String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。下面介绍java中的String与常量池。1. 首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。2. n转载 2014-03-11 14:37:28 · 532 阅读 · 0 评论 -
Java 线程池学习
Reference: 《创建Java线程池》[1],《Java线程:新特征-线程池》[2], 《Java线程池学习》[3],《线程池ThreadPoolExecutor使用简介》[4],《Java5中的线程池实例讲解》[5],《ThreadPoolExecutor使用和思考》[6][1]中博主自己通过ThreadGroup实现一个线程池(挺方便理解的),使用的是jdk1.4版本,Jdk转载 2014-01-16 16:53:48 · 516 阅读 · 0 评论