Java程序员面试宝典

时间:2019-05-12 21:09:41下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Java程序员面试宝典》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Java程序员面试宝典》。

第一篇:Java程序员面试宝典

第3章

Java语法基础

基础类型和语法

1、变量及其作用范围

Java变量可以分为:静态变量、成员变量和局部变量3种。

静态变量:在类中用static修饰的变量,它的生存周期是由类来决定的。

成员变量:在类中没有用static修饰的变量,它的生存周期由对象来决定。

局部变量:定义在方法里的变量、方法的参数或代码块里定义的变量,它们的作用范围用大括号{}来界定。

2、Java的变量分哪两种大的数据类型

Java的变量分为基本数据类型和引用数据类型。它们最大的区别在于,引用数据类型存 放的是数据所在的地址,而基本数据类型则是直接存放数据的值。

其他知识点:引用数据类型的变量存的值是一个内存地址。对象一般是通过new语句创

建出来的,它保存在堆空间中,可以被多个引用类型的变量所引用。当引 用a修改了对象的数据以后,其他的引用也是可以看到这些改变的。

3、Java包含哪些基本数据类型及其包装类

Java一共有8种基本数据类型,分别是byte、short、int、long、float、double、boolean、char;存储的数据量比较小,用二进制保存。其馐类分别是:Byte、Short、Integer、Float、Double、Boolean、Character。

Eg.Integer itg=new Integer.valueOf(100);

Itg.intValue();

4、如何理解Java中的装箱和拆箱

从Java 5.0开始,有一种自动装箱和拆箱的功能,就可以不必显式的进行类型转换,系统会自动的按照需要进行数据类型的转换。

Java中的装箱和拆箱指的是基本数据类型和包装类型的自动相互的转换。

装箱:基本数据类型——>包装类型 拆箱:包装类型——>基本数据类型

5、Java中equal和==的区别是什么

“==”运用在基本数据类型的时候,通过比较它们实际的值来判定是否相同;而用于比较引用类型的时候,则是比较两个引用的地址是否相等,也就是是否指向同一个对象。

Equal方法是java.lang.Object的方法,也就是所有的Java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方式来判定两个对象是否相等。对于字符串java.lang.String类来说,它的equal方法用来比较字符串的字符序列是否相等。

6、Java中的注释有哪些

行注释://

块注释:/* */,这种注释不会出现在HTML文档中。

