nowcoder Java选择题

1设有定义 int a=3 ,b=4,c=5; 则以下的表达式中 , 值为 false 的是 (D)
A.a < b && b < c
B.a <= b
C.a < ( b + c )
D.! ( a < b )
2若 a 的值为 3 时,下列程序段被执行后, c 的值是多少?(C )

int c = 1; 
if ( a>0 ){ 
     if ( a>3){ 
         c = 2; 
    }
     else{ 
         c = 3; 
    }
} 
else{ 
   c = 4; 
} 

A.1
B.2
C.3
D.4
3一个Java源程序文件中定义几个类和接口,则编译该文件后生成几个以.class为后缀的字节码文件。正确
注 一个.java文件中定义多个类:
注意一下几点:
(1) public权限类只能有一个(也可以一个都没有,但最多只有一个);
(2)这个.java文件名只能是public 权限的类的类名;
(3)倘若这个文件中没有public 类,则它的.java文件的名字是随便的一个类名;
(4)当用javac命令生成编译这个.java 文件的时候,则会针对每一个类生成一个.class文件;
4.现有如下代码段:

   x = 2;
   while(x<n/2) 
          x = 2*x;

假设n>=0,则其时间复杂度应为( A )
A.O(log2(n))
B.O(nlog2(n))
C.O(n)
D.O(n^2)
5解释随着数据规模n的不断增加,本题目中的可重复操作执行次数的增加为log2n。 x=2,条件要求当xくn/2时执行,也就是当x>=n/2时程序满足条件结束。 可重复操作为x=2x,因为变量x的初始值为2,可以认为每次操作都是2的次方上加一,所以2x等同于2^t(t为执行次数). 2^t>=n/2–>log2(n/2)=t–>log2n-log22=t–>log2n-1=t 近似为log2n=t,也就是当数据规模n增加时,可重复操作执行次数t以log2n的速度增加。
下面有关servlet和cgi的描述,说法错误的是? D
A.servlet处于服务器进程中,它通过多线程方式运行其service方法
B.CGI对每个请求都产生新的进程,服务完成后就销毁
C.servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等
D.cgi在移植性上高于servlet,几乎所有的主流服务器都直接或通过插件支持cgi
解释Servlet 与 CGI 的比较
和CGI程序一样,Servlet可以响应用户的指令(提交一个FORM等等),也可以象CGI程序一样,收集用户表单的信息并给予动态反馈(简单的注册信息录入和检查错误)。
然而,Servlet的机制并不仅仅是这样简单的与用户表单进行交互。传统技术中,动态的网页建立和显示都是通过CGI来实现的,但是,有了Servlet,您可以大胆的放弃所有CGI(perl?php?甚至asp!),利用Servlet代替CGI,进行程序编写。
对比一:当用户浏览器发出一个Http/CGI的请求,或者说 调用一个CGI程序的时候,服务器端就要新启用一个进程 (而且是每次都要调用),调用CGI程序越多(特别是访问量高的时候),就要消耗系统越多的处理时间,只剩下越来越少的系统资源,对于用户来说,只能是漫长的等待服务器端的返回页面了,这对于电子商务激烈发展的今天来说,不能不说是一种技术上的遗憾。
而Servlet充分发挥了服务器端的资源并高效的利用。每次调用Servlet时并不是新启用一个进程 ,而是在一个Web服务器的进程敏感词享和分离线程,而线程最大的好处在于可以共享一个数据源,使系统资源被有效利用。
对比二:传统的CGI程序,不具备平台无关性特征,系统环境发生变化,CGI程序就要瘫痪,而Servlet具备Java的平台无关性,在系统开发过程中保持了系统的可扩展性、高效性。
对比三:传统技术中,一般大都为二层的系统架构,即Web服务器+数据库服务器,导致网站访问量大的时候,无法克服CGI程序与数据库建立连接时速度慢的瓶颈,从而死机、数据库死锁现象频繁发生。而我们的Servlet有连接池的概念,它可以利用多线程的优点,在系统缓存中事先建立好若干与数据库的连接,到时候若想和数据库打交道可以随时跟系统"要"一个连接即可,反应速度可想而知。

6.有如下一段代码,请选择其运行结果(C)

public class StringDemo{
  private static final String MESSAGE="taobao";
  public static void main(String [] args) {
    String a ="tao"+"bao";
    String b="tao";
    String c="bao";
    System.out.println(a==MESSAGE);
    System.out.println((b+c)==MESSAGE);
  }
}

A.true true
B.false false
C.true false
D.false true
7.根据以下代码段,下列说法中正确的是( C )。

public class Parent { 
    private void m1(){} 
    void m2(){} 
    protected void m3(){} 
    public static void m4(){} 
}

