《20170420整理java面试题》由会员分享,可在线阅读,更多相关《20170420整理java面试题(15页珍藏版)》请在金锄头文库上搜索。
1、问: 八大基本数据类型byte,short,int,long,float,double,char,boolean问: heap 和 stack 有什么区别。java 的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用 new 创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用 final 修饰后,放在堆中,而不是栈中。问: 请设计一
2、个一百亿的计算器,你首先想到用哪种数据类型? java.math.BigInteger问: instanceof 是什么,作用是什么?instanceof 是比较运算符,判断某个对象是否属于某个类,返回的结果是 boolean 类型。问: break 和 continue 的区别break:跳出循环体continue:忽略本次循环,进行下次循环问: 在 JAVA 中如何跳出当前的多重嵌套循环?1. 在 Java 中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的 break 语句,即可跳出外层循环。2. 利用内部循环中更改一个变量, 令其跳出外层循
3、环. 问: 说说&和&的区别.问: char 型变量中能不能存贮一个中文汉字?为什么?.char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以,char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 编码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。问: 是否可 以从一个 static 方法内部发出对非 static 方法的调用?为什么?不可以。因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 static 方法调用时不需要创建对象,可以直
4、接调用。也就是说,当一个 static 方法被调用时,可能还没有创建任何实例对象,如果从一个 static 方法中发出对非 static 方法的调用,那个非 static 方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个 static 方法内部发出对非 static 方法的调用。问: Overload 和 Override 的区别。Overload 是重载的意思,Override 是覆盖的意思,也就是重写。重载 Overload 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。重写 Override 表示子类中的方法可以与父类中的某个方法的
5、名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。问: j ava 中实现多态的机制是什么?靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定
6、义的方法。问: abstractclass 和 interface 有什么区别?.问: String 和 StringBuffer 的区别JAVA 平台提供了两个类:String 和 StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个 String 类提供了数值不可改变的字符串。而这个 StringBuffer 类提供的字符串进行修改。问: try 里有一个 return 语句,那么紧跟在这个 try 后的 finally里的 code 会不会被执行,什么时候被执行,在 return 前还是后?finally 中的代码比 return 和 break 语句后执行
7、问: f inal,finally, finalize 的区别。final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成 final 类型,例如,一段代码finally 是异常处理语句结构的一部分,表示总是执行。finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM 不保证此方法总被调用问: 请写出你最常见到的 5 个 runtimeexception。.问: JAVA 语言如何进行异常处理,关键字:throws,thr
8、ow,try,catch,finally 分别代表什么意义?.问: Java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? 继承 Thread 类 实现 Runnable 接口 synchronized问: sleep()和 wait() 有什么区别?sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep 不会释放对象锁。 wait 是Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出 notify 方法(或 noti
9、fyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。问: 当一个线 程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法? No问: 什么是死锁.当两个线程同时持有对方所需要的同步资源, 并且需要获得对方资源才能释放对象锁的情况下,造成的死锁. 问: List、Map、Set 三个接口,存取元素时,各有什么特点?List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存 key-value 值,value 可多值问: 说出 ArrayList,Vector, LinkedList 的存储性能和特性ArrayL
10、ist 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢.Vector 由于使用了 synchronized 方法(线程安全),通常性能上较 ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。LinkedList 也是线程不安全的,LinkedList 提供了一些方法,使得 LinkedList 可以被当作堆栈和队列来使用。问: 两 个
11、对象值相同(x.equals(y)= true),但却可有不同的 hash code,这句话对不对? 这句话是对的。两个对象值相同(x.equals(y)=true),说明 equals 方法是被重新过的,如果没有重写过equals 方法,那么 x.equals(y)比较的是地址,重写过,比较的就是值了,所以结果才为true。同样的呀,如果没有重写 hashcode()方法,那么它们的 hashcode 是不同的,重写了就相同。问: 说出一些常用的类,包,接口,请各举 5 个常用的类:BufferedReader BufferedWriter FileReader FileWirter Str
12、ing Integerjava.util.Date,System,Class,List,HashMap常用的包:java.lang java.io java.util java.sql,javax.servlet,org.apache.strtuts.action,org.hibernate常用的接口:Remote List Map Document NodeList,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、Session(Hibernate),HttpSession问: 字节流与字符流的区别字
13、符流的底层就是字节流。而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容。而字节流读取单位为 byte.byte 作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等。问: 什么是 java 序列化,如何实 现 java 序列化?或者请解释 Serializable 接口的作用。我们有时候将一个 java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个java 对象,例如,要将 java 对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个 java 对象变成某个格式的字节流再传输,但是,
14、jre 本身就提供了这种支持,我们可以调用 OutputStream 的 writeObject 方法来做,如果要让 java 帮我们做,要被传输的对象必须实现 serializable 接口,这样,javac 编译时就会进行特殊处理,编译的类才可以被 writeObject 方法操作,这就是所谓的序列化。需要被序列化的类必须实现Serializable 接口,该接口是一个 mini 接口,其中没有需要实现的方法,implementsSerializable 只是为了标注该对象是可被序列化的。问: 什么是 单例模式? 如何实现单例模式单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统
15、提供这个实例。第一种:饱汉模式public classSingleTon private SingleTon()/实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间 private final static SingleTon instance =new SingleTon();public static SingleTon getInstance() return instance;第二种:饥汉模式public classSingleTon private SingleTon()private static instance = null;/newSingleTon();publ
16、ic static synchronized SingleTongetInstance()if(instance = null)instance = new SingleTon();return instance;问: HTTP 请 求的 GET 与 POST 方式的区别1、Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据。 2、Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在 form 的数据体中, 按照变量和值相对应的方式,传递到 action 所指向 URL。 3