每天10个面试题(day02)

1.下列不属于java语言鲁棒性特点的是
A.java能检查程序在编译和运行时的错误
B.java能运行虚拟机实现跨平台
C.java自己操纵内存减少了内存出错的可能性
D.java还实现了真数组,避免了覆盖数据的可能

解:B,
分析:鲁棒性(Robust,即健壮性)
Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。它提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。通过集成的面向对象的例外处理机制,在编译时,Java揭示出可能出现但未被处理的例外,帮助程序员正确地进行选择以防止系统的崩溃。另外,Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题的出现。
B选项虽然描述也对,但是,不应该把它归结于鲁棒性,主要是体现Java的虚拟机实现一次编译,到处运行,跨平台性的特点


2.下面程序的运行结果是

String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);

A.true
B.false
C.exception
D.无输出

解:B,
分析: String str1 = "hello";这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的; String str2 = "he" + new String("llo");这里的str2必须在运行时才知道str2是什么,同时创建匿名对象new String(“llo”),会在堆内存中开辟空间,综上它是指向的是堆里定义的字符串“hello”,所以这两个引用不一样。


3.子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?

A.父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
B.父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
C.父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
D.父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块

解:C,
分析:当实例化子类对象时,首先要加载父类的class文件进内存,静态代码块是随着类的创建而执行,所以父类静态代码块最先被执行,子类class文件再被加载,同理静态代码块被先执行;实例化子类对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的非静态代码块


4.如何放掉一个指定占据的内存空间?()

A.调用free()方法
B.代用system.gc()方法
C.赋值给该项对象的引用为null
D.程序员无法明确强制垃圾回收器运行

解:D,
分析:
A,java属于自动内存回收,不能调用free是否内存
B,调用gc()垃圾回收器也只能回收没有任何引用指向的对象
C,赋值为null可以用于占用内存大的对象的回收问题,具体什么时候回收还是由jvm决定
D,程序员可以调用System.gc()方法通知垃圾回收器进行垃圾回收,但是具体什么时候回收还是由jvm决定


5.

public class Test{
    static int cnt = 6;
    static{
        cnt += 9;
    }
public static void main(string[] args){
    System.out.println("cnt =" + cnt);
}
static{
    cnt /=3;
    };
}

cnt的值是?

A.cnt=5
B.cnt=2
C.cnt=3
D.cnt=6

解:A,
分析:
初始化顺序:
1.先父类,后子类
2.先属性,后构造函数
3.先静态,后非静态
4.先静态属性,后静态代码块


6.线程安全的map在JDK 1.5及其更高版本环境 有哪几种方法可以实现?

A.Map map = new HashMap()
B.Map map = new TreeMap()
C.Map map = new ConcurrentHashMap()
D.Map map = Collections.synchronizedMap(new HashMap())

解:CD,
分析:
1. HashMap,TreeMap 未进行同步考虑,是线程不安全的。
2. HashTable 和 ConcurrentHashMap 都是线程安全的。区别在于他们对加锁的范围不同,HashTable 对整张Hash表进行加锁,而ConcurrentHashMap将Hash表分为16桶(segment),每次只对需要的桶进行加锁。
3. Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合。比如,
List list = Collections.synchronizedList(new ArrayList());
Set set = Collections.synchronizedSet(new HashSet());


7.JAVA反射机制主要提供了以下哪些功能?

A.在运行时判断一个对象所属的类
B.在运行时构造一个类的对象
C.在运行时判断一个类所具有的成员变量和方法
D.在运行时调用一个对象的方法

解:ABCD,
分析:
JAVA反射机制概念:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

Java反射机制主要提供了以下功能:

  • 在运行时判断任意一个对象所属的类;
  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个类所具有的成员变量和方法;
  • 在运行时调用任意一个对象的方法;
  • 生成动态代理。

8.以下可以正确获取结果集的有?

A.

Statement sta=con.createStatement();<br>ResultSet rst=sta.executeQuery("select * from book");

B.

Statement sta=con.createStatement("select * from book"); ResultSet rst=sta.executeQuery();

C.

PreparedStatement pst=con.prepareStatement();
ResultSet rst=pst.executeQuery("select * from book");

D.
PreparedStatement pst=con.prepareStatement(“select * from book”);
ResultSet rst=pst.executeQuery();

解:AD,
分析:

  1. 创建Statement是不传参的,它用于执行静态 SQL 语句并返回它所生成结果的对象。
  2. PreparedStatement是需要传入sql语句的,它表示预编译的 SQL 语句的对象。 SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

9.下面选项中,哪些是interface中合法方法定义?()

A.public void main(String [] args);
B.private int getSum();
C.boolean setFlag(Boolean [] test);
D.public float get(int x);

解:ACD,
分析:
java程序的入口main方法必须是static类型的,接口中不允许有static类型的方法。A项没有static修饰符,可以作为普通的方法。而且接口中的方法必须是public的。想想接口就是为了让别人实现的,相当于标准,标准不允许别人使用是不合理的,所以接口中的方法必须是public。C项中,接口中的方法默认是public的。D项属于正常的方法。


10.下面有关forward和redirect的描述,正确的是?

A.forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
B.执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
C.执行redirect时,服务器端告诉浏览器重新去请求地址
D.forward是内部重定向,redirect是外部重定向
E.redirect默认将产生301 Permanently moved的HTTP响应

解:BCD,
分析:
request的forward和response的redirect

  1. redirect地址栏变化,forward发生在服务器端内部从而导致浏览器不知道响应资源来自哪里
  2. redirect可以重定向到同一个站点上的其他应用程序中的资源,forward 只能将请求 转发给同一个WEB应用中的组件
  3. redirect默认是302码,包含两次请求和两次响应
  4. redirect效率较低

拓展:
1. 从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.

3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说
forward:高.
redirect:低.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值