Java面试常问题目.docx
- 文档编号:2815643
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:21
- 大小:253.92KB
Java面试常问题目.docx
《Java面试常问题目.docx》由会员分享,可在线阅读,更多相关《Java面试常问题目.docx(21页珍藏版)》请在冰豆网上搜索。
Java面试常问题目
Java类别问题
1.String与StringBuilder、StringBuffer的区别
如果要操作少量的数据用=String
单线程操作字符串缓冲区下操作大量数据=StringBuilder
多线程操作字符串缓冲区下操作大量数据=StringBuffer
2.Collection类,Collection包结构,与Collections的区别
Collection是集类,包含List有序列表,Set无序集合以及Map双列集合
Collection是集合类的上级接口,子接口主要有Set和List、Map。
Collections是针对集合类的一个帮助类,提供了操作集合的工具方法:
一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
3.java哪些集合类是线程安全的
vector:
就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。
在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
statck:
堆栈类,先进后出
enumeration:
枚举,相当于迭代器
hashtable:
就比hashmap多了个线程安全
4.线程安全是什么意思
就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问
5.九种基本数据类型的大小,以及他们的封装类。
java提供了一组基本数据类型,包括boolean,byte,char,short,int,long,float,double,void.同时,java也提供了这些类型的封装类,分别为Boolean,Byte,Character,Short,Integer,Long,Float,Double,Void
既然提供了基本类型,为什么还要使用封装类呢
比如,如果想使用List来保存数值,由于List中只能添加对象,另外,有些情况下,我们也会编写诸如func(Objecto)的这种方法
6.Switch能否用string做参数
在Java7之前,switch只能支持byte、short、char、int或者其对应的封装类以及Enum类型。
在Java7中,String支持被加上了。
7.equals与==的区别。
1.==是一个运算符。
2.Equals则是Object对象的方法,可以.(点)出来。
8.Java的四种引用,强弱软虚,用到的场景
1.强引用,这是使用最普遍的引用。
如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。
当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。
2.软引用,如果一个对象只具有软引用,那就类似于可有可无的生活用品。
如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。
3.弱引用,如果一个对象只具有弱引用,那就类似于可有可无的生活用品。
弱引用与软引用的区别在于:
只具有弱引用的对象拥有更短暂的生命周期。
在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
4.虚引用,"虚引用"顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。
如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。
9.Hashcode的作用
Hashcode这个方法是用来鉴定2个对象是否相等的,hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。
10.ArrayList、LinkedList、Vector的区别
ArrayList,Vector底层是由数组实现,LinkedList底层是由双线链表实现,从底层的实现可以得出它们的性能问题,ArrayList,Vector插入速度相对较慢,查询速度相对较快,而LinkedList插入速度较快,而查询速度较慢。
再者由于Vevtor使用了线程安全锁,所以ArrayList的运行效率高于Vector。
11.Map、Set、List、Queue、Stack的特点与用法
Set集合类似于一个罐子,"丢进"Set集合里的多个对象之间没有明显的顺序。
List集合代表元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。
Stack是Vector提供的一个子类,用于模拟"栈"这种数据结构(LIFO后进先出)
Queue用于模拟"队列"这种数据结构(先进先出FIFO)。
Map用于保存具有"映射关系"的数据,因此Map集合里保存着两组值
12.HashMap和HashTable的区别
Hashtable是基于陈旧的Dictionary类的,HashMap是Map接口的一个实现
Hashtable的方法是线程同步的,而HashMap的方法不是。
只有HashMap可以让你将空值作为一个表的条目的key或value
13.TreeMap、HashMap、LindedHashMap的区别
Hashmap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序
TreeMap取出来的是排序后的键值对。
但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
14.trycatchfinally,try里有return,finally还执行么
a.不管有木有出现异常,finally块中代码都会执行
b.当try和catch中有return时,finally仍然会执行
c.finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的
d.finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值
15.OOM你遇到过哪些情况
java.lang.OutOfMemoryError:
Javaheapspace------>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。
java.lang.OutOfMemoryError:
PermGenspace------>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。
java.lang.StackOverflowError------>不会抛OOMerror,但也是比较常见的Java内存溢出。
JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。
可以通过虚拟机参数-Xss来设置栈的大小。
16.Java面向对象的三个特征与含义
封装性:
它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到
继承性:
子类通过一种方式来接受父类所有的公有的,受保护的成员变量和成员方法
多态性:
程序在运行的过程中,同一种类型在不同的条件下表现不同的结果
17.Override和Overload的含义去区别
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型。
18.Interface与abstract类的区别
接口可以多重继承,抽象类不可以
接口定义方法,不给实现;而抽象类可以实现部分方法
接口中基本数据类型的数据成员,都默认为static和final,抽象类则不是
19.Staticclass与nonstaticclass的区别
内部静态类不需要有指向外部类的引用。
但非静态内部类需要持有对外部类的引用。
非静态内部类能够访问外部类的静态和非静态成员。
静态类不能访问外部类的非静态成员。
他只能访问外部类的静态成员。
一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。
20.java多态的实现原理
ⅰ.设计时多态:
方法【重载】实现的多态
ⅱ.运行时多态:
方法【重写】实现的多态
21.实现多线程的两种方法:
Thread与Runable
使用Runnable接口
实际工作中,几乎所有的多线程应用都用实现Runnable这种方式。
Runnable适合多个相同程序代码的线程去处理同一资源的情况。
把虚拟CPU(线程)同程序的代码、数据有效的分离,较好的体现了面向对象的设计思想。
避免由于Java的单继承特性带来的局限性。
也就是如果新建的类要继承其他类的话,因为JAVA中不支持多继承,就只能实现java.lang.Runnable接口。
有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
继承Thread类
不能再继承他类了。
编写简单,可以直接操纵线程,无需使用Thread.currentThread()。
22.线程同步的方法:
sychronized、lock、reentrantLock等
sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类,在修饰代码块的时候需要一个reference对象作为锁的对象,在修饰方法的时候默认是当前对象作为锁的对象,在修饰类时候默认是当前类的Class对象作为锁的对象.
ReentrantLock除了synchronized的功能,多了三个高级功能.
等待可中断,在持有锁的线程长时间不释放锁的时候,等待的线程可以选择放弃等待
公平锁,按照申请锁的顺序来一次获得锁称为公平锁.synchronized的是非公平锁,ReentrantLock可以通过构造函数实现公平锁
绑定多个Condition.通过多次newCondition可以获得多个Condition对象,可以简单的实现比较复杂的线程同步的功能.通过await(),signal();
23.Java锁的等级
方法锁,synchronized标记的方法
对象锁,在方法上加了synchronized的锁,或者synchronized(this)的代码段
类锁,在代码中的方法上加了static和synchronized的锁,因为在静态方法中加同步锁会锁住整个类
24.写出生产者消费者模式
阻塞队列实现生产者消费者模式超级简单,它提供开箱即用支持阻塞的方法put()和take(),开发者不需要写困惑的wait-nofity代码去实现通信。
BlockingQueue一个接口,Java5提供了不同的现实,如Array
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面试 题目