文档注释:/** /,它的注释信息可以进入到javadoc文档中。注释文档将用来生成HTML 格式的代码API报告,还可以用@开头的关键字进行注释,以达到说明方法参数、返回 值、异常等各种详细信息。

Annotation:它会进入到编译层,并对程序结果产生影响。它最变通的作用就是用来替代 XML提供一些配置信息,例如,JPA、Spring等框架的配置信息就可以通过Annotation 来提供。

7、Java的引用和C++的指针有什么区别

Java的引用和C++的指针本质上,它们两者都是想通过一个叫做引用或者指针的东西,找到要操作的目标,方便在程序中操作。所不同的是Java的办法更安全、方便,但失去了C++的灵活,也算是对指针的一种包装和改进。

主要区别是:

对象和类型

1、类和对象有什么区别

类是一种抽象,而对象是类的实现。

Java的类通过class关键字进行定义,它代表了一种抽象的集合。在它的里面可以定义各种属性和方法,它们代表了每个类实例的特定的数据和动作。Java虚拟机对类只加载一次,对它的静态成员也只加载一次。

对象,指的是某一个特定抽象的实例,它属于某一种类型,也就是对象是通过类来创建的。它必须从属于某一个类,通过new关键字进行创建,它代表一个特定类型的实例,对象可以被多次创建。

2、Java中如何使用继承来重用代码

Java采用的是单继承制,使用extends关键字。通过继承之后,子类就拥有了父类除开私有成员以外的所有成员,从而达到代码重用的目的。在继承过程中,可以通过方法的覆盖来实现多态,让子类拥用自己独特的方法实现方式。

方法的覆盖(或重写)和重载是两个不同的概念。重载是创建一个方法名相同,但参数列表不同的方法;而方法覆盖则是子类对父类方法的覆盖和重写,定义一个名字、参数、返回值一样的方法即可。

3、简述Java中的多态

多态是建立在继承的基础之上的。

“多态”的本质是,发送消息给某个对象,让该对象自行决定响应何种行为。通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。

4、Java中静态成员的特点

类的静态成员是通过static关键字修饰的成员,主要包括:静态成员变量、静态方法和静态代码块,它们具有以下一些特点:

1、在类加载的时候,就进行创建和初始化或执行代码。

2、它们对于一个类来说,都只有一份。

3、类的所有实例都可以访问到它们。

静态代码块先执行。

5、Java派生类中的构造方法如何为父类传递参数

在Java中,使用super()的形式来为父类的构造方法提供参数,通过参数的数目和类型来决定调用哪一个构造方法。如果调用的是父类的默认的无参数构造方法,则可以不必显式地使用super()。super()的使用必须放在子类构造方法的第一行,否则编译时会有语法错误。

6、接口和抽象类的区别

包含抽象(abstract)方法的类,就是抽象类。抽象类不能够实例化。Abstract class 接口所有的方法都是抽象的,它可以包含静态的变量,这些变量的值不能修改。interface 抽象类是一种功能不全的类,接口只是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。从某种意义上说,接口是一种特殊形式的抽象类,在Java语言中,抽象类表示一种继承关系,一个类吸能继承一个抽象类,而一个类却可以实现多个接口。

Class A extends B implements C,D { }

7、简述一下内部类的实质

包和访问控制

1、包应该如何被创建及使用

包是Java程序中关于命名空间的一种手段,它可以有效的解决类重名的问题。当需要把一个类定义在某个包下的时候,需要使用package关键字进行定义;当需要使用其他包下的类的时候,则需要使用import关键字进行导入。

2、说明private、protected、public、default(friendly)的区别

第4章

数据类型及类型转换

整型数据

1、int 和Integer有什么区别

所有的整型字面量默认为int 型。

装箱:创建Integer对象:Integer a=new Integer(20);Integer b=Integer.valueOf(30);拆箱:int c=a.intValue();

2、Java中的八制字面量采用0开头,十六进制采用0x开头。

3、Int型数据采用4个字节进行存储,一共是32位。第一位用于表示正负号,这的取值范围是:-2^31~(2^31-1)。

Long型数据采用8个字节进行存储,一共是64位。第一位用于表示正负号,这的取值范围是:-2^63~(2^63-1)。

实型(浮点型)数据

1、float 和double的取值范围各是多少

Float型定义的数据末尾必须有“f”或“F”,为了和double区别。而double末尾可以有“d”或“D”,也可以不写。Java的浮点型数默认为double型。

2、如何用BigDecimal类进行精确运算

布尔型数据

1、Java可以用非0来代表true吗?

Java不能用非0代表true,也不能用0代表 false,只能用布尔型的true和false来进行条件判断。

2、boolean和它的包装类的区别在哪里

Boolean变量一般初始化为false。

字符型数据

1、char的取值范围

Java中的char采用Unicode编码格式,用两个字节来表示一个字符,一共16位(bit),它所能表示的范围是:0~2^16。

2、char能否存储汉字

char是可以存储汉字的,每个中文字符都有对应的Unicode编码。对于英文字母,它们所处的范围是0~127之间,与ASCII码相同,这是因为Unicode兼容ASCII码。

3、如何使用转义字符

在Java中,使用反斜线“”来代表转义,它与紧跟在它后面的字符一起组成了转义字符,从而达到转义的目的。

String型数据

1、字符串字面量是否自动生成一个String对象

肯定会自动生成。字符串类具有一定的特殊性,JVM在执行双引号操作符的时候,会自动的创建一个String对象,并返回这个对象的引用。

2、字符串对象池的作用是什么?

Java虚拟机在启动的时候会实例化9个对象池,这9个对象池分别且来存储8种基本类型的包装类对象和String对象,主要是为了效率问题。

对象池的存在是为了避免频繁的创建和销毁对象而影响系统性能。当JVM在运行用双引号引起来的一个字符串的代码时,会到String的对象池中去检查是否有一个字符序列相同的对象。如果有,就取现成的对象,如果没有,则在对象池中创建一个对象,并返回。

3、StringBuffer和StringBuilder存在的作用是什么?

Java的字符串String对象,有一个特性:不变性,它只能被创建,不能改变其中的值。

在Java程序中,如果有大量拼接字符串的需要的话,应该使用StringBuffer和StringBuilder类,它们可以避免不必要的String对象的产生,以提高程序的性能。它们的作用类似,只不过StringBuilder线程是安全的。

StringBuffer sb=new StringBuffer();

Sb.append(a);//用append方法追加字符串

4、如何输出反转过后的字符串

实现字符串的反转一般来说有两种手段,第一是利用字符串存储字符数据的原理,取出它的char数组,进行重新排列并保存;第二则是生成StringBuffer对象,直接使用StringBuffer的reverse()方法。

第二篇:Java程序员面试宝典

本文由 tonhhssy 贡献 pdf 文档可能在 WAP 端浏览体验不佳。建议您优先选择 TXT,或下载源文件到本机查看。编辑推荐 揭开知名 IT 企业面试、笔试的核心机密; 传授程序员岗位求职的关键技巧。《Java 程序员面试宝典》 不同于其他 Java 程序书籍的主要特点如下。唯一性 本书是国内 市场上唯一介绍 Java 程序员求职面试技巧的图书和案例库。本书从实际出发,将 Java 程序 员面试中常会考到的一些编程基础性问题,比如 final、super 类、构造函数等最易考到的基 础 考点,放在第 2 部分 Java 程序设计里面,希望能切切实实解决实际问题。深入性 面试题通过一道题考一个专类方面的能力。说起 Java,人们首先想到的是 Java 编程语言,然而事 实上,Java 是一种技术,它由 4 个方面组成: Java 编程语言、Java 类文件格式、Java 虚拟机和 Java 应用程 序接口(Java API)。从面试者的角度来讲,一个测试也许能从多方面 揭示应试者的素质,至少你能 了解应试者所掌握类的水平。市面上流行的面试书籍在 此专业性的分类方面做得不够,正因为如此,《Java 程序员面试宝典 》 一书中追求的是程序员求职背后的一些东西: 对于技术的本质理解,而不仅限于对 Java 技术的单 纯讲解。广泛性 本书包括但不仅限于 Java 程序员面试。对求职市场面 试做了妥善分类后,将面试对象分为软件 开发人员、网络工程师、测试工程师和系统管理员(又包括操作系统管理员和数据库管理员等)实际上市面上流行的面试书籍仅对软件开发。人员比较侧重,而忽略网络工程师和测试工程师,而现 实情况是在诸如趋势科技、思科等公 司的面试中,对网络方面的考题日趋增加,在银行、金融公司 的面试中对系统管理员方面的 考题也占很大的比重。本书就这一方面给出详细论断,并结合大量考 题分析题目特点给出应 试方案。本书将在这些方面做出改进,以适应市场需求。同时本书对外企经常考到的 UML 及设计模式内容也做了深入的分析,并在上一本书《程序员面 试宝典》的基础上从本质 上诠释面试的真谛。真实性 本书的所有面试题都来自 2005—2006 年各大公司的面 试题及培训资料,内容非常新,可以算做 面试者求职前的一份全真模拟。我们希望营造一种 真实的面试氛围,同时作者希望把如何做好一个 职业人,以及作者在职场上所获得的实际感 悟融会在书中,通过真情实感,娓娓道来,指引读者走 上理想的工作岗位。本书不是一本万 能书籍,但却肯定是你工作求职的好助手、好伙伴!本书是程序员面试宝典系列中的一 部,也是上一本《程序员面试宝典》的姊

妹丛书。本书对程 序设计面试中 Java 常见的题型 和常用解答技巧进行了介绍,它不仅能帮助求职者快速复习有相关知 识点,也对现代职业人 如何有效求职、面试考官如何关注求职者动态等做了详细解说。本书通过详 解各大知名公司 技术类(开发、测试、系统管理)面试中的常见 Java 试题,深入浅出地对其解答思 路进行 了分析和指导。希望能把在技术面试中取得的宝贵经验毫无保留地传授给读者,以便使求职 者对程序设计面试中的常见题型应付自如。通过对本书的学习,你会发现和完善有关试题的 最佳解 决方案,以应对不利局面的情况。本书简介 本书是程序员面试宝典系列中的一部,也是上一本《程序员面试宝典》的姊妹丛书。本 书对程序设 计面试中 Java 常见的题型和常用解答技巧进行了介绍,它不仅能帮助求职者快 速复习有相关知识点,也对现代职业人如何有效求职、面试考官如何关注求职者动态等做了 详细解说。本书通过详解各大知名公司技术类(开发、测试、系统管理)面试中的常见 Java 试题,深入浅 出地对其解答思路进行了分析和指导。希望能把在技术面试中取得的宝 贵经验毫无保留地传授给读 者,以便使求职者对程序设计面试中的常见题型应付自如。通过 对本书的学习,你会发现和完善有 关试题的最佳解决方案,以应对不利局面。本书适 合(但不限于)将要找工作的程序和高校计算机类应曲毕业生,以及其他计算机爱好者。目录

第 1 部分 求职过程 第 1 章 应聘求职 第 2 章 简历书写 第 3 章 3 种考试 第 4 章 职业生涯发展规划 第 5 章 3 个求职技巧 第 2 部分 Java 程序设计 第 6 章 Java 程序设计基本概念 第 7 章 异常与反射 第 8 章 传递与引用 第 9 章 循环、条件、概率 第 10 章 Java 内存管理 第 11 章 面向对象 第 12 章 继承与接口 第 13 章 JavaScript 第 14 章 Java 架构技术及相关中间件 第 3 部 分 数据结构和设计模式 第 15 章 字符串 第 16 章 设计模式 第 4 部分 UNIX、Oracle、网络 第 17 章 操作系统 第 18 章 数据库和 SQL 语言 第 19 章 计算机网 络及分布式系统 第 6 部分 Java 开源 第 20 章 J2EE 技术 第 21 章 数据相关 第 22 章 Java 中的 Web 设计 第 23 章 Java 中的网页设计 第 24 章 Struts 结构设计 第 25 章 Java 安全性 第 6 部分 综合面试题 第 26 章 英语面试 第 27 章 电话面试 第 28 章 智力测试 附录 A 简历模板 附录 B 面试经历总结 下载后 点击此处查看更多内容 1


第三篇:java程序员面试宝典_java程序员面试经验

java程序员面试宝典_java程序员面试经验

一些Java软件工程师求职者们,可能因为种种原因,对Java语言及其深层原理掌握不牢固,以至于在面试中犯各种错误。本期乔布简历小编将为大家带来的主题是java程序员面试经验,一起来了解一下java程序员面试宝典吧~

关键词:java程序员面试宝典,java程序员面试经验

以下是一些java程序员面试需要注意的地方:

1、对于此类岗位而言,具体的项目是用人单位招聘时最看重的参考因素。即便是没有工作经验的应届生,也要准备可作为自己能力参考的具体作品。如果从未参加过任何项目,可以准备自己在相关领域的课程设计,如有必要还可以将其修改为完整的项目。对于这份具体作品,求职者要有相当的了解。通过求职者对于该作品的讲解,招聘官会判断求职者的技术能力到底如何。

2、Java程序员要求掌握的技能会比较多,求职者在简历上可以分类依次列举出自己所掌握的专业技能,有证书的列出自己所持有的证书名称。在面试的时候,可以对自己所掌握的技能做出介绍,并辅以实例证明,这样会更具有说服力。

3、基础很重要,不要生疏了。不管应聘什么程序员岗位,基础永远都是最重要的。只有有了踏实的基础,再辅以较好的学习能力,这样才不会被互联网日新月异的变化甩开。很多程序员在面试时往往是因为答不出最基础的问题才会错失工作机会。面试前巩固一下基础知识,永远不要轻视了基础。

程序员要时刻关注技术前沿,将新技术与自己所从事的工作联系到一起,做一些深入思考,面试时谈谈这样的问题也是向面试官展现自己学习能力的好机会~

本文来源简历http://cv.qiaobutang.com/knowledge/articles/5652f8b30cf2a980ccfbcec2

第四篇:JAVA面试宝典,java面试题,java面试指南,java面试必备试题,java程序员必备面试题

考官:java中的反射机制是什么,有什么作用啊?

要点:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以下功能:在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

问题:Java为什么要引入异常处理机制

要点:

程序执行时经常会出现除零溢出、数组越界等运行错误,影响程序的正常执行。错误及异常是不可避免的,一个好的应用程序,在满足用户要求的各种功能的同时,还应具备能预见程序执行过程中可能产生的各种异常的能力,并能为异常情况给予恰当处理。在Java语言中,这种技术就是异常处理 Java语言通过面向对象的异常处理机制来解决运行期间的错误,可以预防错误的程序代码或系统错误所造成的不可预期的结果发生。减少编程人员的工作,增加了程序的灵活性,增加程序的可读性和健壮性.问题:什么是JAVA多线程机制

一.什么是多线程?

多线程是指同时存在几个执行体,按照不同的执行线索共同工作的情况。

二.什么是程序,进程和线程?

程序是一段静态的代码,是应用软件执行的蓝本。

进程是程序的一次动态执行过程,它对应了从代码加载,执行至执行完毕的一个完整的过程。这个过程也是进程本身从生产,发展至消亡的过程。

线程是比进程更小的执行单位。

区别:一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索即每个线程也有其从生产,发展到消亡的过程。

三.线程的生命周期

线程的生命周期可分为四个阶段,新建,运行,中断和死亡。

新建:当一个Thread类或者其子类的对象被声明并创建时,新生成的线程就处于新建装他,有了相应的内存空间和其他资源。

运行:线程被创建之后,就有了运行的条件了,一旦轮到它来享用CPU资源时,便可以摆脱创建它的主进程开始了自己的生命周期。

中断:一个正在执行的线程可能被认为的中断,让出CPU使用权,进入阻塞状态。线程阻塞时,不能进入排队队列,只有当引起阻塞的原因被撤销时,线程才可转入就绪状态,重新进入排队队列中,等待CPU资源,以便从中止处开始运行。

死亡:线程死亡有2种情况,一是正常运行,完成了它全部的工作。另一种是线程被提前强制终止。死亡状态下的线程,释放了被分配的内存。

四.线程的优先级

在java系统中,线程调度依据优先级基础上的“先到先服务”原则。

Thread类的setPriority(int a)方法可设置线程的优先级,取值有Thread.MIN_PRIORITY,Thread.MAX_PRIORITY, Thread.NORM_PRIORITY三种,默认级别为Thread.NORM_PRIORITY.五.如何实现多线程

Java编程中实现多线程有两种方式:一是继承Thread类,用其子类创建线程,二是实现Runnable接口

六.线程同步

当两个或者多个线程同时访问一个变量,并且一个线程需要改变某个变量时,需要对修改数据的方法修饰为synchronized.当一个线程在使用同步方法时需要用到某个变量,而此变量又需要其他线程修改后才能符合本线程需要,此时用wait(),让本线程等待。

其他线程如果在使用同步方法时不需要等待,那么当它使用完该方法后,用notifyAll()方法通知所有由于使用该同步方法而处于等待的线程结束等待,(notify()方法只能通知第一个处于等待的线程结束等待)

七.Interrupt()方法

一个线程在run方法执行完后便会自动消灭,如果想在run方法执完毕前就消灭线程,可以使用interrupt()方法,此时该线程会捕获InterruptedException异常,在处理该异常的语句里告诉线程立刻结束run方法的执行。

问题:java多线程使用cup是什么机制

要点:java获得cup使用权根据优先级,高优先的先执行,这个和操作系统是一样的,但是优先级别的控制是通过虚拟机控制的,然后在执行的时候是通过操作系统时间片的机制,多线程java有自己的调度算法,虚拟机会自动调度执行的线程,而操作系统处理的是cpu的执行,其实两者都有调度算法,xp的机制我想和

1、main方法是怎么写的public static void main(String [] args){}

2、变量的命名规则是怎么样的?

采用驼峰命名法,见名知意,以小写字母开始。

常量命名:全部大写。

方法命名: 小写字母开始,驼峰命名。

类命名:首字母大写。

3、if„else„和写两个if 有什么区别

if„else„只执行其中一条,写两个if,两个都要执行

4、在JAVA中直接写浮点常数,默认是什么类型?

默认是double类型

5、什么是标识符?它的命名规则是什么?

凡是可以命名的地方都叫标识符。

标识符有两种:

1、系统标识符(关键字);

2、用户标识符

以字母、数字、下划线、$复活组成,不能以数字开头

6、什么是变量?

变量是命了名的内存空间,并且空间的值是可以改变的。

7、JDK与JRE分别是什么?

JDK叫java开发工具集,包括编译环境、运行环境、调试环境以及基础类库。

JRE叫java运行环境,包括虚拟机、核心类库、以及健接文件。

8、try-catch-finally三个基本块的作用?catch里的代码是干什么的?

try块表示此处代码可能引发异常

catch块捕获try块的异常

finally块通常用于资源的回收,连接关闭,清理工作等

try-catch-finally不能单独存在,try块后必须跟catch或finally

catch或finally前必须跟try块

9、继承类和实现接口分别怎么做?

继承用extends关键字继承

定义接口用interface关键字

实现接口用implements10、如何去获得字符串的长度?

调用String类的length()方法

11、Java的基本数据类型有哪些?

int 4字节 整型

byte 1字节 整型

char 2字节 整型

short 4字节 整型

long 8字节 整型

double 8字节 浮点

float 4字节 浮点

boolean 布尔

12、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

值传递,Java里没有引用传递

13、列出至少5个最常见到的runtime exception并描述在什么情况下出现

IOException在未找到文件时会抛出

NullPointerExecption在对象引用指向空时会抛出

ArrayIndexOutOfBoundsExecption在数组下标越界时会抛出

NumberFormatException在字符串不能转换成数字时会抛出

ArithmeticException在分母为零时会抛出

14、ArrayList和Vector的区别

vector是线程安全的,所以效率低,Arraylist是线程不安全的,但是效率高。

15、在IO中字节流和字符流的父类是什么?

字节流父类是InputStrean和OutputStream

字符流父类是Reader和Writer16、什么是包?定义包有什么好处?

文件夹。

好处:

1、可以有效的组织相关类;

2、可以做到信息的隐藏。

17、怎么样知道磁盘一个目录中有哪些文件?

1、File对象.list()方法;

2、File对象.listFile()方法。

18、如何获得一定范围的随机整数?

x+Math.random()*y 其中x是位移数,确定最小范围,y是放大系数,确定最大数。

(x-y)*Math.randon()+y19、如何获得java当前的工作目录

使用System.getProperty(“user.dir”)能够获得当前工作目录的字符串地址。

20、怎么样判断一个异常类是checked异常还是unchecked异常?

判断当前异常类,是否是RuntimeException的子类,如果是,则是运行期异常否则是编译期异常。

21、log4j一共有几个级别?分别是哪些?级别的高低有什么样的区别.log4j有五个级别:

DEBUG:调试

INFO:信息

WARN:警告

ERROR:错误

FATAL:崩溃

21、静态变量和成员变量应该怎么访问?

静态变量可以通过对象.和类名.的方式访问

成员变量通过对象.的方式访问

22、如何将一个字符串转成一个基本数据类型

Int x = Integer.parselint(“32”);

Double d = Double.parseDouble(“4.5”);

23、如何让JFrame的初始位置居中(在不同的分辨率中)

窗体对象.setLocationRelativeTo(null);

24、谈谈集合的作用

方便对数据进行 存储,检索,操作,传输。

25、类的修饰符能不能是private、static、protected?

内部类可以,因为内部类相当于外部类的属性

26、Try块中是否所有的语句都一定会执行,为什么?

不是,一但try中发生了异常,那么异常发生处下面的语句就不会执行,专区catch块执行

27、什么时候用继承,什么时候用接口?

当需要重用属性和方法时使用继承

当只需要重用方法时用接口

28、finally是不是什么时候都会执行?

是当虚拟机关闭,System.exit(0),finally内容不会执行;

29、什么是主线程?

当main()方法执行时会产生主线程,1最先开始 2最后结束

3产生其他子线程

4回收资源

30、进行IO流操作时,如果操作的文件不存在会发生什么情况?

读取流在文件不存在时,会抛出文件未找到异常

写入流在文件不存在时,会创建文件,但如果该文件所在目录不存在,同时会抛出文件未找到异常

31、IO流操作的步骤是怎么样的?

创建流 操作流 关闭流

32、finally的作用是什么?

无论是否有异常都会执行的代码块,一般用于资源回收,比如流动关闭、数据库的关闭

34、当一个线程进入一个对象的一个同步方法后,能否进入其它非同步方法? 么?一般在什么时候使用? 可以,但不能进入其他同步方法。

33、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行,什么时候被执行?

Finally{}在程序开启时只执行它本身里的代码。

会执行,在方法返回前执行

35、如何启动线程,它直接调用run()方法有什么区别?

启动线程调用start方法,用start方法启动线程后,是多个线程同时进行,使用run()是普通方法,是不会产生新的线程,是单线程。

36、数组有没有length()这个方法? String有没有length()这个方法?

数组有length属性,String有length方法

37、GC是什么? 为什么要有GC?

GC叫做垃圾回收器,为了回收内存不再使用对象,释放内存空间,避免内存溢出。

38、线程同步化会带什么样的结果?

1:可以使数据安全

2:效率会降低

39、什么是线程安全?

当两个或两个以上线程,访问同一个资源时,为了保证数据的安全,只允许同一时间

只能有一个线程访问该资源。

40、服务器类有一个while循环,能否直接while(true)?

可以,但这样缺乏灵活性,没有办法控制循环结束,最好使用boolean变量来控制

循环的运行和结束。

41、java帮助文档是如何生成的?

Javadoc.exe42、什么时候类名和文件名必须一致?

当类的定义为Public时,类名必须与文件名保存一致

43、如何将实现包装类和基本数据类型转化?

包装转基本1:包装类对象.xxxvalue(值);2直接赋值

基本转包装1: Integer = new Integer(90);2直接赋值

44、类InputStream中方法read()的返回值是什么?读出的是什么?

Read()返回的是int,读取的数据

read(byte[])返回int 当前读取的字节数

45、如果一个类实现一个接口,可不可以不实现接口里定义的所有方法?

可以,但这个类只能是抽象类

46、构造方法和方法有什么区别?构造方法能不能被重载,能不能被重写?

构造方法和雷鸣相同,构造方法没有返回类型,在对象创建时,被调用。

构造方法可以重载,不能重写。

47、请列举switch()括号中能接受的所有数据类型。

Char byte short int48、GUI的布局管理器常见的有哪几种?

绝对布局

边界布局管理器

卡片布局管理器

流布局管理器

网格布局管理器

49、断言有什么作用?

断言是一个布尔表达式,当表达式为真继续执行,表达式为假,则抛出一个断言错误,主要用于测试。

50、String和StringBuffer的区别?

String具有长度不可变的特性,当String做添加、删除修改时,会产生一个新对象

StringBuffer是String类的一个改进版,是缓冲区的一个对象,当对该对象进行字符的添加、修改时,不会产生新对象。

51、接口里方法修符是什么?

Public abstract52、接口里可以定义变量吗?

不行,就可中的变量修饰符是public static final 只能定义常量

53、说几个String常用的方法

String.length()split()substring()equals()indexOf()lastundexOf()

54、在Dos界面下如何编译并执行Java程序?

Javac 文件名

Java 类名

55、创建一个线程有几种方法?

集成 thread 类

实现Runnable接口

56、项目开发的流程是怎么样的?

市场调研,需求分析,概要设计,详细设计,编码,测试,维护。

57、java语言的特点是什么?

简单,面向对象,分布式,健壮,可移植,解释性,安全,多线程,垃圾回收

58、main方法中有个参数String[] args。这个参数的值是由谁传递给它的。执行java类时,由控制台传入

59、java中采用什么字符编码集?char类型能不能放入一个中文字? Unicode 该字符集一个字符有2个字节。,char是两个字节可以放一个中文,因为中文是两个字节

60、byte的取值范围

-128~+127(-2的7次方to2的7次方-1)

61、GET方式和POST方式提交时,流有什么不同?

GET和POST是HTTP协议请求服务器的两种方式

GET方式页面参数,是附加在URL后面。/login?userName=XXX

POST方式,页面的参数是放在流最后的其他x86平台的差不多,

第五篇:Java程序员面试宝典 - Java代码查错

JAVA代码查错

1.abstract class Name { private String name;public abstract boolean isStupidName(String name){} }大侠们,这有何错误?答案: 错。abstract method必须以分号结尾,且不带花括号。

2.public class Something { void doSomething(){ private String s = “";int l = s.length();} }有错吗? 答案: 错。局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。

3.abstract class Something { private abstract String doSomething();}这好像没什么错吧? 答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract method封锁起来呢?(同理,abstract method前不能加final)。

4.public class Something { public int addOne(final int x){ return ++x;} }这个比较明显。

答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。

5.public class Something {

public static void main(String[] args){ Other o = new Other();new Something().addOne(o);}

public void addOne(final Other o){ o.i++;} } class Other { public int i;}和上面的很相似,都是关于final的问题,这有错吗? 答案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference,(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable(成员变量),而o的reference并没有改变。

6.class Something { int i;

public void doSomething(){ System.out.println(”i = “ + i);} } 有什么错呢? 看不出来啊。

答案: 正确。输出的是”i = 0“。int i属於instant variable(实例变量,或叫成员变量)。instant variable有default value。int的default value是0。

7.class Something { final int i;

public void doSomething(){ System.out.println(”i = “ + i);} }和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗? 答案: 错。final int i是个final的instant variable(实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为”final int i = 0;“。

8.public class Something {

public static void main(String[] args){ Something s = new Something();

System.out.println(”s.doSomething()returns “ + doSomething());}

public String doSomething(){ return ”Do something...“;} } 看上去很完美。

答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成”System.out.println(“s.doSomething()

returns

+ s.doSomething());“。同理,static method不能访问non-static instant variable。

9.此处,Something类的文件名叫 OtherThing.javaclass Something {

private static void main(String[] something_to_do){ System.out.println(”Do something...“);} } 这个好像很明显。

答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。

10.interface A{

int x = 0;} class B{ int x =1;}

class C extends B implements A { public void pX(){ System.out.println(x);}

public static void main(String[] args){ new C().pX();} } 答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。

11.interface Playable {

void play();} interface Bounceable { void play();}

interface Rollable extends Playable, Bounceable { Ball ball = new Ball(”PingPang“);}

class Ball implements Rollable { private String name;public String getName(){ return name;}

public Ball(String name){ this.name = name;}

public void play(){

ball = new Ball(”Football“);System.out.println(ball.getName());} }这个错误不容易发现。

答案: 错。”interface Rollable extends Playable, Bounceable“没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的”Ball ball = new Ball(“PingPang”);“。任何在interface里声明的interface variable(接口变量,也可称成员变量),默认为public static final。也就是说”Ball ball = new Ball(“PingPang”);“实际上是”public static final Ball ball = new Ball(“PingPang”);“。在Ball类的Play()方法中,”ball = new Ball(“Football”);“改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在”ball = new Ball(“Football”);“这里显示有错。

JAVA编程题 1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset import java.util.*;public class bycomma{

public static String[] splitStringByComma(String source){ if(source==null||source.trim().equals(”“))

return null;

StringTokenizer commaToker=new tringTokenizer(source,”,“);String[] result = new String[commaToker.countTokens()];int i=0;

while(commaToker.hasMoreTokens()){ result[i] = commaToker.nextToken();i++;} return result;} public static void main(String args[]){

String[] s = splitStringByComma(”5,8,7,4,3,9,1“);int[] ii = new int[s.length];for(int i = 0;i

for(int i=(s.length-1);i>=0;i--){ System.out.println(ii[i]);} } }

2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。package test.format;import java.text.NumberFormat;import java.util.HashMap;public class SimpleMoneyFormat { public static final String EMPTY = ”“;public static final String ZERO = ”零“;public static final String ONE = ”壹“;public static final String TWO = ”贰“;public static final String THREE = ”叁“;public static final String FOUR = ”肆“;public static final String FIVE = ”伍“;public static final String SIX = ”陆“;public static final String SEVEN = ”柒“;public static final String EIGHT = ”捌“;public static final String NINE = ”玖“;public static final String TEN = ”拾“;public static final String HUNDRED = ”佰“;public static final String THOUSAND = ”仟“;public static final String TEN_THOUSAND = ”万“;public static final String HUNDRED_MILLION = ”亿“;public static final String YUAN = ”元“;public static final String JIAO = ”角“;public static final String FEN = ”分“;public static final String DOT = ”.“;

private static SimpleMoneyFormat formatter = null;private HashMap chineseNumberMap = new HashMap();private HashMap chineseMoneyPattern = new HashMap();private

NumberFormat

numberFormat NumberFormat.getInstance();private SimpleMoneyFormat(){

numberFormat.setMaximumFractionDigits(4);numberFormat.setMinimumFractionDigits(2);

= numberFormat.setGroupingUsed(false);chineseNumberMap.put(”0“, ZERO);chineseNumberMap.put(”1“,ONE);chineseNumberMap.put(”2“, TWO);chineseNumberMap.put(”3“, THREE);chineseNumberMap.put(”4“, FOUR);chineseNumberMap.put(”5“, FIVE);chineseNumberMap.put(”6“, SIX);chineseNumberMap.put(”7“, SEVEN);chineseNumberMap.put(”8“, EIGHT);chineseNumberMap.put(”9“, NINE);chineseNumberMap.put(DOT, DOT);chineseMoneyPattern.put(”1“, TEN);chineseMoneyPattern.put(”2“, HUNDRED);chineseMoneyPattern.put(”3“, THOUSAND);chineseMoneyPattern.put(”4“, TEN_THOUSAND);chineseMoneyPattern.put(”5“, TEN);chineseMoneyPattern.put(”6“, HUNDRED);chineseMoneyPattern.put(”7“, THOUSAND);chineseMoneyPattern.put(”8“, HUNDRED_MILLION);} public static SimpleMoneyFormat getInstance(){ if(formatter == null)

formatter = new SimpleMoneyFormat();return formatter;} public String format(String moneyStr){

checkPrecision(moneyStr);String result;

result = convertToChineseNumber(moneyStr);result = addUnitsToChineseMoneyString(result);

return result;}

public String format(double moneyDouble){

return format(numberFormat.format(moneyDouble));}

public String format(int moneyInt){

return format(numberFormat.format(moneyInt));}

public String format(long moneyLong){

return format(numberFormat.format(moneyLong));} public String format(Number moneyNum){

return format(numberFormat.format(moneyNum));

private String convertToChineseNumber(String moneyStr){ String result;

StringBuffer cMoneyStringBuffer = new StringBuffer();for(int i = 0;i < moneyStr.length();i++){

cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1)));

//拾佰仟万亿等都是汉字里面才有的单位,加上它们

int indexOfDot = cMoneyStringBuffer.indexOf(DOT);int moneyPatternCursor = 1;for(int i = indexOfDot1)

cMoneyStringBuffer.delete(cMoneyStringBuffer.length()1, JIAO);

cMoneyStringBuffer.insert(cMoneyStringBuffer.length(), FEN);if(cMoneyStringBuffer.indexOf(”零角零分“)!=-1)//没有零头,加整 cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(”零角零分“), cMoneyStringBuffer.length(), ”整“);

else if(cMoneyStringBuffer.indexOf(”零分“)!=-1)//没有零分,加

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(”零分“), cMoneyStringBuffer.length(), ”整“);else { if(cMoneyStringBuffer.indexOf(”零角“)!=-1)

cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf(”零角“),cMoneyStringBuffer.indexOf(”零角“)+2);

tmpBuffer.append(”整“);

} result = cMoneyStringBuffer.toString();return result;} private void checkPrecision(String moneyStr){ int

fractionDigits

=

moneyStr.length()

-moneyStr.indexOf(DOT)-1;

if(fractionDigits > 2)throw new RuntimeException(”金额“ + moneyStr + ”的小数位多于两位。“);//精度不能比分低

} public static void main(String args[]){ System.out.println(getInstance().format(new Double(10010001.01)));} }

3、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 答:父类:

package test;

public class FatherClass { public FatherClass(){

System.out.println(”FatherClass Create“);} } 子类: package test;

import test.FatherClass;

public class ChildClass extends FatherClass { public ChildClass(){

System.out.println(”ChildClass Create“);}

public static void main(String[] args){ FatherClass fc = new FatherClass();ChildClass cc = new ChildClass();} }

输出结果: C:>java test.ChildClass FatherClass FatherClass Create

ChildClass Create

4、内部类的实现方式? 答:示例代码如下:

package test;

public class OuterClass { private class InterClass { public InterClass(){

System.out.println(”InterClass Create“);} }

public OuterClass(){

InterClass ic = new InterClass();System.out.println(”OuterClass Create“);}

public static void main(String[] args){ OuterClass oc = new OuterClass();}

Create }

输出结果: C:>java test/OuterClass InterClass Create

OuterClass Create 再一个例题:

public class OuterClass { private double d1 = 1.0;//insert code here }

You need to insert an inner class declaration at line 3.Which two inner class declarations are valid?(Choose two.)

A.class InnerOne{ public static double methoda(){return d1;} } B.public class InnerOne{ static double methoda(){return d1;} } C.private class InnerOne{ double methoda(){return d1;} } D.static class InnerOne{ protected double methoda(){return d1;} } E.abstract class InnerOne{ public abstract double methoda();} 说明如下: 一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故 A、B 错 二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。故 D 错 三.非静态内部类的非静态成员可以访问外部类的非静态变量。故 C 正确 四.答案为C、E

5、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?

答:Server端程序: package test;import java.net.*;import java.io.*;public class Server { private ServerSocket ss;private Socket socket;private BufferedReader in;private PrintWriter out;public Server(){ try {

ss=new ServerSocket(10000);while(true){

socket = ss.accept();String

RemoteIP

= socket.getInetAddress().getHostAddress();String RemotePort = ”:“+socket.getLocalPort();System.out.println(”A in!IP:“+RemoteIP+RemotePort);in

=

new

BufferedReader(new client

come InputStreamReader(socket.getInputStream()));String line = in.readLine();

System.out.println(”Cleint send is :“ + line);out

=

new PrintWriter(socket.getOutputStream(),true);out.println(”Your Message Received!“);out.close();in.close();socket.close();}

}catch(IOException e){ out.println(”wrong“);} }

public static void main(String[] args){ new Server();} }

Client端程序: package test;import java.io.*;import java.net.*;public class Client { Socket socket;BufferedReader in;PrintWriter out;public Client(){ try {

System.out.println(”Try to Connect to 127.0.0.1:10000“);socket = new Socket(”127.0.0.1“,10000);System.out.println(”The Server Connected!“);System.out.println(”Please enter some Character:");BufferedReader

line

=

new

BufferedReader(new InputStreamReader(System.in));

out = new PrintWriter(socket.getOutputStream(),true);Out

3、接口和内部类、抽象类的特征答:接口:在一个类里,只有申明没有实现。内部类:是在一个类的内部定义的一个类;抽象类:是以abstract 定义的,里面至少有一个抽象方法。

4、文件读写的基本类

答:File Reader 类和FileWriter类分别继承自Reader类和Writer类。FileReader类用于读取文件,File Writer类用于将数据写入文件,这两各类在使用前,都必须要调用其构造方法创建相应的对象,然后调用相应的read()或 write()方法。

6、线程的基本概念、线程的本状态以及状态之间的关系 ?新建(Born): 新建的线程处于新建状态?就绪(Ready): 在创建线程后,它将处于就绪状态,等待 start()方法被调用?运行(Running): 线程在开始执行时进入运行状态?睡眠(Sleeping): 线程的执行可通过使用 sleep()方法来暂时中止。在睡眠后,线程将进入就绪状态?等待(Waiting): 如果调用了 wait()方法,线程将处于等待状态。用于在两个或多个线程并发运行时。?挂起(Suspended): 在临时停止或中断线程的执行时,线程就处于挂起状态。?恢复(Resume): 在挂起的线程被恢复执行时,可以说它已被恢复。?阻塞(Blocked)– 在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态。?死亡(Dead)– 在 run()方法已完成执行或其 stop()方法被调用之后,线程就处于死亡状态。

5、串行化的注意事项以及如何实现串行化答:如果有循环引用是不可以串行化的。对象输出流的WriteObject方法和 对象输入流的ReadObect 方法

7、线程的同步、如何实现线程的同步答:当两个或多个线程同时访问同一个变量,并且以个线程需要修改这个变量。就要用到线程同步。在Java 中,同步是通过 synchronized 关键字来定义的。诺是想同步化某程序段,可以使用 synchronized(object){}方法,其中{}内的程序语句被同步化。

9、socket通信(tcp/udp区别及JAVA的实现方式)TCP——传输控制协议,具有极高的可靠性,保证数据包按照顺序准确到达,但其也有着很高的额外负担。UDP——使用者数据元协议,并不能保证数据包会被成功的送达,也不保证数据包到达的顺序,但其传输速度很快。大多数我们会使用TCP,偶尔才会动用UDP,如声音讯号,即使少量遗失,也无

关紧要。

10、JAVA的事件委托机制和垃圾回收机制

java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。垃圾回收机制 垃圾收集是将分配给对象但不在使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则次对象适合进行垃圾回收

11、JDBC调用数据库的基本步骤导入必要的类,装入JDBC驱动程序,识别数据源,分配一个Connection对象,分配一个Statement对象,使用Statement执行一个查询,从返回的ResultSet对象中检索数据,关闭ResultSet,关闭Statement对象,关闭Connection对象

12、解析XML文件的几种方式和区别答:Dom解析 在内存中创建一个DOM树,能随机访问文件内容,也可以修改原文件内容SAX解析 线性解析,不能随机访问,也无法修改原文件Dom解析要先用SAX解析创建DOM树

13、JAVA的四种基本权限的定义public private protected 默认

14、JAVA的国际化 答:Java 中提供了诺干国际化明感类,来实现国际化的。例如:dateformat timezone 等等。

下载Java程序员面试宝典word格式文档
下载Java程序员面试宝典.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    Java程序员面试宝典 - 最常用的编程风格

    描述一下你最常用的编程风格 (1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母......

    JAVA程序员面试技巧

    java程序员面试题 第一部分:选择题 question no: 1 1、public class test { public static void changestr(string str){ } public static void main(string[] args)......

    java程序员面试必读

    Java程序员,面试必读☆★☆★快来!!10月25日读者见面会☆★☆★ 清华大学出版社《Java程序员,上班那点事儿》作者:钟声 章节:1.2.2: 面试是一个“简单”而又“复杂”的事情,正因为......

    java程序员面试要点

    第一,谈谈final, finally, finalize的区别。 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。fina......

    Java程序员面试(大全5篇)

    Java程序员面试三十二问第一,谈谈final, finally, finalize的区别。 Fanal 修饰符 可以修饰类,属性和方法。 被修饰的类不可以派生子类,不能被作为父类被继承。它修饰的属性......

    程序员面试个人简历(JAVA)

    个人简历 基本信息: 姓名:张三 性别:女 年 龄:23 工作经验:2年 专业:软件技术 教育程度:专科 联系电话:xxxxxxxxx E-mail: xxxxxxxxxxx@126.com 职业技能与特长: 熟练掌握java语言,......

    Java程序员面试干货

    有了这些,还害怕面试么? 不管你是学生还是工作者,多多少少都对面试感到困扰和无奈,为啥你总是被拒绝?为何面试官屡屡刁难让你不知所措?原因是因为你不知道回答的技巧,怎样回答面试......

    java程序员面试必备问答汇总

    什么是类与对象? 所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。 类是具备某些共同特征的实体的集合,它......