笔试题0921

多选
res = requests.get('https://vip.stock.finance.sina.com.cn/quotes_service/api/jsonp.php/var%20moneyFlowData=/MoneyFlow.ssi_ssfx_flzjtj?daima=sz002432&gettime=1')
    print(res.content)
   
1. 下面哪些是Thread类的方法()
A start()       B run()       C exit()       D getPriority()

答案:ABD

解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System类的方法,如System.exit(0)。

2. Java接口的修饰符可以为()

A private     B protected     C final       D abstract

答案:CD

解析:接口很重要,为了说明情况,这里稍微啰嗦点:

(1)接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们;

(2)接口仅仅描述系统能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;

(3)接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量;

(4)接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因为变化的东西也不能够算共有。所以变量是不可变(final)类型,也就是常量了。

(5) 接口中不可以定义变量?如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为来修改属性。有的人会说了,没有关系,可以通过 实现接口的对象的行为来修改接口中的属性。这当然没有问题,但是考虑这样的情况。如果接口 A 中有一个public 访问权限的静态变量 a。按照 Java 的语义,我们可以不通过实现接口的对象来访问变量 a,通过 A.a = xxx; 就可以改变接口中的变量 a 的值了。正如抽象类中是可以这样做的,那么实现接口 A 的所有对象也都会自动拥有这一改变后的 a 的值了,也就是说一个地方改变了 a,所有这些对象中 a 的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接口更高的抽象级别呢,怎么体现接口提供的统一的协议呢,那还要接口这种抽象来做什么呢?所以接口中 不能出现变量,如果有变量,就和接口提供的统一的抽象这种思想是抵触的。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统 一的属性。

通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放,接口是对开闭原则的一种体现。

所以:

接口的方法默认是public abstract;

接口中不可以定义变量即只能定义常量(加上final修饰就会变成常量)。所以接口的属性默认是public static final 常量,且必须赋初值。

注意:final和abstract不能同时出现。

3.选出合理的标识符()

A._sysl_111

B.2 mail

C.$change

D.class

答案:AC

4. 下面哪些语句能够正确地生成5个空字符串? AB         
  A.String   a[]=new   String[5];for(int   i=0;i<5;a[i++]=“”);     
  B.String   a[]={“”,“”,“”,“”,“”};     
  C.String   a[5];     
  D.String[5]a;     
  E.String   []a=new   String[5];for(int   i=0;i<5;a[i++]=null);
  
5. 下面说法错误的是()?
     A:数组是一种对象。
     B:数组属于一种原生类。
     C:int number=[]={31,23,33,43,35,63}。
     D:数组的大小可以任意改变。
正确答案:BCD
 A:数组是一个对象,其内存分配在堆内。基本类型内存分配在栈内。
 B:所谓的原生类,也称基本数据类型或内置对象。显然数组属于引用数据类型。
 C:写法错误。
 D:数组的定义是:相同类型,固定长度的一组数据,一旦被初始化,长度不可更改。
 
6. 下列说法错误的有()?
     A:在类方法中可用this来调用本类的类方法。
     B:在类方法中调用本类的类方法时可直接调用。
     C:在类方法中只能调用本类中的类方法。
     D:在类方法中绝对不能调用实例方法。
正确答案:ACD
 A:所谓的类方法就是静态方法,super和this都指向的是父类和本类的对象,而在类方法中调用的时候,这些指代的对象有可能都还没有创建。静态方法是用类方法名.方法名称调用。
 B:正确。
 C:错误,类方法可以调用其他类的类方法。
 D:错误,实例化对象,然后调用方法。
 
7.关于try…catch…finally结构,描述正确的是些?
A.可以有多个catch
B.只能有一个catch
C.可以没有catch
D.finally必须有
答案:A、C

8.以下哪些描述是正确的?
A.try语句块后必须至少存在一个catch语句块
B.try语句块后可以存在不限数量的finally语句块
C.try语句块后必须至少存在一个catch语句块或finally语句块
D.如果catch和finally语句块同时存在,则catch语句块必须位于finally语句块前
答案:C、D
 
