要想找到一份好工作,笔试面试这关必须得通过。且先不说您的能力怎么样,有时觉得笔试面试就如同英语考试。一个“英语很好”的人,比如可以很流利的说英语,跟老外交流,然而,让他参加考研之类的英语考试,未必能够得到很高的分数,因为这类题本身就很诡异,考试需要有一定的技巧才行。当然,考试还是能够反映一个人的水平的。类似的,如果您很牛,但要找到一份好工作,好好复习一下笔试面试的知识还是很必要的,因为难免出现一些“诡异”的题目,这些题目中的做法可能实际应用中,你永远也见不到。今天polaris收集一些“诡异”的笔试面试题分享给大家,这些题目本身没有多大意义,主要是明白为什么结果是这样,明白其原理。这些题目大部分是Java语言的,如果涉及到其他语言会特别说明。
没见过此题的人,大部分人可能得到的结果是:1。 然而,运行的结果会令您彻底失望。这是什么原因呢?原来Java编译器处理后缀++或--时是这么处理的:java的编译器在遇到j++和j- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉。即JAVA先将j的值保存到临时内存空间中,然后处理++,即原来的j加1,此时原来的j变成1,然后再执行赋值,将内存空间中所存放的原来的值赋回给j,所以j仍然是0。C#和Java的结果是一样的。
相反,C/C++不是这么处理的:C中是通过寄存器作中转先把j的值赋给它本身,再执行++的操作,这样结果就是1了。
题目是:
String a = "abc";
String b = "abc";
System.out.println("====>"+ a==b );
请问输出结果是true还是false?
这道题只要稍微仔细点就能够做出来。当然,我想大部分人可能都会掉入出题者的圈套中。
这道题目其实就是考察您是否细心以及运算符优先级。“+”的优先级高于“==”,因而打印语句先执行“+”操作,这样实际上比较的是"====>abc"与"abc",很明显会返回false。不过此题有一种人可能会做对,即认为a==b返回的是false。
其实此题可以改得更难点,即改为System.out.println(""+ a==b ); 当然结果还是一样的,只是多考察了一个知识点:"" + a 与 b是否指向同一个对象。String永远是面试官最喜欢考的知识点。为了加深对String的理解,polaris出了另外几个“诡异”的关于String的题目,看您能做对几个?点击查看《通过六个题目彻底掌握String笔试面试题》
这道题也许没有那么邪恶,而且这道题是各种Java笔试大全中都可以看到的一道题。然而,由这道题,您有没有更深入地考虑更多的问题。在此polaris进行一下引申,看如下代码:
public static boolean get() {
try {
return false;
} finally {
return true;
}
}
请大家思考一个问题,return的具体实现是怎样的?如果返回false,为什么;如果返回是true,又是为什么呢?给个你认为正确答案的理由出来。
我们都知道,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水平有限,如有疏忽,敬请指正。
分享到:
相关推荐
Java作为全球最流行的编程语言之一,其面试题和笔试题是评估开发者技能的重要标准。这份“Java面试题笔试题大全”资源旨在帮助求职者全面准备Java相关的技术面试和笔试环节,提升成功几率。CHM(Compiled Help ...
Java笔试面试题是求职者在寻求Java开发职位时必须面对的重要环节。这些题目通常涵盖了从基础知识到高级概念的广泛范围,旨在评估候选人的编程技能、理解力和问题解决能力。以下是一些可能出现在Java笔试面试中的关键...
Java作为一门广泛使用的编程语言,其笔试题和面试题涵盖了众多知识点,对于求职者来说,了解并掌握这些知识点是至关重要的。以下将根据标题、描述和标签,详细解析一些常见的Java笔试题和面试题所涉及的Java核心概念...
16道嵌入式C语言面试题可能包含诸如函数指针的使用、内存泄漏检测、位操作、结构体和联合体的应用等题目。对于C++,可能会涉及到面向对象编程、模板、异常处理和STL容器的使用。 嵌入式软件的测试是确保产品质量的...
### 笔试面试题知识点概览 #### 一、笔试面试题的重要性及涵盖范围 - **重要性**:笔试和面试题是评估求职者技能和知识的重要手段,尤其是在软件开发领域。 - **涵盖范围**: - **算法**:算法是计算机科学的基础...
本文将基于提供的标题"**C++程序员笔试面试题**"和描述,深入探讨C++面试和笔试中可能遇到的关键知识点。 1. **基本语法与数据类型**:面试官通常会考察求职者对C++基本语法的理解,如变量声明、常量、数据类型...
这份"java近几年企业笔试面试题大全"集合了近年来各大公司对于Java开发者在招聘过程中可能会遇到的问题,旨在为求职者提供一个全面的准备指南。 面试和笔试通常会涵盖以下几个核心知识点: 1. **Java基础**:这是...
以下是一些主要的Java面试笔试题相关的知识点,包括但不限于: 1. **基础语法**:理解基本数据类型、变量、运算符、流程控制(if、switch、for、while)、数组、字符串等。面试中可能会考察对Java内存模型的理解,...
【Java面试题 笔试题 第二部分】 在Java面试中,深入理解基础知识和技术细节是至关重要的。本部分的面试题涵盖了多个关键领域,包括但不限于面向对象编程、集合框架、多线程、异常处理、垃圾回收机制、IO流、网络...
Java作为一门广泛使用的编程语言,其笔试和面试题往往涵盖了多方面的知识,包括基础语法、面向对象编程、集合框架、多线程、异常处理、IO流、网络编程、设计模式、JVM内存模型、数据库操作以及框架应用等。...
Java作为一门广泛使用的开发语言,其笔试题和面试题涵盖了众多知识点。以下是对这些文档内容的综合概述: 1. **Java基础知识**: - **数据类型**:包括基本数据类型和引用数据类型,理解它们的区别及其在内存中的...
Oracle面试题涵盖了许多核心的Oracle数据库管理、设计和优化方面的知识点。以下是对这些题目中涉及的概念的详细解析: ...以上是对Oracle面试题中关键知识点的详细阐述,涵盖了从基础概念到高级优化的各种主题。
针对"JAVA笔试,面试题"这个主题,我们可以深入探讨多个Java相关的知识点,这些知识点不仅在各大公司的笔试和面试中常见,也是Java开发者必备的基础技能。 1. **Java基础知识**: - **数据类型**:Java分为基本...
3. **类与对象**:掌握如何定义类,创建对象,以及使用构造函数、访问修饰符、包、访问权限是基础面试题的常见内容。 4. **面向对象特性**:深入理解继承、多态和封装,能够解释其在实际代码中的应用。例如,多态性...
【Java面试题全集2021版】涵盖了Java编程语言及与其相关的各种技术领域的面试问题,旨在帮助求职者准备面试。以下是一些关键的知识点: 1. **基础语法**: - 数据类型:了解基本数据类型(如int、float、char)与...
随着技术的不断发展,Java程序员的需求也在持续增长,而面试和笔试是检验候选人技术能力的重要环节。本资源集合了最新的互联网大公司对Java程序员的面试和笔试题目,旨在帮助求职者提升准备效率,了解行业最新趋势。...
【NHN笔试题收集】 NHN是一家知名的韩国互联网公司,其笔试题目往往涵盖了广泛的IT知识领域,特别是针对Java编程和数据库管理。这份资料集合了NHN笔试中的题目和答案,对于准备面试或提升编程能力的IT专业人士来说...
因此,收集和整理有价值的面试题成为了很多求职者的必备功课之一。例如,本文提到的《程序员面试题精选100题》就旨在为即将进入职场的程序员提供一系列经典的技术面试题目,帮助他们系统地复习相关知识和技术要点,...
.NET笔试题大全旨在帮助准备.NET相关面试和笔试的求职者们巩固基础知识,提升技术素养。这份资料涵盖了C#编程语言、.NET框架、ASP.NET Web开发、ADO.NET数据库访问、多线程、设计模式等多个核心领域,对于学习和理解...