java面试题
最近总结了一下Java的面试题
jessonlv--吕国栋原创文章,转载请注明出处:http://blog.csdn.net/jessonlv
1、面向对象的特征
抽象、封装、继承、多态性
2、String和StringBuffer、StringBuilder 的区别
String 字符串常量,每当值改变时就等于新生成了一个对象。
StringBuffer 字符串变量,它在赋值的时候都是对对象本身进行操作,而不是像string一样生成新的对象,
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作
StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现
中,它比 StringBuffer 要快。两者的方法基本相同。
3、ArrayList、Vector、LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,ArrayList数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
4、Abstract class 和 interface 的区别
interface被继承时用的关键字是implements,而且可以同时implements多个interface,而abstract class被继承时用的关键字是extends,而且只能同时extends一个abstract class。
interface内定义的方法都是public的,而abstract class内的则不一定。
interface内定义的成员对象都是static & final的,而abstract class不是
interface的方法不能有默认实现,只有一个申明,而abstract class内申明abstract的方法不能有实现,非申明abstract的方法可以有默认实现。
interface被implements时,所有方法都必须被实现,必须申明是public的,而abstract class被extends时只有abstract的方法才必须被实现,别的有默认实现的直接被继承过来
5、heap 和 stack 的区别
引用网上广泛流传的“Java堆和栈的区别”里面对堆和栈的介绍;
"Java 的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。"
“栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 ”
6、table标签的 border、cellpadding td标签的 colspan 和rowspan分别什么作用
border 边框 cellpadding 内边距 colspan 单元格横跨的列数 rowspan:规定单元格可横跨的行数
7、js的三种消息弹出提醒 警告 确认 信息输入
alert() confirm() prompt()
8、编写一个方法,求一个字符串的字节长度
由于Java是基于Unicode编码的,因此,一个汉字的长度为1,而不是2。但有时需要以字节单位获得字符串的长度。例如,“123abc长城”按字节长度计算是10,而按Unicode计算长度是8。为了获得10,需要从头扫描根据字符的Ascii来获得具体的长度。如果是标准的字符,Ascii的范围是0至255,如果是汉字或其他全角字符,Ascii会大于255。因此,可以编写如下的方法来获得以字节为单位的字符串长度。
public int getWordCount(String s){ int length = 0; for(int i = 0; i < s.length(); i++) { int ascii = Character.codePointAt(s, i); if(ascii >= 0 && ascii <=255) length++; else length += 2; } return length; }
当然,也可以采用正则表达式来简化上面的方法,代码如下:
public int getWordCount(String s) { s = s.replaceAll("[^\\x00-\\xff]", "**"); int length = s.length(); return length; }
9、谈谈 innerHTML、outerHTML、innerText 之间的区别
outerHTML包括整个标签,而不仅限于标签内部的内容。对于一个id为"testdiv"的div来说,outerHTML、innerHTML以及innerTEXT三者的区别可以通过下图展示出来: