收集各类诡异的笔试面试题(不断更新)

 要想找到一份好工做,笔试面试这关必须得经过。且先不说您的能力怎么样,有时以为笔试面试就如同英语考试。一个“英语很好”的人,好比能够很流利的说英语,跟老外交流,然而,让他参加考研之类的英语考试,未必可以获得很高的分数,由于这类题自己就很诡异,考试须要有必定的技巧才行。固然,考试仍是可以反映一我的的水平的。相似的,若是您很牛,但要找到一份好工做,好好复习一下笔试面试的知识仍是很必要的,由于不免出现一些“诡异”的题目,这些题目中的作法可能实际应用中,你永远也见不到。今天polaris收集一些“诡异”的笔试面试题分享给你们,这些题目自己没有多大意义,主要是明白为何结果是这样,明白其原理。这些题目大部分是Java语言的,若是涉及到其余语言会特别说明。java

一、int j = 0;j = j++; 问j如今等于多少?

没见过此题的人,大部分人可能获得的结果是:1。 然而,运行的结果会令您完全失望。这是什么缘由呢?原来Java编译器处理后缀++或--时是这么处理的:java的编译器在遇到j++和j- -的时候会从新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算以后,将这块内存释放掉。即JAVA先将i的值保存到临时内存空间中,而后处理++,即原来的j加1,此时原来的j变成1,而后再执行赋值,将内存空间中所存放的原来的值赋回给j,因此j仍然是0。C#和Java的结果是同样的。面试

相反,C/C++不是这么处理的:C中是经过寄存器做中转先把j的值赋给它自己,再执行++的操做,这样结果就是1了。ide

二、一道邪恶的Java基础题——来自JavaEye的网友

题目是:spa

 

     
     
              
     
     
  1. String a = "abc";  
  2. String b = "abc";  
  3. System.out.println("====>"+ a==b );  

请问输出结果是true仍是false?orm

这道题只要稍微仔细点就可以作出来。固然,我想大部分人可能都会掉入出题者的圈套中。对象

这道题目其实就是考察您是否细心以及运算符优先级。“+”的优先级高于“==”,于是打印语句先执行“+”操做,这样实际上比较的是"====>abc"与"abc",很明显会返回false。不过此题有一种人可能会作对,即认为a==b返回的是false。ip

其实此题能够改得更难点,即改成System.out.println(""+ a==b ); 固然结果仍是同样的,只是多考察了一个知识点:"" + a 与 b是否指向同一个对象。String永远是面试官最喜欢考的知识点。为了加深对String的理解,polaris出了另外几个“诡异”的关于String的题目,看您能作对几个?点击查看《经过六个题目完全掌握String笔试面试题》内存

三、try中包含return语句,finally是否还执行,在return以前仍是以后?

这道题也许没有那么邪恶,并且这道题是各类Java笔试大全中均可以看到的一道题。然而,由这道题,您有没有更深刻地考虑更多的问题。在此polaris进行一下引伸,看以下代码:ci


     
     
              
     
     
  1. public static boolean get() { 
  2.     try { 
  3.            return  false
  4.     } finally { 
  5.            return  true
  6.     } 

请你们思考一个问题,return的具体实现是怎样的?若是返回false,为何;若是返回是true,又是为何呢?给个你认为正确答案的理由出来。get

咱们都知道,try中包含return语句,finally仍然会执行,且在return以前执行(其实,对这个答案polaris不是很赞同,就像JavaEye上有人详细分析一道题:构造了几个String对象同样。polaris以为出这样的题目也是很没有水准的)。若是答案是在return以前执行,那为何上面的代码返回结果倒是true,如何解释?

这道题目自己没有什么意义,题目自己不是很严谨,对finally语句中是什么内容没有说明,内容不同,答案会不同。return语句执行作了什么?若是finally中的语句包含break;continue等又会是什么样的结果?

根据《JVM Specification 3.0》的4.9.6节,在try中的return真正返回以前,会将false保存到一个临时变量(假设为var)中,而后执行finally,在执行finally子句的任何语句以前,会将var中的值取出,若是finally中没有抛出异常或return、break、continue等语句,则在finally执行完后返回var(至关于返回去完成try中return的执行),若是finally中有return,var值会被覆盖,返回结果是finllay子句中return的值,若是是异常或break、continue等则执行相应的操做而不是返回。更详细解释参考JVM规范或《深刻理解JAVA虚拟机(第二版)》。

 

到polaris的博客查看更多

更新记录

完成于2010/10/3 16:10,因为polaris水平有限,若有疏忽,敬请指正。

相关文章
相关标签/搜索