Java
何时成为大牛
屌丝程序员一枚
展开
-
java中所有Map大总结
一、Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。Map接口定义了如下常用的方法: 1、void clear():删除Map中所以键值对。 2、boolean containsKey(Object key):查询Map中是否包含指定key,如果包含则返回true。原创 2016-10-18 10:19:17 · 603 阅读 · 0 评论 -
接口与抽象类
相同点: (1)接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他的类实现和继承。 (2)接口和抽象类都是可以包含抽象方法的,实现接口或是继承抽象类的普通子类都必须实现这些抽象方法。不同点: (1)接口只能包含抽象方法,不能包含已经提供实现的方法;抽象类则完全可以包含普通的方法 (2)接口不能定义静态方法;抽象类完全可以定义静态方法。 (3)接口中只能定义静原创 2016-08-24 15:52:53 · 262 阅读 · 0 评论 -
hashCode()和equals()方法
当你需要根据业务逻辑来进行相等性判断、而不是根据对象相等性来判断的时候你就需要重写这两个函数了。例如,两个Employee对象相等的依据是它们拥有相同的emp_id,尽管它们有可能是两个不同的Object对象,并且分别在不同的地方被创建。同时,如果你准备把它们当作HashMap中的key来使用的话,你也必须重写这两个方法。现在,作为Java中equals-hashcode的一个约定,当你重写equ转载 2016-02-16 14:16:59 · 456 阅读 · 0 评论 -
创建字符串对象的时候,使用字面值和使用new String()构造器这两种方式有什么不同?
当我们使用new String构造器来创建字符串的时候,字符串的值会在堆中创建,而不会加入JVM的字符串池中。相反,使用字面值创建的String对象会被放入堆的PermGen段中。例如:String str=new String(“Test”);这句代码创建的对象str不会放入字符串池中,我们需要显式调用String.intern()方法来将它放入字符串池中。仅仅当你使用字面值转载 2016-02-16 14:24:16 · 1856 阅读 · 1 评论 -
工厂模式和抽象工厂模式有何不同?
抽象工厂模式提供了多一级的抽象。不同的工厂类都继承了同一个抽象工厂方法,但是却根据工厂的类别创建不同的对象。例如,AutomobileFactory, UserFactory, RoleFactory都继承了AbstractFactory,但是每个工厂类创建自己对应类型的对象。下面是工厂模式和抽象工厂模式对应的UML图。转载 2016-02-16 14:12:41 · 299 阅读 · 0 评论 -
Executor.submit()和Executor.execute()这两个方法有什么区别?
此问题来自另外一篇文章,《15个最流行的java多线程面试问题》,现在对熟练掌握并发技能的开发者的需求越来越大,因此这个问题也越来越引起大家的重视。答案是:前者返回一个Future对象,可以通过这个对象来获得工作线程执行的结果。当我们考察异常处理的时候,又会发现另外一个不同。当你使用execute提交的任务抛出异常时,此异常将会交由未捕捉异常处理过程来处理(uncaught excepti转载 2016-02-16 14:11:31 · 16826 阅读 · 0 评论 -
能否写一个单例模式,并且保证实例的唯一性?
这算是Java一个比较核心的问题了,面试官期望你能知道在写单例模式时应该对实例的初始化与否进行双重检查。记住对实例的声明使用Volatile关键字,以保证单例模式是线程安全的。下面是一段示例,展示了如何用一种线程安全的方式实现了单例模式:public class Singleton { private static volatile Singleton _instance;转载 2016-02-16 14:09:59 · 2123 阅读 · 0 评论 -
String的substring()方法内部是如何实现的?
又一个Java面试的好问题,你应该答出“substring方法通过原字符串创建了一个新的对象”,否则你的回答肯定是不能令人满意的。这个问题也经常被拿来测试应聘者对于substring()可能带来的内存泄漏风险是否有所了解。直到Java 1.7版本之前,substring会保存一份原字符串的字符数组的引用,这意味着,如果你从1GB大小的字符串里截取了5个字符,而这5个字符也会阻止那1GB内存被回收,原创 2016-02-16 14:08:24 · 3654 阅读 · 0 评论 -
对于一个不可修改的类,它的每个对象是不是都必须声明成final的?
不尽然,因为你可以通过将成员声明成非final且private,并且不要在除了构造函数的其他地方来修改它。不要为它们提供setter方法,同时不会通过任何函数泄露出对此成员的引用。需要记住的是,把对象声明成final仅仅保证了它不会被重新赋上另外一个值,你仍然可以通过此引用来修改引用对象的属性。这一点是关键,面试官通常喜欢听到你强调这一点。原创 2016-02-16 14:06:52 · 1042 阅读 · 0 评论 -
在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环?
HashMap本身没有什么问题,有没有问题取决于你是如何使用它的。比如,你在一个线程里初始化了一个HashMap然后在多个其他线程里对其进行读取,这肯定没有任何问题。有个例子就是使用HashMap来存储系统配置项。当有多于一个线程对HashMap进行修改操作的时候才会真正产生问题,比如增加、删除、更新键值对的时候。因为put()操作可以造成重新分配存储大小(re-sizeing)的动作,因此有可能原创 2016-02-16 14:04:46 · 3226 阅读 · 0 评论 -
关于hashCode里面使用31系数的问题
首先我们来了解一下hashcode,什么是hashcode?有什么作用?hashcode其实就是散列码,hashcode使用高效率的哈希算法来定位查找对象!我们在使用容器来存储数据的时候会计算一串散列码,然后将数据放入容器。如:String s =“java”,那么计算机会先计算散列码,然后放入相应的数组中,数组的索引就是从散列码计算来的,然后再装入数组里的容器里,如Lis转载 2016-01-20 21:40:06 · 375 阅读 · 0 评论 -
Java九种基本数据类型的大小,以及他们的封装类。
java提供了一组基本数据类型,包括boolean, byte, char, short, int, long, float, double, void. 同时,java也提供了这些类型的封装类,分别为Boolean, Byte, Character, Short, Integer, Long, Float, Double, Void什么Java会原创 2015-11-21 14:04:59 · 13443 阅读 · 0 评论 -
Java 面试题问与答:编译时与运行时
在开发和设计的时候,我们需要考虑编译时,运行时以及构建时这三个概念。理解这几个概念可以更好地帮助你去了解一些基本的原理。下面是初学者晋级中级水平需要知道的一些问题。Q.下面的代码片段中,行A和行B所标识的代码有什么区别呢?public class ConstantFolding {static final int number1 = 5;static转载 2015-12-16 19:01:33 · 290 阅读 · 0 评论 -
Java中equals和==的区别
==:在Java中,值类型也叫基本数据类型:byte、short、char、int、long、float、double、boolean比较是用==号比较的,比较的是它们的值。而引用类型也叫复合类型(对象)当他们用==号比较的时候,比较的是内存的地址,所有他们只有是引用的是同一个对象的时候,也就同一个new 出来的对象,才返回true,否则返回false;equals:Java的所有原创 2015-11-24 19:59:40 · 332 阅读 · 0 评论 -
为什么一个匿名内部类使用一个在其外部定的对象必须使用final修饰
Thinking In Java(java编程思想)里面的说法(唯一正确的说法): 如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final 的。以下是分析过程:首先看代码public class Tester { public static void main(String[] args) { A原创 2016-10-18 10:34:46 · 538 阅读 · 0 评论