面试选择题

Posted 王嘻嘻-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试选择题相关的知识,希望对你有一定的参考价值。

1、考虑下面这个简单的例子,让我们看看reflection是如何工作的。
import java.lang.reflect.*;
public class test 
    public static void main(String[] args) 
        try 

            Class c = Class.forName(args[0]);
            Method m[] = c.getDeclaredMethods();

            for (int i = 0; i < m.length; i++) 
                System.out.println(m[i].toString());

            

         catch (Throwable e) 

            System.err.println(e);

        
    

其中"c.getDeclaredMethods"的作用是:

A 取得类的公有方法对象

B 取得类的所有公有方法名称

C 取得类的所有方法对象

D 以上选项都不正确

他的回答: A (错误)

正确答案: D

2、java 的字符类型采用的是 Unicode 编码方案,每个 Unicode 码占用()个比特位。

他的回答: 64 (错误) 正确答案: 16

3、下列哪些语句关于 java 内存回收的说明是正确的?

A 程序员必须创建一个线程来释放内存

B 内存回收程序负责释放无用内存

C 内存回收程序允许程序员直接释放内存

D 内存回收程序可以在指定的时间释放内存对象

正确答案: B

4、以下多线程对int型变量x的操作,哪个不需要进行同步()

A ++x

B x=y

C x++

D x=1

他的回答: C (错误) 正确答案: D

5、如果希望某个变量只可以被类本身访问和调用,则应该使用下列哪一种访问控制修饰?

A public

B private

C private protected

D protected

正确答案: B

6、有如下4条语句:()
Integer i01=59;
int i02=59;
Integer i03=Integer.valueOf(59);
Integer i04=new Integer(59);

以下输出结果为false的是:

A System.out.println(i01==i02);

B System.out.println(i01==i03);

C System.out.println(i03==i04);

D System.out.println(i02==i04);

他的回答: B (错误) 正确答案: C

参考答案: A、D选项,当包装类与基本数据类型对比时,包装类会自动拆箱变为基本类型再进行比较,即Integer i01会拆箱为int类型与i02对比。因此System.out.println(i01i02);输出为true。 B选项,包装数据类直接赋值,默认调用其对用的valueOf()方法。那么Integer i03=Integer.valueOf(59);就等价于Integer i01=59;valueOf()操作-128 ~ 127 之内的整型,在第一次引用,会在缓存中new一个对象;再次引用,直接从缓存中查找;操作-128 ~ 127之外的整型,则每次都要new一个对象。也就是说如果 已经创建了一个-128 ~ 127之间的整数,使用valueOf创建第二次时,不会使用new关键字,而用已经缓存的对象。因此System.out.println(i01i03);输出 true。 C选项,包装类是基础数据类型的引用类型,i04的定义使用了new关键字,这会开辟出一块新内存来放置值为59的Integer对象。那么两个地址不同的引用类 型变量进行==判断结果自然是false。答案选择C。

7、关于以下程序代码的说明正确的是()
public class HasStatic // 1
    private static int x = 100;// 2
    public static void main(String args[]) // 3
        HasStatic hsl = new HasStatic();// 4
        hsl.x++;// 5
        HasStatic hs2 = new HasStatic();// 6
        hs2.x++;// 7
        hsl = new HasStatic();// 8
        hsl.x++;// 9
        HasStatic.x--;// 10
        System.out.println(" x=" + x);// 11
    

A 程序通过编译,输出结果为:x=102

B 程序通过编译,输出结果为:x=103

C 10行不能通过编译.因为x星私有静态变量

D 5行不能通过编译.因为引用了私有静态变量

正确答案: A

8、以下代码输出的是:
public class SendValue
    public String str="6";
    public static void main(String[] args) 
        SendValue sv=new SendValue();
        sv.change(sv.str);
        System.out.println(sv.str);
    
    public void change(String str) 
        str="10";
    

A 6

B 10

C 都不对

D 16

他的回答: B (错误) 正确答案: A

参考答案:

考察Java得值传递问题,change()方法中的str与sv.str都是新的对象实例成员变量值"6"的引用, 由于String类型的不可变性,change()方法中的str="10"语句实 际上是将传入的str副本引用指向了一个值为“10”的新的内存地址,但原数据引用sv.str的引用值(也就是“6”的内存地址)并没有发生改变,因此sv.str指向的 值仍旧为6。

代码如下

class SendValue public String[] str=“1”; public static void main(String[] args) SendValue sv=new SendValue(); sv.cha nge(sv.str); System.out.println(sv.str[0]); public void change(String[] str) str[0]=“2”;

输出 2

这种情况下则是将srt指向的地址的值从1改成了2,而不是直接将str的副本引用指向一个新地址,再看如下代码 输出 这种情况则是将str的副本引用指向了一个新的内存地址,但原数据引用sv.str并不受影响。 综上,选A

9、于java封装 主要作用在于对外隐藏内部实现细节,增强程序的安全性
10、在类设计中,类的成员变量要求仅仅能够被同一package下的类访问,请问应该使用下列哪个修饰词()

他的回答: protected (错误) 正确答案: 不需要任何修饰词

以上是关于面试选择题的主要内容,如果未能解决你的问题,请参考以下文章

C# 基础篇·面试题

面试中的常见算法,你了解几个?

面试中的常见算法,你了解几个?

Leetcode.面试题 01.08. Zero Matrix LCCI题解

Python面试题目之Python的复制和赋值浅析

看完这篇 SessionCookieToken,和面试官扯皮就没问题了