A.子类中一定能够继承和覆盖Parent类的m1方法
B.子类中一定能够继承和覆盖Parent类的m2方法
C.子类中一定能够继承和覆盖Parent类的m3方法
D.子类中一定能够继承和覆盖Parent类的m4方法
8.假定str0,…,str4后序代码都是只读引用。

static String str0="0123456789";
static String str1="0123456789";
String str2=str1.substring(5);
String str3=new String(str2);
String str4=new String(str3.toCharArray());
str0=null;

Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为(C)
A.5
B.10
C.15
D.20
解析:这是一个关于java的垃圾回收机制的题目。垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(YoungGeneration)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。
年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的MinorGC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收
永久代:存储的是final常量,static变量,常量池。
str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回,如下图:
经过fullgc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C
.

9.jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是? (BD)
A.抽象类可以有构造方法,接口中不能有构造方法
B.抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
C.一个类可以实现多个接口,但只能继承一个抽象类
D.接口中可以有普通成员变量,抽象类中没有普通成员变量
重点
抽象类
特点:
1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
接口
1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上
public static final
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法
7.则实现类定义为抽象类。

10.ArrayLists和LinkedList的区别,下述说法正确的有? (ABCD)
A.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

B.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

C.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。

D.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。
11.进行Java基本的GUI设计需要用到的包是(C)
A.java.io

B.java.sql

C.java.awt

D.java.rmi
解释.图形用户界面(Graphical User Interface,简称 GUI)是指采用图形方式显示的计算机操作用户界面。
java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。
java.sql 提供使用 Java 编程语言访问并处理存储在数据源中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。
java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。功能:包含用于创建用户界面和绘制图形图像的所有类。
java.rmi 提供 RMI 包。RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。

12.以下表达式的类型和值是什么?(注意整数除法)(D)

-5 + 1/4 + 2*-3 + 5.0

A.int -3
B.int -4
C.double -5.5
D.double -6.0

13.下面关于垃圾收集的描述哪个是错误的? (D)
A.使用垃圾收集的程序不需要明确释放对象

B.现代垃圾收集能够处理循环引用问题

C.垃圾收集能提高程序员效率

D.使用垃圾收集的语言没有内在泄漏问题

14.以下代码段执行后的输出结果为(-2)

public class Test {
public static void main(String args[]) {
int x = -5;
int y = -12;
System.out.println(y % x);
}
}

解释
Y(被除数) % X(除数) 当除数与被除数的符号相同时,取余和取模的结果是完全相同的; 当除数与被除数的符号不相同时,结果不同。   具体说,取余结果的符号与被除数相同;取模结果的符号与除数相同。 通常取模运算也叫取余运算,他们都遵循处罚法则,返回结果都是余数; 1.取余    rem(3,2)=1    rem(-3,-2)=-1    rem(3,-2)=1    rem(-3,2)=-1    2.取模    mod(3,2)=1    mod(-3,-2)=-1    mod(3,-2)=-1    mod(-3,2)=1
15.如果一个list初始化为{5,3,1},执行以下代码后,其结果为(B)?
nums.add(6);
nums.add(0,4);
nums.remove(1);
A.[5, 3, 1, 6]
B.[4, 3, 1, 6]
C.[4, 3, 6]
D.[5, 3, 6]
解释 nums.add(6);//把6添加到list中,变为{5,3,1,6}
nums.add(0,4);//在list的第0个位置添加4,list变为{4,5,3,1,6}
nums.remove(1);//移除list的第一个元素,list变为{4,3,1,6}
16.java如何返回request范围内存在的对象? B
A.request.getRequestURL()
B.request.getAttribute()
C.request.getParameter()
D.request.getWriter()
解析request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。
request域代表一次请求处理的过程,就是从客户端到服务端的一次请求的过程。 request.getParameter()获取HTTP提交过来的数据。
而request.getAttribute()方法返回reques,sessiont范围内存在的对象。
17.类Parent和Child定义如下:

1class  Parent{  
2.         public  float  aFun(float a, float b) { } 
3}  
4class  Child  extends  Parent{  
56}  

将以下哪种方法插入行5是不合法的。( )
A.float aFun(float a, float b){ }
B.public int aFun(int a, int b) { }
C.public float aFun(float p, float q){ }
D.private int aFun(int a, int b){ }
解释A.方法重写(覆盖)。子类方法不能缩小父类方法的访问权限,错误。
B.方法重载。参数列表不同,满足重载条件,正确。
C.方法重写(覆盖)。方法声明和父类相同,满足重写条件,正确。
D.方法重载。参数列表不同,满足重载条件,正确
18.问这个程序的输出结果。(D)

