java面试之小试牛刀

1,volatile关键字是否能保证线程安全?()


>>>>

答案:否


volatile关键字用在多线程同步中,可保证读取的可见性,JVM只是保证从主内存加载到线程工作内存的值是最新的读取值,而非cache中。但多个线程对volatile的写操作,无法保证线程安全。


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


2,下面哪个流类属于面向字符的输入流(  )


A、BufferedWriter

B、FileInputStream

C、ObjectInputStream

D、InputStreamReader


> > > >

答案:D


Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式。 


面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。 


面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。


3,Java能不能不通过构造函数创建对象()


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,下列哪个叙述是正确的()


A.子类继承父类的构造方法。

B.abstract类的子类必须是非abstract类。

C.子类继承的方法只能操作子类继承和隐藏的成员变量。

D.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。


> > > > 答案:C


子类是不继承父类的构造方法的,而是必须调用其父类的构造方法。 


abstract类的子类可以是abstract类,如果是非abstract类,就必须重写父类中所有的abstract方法。 


D中子类新增的方法是不能直接操作被子类隐藏的成员变量的。


5,下列哪个叙述是正确的()


A.final类可以有子类。

B.abstract类中只可以有abstract方法。

C.abstract类中可以有非abstract方法,但该方法不可以用final修饰。

D.不可以同时用final和abstract修饰同一个方法。

E.允许使用static修饰abstract方法。


> > > >

答案:D


用final修饰的类是不允许被继承的,A错误 
abstract类中也可以有普通成员方法,B错误 
abstract类中的非abstract方法是可以用final修饰的,而abstract方法是不可以被final修饰的,C错误 


D同上,正确 

不允许使用static修饰abstract方法,E错误。


6,当检索一个压缩文件时,首先要建立压缩文件输入流对象,该对象()


A、以选中的压缩文件为参数

B、以FileInputStream对象为参数

C、以InputStreamReader对象为参数

D、以BufferedReader对象为参数


> > > >

答案:B


在java.io包中提供了对压缩文件进行操作的能力。它是通过压缩文件输入流与压缩文件输出流来实现的,其分别继承自InflaterInputStream与DeflaterOutputStream。


在创建压缩文件输入流时,其初始化参数是一个FileInputStream类的实例。


7,已知一个有序线性表为()(13,18,24,35,47,50,62,83,90,115,134),当用二分法查找值为90的元素时,查找成功的比较次数为( )


A,1         B,2       C,3       D,9


> > > > 答案:B


根据二分法查找需要两次:首先将90与表中间的元素50进行比较,由于90大于50,所以在线性表的后半部分查找;第二次比较的元素是后半部分的中间元素,即90,这时两者相等,即查找成功。


8,Java程序的并发机制是( )


A.多线程

B.多接口

C.多平台

D.多态性


> > > >

答案:A


Java是通过多线程实现并发机制的。多线程是指一个程序中包含多个执行流, 多线程程序设计的含义是可以将程序任务分成几个并行的子任务。


9,下列选项中,不属于模块间耦合的是( )


A.数据耦合

B.标记耦合

C.异构耦合

D.公共耦合


> > > >

答案:C


模块之间的耦合程度反映了模块的独立性,也反映了系统分解后的复杂程度。 按照耦合程度从弱到强,可以将其分成7级。


分别是非直接耦合、数据耦合、标记耦合、控制 耦合、外部耦合、公共耦合和内容耦合。其中没有异构耦合这种方式。


10,下列关于内部类的说法不正确的是  (  )


A,内部类的类名只能在定义它的类或程序段中或在表达式内部匿名使用

B,内部类可以使用它所在类的静态成员变量和实例成员变量

C,内部类不可以用abstract修饰符定义为抽象类

D,内部类可作为其他类的成员,而且可访问它所在类的成员


> > > >

答案:C


内部类不仅可以用abstract修饰定义为抽象类,也可以用private或protected定义,所以选项C说法错误。

你可能感兴趣的:(java面试之小试牛刀)