java面试宝典2013版-java面试宝典2018版
本书是《Java程序员面试宝典》的第2版。第2版在保留第1版数据结构、字符串处理、Java程序设计等主干内容的基础上,大量更新了程序面试题目,内容主要取材于2009年到2011年各大公司的面试题,以反映第1版图书出版近两年来所发生的变化,目的是帮助求职者在面试过程中更好地处理一些新问题,应对新变化。
本书最后着力讲述了如何进行英语面试和电话面试,并对求职中签约、毁约的注意事项及群体面试进行了解析。本书的面试题除了有详细的解析外,对相关知识点也有扩展说明。希望这些内容对读者从求职就业到提升计算机专业知识有显著的帮助。
读者对象:本书适合(但不限于)将要找工作的程序员、高校计算机类应届毕业生,以及其他计算机爱好者阅读。
第1部分 求职过程
古人云:凡事预则立,不预则废。机会都是垂青有准备的人。为了得到一份满意的工作,大家一定要对整个求职过程有清醒的了解。把能够预见的、必须做的事情早一些做完,这样在大规模招聘开始的时候就可以专心地为面试做准备。求职过程中会发生很多预料不到的事情,当你的计划被这些事情打乱之后,要做的事会越堆越多,一步落后,步步落后。如果能够尽早把能做的事情做完,即便有计划外的事件发生,也不会产生太严重的影响。努力地使事态的发展处在自己能控制的范围之内,这样无论发生任何事都能有应对之策。
第1章 应聘求职2
每年的9月到次年的1月,都是应届生求职、在职人员跳槽的高峰期。对于即将成为程序员的应届毕业生们,在求职过程中怎样确定目标公司和目标职位;对于已经是程序员的跳槽大军,是按照技术路线发展自己的职业生涯,还是走向管理岗位继续自己的职业道路,或者是改变自己的发展轨迹;大家在求职过程中要注意哪些细节?这些都是大家所关心的话题。
1.1 应聘渠道2
1.2 应聘流程3
第2章 简历书写4
据统计,80%的简历都是不合格的。不少人事管理者抱怨收到的许多简历在格式上很糟糕。简历应该如何做到在格式上简洁明了,重点突出?求职信应该如何有足够的内容推销自己?如何控制长度,言简意赅?相信读了本章,你会对简历的撰写有一个新的认识。
2.1 简历注意事项4
2.2 简历模板6
第3章 求职五步曲10
笔试、电话面试、面试,是顺利求职的3个过程。三关全过才能顺利签约java面试宝典2013版,只要有一关没能通过,就会被“刷”掉。除此之外,签约本身又何尝不是一个重要的考试?涉及你的未来、人生、行业甚至家庭。当然有签约就有可能会有违约,真希望你们不必走第五步,但是这个世界毕竟不是童话。
3.1 笔试10
3.2 电话面试12
3.3 面试13
3.4 签约14
3.5 违约19
第4章 职业生涯发展规划21
在一般情况下,我们工作一年之后,对自己的喜好及擅长都有了更加深刻的了解,这时会有较为明确的职业发展规划。
4.1 缺乏工作经验的应届毕业生21
4.2 更换工作的程序员们23
4.3 快乐地工作24
第2部分 Java程序设计
本部分主要以Java设计语言为基础,通过大量实际的例子分析各大公司Java面试题目,从技术上分析面试题的内涵。一般公司的面试题都是两套:C++或Java,面试者可以选择。
第5章 Java程序设计基本概念28
对于一个求职者或者应届毕业生来说,公司除了对项目经验有所问询之外,最好的考量办法就是检查基本功,包括编程风格,以及对赋值语句、递增语句、类型转换、数据交换等程序设计基本概念的理解。当然,在考试之前最好对自己所掌握的程序概念知识有所复习,尤其是对各种细致的考点要加以重视。以下的考题来自真实的笔试资料,希望读者先不要看答案,自我解答后再与答案加以比对,找出自己的不足。
5.1 JVM28
5.2 i++34
5.3 类型转换37
5.4 程序结构41
5.5 运算符42
5.6 异常47
5.7 反射59
第6章 传递与引用60
Java语言明确说明取消了指针,因为指针往往是在带来方便的同时导致代码不安全的根源,而且还会使程序变得非常复杂和难以理解,滥用指针写成的代码不亚于使用早已臭名昭著的GOTO语句。Java放弃指针的概念绝对是极其明智的。但这只是在Java语言中没有明确的指针定义,实质上,每一个new语句返回的都是一个指针的引用,只不过在大多数时候Java不用关心如何操作这个“指针”,更不用像在操作C++的指针那样胆战心惊,唯一要多注意的是在给函数传递对象的时候。
6.1 传值与传引用60
6.2 静态变量与私有变量64
6.3 输入/输出流66
6.4 序列化69
第7章 循环、条件、概率71
递归过程的执行总是一个过程体未执行完,就带着本次执行的结果又进入另一轮过程体的执行……如此反复,不断深入,直到某次过程的执行遇到终止递归调用的条件成立时,则不再深入,而执行本次的过程体余下的部分,然后又返回到上一次调用的过程体中,执行其余下的部分……如此反复,直到回到起始位置上,才最终结束整个递归过程的执行,得到相应的执行结果。递归过程的程序设计的核心就是参照这种执行流程,设计出一种适合“逐步深入,而后又逐步返回”的递归调用模型,以解决实际的面试例题。
7.1 典型递归问题71
7.2 循环与条件76
7.3 概率81
第8章 Java内存管理83
内存管理太重要了,花多少口舌介绍它都不过分。笔者曾经见到这样一句话:“C++程序员觉得内存管理太重要了,所以一定要自己进行管理;Java/程序员觉得内存管理太重要了,所以一定不能自己去管理。”从某种意义上说,两者都是对的。面试中内存管理涉及堆、栈、哈希表、内存泄漏等诸方面。
8.1 垃圾收集83
8.2 内存管理87
8.3 clone91
第9章 面向对象94
面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看做是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心、以算法为驱动的话,面向对象的编程语言则是以对象为中心,以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。
9.1 面向对象的基本概念95
9.2 类和对象97
9.3 嵌套类100
9.4 集合类101
9.5 构造函数和析构函数106
9.6 复制构造函数和赋值函数109
9.7 多态的概念111
第10章 继承与接口114
接口在实际语言,如Delphi、Java、C++等中,都有广义和狭义之分。
10.1 基础知识114
10.2 Super122
10.3 this124
10.4 不能继承的情况128
10.5 抽象类与接口129
第3部分 数据结构和设计模式
本部分主要介绍求职面试过程中出现的第二个重要的板块—数据结构,包括字符串的使用、堆、栈、排序方法等。此外,随着外企研发机构大量迁入我国,外企针对软件工程知识的考核,包括设计模式、UML、敏捷软件开发,以及.NET技术和完全面向对象语言C#的面试题目将会有增无减,今后设计模式在面试中的比重会进一步提高。
第11章 数据结构基础136
面试时间一般有两个小时,其中至少有20~30分钟左右是用来回答数据结构相关的问题,链表栈、堆、数组的排序和逆置是笔试必考的内容。
11.1 堆栈136
11.2 链表、哈希表139
11.2 树、图141
11.3 排序基础知识145
第12章 字符串、数组、范型171
求职者在进行笔试时,几乎没有不考字符串、数组和范型的。字符串也是一种相对简单的数据结构,结合指针,容易多次引起面试官反复发问。笔者曾不止一次在笔试或面试时遇到字符串的试题。事实上,字符串也是一个考验程序员编程规范和编程习惯的重要考点。范型是Java SE 1.5的新特型,泛型的本质是参数化类型,也就是说,所操作的数据类型被指定为一个参数。这种参数类型可用在类、接口和方法的创建中,分别称为范型类、泛型接口、泛型方法。Java语言引入范型的好处是安全简单。Java范型编程也是Java程序员面试的热点之一。大家不能忽视这些细节,因为这些细节会体现你在操作系统、软件工程、边界内存处理等方面的知识掌控能力。
12.1 字符串基础问题171
12.2 StringBuffer179
12.3 正则表达式185
12.4 数字流和数组187
12.5 字符串其他问题192
12.6 范型与容器195
第13章 设计模式199
地上本没有路,走的人多了,也就成了路。设计模式如同此理,它是经验的传承,并不成体系;它是被前人发现,经过总结形成了一套某一类问题的一般性解决方案,而不是被设计出来的定性规则;它不像算法那样可以照搬照用。
13.1 UML200
13.2 常见设计模式201
13.3 软件工程208
第4部分 UNIX、Oracle、网络
本部分主要介绍求职面试过程中出现的第三个重要的板块—操作系统、数据库、网络知识。作为一个程序员,尤其是系统管理方面的程序员,对这几部分有深刻的理解和领悟是相当重要的。
第14章 操作系统212
操作系统面试例题主要涉及进程、线程、内存管理、垃圾回收,以及缓存等诸方面。
14.1 基础知识212
14.2 进程214
14.3 线程与串行化217
第15章 数据库和SQL语言228
数据库面试例题主要涉及范式、事物、存储过程、SQL语言及索引等诸方面。
15.1 数据库理论问题228
15.2 SQL语言常见问题231
第16章 计算机网络及分布式系统236
网络面试例题主要涉及局域网、广域网和IP管理等诸方面。
16.1 网络结构236
16.2 TCP/IP239
16.3 网络其他问题243
第5部分 Java开源
EJB组件曾经被认为是一个重量级的组件。EJB 3.0规范的重要目标就是简化EJB的开发,提供一个相对轻量级的组件方案。Spring基于轻量内核,然后通过集成第三方的服务器来提供完整的架构。
第17章 J2EE技术250
从整体上讲,J2EE是使用Java技术开发企业级应用的一种事实上的工业标准(Sun公司出于其自身利益的考虑,至今没有将Java及其相关技术纳入标准化组织的体系),它是Java技术在不断适应和促进企业级应用过程中的产物。目前,Java平台有3个版本:适用于小型设备和智能卡的J2ME(Java 2 Platform Micro Edition)、适用于桌面系统的J2SE和适用于企业级应用的J2EE。Sun推出J2EE的目的是为了消除传统Client/Server模式的弊病,迎合Browser/Server架构的潮流,为应用Java技术开发服务器端应用提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。J2EE是一个标准,而不是一个现成的产品。各个平台开发商按照J2EE规范分别开发了不同的J2EE应用服务器,J2EE应用服务器是J2EE企业级应用的部署平台。由于它们都遵循了J2EE规范,因此,使用J2EE技术开发的企业级应用可以部署在各种J2EE应用服务器上。
17.1 Spring轻量级架构250
17.2 Hibernate252
17.3 EJB260
17.4 JDBC264
17.5 JDO272
第18章 Java中的Web设计273
关于Web设计的面试题目,涉及Session、Servlet、JSP、javascript和XML等方面。以下的考题来自真实的笔试资料,希望读者先不要看答案,自我解答后再与答案加以对比,找出自己的不足。
18.1 JSP273
18.2 Servlet275
18.3 javascript279
18.4 XML290
18.5 APPLET293
第19章 Struts结构设计294
Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使开发者能更深入地了解其内部实现机制。除此之外,Struts的优点主要集中体现在两个方面:TagLib和页面导航。TagLib是Struts的标记库,灵活运用能大大提高开发效率。页面导航使系统的脉络更加清晰,通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着很大的好处,尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
19.1 AWT294
19.2 Struts体系结构296
第20章 Java架构技术及相关中间件299
在软件开发的过程中,人们越来越意识到软件重用的重要性。异构的系统、不同的实现方案使软件的重用变得复杂。在中间件产生以前,应用软件不得不直接面对非常底层的东西。不同的硬件体系、不同的操作系统、不同的网络协议实现和不同的数据库等,这些使得应用程序复杂多变。面对易变的东西java面试宝典2013版,软件设计师们已经习惯于通过添加中间层的方式来隔离变化。把应用软件所要面临的共性问题进行提炼、抽象,在操作系统之上添加一个可复用的部分,供成千上万的应用软件重复使用。这一技术思想最终构成了中间件。一方面,中间件要应对底层不同的环境,针对不同的环境进行不同的调用;另一方面,中间件要对上层提供统一的接口,保证在不同的环境中为上层提供相同行为的服务。具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,大大减少了技术上的负担。
20.1 WebLogic300
20.2 WebSphere303
20.3 WebService303
第21章 Java测试305
软件测试在软件质量安全控制上的地位不可替代。美国的软件企业将40%的工作量花在软件测试上,测试费用占项目总费用的30%~50%。如微软Windows 2000团队动用的测试人员比项目经理和开发人员的总和还要多。之所以如此重视软件测试,是因为通过必要的测试,软件缺陷数可至少降低75%,而软件的投资回报率能达到350%。
21.1 白盒测试305
21.2 性能测试310
21.3 游戏315
第6部分 综合面试题
本部分主要介绍求职面试过程中出现的第五个重要的板块—英语面试、电话面试和智力测试。其中,英语面试不同于普通的英语面试。就一个程序员而言,最好能够用英文流利地介绍自己的求职经历,这是进外企非常重要的一步。此外,还必须对几个常用的问题有相关的解答,比如你最大的缺点是什么。有些问题即便是用中文,你都很难回答,更何况是用英文去回答。但是求职过程本身就是一个准备的过程,精心地准备,等待机会—机会总是垂青于那些精心准备的人。
第22章 英语面试318
如果你是一个具有战略眼光,且期待进入国际性跨国大企业的求职者,本章值得你仔细研读。
22.1 面试过程和技巧318
22.2 关于工作(About Job)320
22.3 关于个人(About Person)323
22.4 关于未来(About Future)325
第23章 电话面试328
求职时,经常会遭遇电话面试,戏称“触电”。笔者曾经在开会、洗澡、吃饭、坐车时都接到过电话。问的问题也是五花八门,千奇百怪。
23.1 电话面试之前的准备工作328
23.2 电话面试交流常见问题329
第24章 智力测试338
智力测试其实是考查应聘者在限制条件下解决问题的能力。这类题目会出现于跨国企业的招聘面试中,对考查一个人的思维方式及思维方式转变能力有极其明显的作用。而据一些研究显示,这样的能力往往也与工作中的应变与创新状态息息相关。所以回答这些题目时,必须冲破思维定式,试着从不同的角度考虑问题,不断进行逆向思维,换位思考,并且把题目与自己熟悉的场景联系起来,切忌思路混乱。
24.1 关于数字的智力测试338
24.2 关于推理的智力测试341
24.3 综合智力测试345
本书是Java程序员面试宝典的第2版,同时也是《程序员面试宝典》的姊妹书。
第2版在保留第1版数据结构、字符串处理、Java程序设计等主干内容的基础上,大量更新了程序面试题目,内容主要取材于2009年到2011年各大公司的面试题,以反映第1版图书出版近两年来所发生的变化,目的是帮助求职者在面试过程中更好地处理一些新问题,应对新变化。
本书相对上一版的变化主要有以下3点:
(1)针对求职过程这一章,我们在原版内容(笔试、电话面试、面试)的基础上添加了两节(签约、违约),以更好地帮助求职者应对求职过程中出现一些的细节和麻烦。
(2)针对Java程序设计这部分内容,我们更新了绝大部分的例题。如近两年随着IDE的频繁使用,异常处理问题、JVM配置、运算符处理的问题却与日俱增,所以我们增加了这些内容。又如递归面试已经很少出现常见的菲波那契问题,而代之考验求职者如何提高循环递归效率问题。
(3)针对近两年面试过程中出现的新题型,本书补充了新的章节,如程序设计中的类型转换问题、泛型问题、白盒测试问题、数据结构中的排序问题、智力测试中的博弈测试等。
就编程而言,虽然Java和C++大相径庭,但在更加有趣的语言后面的东西是设计模式、分析模式、求职解答、算法策略、信息化……也就是说,本书中追求的是程序员求职背后的一些东西,即对于技术的本质理解。所以本书虽命名为Java程序员面试宝典,但不仅限于对Java技术的单纯讲解。因为只有这样,求职者才能不被语言所羁绊,而对于一个企业而言,除了看中求职者对语言的熟练程度,更看重工作经验、大局观和整体架构等超脱语言的东西。
本书结构是一种问询式的结构。这样不仅言简意赅,平易近人,而且可以容纳更多的题目,真正达到宝典之效用。但本书又不简单作为一个题库出现,对一个类型的问题不简单加以重复。本书采用循序渐进的办法:(1)将重要概念加以复习;(2)完善解题思路,而不是仅仅给出答案;(3)给出完整可靠的答案,如果是可以验证的,要给出验证的结果;(4)综合几种解题方案,给出最优解;(5)触类旁通,给出语言背后的算法本质性解释。本书的解题思路不仅能够让大家知道什么是正确的解决方案,而且让大家明白怎样能获得最佳方案。
本书不同于其他Java程序书籍的主要特点如下。
细
中国软件企业比较小,面试涉及的方面比较多,且比较基础,比如常会考一些编程基础性的题,而原有的面试书籍对此方面鲜有触及。本书把面试中国内公司最易考到的基础考点,放在Java基础程序设计里面,希望能切切实实解决实际面试问题。
深
面试题通过一道题考一个专类方面的能力。说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由4个方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质,至少你能了解应试者所掌握类的水平。市面上流行的面试书籍在此专业性的分类方面做得不够,正因为如此,本书中追求的是程序员求职背后的一些东西:对于技术的本质理解,而不仅限于对Java技术的单纯讲解。
广
本书包括但不仅限于Java程序员面试试题。对求职市场面试试题做了妥善分类后,将面试对象分为软件开发人员、网络工程师、测试工程师和系统管理员。实际上,市面上流行的面试书籍仅对软件开发人员比较侧重,而忽略网络工程师和测试工程师,本书就这一方面给出了详细论断,并结合大量考题分析题目特点给出应试方案。本书将在这些方面做出改进,以适应市场需求。
同时本书对外企经常考到的UML及设计模式内容也做了深入的分析,从本质上诠释面试的真谛。
真
第2版在保留原书主干内容的基础上,内容非常时新,可以算做面试者求职前的一份全真模拟。同时作者将求职中的细节问题(简历,招聘,签约,违约),以及笔试、面试中的感悟融入书中,给求职者以最真切的人文关怀。真情实感,娓娓道来,指引读者走上理想的工作岗位。
本书不是一本万能书籍,但可以肯定是您工作与求职的好助手、好伙伴!
编著者