package Wangyi;
class Base
{
    public void method()
    {
        System.out.println("Base");
    } 
}
class Son extends Base
{
    public void method()
    {
        System.out.println("Son");
    }
     
    public void methodB()
    {
        System.out.println("SonB");
    }
}
public class Test01
{
    public static void main(String[] args)
    {
        Base base = new Son();
        base.method();
        base.methodB();
    }
}

A.Base SonB
B.Son SonB
C.Base Son SonB
D.编译不通过
解释 向上转型,父类的引用无法访问子类独有的方法
19…
在Java线程状态转换时,下列转换不可能发生的有(AC)?
A.初始态->运行态
B.就绪态->运行态
C.阻塞态->运行态
D.运行态->就绪态
20代码String str=”123456a”;int i=Integer.parseInt(str);会报异常的是(B)
A.java.lang.NullPoninterException
B.java.lang.NumberFormatException
C.java.lang.RuntimeException
D.java.lang.ArrayindexOutOfBoundsException
21.创建一个标识有“开始”按钮的语句是( D )。
A.JTextField b = new JTextField(“开始”);
B.JLabel b = new JLabel(“开始”);
C.JCheckbox b = new JCheckbox(“开始”);
D.JButton b = new JButton(“开始”);
22以下哪个不属于JVM堆内存中的区域(B)?
A.survivor区
B.常量池
C.eden区
D.old区
解释 jvm堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)。
常量池属于 PermGen(方法区)
23What will be printed when you execute the following code? B

class C {
    C() {
        System.out.print("C");
    }
}
 class A {
    C c = new C();
 
    A() {
        this("A");
        System.out.print("A");
    }
 
    A(String s) {
        System.out.print(s);
    }
}
 class Test extends A {
    Test() {
        super("B");
        System.out.print("B");
    }
     public static void main(String[] args) {
        new Test();
    }
}

解释首先new了一个子类对象,那么就要调用构造方法来初始化该子类对象,但是该类继承自A,所以要先调用父类的构造方法,这里通过super(“B”)显示的调用了父类的带参构造。执行父类的带参构造前要先对父类中的对象进行初始化,对父类中的c成员进行初始化,调用了C类的无参构造,所以调用顺序为:
先调用C类的无参构造
再调用A类的带参构造
最后调用调用子类的构造
24下面有关Java的说法正确的是( ACDF )
A.一个类可以实现多个接口
B.抽象类必须有抽象方法
C.protected成员在子类可见性可以修改
D.通过super可以调用父类构造函数
E.final的成员方法实现中只能读取类的成员变量
F.String是不可修改的,且java运行环境中对string对象有一个对象
25下面有关java的instanceof、?、&、&&说法正确的有? ABCD
A.instanceof 可用来判断某个实例变量是否属于某种类的类型。
B."?:" 三目运算符
C.&在逻辑运算中是非短路逻辑与,在位运算中是按位与
D.&& 逻辑运算:逻辑与
26下面描述属于java虚拟机功能的是? ABCD
A.通过 ClassLoader 寻找和装载 class 文件
B.解释字节码成为指令并执行,提供 class 文件的运行环境
C.进行运行期间垃圾回收
D.提供与硬件交互的平台
27有关hashMap跟hashTable的区别,说法正确的是? ABCD
A.HashMap和Hashtable都实现了Map接口
B.HashMap是非synchronized,而Hashtable是synchronized
C.HashTable使用Enumeration,HashMap使用Iterator
D.HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。
28关于volatile关键字,下列描述不正确的是? BD
A.用volatile修饰的变量,每次更新对其他线程都是立即可见的。
B.对volatile变量的操作是原子性的。
C.对volatile变量的操作不会造成阻塞。
D.不依赖其他锁机制,多线程环境下的计数器可用volatile实现。
解释所谓 volatile的措施,就是

  1. 每次从内存中取值,不从缓存中什么的拿值。这就保证了用 volatile修饰的共享变量,每次的更新对于其他线程都是可见的。
  2. volatile保证了其他线程的立即可见性,就没有保证原子性。
    3.由于有些时候对 volatile的操作,不会被保存,说明不会造成阻塞。不可用与多线程环境下的计数器。
    29下列说法正确的有( ACD’)
    A.环境变量可在编译source code时指定
    B.在编译程序时,所能指定的环境变量不包括class path
    C.javac一次可同时编译数个Java源文件
    D.javac.exe能指定编译结果要置于哪个目录(directory)
    30以下哪项不是java基础类型(C)
    A.int
    B.boolean
    C.String
    D.float
    解释Java中基本数据类型大体分为两类数字类型(byte,short,int,long,float,double,char),布尔类型(boolean); 备注:由于char可以和数字间转换,也可认为大的范围是数字类型的。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzsaixuexi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值