2017-9-13 笔试真题

来源:互联网 发布:游戏王网络对战平台 编辑:程序博客网 时间:2024/05/22 12:12
1.假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,
则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是()
 -1 -2 0 1   正确答案: D  
boolean isOdd = false;
for(int i=1;i<=2;++i)
{
if(i%2==1)isOdd = true;
else isOdd = false;
a+=i*(isOdd?1:-1);
}
解析:
isOdd=false-->i=1-->isOdd=true-->a +1
    -->i=2-->isOdd=false-->a -2
线程一: +1  -2  +1  -2    +1  -2
线程二: +1  -2      +1  -2    +1  -2
可能结果:1)两个线程同时运行 a+1-2=-1;
  2)一个线程的第二次覆盖另一个线程的写入 a+1+1-2=0;
  3)一个线程完全落后另一个线程 a+1-2+1-2=-2;

2.关于Float,下列说法错误的是()  正确答案: C   
   Float是一个类
   Float在java.lang包中
   Float a=1.0是正确的赋值方法
   Float a= new Float(1.0)是正确的赋值方法
解析:Float是类,float不是类.
     8种基本类型都在java.lang包中
     Float正确复制方式是Float f=1.0f,若不加f会被识别成double型,
     double无法向float隐式转换.
     Float a= new Float(1.0)是正确的赋值方法,但是在1.5及以上版本
          引入自动装箱拆箱后,会提示这是不必要的装箱的警告,
   通常直接使用Float f=1.0f.

3.以下哪个式子有可能在某个进制下成立()?
正确答案: A   
13*14=204 12*34=568 14*14=140 1+1=3

4.以下哪个接口的定义是正确的?( )
正确答案: D   
interface  B
{  void print()  {  } ;}
interface  B
{ static void print() ;}
abstract  interface  B  extends  A1, A2  //A1、A2为已定义的接口
{ abstract  void  print(){  };}
interface  B
 {  void  print();}
解析:接口中的方法默认为public abstract,属性默认为public static final。接口中的方法不能有实现,Java中类只支持单继承,而接口可以支持多继承。
A、C中方法不能有方法体,B中方法前不能有static ;

5.关于类的叙述正确的是()。
正确答案: B   
在类中定义的变量称为类的成员变量,在别的类中可以直接使用
局部变量的作用范围仅仅在定义它的方法内,或者是在定义它的控制流块中
使用别的类的方法仅仅需要引用方法的名字即可
只要没有定义不带参数的构造函数,JVM都会为类生成一个默认构造函数
解析:
     A在类中定义的变量称为类的成员变量,在别的类中不可以直接使用局部变量的,
     类是一个封装,类的成员只能在类内部使用,外部需要 “对象名.变量名” 来引用。
     C使用别的类的方法需要通过该类的对象引用方法的名字
     D如果类没有构造方法,JVM会生成一个默认构造方法,
     如果定义了任意类型的构造方法,编译器都不会自动生成构造方法。

6.阅读下列程序,选择哪一个是正确的输出结果
class HelloA{
public HelloA()
    {
        System.out.println("I’m A class ");
    }
    static
    {
    System.out.println("static A");
    }
}
public class HelloB extends HelloA{
    public HelloB()
    {
        System.out.println("I’m B class");
    }
    static{
        System.out.println("static B");
    }
    public static void main (String[] args){
        new HelloB();
    }
}
正确答案: C   
static A I’m A class static B I’m B class
I’m A class I’m B class static A static B
static A static B I’m A class I’m B class
I’m A class static A I’m B class static B
解析:该题目中的执行顺序:
   父类的静态变量和静态块赋值(按照声明顺序)
   自身的静态变量和静态块赋值(按照声明顺序)
   父类成员变量和块赋值(按照声明顺序)
   父类构造器赋值
   自身成员变量和块赋值(按照声明顺序)
   自身构造器赋值
类的静态代码块是属于类级别,执行优先级高于普通代码块>构造函数。
总结就是:父类的静态代码块(包括静态变量赋值)优先执行,
 然后执行自身的静态代码块,然后执行父类的普通代码块,
 再执行父类的构造函数,然后执行自身的普通代码块,
 再执行自身的构造函数。

7.下面有关servlet service描述错误的是?
正确答案: B   
不管是post还是get方法提交过来的连接,都会在service中处理
doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
service()是在javax.servlet.Servlet接口中定义的
service判断请求类型,决定是调用doGet还是doPost方法
解析:doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的

8.如果希望监听TCP端口9000,应该怎样创建socket?
正确答案: B   
new Socket("localhost",9000);
new ServerSocket(9000);
new Socket(9000);
new ServerSocket("localhost",9000);
解析:  ServerSocket(int port) 是服务端绑定port端口,
    调accept()监听等待客户端连接,它返回一个连接队列中的一个socket。
       Socket(InetAddress address , int port)是创建客户端
    连接主机的socket流,其中InetAddress是用来记录主机的类,
    port指定端口。

9.true、false、null、sizeof、goto、synchronized 哪些是Java关键字?
正确答案:goto,synchronized
解析:1. const和goto既是保留字又是关键字
     2. 除了const和goto,其余保留字和关键字是严格区分开的。
1,Java 关键字列表 (依字母排序 共50组):
abstract, assert, boolean, break, byte, case, catch, char, class,
const(保留关键字), continue, default, do, double, else, enum,
extends, final, finally, float, for, goto(保留关键字), if,
implements, import, instanceof, int, interface, long, native,
new, package, private, protected, public, return, short, static,
strictfp, super, switch, synchronized, this, throw, throws,
transient, try, void, volatile, while
2,保留字列表 (依字母排序 共14组),Java保留字是指现有Java版本
尚未使用,但以后版本可能会作为关键字使用:
byValue, cast, false, future, generic, inner, operator, outer,
rest, true, var, goto (保留关键字) , const (保留关键字) , null

10.
byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2);  /*语句1*/
b6=b4+b5;    /*语句2*/
b8=(b1+b4);  /*语句3*/
b7=(b2+b5);  /*语句4*/
System.out.println(b3+b6);
下列代码片段中,存在编译错误的语句是()
正确答案: B C D   
语句2
语句1
语句3
语句4
解析:
     Java表达式转型规则由低到高转换:
1、所有的byte,short,char型的值将被提升为int型;
2、如果有一个操作数是long型,计算结果是long型;
3、如果有一个操作数是float型,计算结果是float型;
4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。
--------------解析--------------
语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变。  








































原创粉丝点击