没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Java 面试题
一、 面向对象的特征有那些?三大特征就是(继承、封装、多态性)
1、 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分的注意与当
前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不
用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2、 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确
表述共性的方法。对象的一个新类可以冲现有的类中派生,这个过程称为类继承。新
类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类
(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加
新的方法使之更适合特殊的需要。
3、 封装:封装就是把过程和数据包围起来,对数据的访问只能通过已定义的界面,面向
对象计数始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,
这些对象通过一个受保护的接口访问其他对象。
4、 多态性:是指允许不同的类的对象对同一消息做出响应。多态性包括参数化多态性和
包含多态性。多态性语音具有灵活、抽象、行为共享、代码共享的优势,很好的解决
了应用程序函数同名的问题。
二、 String 是基本的数据类型吗?
1、 Java 的基本数据类型包括 byte、int、char、long、float、double 和 short。
2、 java.lang.String 类是 final 类型的,因此不能继承和修改这个类,为了提高效率
节省空间,我们应该使用 StringBuffer 类。
三、 基本数据类型及转换
char
16-bit
Unicode 0
Unicode216-1
Character
byte
8-bit
-128
+127
Byte
short
16-bit
-215
+215-1
Short
int
32-bit
-231
+321-1
Integer
long
64-bit
-263
+263-1
Long
float
32-bit
IEEE754
IEEE754
Float
double
64-bit
IEEE754
IEEE754
Double
四、 String 和 StringBuffer,StringBuild 的区别。
1、 String 和 StringBuffer,它们可以存储和操作字符串,即包含多个字符的字符数据。
2、 这个 String 类提供了数值不可改变的字符串,而这个 StringBuffer 类提供的字符串可
以进行修改,可以使用这个 StringBuffer 来动态构造字符数据。
3、 StringBuild 是 jdk1.5 后用来替换 StringBuffer 的一个类,大多数时候可以替换
StringBuffer。和 StringBuffer 的区别在于 StringBuild 是一个单线程使用的类,不
执行线程,同步所以比 StringBuffer 速度快,效率高,是非线程安全的。
五、 说出 ArrayList,Vector,LinkedList 的存储性能和特性
ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据
以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动
等内存操作,所以索引数据快而插入数据慢,Vector 由于使用 synchronized 方法(线程安
全),通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引需要
进行前向或后向遍历,但是插入数据时只需要记录本项的前后即可,所以插入速度较快。
六、 HashMap 和 HashTable 的区别。
1、 HashMap 是 HashTable 的轻量级实现(非线程安全的实现),它们走完成了 Map 接口。
2、 HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于 HashTable。
3、 HashMap 允许将 null 作为一个 entry 的 key 或者 value,HashTable 不允许。
4、 HashMap 把 HashTable 的 contains 方法去掉了,改成 containsKey 和 containsVaule。
因为 contains 方法容易让人误会。
5、 HashTable 继承自 Dictionary 类,而 HashMap 是 java1.2 引进的 Map interface 的一个
实现。
6、 HashTable 的方法是 Synchronize 的,而 HashMap 的不是,在多个线程访问 HashTable
时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。
七、 final,finally,finalize 的区别
1、 final-修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,
不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。
将变量或方法声明为 final,可以保证它们在使用过程中不被改变。被声明为 final 变
量必须在声明时给定初值,而在以后的引用中只能读取,不能修改。被声明为 final 的
方法也是只能使用,不能重载。
2、 finally-在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么
相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
3、 finalize-方法名。Java 技术允许使用 finalize()方法在垃圾收集器将对象从内存中清
除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时
对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖
finalize()方法以整理系统资源或执行其他清理工作。finalize()方法是在垃圾收集器
删除对象之前对这个对象调用的。
八、 Overlord 和 Override 的区别。Overlorded 的方法是否可以改变返回值的类型?
1、 方法重写 overriding 和重载 overlording 是 Java 多态性的不同表现。
2、 重写 overriding 是父类与子类之间多态性的一种表现:如果在子类中定义某方法与
其父类有相同的名称和参数,我们说该方法被重写了。如子类的对象使用这个方法
时,将调用子类中定义的,对它而言,父类中的方法如同被屏蔽了。
3、 重载 overlording 是一个类中多态性的一种表现:如果在一个类中定义了多个同名
的方法,它们或有不同的参数个数或有不同的参数类型,这样称为方法的重载。
4、 Overlorded 是可以改变返回值的类型的。
九、 abstract class 和 interface 有什么区别?
1、抽象类:抽象类是特殊的类,只是不能被实例化;除此之外,具有类的其他特性;重
要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明在抽象类
中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,
可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
2、接口:接口是应用类型的,类似于类,更和抽象类有所相似,以至于很多人对抽象类
和接口的区别比较模糊,接口除了可以包含方法外,还可以包含属性、索引器、事件,
而且这些成员都被定义为公有的。除此之外,不能包含任何其他成员,例如:常量、
域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但是只能继承
一个类(包括抽象类)。
3、抽象类与接口的相似之处
a)不能实例化;
b)包含未实现的方法声明;
c)派生类必须实现未实现的方法,抽象类是抽象方法,接口的所有成员。
4、抽象类与接口的区别
a)接口可以多重继承,抽象类不可以;
b)接口定义方法,不给实现,抽象类可以实现部分方法;
c)接口中基本数据类型的数据成员,都默认为 static 和 final 的,抽象类则不是;
d)如果事先知道某种东西会成为基础类,那么第一选择就是把它变成一个接口;
e)只有在必须使用方法定义或者成员变量的时候,才考虑抽象类。
十、 short s1=1;s1=s1+1;有什么错?short s1=1;s1 +=1; 有什么错?
short s1=1;s1=s1+1;(s1+1 是 int 类型的,需要进行强制转换)
short s1=1;s1 +=1;(可以正确运行)
十一、 Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
Math.round(11.5)=12; Math.round(-11.5)=-11;
Round 方法返回与参数最近的长整数,参数加 1/2 后求其 float。
十二、 String s=new String(“xyz”);创建了几个 String object?Java 有没有 goto?
1、 创建了两个对象,一个是“syz”,一个是指向“syz”的引用对象 s。
2、 goto 是 Java 中的保留字,现在没有在 java 中使用。
十三、 启动一个线程是用 run()还是 start()?
启动一个线程是调用 start()方法,使线程所代表的虚拟处理机处于可运行状态,
这意味着它可以有 JVM 调度并执行。这并不意味着线程就好立即运行,run()方法可以
产生必须退出的标志来停止一个线程。
十四、 JVM 是什么?
1、 JVM 是 Java 虚拟机,它是一个虚构出来的计算机,是通过在实际的计算机上仿真
模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈、
寄存器等,还具有相应的指令系统。Java 语言最重要的特点就是跨平台运行,使
用 JVM 就是为了支持与操作系统无关,实现跨平台。
2、 JVM 的原理:JVM 是 Java 的核心和基础,在 java 编译器和 OS 平台之间的虚拟处
理器,它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平
台,可以在上面执行 java 的字节码程序。
3、 JVM 执行程序的过程
a) 加载.class 文件;
b) 管理并分配内存;
c) 执行垃圾收集;
d) JRE(java 运行时环境)由 JVM 构造的 java 程序的运行环境,也是 java 程序的
运行环境,但是它同时一个操作系统的一个应用程序一个进程,因此它也有它
自己的生命周期,也有自己的代码和数据空间。JVM 在整个 jdk 中处于最底层,
负责于操作系统的交互,用来屏蔽操作系统环境,提供一个完整的 Java 运行环
境,因此也就是虚拟计算机。操作系统装入 JVM 是通过 jdk 中的 Java.exe 来完
成,通过下面 4 步来完成 JVM 环境:(1、创建 JVM 装载环境和配置;2、装载`
JVM.dll;3、初始化 JVM.dll 并挂界到 jnienv(jni 调用接口)实例;4、调用
jnienv 实例装载并处理 class 类)。
4、 JVM 的声明周期
1) JVM 实例对应了一个独立运行的 java 程序,它是进程级别
a) 启动:启动一个 java 程序时,一个 JVM 实例就产生了,任何一个拥有 public
static void main(String[] args)函数的 class 都可以作为 JVM 实例运行的起
点。
b) 运行:main()作为该程序初始线程的起点,任何其他线程都由该线程启动。
JVM 内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护
线程通常由 JVM 自己使用,java 程序也可以表明自己创建的线程是守护线程。
c) 消亡:当程序中的所有非守护线程都终止时;JVM 才退出,若安全管理器允
许,程序也可以使用 Runtime 类或者使用 System.exit();来退出。
2) JVM 执行引擎实例则对应了属于用户运行程序的线程它是线程级别的。
十五、 应用服务器都有哪些?
BEA WebLogic Server、IBM WebSphere Application Server、Oracle9i
Application Server、jBoss、Tomcat。
十六、 Tomcat 下部署项目
在 Tomcat 中部署 Java web 应用程序有两种方式:静态部署和动态部署。
1、静态部署: 静态部署指的是我们在服务器启动之前部署我们的程序,只有在启动
服务器之后,我们的 web 应用程序才能访问。
2、动态部署:动态部署是指可以在启动服务器之后部署 web 应用程序,而不用重新启
动服务器。
十七、 heap 和 stack 有什么区别?
1、 栈是一种线性集合,栈按照后进先出的方式进行处理
2、 第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,
使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计
的方方面面都有体现。
3、 第二,堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线
程访问同一个对象)。这种共享的收益是很多的。一方面这种共享提供了一种有
效的数据交互方式(如:共享内存),另一方面,堆中的共享常量和缓存可以被
所有栈访问,节省了空间。
4、 第三,栈因为运行时的需要,比如保存系统运行的上下文,需要进行地址段的划
分。由于栈只能向上增长,因此就会限制住栈存储内容的能力。而堆不同,堆中
的对象是可以根据需要动态增长的,因此栈和堆的拆分,使得动态增长成为可能,
相应栈中只需记录堆中的一个地址即可。
5、 第四,面向对象方式的程序与以前结构化的程序在执行上没有任何区别。但是,
面向对象的引入,使得对待问题的思考方式发生了改变,而更接近于自然方式的
思考。当我们把对象拆开,你会发现,对象的属性其实就是数据,存放在堆中,
而对象的行为(方法),就是运行逻辑,放在栈中。我们编写对象的时候,其实
即编写了数据结构,也编写了处理数据的逻辑。
十八、 forward 和 redirect 的区别?
1、 forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应
内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的
内容是从哪来的,所以它的地址栏中还是原来的地址。
2、 redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地
址,一般来说浏览器会用刚才请求的所有参数重新请求,所以 session,request
参数都可以获取。
十九、 Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是
equals()?它们有何区别?
1、使用 iterator()方法来区分重复与否。
剩余34页未读,继续阅读
资源评论
梦想是优秀社畜
- 粉丝: 63
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功