1、如果一个方法或变量是"private"访问级别,那么它的访问范围是:
在当前类,或者子类中
在当前类或者它的父类中
在当前类,或者它所有的父类中
在当前类中
D
2、关于String、StringBuffer、StringBuilder以下说法错误的是
StringBuilder运行速度最快
StringBuffer是线程安全的
String的值是可变的
StringBuffer运行速度比String快
String是final修饰的,不可变
运行速度StringBuilder>StringBuffer>String
StringBuffer是线程安全的
C
3、装箱、拆箱操作发生在: ()
类与对象之间
对象与对象之间
引用类型与值类型之间
引用类型与引用类型之间
通俗的讲,就是基本数据类型和包装类之间的转换。如: int 类型和 Integer 类的转换
基本数据类型转化成包装类是装箱 (如: int --> Integer)。
包装类转化成基本数据类型就是拆箱 (如:Integer --> int)。
包装类就是引用类型,基本数据类型就是值类型。所以选C
4、程序文件名必须与公共外部类的名称完全一致(包括大小写)
正确
错误
公共外部类必须与源文件名一致,且一个源文件只能有一个公共外部类。
一个java文件里可以有多个class,但是只能有一个public class外部类,并且类名必须和.java文件名相同
A
5、A 是抽象父类或接口, B , C 派生自 A ,或实现 A ,现在 Java 源代码中有如下声明:
1. A a0=new A();
2. A a1 =new B();
3. A a2=new C();
问以下哪个说法是正确的?( )
第1行不能通过编译
第1、2行能通过编译,但第3行编译出错
第1、2、3行能通过编译,但第2、3行运行时出错
第1行、第2行和第3行的声明都是正确的
抽象类和接口不能实例化
A
6、在jdk 1.7中,以下说法正确的是( )。
Java中所有的非抽象方法都必须在类内定义
Java中主方法可以不在类内定义,其他方法都必须定义在类内
Java中主方法必须定义在类内,其他方法可以不必定义在类内
Java中所有方法都不必在类内定义
1.8接口可以定义default方法和static方法;1.9接口中可以定义私有方法。
因此在JDK1.7中,接口只能定义抽象方法,既Java中所有的非抽象方法都必须在类内定义。
A
7、volatile关键字的说法错误的是
能保证线程安全
volatile关键字用在多线程同步中,可保证读取的可见性
JVM保证从主内存加载到线程工作内存的值是最新的
volatile能禁止进行指令重排序
出于运行速率的考虑,java编译器会把经常经常访问的变量放到缓存(严格讲应该是工作内存)中,读取变量则从缓存中读。但是在多线程编程中,内存中的值和缓存中的值可能会出现不一致。volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的。但是volatile不能保证原子性,也就不能保证线程安全。
- 禁止了指令重排
- 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量值,这个新值对其他线程是立即可见的
- 不保证原子性(线程不安全)
A
8、有一个源代码,只包含import java.util.* ; 这一个import语句,下面叙述正确的是? ( )
只能写在源代码的第一句
可以访问java/util目录下及其子目录下的所有类
能访问java/util目录下的所有类,不能访问java/util子目录下的所有类
编译错误
java.util.*,只能读取其目录下的类,不能读取其子目录下的类。
因为其根目录和子目录下可能有同名类,若都能读取,则会混淆。
C
9、java8中,下面哪个类用到了解决哈希冲突的开放定址法
LinkedHashSet
HashMap
ThreadLocal
TreeMap
threadlocalmap使用开放定址法解哈希冲突,hashmap使用链地址法解决hash冲突
C
10、java中Hashtable, Vector, TreeSet, LinkedList哪些线程是安全的?
Hashtable
Vector
TreeSet
LinkedList
线程安全概念:
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。
LinkedList 和 ArrayList 都是不同步的,线程不安全; Vector 和 Stack 都是同步的,线程安全; Set是线程不安全的; Hashtable的方法是同步的,线程安全; HashMap的方法不是同步的,线程不安全;AB
11、关于java集合下列说法不正确的有哪些()
HashSet 它是线程安全的,不允许存储相同的对象
ConcurrentHashMap 它是线程安全的,其中存储的键对象可以重复,值对象不能重复
Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用
ArrayList线程安全的,允许存放重复对象
A: HashSet 它不是线程安全的,属于Set接口下的实现类,Set下的实现类特征就是无序,不允许存储相同的对象 B: ConcurrentHashMap 它是线程安全的HashMap实现,特征也相似,其中存储的值对象可以重复,键对象不能重复 C: Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用 D: ArrayList线程不安全的,底层是数组实现,允许存放重复对象ABD
12、下列哪些情况下会导致线程中断或停止运行( )
InterruptedException异常被捕获
线程调用了wait方法
当前线程创建了一个新的线程
高优先级线程进入就绪状态
interrupt并没有真正中断线程,只是给线程打了中断标志,如果是sleep线程被interrupt会抛出异常,捕获了异常,线程可以继续运行。线程使用了wait方法,会强行打断当前操作,进入阻塞(暂停)状态,然后需要notify方法或notifyAll方法才能进入就绪状态。新创建的线程不会抢占时间片,只有等当前线程把时间片用完,其他线程才有资格拿到时间片去执行。调度算法未必是剥夺式的,而准备就绪但是还没有获得CPU,它的权限更高只能说明它获得CPU被执行的几率更大而已。
B
13、下面选项中,哪些是interface中合法方法定义?()
public void main(String [] args);
private int getSum();
boolean setFlag(Boolean [] test);
public float get(int x);
在jdk1.8之前,接口就是让别人继承的,接口中的方法必须是public 的,默认是public abstract的,即使没写全也默认带这些修饰符的。
在jdk1.8中,接口中的修饰符可以为default、static,但是必须有方法体;
在jdk1.9中,接口中的修饰符可以为private,但是必须有方法体;
接口中的变量默认是public static final的
ACD