java面试题测试(二)

一、选择题

1.性事务的原子是指()。正确答案: B   我的答案: C (错误)

        A.事务一旦提交,对数据库的改变是永久的。

        B.事务中包括的所有操作要么都做,要么都不做。

        C.一个事务内部的操作及使用的数据对并发的其他事务都是隔离的。

        D.事务必须使数据库从一个一致性状态变到另一个一致性状态。

解释:

      举个例子:

A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作:

 1. 从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。

 2. 在B的帐户里加1000块钱。如果B的帐户如果原来有2000块钱,现在则变成3000块钱了。

如果在A的帐户已经减去了1000块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时B的帐户里还没有增加1000块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到A的帐户还没减1000块的状态,B的帐户的原来的状态。此时A的帐户仍然有3000块,B的帐户仍然有2000块。

我们把这种要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作

如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。这种特性就叫原子性。


 



2.关于抽象类和接口描述不正确的有()。正确答案: BC   我的答案: B (错误)

        A.抽象类和接口都用于抽象。

        B.抽象类有多重继承的功能。

        C.接口中可以有自己的实现。

        D.接口中定义的变量必须给其初值,实现类中不能重新定义,也不能改变其值。

解释:

JDK1.8以后的默认(default)方法和静态(static)方法可以有方法体,题目的方法应该是指普通方法

     
 


二、简答题

 

1. Java中,有继承关系时,变量隐藏的原则?

子类中变量名与继承自父类的变量名相同时,则继承自父类的变量将被隐藏。

 

2. Java中,是否支持多继承?

不支持。

1)、为什么Java只能单继承?
         因为在C++中一个类是可以继承多个类,但这样的机制会使类的结构变得很复杂,所以Java将这一机制通过接口得以改善。Java中不允许类多继承,只能单继承。单继承使得Java简单,易于管理,不会出现逻辑错误以及多继承自身的缺陷。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口,从而在另一个更合理的角度来实现纯粹的多继承性。因此,通常可以采用实现多个接口的方式间接达到多重继承的目的。

2)、Java中类不能实现多继承的原因
         如果类之间实现了多继承,会造成程序的紊乱。如果一个子类同时继承了两个父类,而这两个父类拥有相同的属性或方法,子类调用的时候系统不知道该调用哪个父类的属性或方法,会使程序报错。

 

3.重载方法是如何进行匹配的?

         在方法调用进行匹配的时候,首先选择直接匹配的方法;如果没有则将参数进行提升转换后再匹配方法,总是匹配最接近的方法,依次按照下列规则来判断:

         精确匹配:参数匹配而不做转换,或者只是做微不足道的转换,如数组名到指针、函数名到指向函数的指针、T到const T;

         提升匹配:即整数提升(如bool到int、char到int、short到int),float到double;

         使用标准转换匹配:如int到double、double到int、double到long double、Derived*到Base*、T*到void*、int到unsigned int;

         使用用户自定义匹配

 

4. 一个引用类型的变量可以指向哪些对象?

一个引用类型的变量可以指向由其本类所构造出来的对象,还可以指向由其子类及子孙类所构造出来的对象。

 

5. 什么时候为类中的实例变量分配内存空间?

在使用类创建实例对象时会为其分配空间。(通过new关键字和构造函数为其实例化的时候)

 


6. 普通类和抽象类有哪些区别?

关键点:abstract修饰符(抽象方法)、具体实现过程、实例化、子类实现父类的抽象方法

             普通类中不可含有抽象方法,可以被实例化;

             抽象类,则抽象类中所有的方法自动被认为是抽象方法,没有实现过程,不可被实例化;抽象类的子类,除非也是抽象类,否则必须实现该抽象类声明的方法


7. 如何将字符串反转?

      1).利用 StringBuffer 或 StringBuilder 的 reverse 成员方法:             

        // StringBuffer

        return new StringBuffer(str).reverse().toString();

        // StringBuilder

        return new StringBuilder(str).reverse().toString();

     2). 利用 String 的 toCharArray 方法先将字符串转化为 char 类型数组,然后将各个字符进行重新拼接:              

  

         // toCharArray

         char[] chars = str.toCharArray();

         String reverse = "";

         for (int i = chars.length - 1; i >= 0; i--) {

              reverse += chars[i];

         }

         return reverse;

     3). 利用 String 的 CharAt 方法取出字符串中的各个字符:             

 

        // charAt

        String reverse = "";

        int length = str.length();

        for (int i = 0; i < length; i++) {

              reverse = str.charAt(i) + reverse;
    
        }

        return reverse;

 

8. Http中的GET与POST的区别?

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST么有。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GETPOST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。


9. 说说反射的用途及实现?

反射的功能:

        在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架

反射的用途:

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

反射的实现:

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

  1. 通过 getClass() 方法
  2. 通过 Class.forName() 方法
  3. 使用 类.class
  4. 通过类加载器实现,getClassLoader()

 

10. Final 有什么作用?

1)、final修饰变量:表示该变量一旦被初始化值之后就不可能被改变。

        a、如果修饰的是成员变量,则必须显示初始化值,而局部变量则无此限制。

        b、如果是基本类型,则基本类型的值不能发生变化;

        c、如果是引用类型,其引用地址不会发生变化,但该对象的堆内存的值可以发生变化。

2)、final修饰方法:表示该方法不能被重写。如果不希望子类重写父类的方法时,可以使用。


3)、final修饰类:表示该类不能被继承。

 

 

每日一言:

飘风不朝,骤雨不

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值