面试试题——基础篇

1、面向对象的特征:继承、封装和多态

  封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系。封装的特性使得类(对象)以外的部分不能随意存取类(对象)的内部数据(属性),保证了程序和数据不受外部干扰且不被误用。

  继承具有单继承的特点,即只能继承自一个父类,每个子类只有一个直接父类,但是其父类又可以继承于另一个类,从而实现了子类可以间接继承多个父类,但其本质上划分仍然是一个父类和子类的关系。

  多态性是指在继承关系中的父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或方法在父类及其各子类类中具有不同的含义。

2、final, finally, finalize 的区别

final关键字通常指的是“无法改变的”,使用“无法改变”这样修饰可能原因:效率、统一、常量、规范。final可以修饰变量、方法和类。

finally子句,无论try块中的异常是否抛出,它们都能够执行

3、Exception、Error、运行时异常与一般异常有何异同

  Exception:程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

  Error:java运行时系统的内部错误和资源耗尽错误。表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误,导致JVM无法继续执行。

       运行时异常:程序错误导致的异常

  一般异常:程序本身没有没有问题,但由于像I/O错误这类异常导致的异常

4、常见到的exception

  IndexOutOfBoundsException(数组越界)

  NullPointerException(空指针)

  NumberFormatException(转换为数字)

  ArithmeticException(算术运算异常) 

  ArrayStoreException(数组中存放类型错误) 

  SecurityException(安全异常)

  ClassNotFoundException(类找不到)

  IllegalArgumentException(方法参数错误)

  IllegalAccessException(权限不足)

  ClassCastException(类型转换错误)

  FileNotFoundException(文件找不到)

  NoSuchMethodException(方法不存在)

  EOFException(文件关闭)

  InstantiationException(实例化失败)

  InterruptedException(异常中止)

  OutOfMemoryException(内存不足)

  NoClassDefFoundException(类未定义)

  CloneNotSupportedException(不支持克隆<clone>)

5、int , Integer

  a、Integer是int的封装类,int则是java的一种基本数据类型 
  b、Integer变量必须实例化后才能使用,默认值null,而int变量不需要 ,默认值0
  c、Integer是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 

  d、Integer缓存范围-128 ——127 ,可以使用 JVM 的启动参数设置最大值(PS:除了 Integer 可以通过JVM参数改变范围外,其它(Long,Byte等)的都不行)

Integer a= 99;
int b = 99;

a==b //true

Integer c =1000;
int d = 1000;

c==d // false
View Code

6、包装类,装箱和拆箱

  包装类:原始类型对应的类,即Boolean, Byte, Short, Integer, Long, Float, Double, Character

  装箱:自动根据数值创建对应的对象。 

  拆箱:自动将包装器类型转换为基本数据类型。

  自动装箱、拆箱:指编译器帮助开发人员完成包装类的装箱和拆箱过程,也就是在将*.java文件编译成*.class文件的过程中完成

7、String、StringBuilder、StringBuffer

  String:是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象

  StringBuffer:线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改

  StringBuilder:一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但线程不安全

  速度:StringBuilder > StringBuffer > String

8、重载和重写的区别

  重载(overloading):让类以统一的方式处理不同类型数据的一种手段,具有相同的名字,但具有不同的参数和不同的定义,返回值类型可以不相同,但无法以返回型别作为重载函数的区分标准。

  重写(overriding):父类与子类之间的多态性,对父类的函数进行重新定义,函数必须要和被覆盖的方法完全匹配。可使用super关键字引用父类函数。

public class A{
       public void test(){}      
}

public class B extends A(){

       @Overriding
       public void test(){
          super.test();
          System.out.println("");
       }

       @Overloading
       public boolean test(String arg){
             return true;
       }

}
View Code

9、抽象类和接口有什么区别

  抽象类:不能被实例化,只能被用作子类的父类。抽象类是被用来创建继承层级里子类的模板

  接口:提供了一个统一的、通用的调用方式,所有的方法隐含的都是抽象的

10、反射的用途及实现

  允许运行中的 Java 程序获取自身的信息,并且可以操作类和对象的内部属性。可以动态的创建对象并调用其属性,这样对象的类型在编译期是未知的

  反射实现:http://www.importnew.com/23902.html

11、注解&自定义注解

  注解:也叫元数据。一种代码级别的说明,用于解释数据的数据

  自定义注解:

@Target(FIELD)   // ElementType.*
@Retention(RUNTIME)   //RetentionPolicy.*
@Documented
public @interface MyAnnotation{
    String value() default "";  
}
View Code

12、HTTP method

  GET:获取被请求URI指定的信息,请求的响应可缓存

  HEAD:和GET方法一致,除了服务器不能在响应里返回消息主体。

  POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。响应可缓存,除非响应里有Cache-Control或者Expires头域指示其响应不可缓存

  PATCH:对已知资源进行局部更新

  PUT:向服务器传送的数据取代指定的文档的内容,响应不应该被缓存

  DELETE:请求源服务器删除请求URI指定的资源,响应是不能被缓存的

13、Session、Cookie

  Session:是存放在服务器端的,类似于Hash表结构来存放用户数据。

  Cookie

14、常用 JDK包

15、MVC设计思想

16、equals与==

17、hashCode和equals方法的区别与联系

18、什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用

19、Object类中常见的方法,为什么wait notify会放在Object里边?

20、Java的平台无关性如何体现出来的

22、JDK和JRE的区别

猜你喜欢

转载自www.cnblogs.com/adeveloper/p/9103254.html