美文网首页
Java面试之基础篇

Java面试之基础篇

作者: onnoA | 来源:发表于2019-01-03 23:07 被阅读0次

面向对象的特性

面向对象的三大特性是:封装、继承、多态。

封装

封装就是将一个对象的属性和方法进行封装。同时私有化属性,提供属性对应的get方法和set方法(把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏)。

继承

继承就是将类的属性和方法进行封装成一个抽象类。同时子类继承父类,则拥有父类中的所有的非私有的属性和方法。

多态

同一种行为的不同表现形式(父类引用指向子类对象)。

final,finally,finalize的区别

final

用于声明属性和方法,分别表示属性不可变,变量变常量,方法不可被重写,类不能被继承

finally

是异常处理语句结构的一部分,表示总是执行

finalize

是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等,JVM不保证此方法总是被调用。

int和Integer的区别

int是Java提供的8中原始数据类型之一。Java为每个原始数据类型都提供了包装类,Integer是Java为int提供的包装类。int的默认值为0,而Integer的默认值为null,是引用类型,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,Java中int和Integer的关系如下:

  • int是8种基本数据类型之一
  • Integer是int的包装类
  • int和Integer都可以表示某一个数值
  • int和Integer不能够能用,因为他们是不同的数据类型

重写和重载的区别

重载Overload

表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或者类型不同)。

重写Override

表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能不父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

抽象类和接口的区别

参数 抽象类 接口
默认的方法实现 抽象类中的方法可以有方法体 接口中的方法不能有方法体
实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类,则需要提供抽象类中所有生命的方法的实现 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
与正常Java类的区别 除了不能实例化抽象类之外,他和普通Java类没有任何区别 接口是完全不同的类型
访问修饰符 抽象方法可以有public、protected、default这些修饰符 接口方法默认修饰符是public。不可以使用其他修饰符
main方法 抽象方法可以有main方法,并且我们可以运行它 接口没有main方法,因此我们不能运行它
多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其他接口
速度 比接口快 接口稍慢,因为需要花时间去寻找在类中实现的方法
添加新方法 如果往抽象类中添加新的方法,你可以给它提供默认的实现。因此不需要改变你现在的代码 如果往接口中添加方法,那么你需要改变实现该接口的类

说说反射的用途及实现

反射的用途

Java的放射机制是一个非常强大的功能,在很多项目中,比如Spring,MyBatis中都可以看到反射的身影。通过反射机制,我们可以在运行期间动态获取及调用对象的类型信息。利用这一点我们可以实现工厂模式和代理模式等设计模式,同时也可以解决Java泛型擦除等令人苦恼的问题。

反射的实现

获取一个对象对应的放射类,在java中有下列方法可以获取一个对象的反射类:

  • 通过对象.getClass
Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。
 Class stuClass = stu1.getClass();//获取Class对象
  • Class.forName()
Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名
      System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象
  • 类名.Class
Class stuClass2 = Student.class;

\color{red}{注意: 三种方式常用第二种,第一种已有对象,不需要再通过反射这种形式获取对象的方法和属性。,第三中需要导入类的包,依赖性太强。}

说说自定义注解的场景及实现

登陆、权限拦截、日志处理,以及各种 Java 框架,如 Spring,Hibernate,JUnit 提到注解就不能不说反射,Java 自定义注解是通过运行时靠反射获取注解。实际开发中,例如我们要获取某个方法的调用日志,可以通过 AOP(动态代理机制)给方法添加切面,通过反射来获取方法包含的注解,如果包含日志注解,就进行日志记录。反射的实现在 Java 应用层面上讲,是通过对 Class 对象的操作实现的,Class 对象为我们提供了一系列方法对类进行操作。在 JVM 这个角度来说,Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项目按严格的顺序紧凑的排列在 Class 文件中,里面包含了类、方法、字段等等相关数据。通过对 Class 数据流的处理我们即可得到字段、方法等数据。

HTTP请求get与post方式的区别

  • 根据 HTTP 规范,GET 用于信息获取,而且应该是安全的和幂等的(幂等性:HTTP GET方法用于获取资源,无论获取一次还是多次,获取到的结果都是相等的,所以是幂等的)。
  • 根据 HTTP 规范,POST 表示可能修改变服务器上的资源的请求。
  • 首先是 "GET 方式提交的数据最多只能是 1024 字节",因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟 URL 的长度有直接关系了。而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE 对 URL 长度的限制是 2083 字节(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。注意这是限制是整个 URL 长度,而不仅仅是你的参数值数据长度。
  • POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制

Session 和 Cookie 的区别

  • cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
  • cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session。
  • session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 cookie。
  • 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

Session分布式处理

Session复制

Session粘滞

Session集中管理

基于Cookie管理

总结

这四种方式,相对来说,Session 集中管理 更加可靠,使用也是最多的。

相关文章

网友评论

      本文标题:Java面试之基础篇

      本文链接:https://www.haomeiwen.com/subject/fbrqrqtx.html