关于面试的一些小记

原创 2015年07月08日 09:44:18

感谢生命中的这些贵人~在很牛的时候不抛弃我们~在关键的时候点醒我们~


1  下面输出结果是?

public static void main(String[] args) {
		Integer a = 123;
		Integer b = new Integer(123);
		System.out.println("result a==b is: " + (a == b));
		Integer a2 = 100;
		Integer b2 = 100;
		System.out.println("result a2==b2 is: " + (a2 == b2));
		Integer a3 = 128;
		Integer b3 = 128;
		System.out.println("result a3==b3 is: " + (a3 == b3));

	}

答案:false  true false 

简解:

JVM中一个字节以下的整型数据会在JVM启动的时候加载进内存,除非用new Integer()显式的创建对象,否则都是同一个对象;Integer中valueOf源码

 public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
可以看出只要超过-127~128这个范围,就会new Integer创建新的对象,==比较就会返回false

2  HashMap怎么判断是否存在某个key?为什么使用?有没有别的办法?containsKey方法原理?能用get方法判断吗?

简解:

使用containsKey方法判断;containsKey方法源码简单介绍

    /**
     * Returns <tt>true</tt> if this map contains a mapping for the
     * specified key.
     *
     * @param   key   The key whose presence in this map is to be tested
     * @return <tt>true</tt> if this map contains a mapping for the specified
     * key.
     */
    public boolean containsKey(Object key) {
        return getEntry(key) != null;
    }
 /**
     * Returns the entry associated with the specified key in the
     * HashMap.  Returns null if the HashMap contains no mapping
     * for the key.
     */
    final Entry<K,V> getEntry(Object key) {
        if (size == 0) {
            return null;
        }

        int hash = (key == null) ? 0 : hash(key);
        for (Entry<K,V> e = table[indexFor(hash, table.length)];
             e != null;
             e = e.next) {
            Object k;
            if (e.hash == hash &&
                ((k = e.key) == key || (key != null && key.equals(k))))
                return e;
        }
        return null;
    }
注意上面的判断 e.hash == hash &&  ((k = e.key) == key || (key != null && key.equals(k))) 需要hash值相同,equals相等才认为是同一个key;

不能用get方法,原因是hashmap是可以保存<null,null>、<null,value>或者<key,null>key和value都可以为null,如果value为null的时候是没有办法判断key不存在还是存在值为null

3运行时结果

public static void main(String[] args) {
		Integer a = null;
		
		Integer b = (Integer) a; //1
		Integer c = (int)a;      //2
		
		System.out.println("result a == 3 is: " + (a == 3)); //3 
		System.out.println("result a == new Integer(3) is: " + (a == new Integer(3))); //4
	}
答案:1 正常 2运行时报空指针异常 3 运行时报空指针异常 4 false
简解:对于第二行写法,本人没有这么写过,待补充~


4 下面运行结果

public static void main(String[] args) {
		String a = "123";
		String b = "123";
		System.out.println("1.result for a == b is: "+(a == b));
		String a2 = "123"; 
		String b2 = "1"+"23";
		System.out.println("2.result for a2 == b2 is: "+(a2 == b2));
		String a3 = "123"; 
		String b3 = new String("123");
		System.out.println("3.result for a3 == b3 is: "+(a3 == b3));
		String a4 = "123"; 
		String b4 = "1" + new String("23");
		System.out.println("4.result for a4 == b4 is: "+(a4 == b4));
		String a5 = new String("123");
		String b5 = new String("123");
		System.out.println("5.result for a5 == b5 is: "+(a5 == b5));
	}
答案:

1.result for a == b is: true
2.result for a2 == b2 is: true
3.result for a3 == b3 is: false
4.result for a4 == b4 is: false
5.result for a5 == b5 is: false

分析:参见这篇文章吧  http://blog.csdn.net/xbkaishui/article/details/6284702 有启发的第四题 +连接的对象的地址是无法确定 的, 第二个中“1”和“23”在编译期能确定,和“123”是等效的









前端面试小记

太久没有面试过了,第一次难免有点紧张,今天遇到的面试问题,大多数都遇到过,却因为没有充分准备,而没有答好,以后一定好好准备才行。 下面记录一下今天的面试问题,加深印象: 介绍一下JS的...
  • fengyinchao
  • fengyinchao
  • 2017年03月14日 20:05
  • 398

总结的一些面试问题-java

总结的高级JAVA可能会遇到的一些面试题。。。
  • hll814
  • hll814
  • 2016年04月01日 11:52
  • 1154

【那些年遇到过的面试题】malloc 原理

malloc 涉及到内存这块,所以知道原理还是非常有用的。 http://www.cnblogs.com/huhuuu/p/3456662.html http://blog.jobbole.com...
  • carol123456
  • carol123456
  • 2016年07月06日 20:31
  • 882

Oracle数据库面试题总结

1、SQL语句分类 DQL(数据查询语言)select DML(数据操作语言)insert、delete、update DDL(数据定义语言)create、drop、alter DCL(数据控...
  • shine_a
  • shine_a
  • 2017年04月27日 22:41
  • 605

链表面试题总结(一)

基于上一次写的链表,现在,我们来讨论下面这些问题。1.链表的冒泡排序 2.删除无头非尾节点 3.反转链表 4.在当前节点前插入一个数据x 5.查找链表的中间节点。 6.删除单链表的倒数第K个...
  • qq_26768741
  • qq_26768741
  • 2016年06月11日 12:06
  • 4067

类 String理解和经典面试题,

类 String public final class String ; String 类代表字符串。 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现...
  • uotail
  • uotail
  • 2017年05月05日 21:54
  • 502

关于Recyclerview使用小记

关于recyclerview用法参考了很多大神的代码,很多代码只是拿来用,还未认真去思考原理,这里做一个简单的总结。...
  • lishaobo211985
  • lishaobo211985
  • 2016年08月19日 18:32
  • 1064

Java面试--Spring技术要点--Spring注解

20  基于Java的Spring注解配置(给一些注解的例子) 基于Java的配置,允许你在少量的Java注解的帮助下,进行你的大部分Spring配置而非通过XML文件。 以@Configurati...
  • wuxian90
  • wuxian90
  • 2015年05月13日 23:12
  • 1234

Java中的集合类解析和一些有深入的面试题

Java集合类解析 List、Map、Set三个接口,存取元素时,各有什么特点? List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存...
  • he90227
  • he90227
  • 2014年07月23日 11:32
  • 9819

全方位剖析QT 面试题 胡峰原创

自己毕业后参加过很多面试,当然有以应聘者的身份参加的也有以面试官的身份参加的,下面我想总结下一些面试官出题的方向和回答的技巧,下面截取我对一个应届毕业生的面试过程作为讲解,希望能对再今后的面试任职时有...
  • hufeng825
  • hufeng825
  • 2010年12月04日 22:11
  • 9567
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于面试的一些小记
举报原因:
原因补充:

(最多只允许输入30个字)