1、面向对象编程的特点?
封装:把属性私有化封装在一个类里面,只能通过方法去访问。
继承:子类继承父类,从而继承了父类的方法和属性。
抽象:比如一个学生类,抽象出了学号SNO、和名字SNAME这些属性,使得开发过程中更加易于理解。
多态:多态分操作符的多态和类的多态。类的多态指父类引用指向子类对象,而且有继承,有重写。
2、String是最基本的数据类型吗?
String是类类型,不是基本类型。
有8种基本类型:
整型:byte 8位 -128 ~ 127
short 16位 -32768 ~ 32767
int 32位 -2^31-1 ~ 2^31
long 64位
浮点型:float 32位,1位符号位,8位指数,23位有效尾数。
double 64位,1位符号位,11位指数,52位有效尾数。
字符类型:char 16位(整数类型)
布尔类型:boolean
3、int 和 Integer有什么区别
int 是基本类型32位长度整型
Integer 是类类型,是 int 的封装类
int 和 Integer 之间可以通过 自动装箱 和 自动拆箱 互相转换
4、String、StringBuffer和StringBuilder的区别
String:字符串常量,字符串长度不可变。Java中的String是immutable(不可变)的。
StringBuffer:字符串变量(可带synchronized关键字保证线程安全)。如果要频繁对字符串内容进行修改,出于效率的考虑最好使用StringBuffer。append 和 insert 方法是StringBuffer的主要操作。append 方法吧字符添加到缓冲区末端,而insert 方法则在指定的点添加字符。
StringBuilder:字符串变量(无法保证线程安全)。在内部,StringBuilder对象被当作是一个包含字符序列的变长数组。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。
总结:
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
5、String 能否被继承
不能。一下为一小段源码。String被修饰成final。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
/* ...... ...... ...... */
}
6、Linux 查看文件内容的命令
cat:从第一行开始显示内容,并将所有的内容输出。
tac:从最后一行开始显示内容,并将所有的内容输出。
head:只显示前几行。
tail:只显示后几行。
nl:和 cat 一样,只是nl要显示行号。
7、HashMap 和 Hashtable的区别
8、GC是什么? 为什么要有GC?
GC 是 Garbage Collection 的缩写。即垃圾回收。这里所谓的垃圾,指的是那些不再被使用的对象,JVM的垃圾回收机制使得开发人员从无聊、容易犯错的手动释放内存资源的过程中解放出来。开发人员可以更加专注的进行业务功能的开发,而资源回收的工作交由更加专业的垃圾回收机制自动完成。
9、常见的runtime exception
NullPointException 空指针异常
ArithmeticException 算术异常,比如除数为 0
ClassCastException 类型转换异常
ConcurrentModificationException 同步修改异常,遍历一个集合的时候,删除集合的元素,就会抛出该异常
IndexOutOfBoundsException 数组下标越界异常
NegativeArraySizeException 为数组分配的空间是负数异常
10、什么是Java序列化,如何实现Java的序列化?
序列化指的是把一个Java对象,通过某种介质进行传输,比如Socket输入输出流,或者保留在一个文件里。
实现Java序列化的手段是让该类实现接口Serializable,这个接口没有任何方法,仅仅用于表示该类可以序列化。