1、 面试宝典 Java程序员面试宝典(第三三版)BEST PRACTICE FOR JAVA PROGRAMMER INTERVIEW 欧立奇 编著 北京BEIJINGPublishing House of Electronics Industry 内容简介 本书是Java 程序员面试宝典的第三版。第三版在保留第二版数据结构、字符串处理、Java程序设计等主干内容的基础上,更新了部分程序员面试题目,内容主要取材于 2011 年至 2013 年多家大公司的面试题,以反映第二版图书出版后近两年来所发生的变化,目的是帮助求职者在面试过程中更好地处理一些新问题,应对新变化。本书最后着力讲述了如何进行英语
2、面试和电话面试,并对求职中签约、毁约的注意事项及群体面试进行了解析。本书的面试题除了有详细的解析外,对相关知识点也有扩展说明。希望这些内容对读者从求职就业到提升计算机专业知识有显著的帮助。本书适合(但不限于)将要找工作的程序员、高校计算机类应届毕业生,以及其他计算机爱好者阅读。未经许可,不得以任何方式复制或抄袭本书的部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 Java 程序员面试宝典/欧立奇,朱梅,段韬编著.3 版.北京:电子工业出版社,2013.9 ISBN 978-7-121-21313-7.J .欧 朱 段 .JAVA 语言程序设计 .TP312 中国版本图书馆 CI
3、P 数据核字(2013)第 199092 号 责任编辑:徐津平 印 刷:北京丰源印刷厂 装 订:河北省三河市路通装订厂 出版发行:电子工业出版社 北京海淀区万寿路 173 信箱 邮编:100036 开 本:787980 1/16 印张:23.25 字数:446.4 千字 印 次:2013 年 9 月第 1 次印刷 印 数:5000 册 定价:49.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。服务热线:(010)88258888。前 言 Java 程序
4、员面试宝典(第三版)III 本书是 Java 程序员面试宝典的第三版,同时也是程序员面试宝典的姊妹书。第三版在保留第二版数据结构、字符串处理、Java 程序设计等主干内容的基础上,更新了部分程序员面试题目,内容主要取材于 2011 年至 2013 年多家大公司的面试题,以反映第二版图书出版后近两年来所发生的变化,目的是帮助求职者在面试过程中更好地处理一些新问题,应对新变化。本书相对上一版的变化主要有以下三点。1把智力测试这一章进行分解,扩展增加了如下章节:数字类题目、图表类题目,并修正合并了一些内容,以更好地帮助求职者应对求职过程中出现的一些细节和麻烦。2针对程序设计这一部分,我们更新了部分例
5、题。随着互联网相关面试题的频繁出现,我们新增并更新了如下知识点:Trie 树、图的遍历、动态规划算法。采用循序渐进的办法,将重要概念加以复习,完善解题思路,而不是仅仅给出答案。3针对近两年面试过程中出现的新题型,本书补充了新的章节,如操作系统的内存管理问题、哈希表问题等。与第二版相比较,更加贴近市场的变化,更加与时俱进。PS:以前各个版本替换下的题目将保留在作者博客,读者可以访问以下网址获取。http:/ Java 和 C+大相径庭,但在更加有趣的语言后面的知识是设计模式、分析模式、求职解答、算法策略、信息化也就是说,本书追求的是程序员求职背后的一些知识,即对于技术的本质理解。所以本书虽命名为
6、“Java 程序员面试宝典”,但不仅限于对 Java 技术的单纯讲解。因为只有这样,求职者才能不被语言所羁绊,而对于一个企业而言,除了看中求职者对语言的熟练程度,更看重工作经验、大局观和整体架构等超脱语言的知识。本书采用一种问询式的结构。这样不仅言简意赅、平易近人,而且可以容纳更多的题目,真正达到“宝典”之效用。但本书又不仅仅作为一个题库出现,对一个类型的问题不简单加以重复。本书采用循序渐进的办法:(1)将重要概念加以复习;(2)完善解题思路,而不是仅仅给出答案;(3)给出完整可靠的答案,如果是可以验证的,要给出验证的结果;(4)综合几种解题方案,给出最优解;(5)触类旁通,给出语言背后的算法
7、本质性解释。本书的解题思路不仅能够让读者知道什么是正确的解决方案,而且让读者明白怎样能获得最佳方案。Foreword IV Java 程序员面试宝典(第三版)本书不同于其他 Java 程序书籍的主要特点如下。细 中国软件企业的规模比较小,面试涉及的方面比较多,且比较基础,比如常会考一些编程基础性的题,而原有的面试书籍对此方面鲜有触及。本书把国内公司面试时最易考到的基础考点,放在 Java 基础程序设计里面,希望能切切实实解决地实际面试问题。深 面试题通过一道题考一个专类方面的能力。说起 Java,人们首先想到的是 Java 编程语言,然而事实上,Java 是一种技术,它由四个方面组成:Java
8、 编程语言、Java 类文件格式、Java 虚拟机和 Java 应用程序接口(Java API)。从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质,至少能了解应试者所掌握类的水平。市面上流行的面试书籍在此专业性的分类方面做得不够,正因为如此,本书中追求的是程序员求职背后的一些知识:对于技术的本质理解,而不仅限于对 Java 技术的单纯讲解。广 本书包括但不仅仅限于 Java 程序员面试试题,对求职市场面试试题做了妥善分类后,将面试对象分为软件开发人员、网络工程师、测试工程师和系统管理员。实际上,市面上流行的面试书籍仅对软件开发人员比较侧重,而忽略网络工程师和测试工程师,本书就这一方面
9、给出了详细论断,并结合大量考题分析题目特点给出应试方案。本书在这些方面做出了改进,以适应市场需求。同时本书对外企经常考到的 UML 及设计模式内容也做了深入的分析,从本质上诠释面试的真谛。真 第三版在保留原书主干内容的基础上,内容非常新,可以算做面试者求职前的一份全真模拟。同时作者将求职中的细节问题(简历,招聘,签约,违约),以及笔试、面试中的感悟融入书中,给求职者以最真切的人文关怀。真情实感,娓娓道来,指引读者走上理想的工作岗位。本书不是一本万能书籍,但肯定是您工作与求职的好助手、好伙伴!本书主要由欧立奇编著,其他参与编写的人员有朱梅、段韬、秦晓东、李启高、马雪、胥虎军、马煜、刘洋、方鹤鹤等
10、。编著者 目 录 Java 程序员面试宝典(第三版)V第 1 部分 求职过程 古人云:凡事预则立,不预则废。机会都是垂青有准备的人。为了得到一份满意的工作,求职者一定要对整个求职过程有清醒的了解。把能够预见的、必须做的事情早一些做完,这样在大规模招聘开始的时候就可以专心地为面试做准备。求职过程中会发生很多预料不到的事情,当你的计划被这些事情打乱之后,要做的事会越堆越多,一步落后,步步落后。如果能够尽早把能做的事情做完,即便有计划外的事件发生,也不会产生太严重的影响。努力地使事态的发展处在自己能控制的范围之内,这样无论发生任何事都能有应对之策。第 1 章 应聘求职.2 每年的 9 月到次年的 1
11、 月,都是应届毕业生求职、在职人员跳槽的高峰期。对于即将成为程序员的应届毕业生们,在求职过程中怎样确定目标公司和目标职位?对于已经是程序员的跳槽大军,是按照技术路线发展自己的职业生涯,还是走向管理岗位继续自己的职业道路,或者是改变自己的发展轨迹?在求职过程中要注意哪些细节?这些都是求职者所关心的话题。1.1 应聘渠道.2 1.2 应聘流程.3 第 2 章 简历书写.4 据统计,80%的简历都是不合格的。不少人事管理者抱怨收到的许多简历在格式上很糟糕。简历应该如何做到在格式上简洁明了,重点突出?求职信应该如何有足够的内容推销自己?如何控制长度,言简意赅?相信读了本章你会对简历的撰写有一个新的认识
12、。2.1 书写简历注意事项.4 2.2 简历模板.6 第 3 章 求职五步曲.10 笔试、电话面试和面试是顺利求职的三个过程。三关全过才能顺利签约,只要有一关没能通过,就会被“刷”掉。除此之外,签约本身又何尝不是一个重要的考试?涉及你的未来、人生、行业甚至家庭。当然有签约就有可能会有违约,真希望你们不必走第五步,但是这个世界毕竟不是童话。3.1 笔试.10 3.2 电话面试.12 3.3 面试.13 3.4 签约.14 3.5 违约.18 Contents VI Java 程序员面试宝典(第三版)第 4 章 职业生涯发展规划.20 在一般情况下,我们工作一年之后,对自己的喜好及擅长都有了更加深
13、刻的了解,这时会有较为明确的职业发展规划。4.1 缺乏工作经验的应届毕业生.20 4.2 更换工作的程序员们.22 4.3 快乐地工作.23 第 2 部分 Java 程序设计 本部分主要以 Java 设计语言为基础,通过大量实际的例子分析各大公司 Java 面试题目,从技术上分析面试题的内涵。一般公司的面试题都是两套C+或 Java,面试者可以选择。第 5 章 Java 程序设计基本概念.28 对于一个求职者或者应届毕业生来说,公司除了对项目经验有所问询之外,最好的考试办法就是检查基本功,包括编程风格,以及对赋值语句、递增语句、类型转换、数据交换等程序设计基本概念的理解。当然,在考试之前最好对
14、自己所掌握的程序概念知识有所了解,尤其是对各种细致的考点要加以重视。本章考题来自真实的笔试资料,希望读者先不要看答案,自我解答后再与答案加以对比,找出自己的不足。5.1 JVM.28 5.2 i+.34 5.3 类型转换.37 5.4 程序结构.41 5.5 运算符.42 5.6 异常.47 5.7 反射.59 第 6 章 传递与引用.61 Java语言明确说明取消了指针,因为指针往往是在带来方便的同时导致代码不安全的根源,而且还会使程序变得非常复杂和难以理解,滥用指针写成的代码不亚于使用早已“臭名昭著”的 GOTO 语句。Java 放弃指针的概念绝对是极其明智的。但这只是在 Java 语言中
15、没有明确的指针定义,实质上,每一个 new 语句返回的都是一个指针的引用,只不过在大多数时候 Java 不用关心如何操作这个“指针”,更不用像在操作 C+的指针那样胆战心惊,唯一要多注意的是在给函数传递对象的时候。6.1 传值与传引用.61 6.2 静态变量与私有变量.66 Contents Java 程序员面试宝典(第三版)VII6.3 输入/输出流.67 6.4 序列化.71 第 7 章 循环、条件、概率.73 递归过程的执行总是一个过程体未执行完,就带着本次执行的结果又进入另一轮过程体的执行如此反复,不断深入,直到某次过程的执行遇到终止递归调用的条件成立时,则不再深入,而执行本次的过程体
16、余下的部分,然后又返回到上一次调用的过程体中,执行其余下的部分如此反复,直到回到起始位置上,才最终结束整个递归过程的执行,得到相应的执行结果。递归过程的程序设计的核心就是参照这种执行流程,设计出一种适合“逐步深入,而后又逐步返回”的递归调用模型,以解决实际的面试例题。7.1 典型递归问题.73 7.2 循环与条件.78 第 8 章 Java 内存管理.84 内存管理太重要了,花费多少口舌介绍它都不过分。笔者曾经见到这样一句话:“C+程序员觉得内存管理太重要了,所以一定要自己进行管理;Java/C#程序员觉得内存管理太重要了,所以一定不能自己去管理。”从某种意义上说,两者都是对的。面试中内存管理涉及堆、栈、哈希表、内存泄漏等方面。8.1 垃圾收集.84 8.2 内存管理.88 8.3 clone.92 第 9 章 面向对象.95 面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看做是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心、以算法为驱动的话,面向对象的编程语言则是以对象