9. 下列函数是public void method(){...}的重载函数有()?
     A:public void method(int m){...}
     B:public int method(){...}
     C:public void method2(){...}
     D:public int method(int m,float f){...}
正确答案:AD
 重载函数要求函数必须同名,必须参数数量或者参数类型不同,与修饰符和返回值无关。
 
10. 下面哪三个描述是正确的?   BCE
A. 默认构造器初始化方法变量
B. 默认构造器有和它所在类相同的访问修饰词.
C. 默认构造器调用其父类的无参构造器.
D. 如果一个类没有无参构造器,编译器会它创建一个默认构造器.
E. 只有当一个类没有任何构造器时,编译器会为它创建一个默认构造器
单选
1. 0.6332的数据类型是()

A float     B double     C Float      D Double

答案:B

解析:默认为double型,如果为float型需要加上f显示说明,即0.6332f

2. 下面代码的运行结果为:()
import java.io.*;
import java.util.*;

public class foo{

    public static void main (String[] args){

        String s;

        System.out.println("s=" + s);

    }

}
A 代码得到编译,并输出“s=”

B 代码得到编译,并输出“s=null”

C 由于String s没有初始化,代码不能编译通过

D 代码得到编译,但捕获到 NullPointException异常
答案:C

解析:开始以为会输出null什么的,运行后才发现Java中所有定义的基本类型或对象都必须初始化才能输出值。

3.  System.out.println("5" + 2);的输出结果应该是()。

A 52                   B7                     C2                     D5

答案:A

解析:没啥好说的,Java会自动将2转换为字符串。

4. 下列哪种说法是正确的( D)
A. 实例方法可直接调用超类的实例方法  ` 如果超类没有被重写就可以`
B. 实例方法可直接调用超类的类方法  `有可能是私有方法不可以调用`
C. 实例方法可直接调用其他类的实例方法 `不可以`
D. 实例方法可直接调用本类的类方法

5. JDBC中,用于表示数据库连接的对象是: B
A.Statement   # 连接的实例,执行sql
B.Connection  # 建立与数据库的连接
C.DriverManager # 该方法将建立与数据库的连接
D.PreparedStatement

6. 以下关于异常的说法正确的是:D
A. 一旦出现异常,程序运行就终止了  # 非系统异常仍然可以继续运行

B. 如果一个方法申明将抛出某个异常,它就必须真的抛出那个异常  # 不一定

C. 在catch子句中匹配异常是一种精确匹配   #  exception

D. 可能抛出系统异常的方法是不需要申明异常的

7. 下面关于垃圾收集的说法正确的是:D
A. 一旦一个对象成为垃圾,就立刻被收集掉。不会随时动

B. 对象空间被收集掉之后,会执行该对象的finalize方法 之前

C. finalize方法和C++的析构函数是完全一回事情析构可以主动,Finalize是被动的

D. 一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此。


8.关于Java编译,下面哪一个正确()

A.Java程序经编译后产生machine code

B.Java程序经编译后会生产byte code

C.Java程序经编译后会产生DLL

D.以上都不正确

答案:B
分析: Java是解释型语言,编译出来的是字节码; 因此A不正确,C是C/C++语言编译动态链接库的文件为.DLL; 正确答案为B

9.以下对继承的描述锚误的是 ()

A Java中的继承允许一个子类继承多个父类

B. 父类更具有通用性,子类更具体

C. Java中的继承存在着传递性

D. 当实例化子类时会递归调用父类中的构造方法

答案:A

分析:Java是单继承的,一个类只能继承一个父类。

10.下面的那一个不属于MVC模式中的对象?

A. Model

B. View

C. Collection

D. Controller

解答:C

11. 下列哪一个选项按照顺序包括了OSI模型的七个层次:(C)    

A. 物理层 数据链路层 传输层 网络层 会话层 表示层 应用层

B. 物理层 数据链路层 会话层 网络层 传输层 表示层 应用层

C. 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层

D. 网络层 传输层 物理层 数据链路层 会话层 表示层 应用层
判断题
1. GC线程是为守护线程。()

答案:是

解析:线程分为守护线程和非守护线程(即用户线程)。

只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。
守护线程最典型的应用就是 GC (垃圾回收器)


2. volatile关键字是否能保证线程安全?()
答案:不能
解析:volatile关键字用在多线程同步中,可保证读取的可见性,JVM只是保证从主内存加载到线程工作内存的值是最新的读取值,而非cache中。但多个线程对

volatile的写操作,无法保证线程安全。例如假如线程1,线程2 在进行read,load 操作中,发现主内存中count的值都是5,那么都会加载这个最新的值,在线程1堆count进行修改之后,会write到主内存中,主内存中的count变量就会变为6;线程2由于已经进行read,load操作,在进行运算之后,也会更新主内存count的变量值为6;导致两个线程及时用volatile关键字修改之后,还是会存在并发的情况。


3. 不通过构造函数也能创建对象吗()
A 是     B 否
答案:A

解析:Java创建对象的几种方式(重要):

(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法。
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

4、String 是最基本的数据类型吗?

答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。

5、float f=3.4;是否正确?

答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;

6、Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?

答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。

7、构造器(constructor)是否可被重写(override)?

答:构造器不能被继承,因此不能被重写,但可以被重载。

8、是否可以继承String 类?

答:String 类是final类,不可以被继承。

补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联(HAS-A)而不是继承(IS-A)。

9、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

答:都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

10、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

答:不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,因此在调用静态方法时可能对象并没有被初始化。
简答题
1. 下面程序的运行结果是什么()
class HelloA {

    public HelloA() {
        System.out.println("HelloA");
    }
    
    { System.out.println("I'm A class"); }
    
    static { System.out.println("static A"); }

}

public class HelloB extends HelloA {
    public HelloB() {
        System.out.println("HelloB");
    }
    
    { System.out.println("I'm B class"); }
    
    static { System.out.println("static B"); }
    
    public static void main(String[] args) { 
     new HelloB(); 
   }

}

答案:

static A
static B
I'm A class
HelloA
I'm B class
HelloB

解析:考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。

对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。

2.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify

3. Static变量是什么含义

static是静态变量,就是变量值不随函数执行结束而消失,下次调用同一函数时,上次所赋予的值仍存在。

4.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

5.int 和Integer 有什么区别?

答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入不是对象的基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从JDK 1.5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

Java 为每个原始类型提供了包装类型:

原始类型: boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

6、解释内存中的栈(stack)、堆(heap)和静态存储区的用法。

答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、“hello”和常量都是放在静态存储区中。栈空间操作最快但是也很小,通常大量的对象都是放在堆空间,整个内存包括硬盘上的虚拟内存都可以被当成堆空间来使用。

String str = new String(“hello”);

上面的语句中str放在栈上,用new创建出来的字符串对象放在堆上,而“hello”这个字面量放在静态存储区。

7、String 和StringBuilder、StringBuffer 的区别?

答:Java 平台提供了两种类型的字符串:String和StringBuffer / StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer和StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是JDK 1.5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer略高。

8、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?

答:可以,但一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致。

9、Java 中的final关键字有哪些用法?

答:(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

10、怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

答:代码如下所示:

String s1 = "你好";

String s2 = newString(s1.getBytes("GB2312"), "ISO-8859-1");

11、打印昨天的当前时刻。


编程题
1.写一个算法对1,8,5,2,4,9,7进行顺序排列。
public class OrderbyArray {
//冒泡排序 Bubble Sort 最简单的排序方法是冒泡排序方法

public int [] orderArray( int [] array){
for ( int i=0;i<array.length;i++){
for ( int j=i;j<array.length;j++){
if (array[i]>array[j]){
int s = array[i];

array[i] = array[j];

array[j] = s;

}

}

}

return array;

}

public static void main(String[] args) {
int [] array = {1,8,5,2,4,9,7};

OrderbyArray order =  new OrderbyArray();

array = order.orderArray(array);         

}

}

2.用循环控制语句打印输出:1+3+5+…….+99=?结果。

int sum = 0;

for ( int i=1;i<100;i+=2){
sum = sum+i;

}

System. out .println("1+3+5+...+99 = "+sum);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值