1.(单选)下面代码等价于
public interface IService {String NAME="default";}
A. public String NAME=“default”;
B. public static String NAME=“default”;
C. public static final String NAME=“default”;
D. private String NAME=“default”;
【知识点】 接口
【分析】 接口中的变量默认是public static final 的,方法默认是public abstract 的
【答案】 C
2.(单选)多个线程可同时操作一个数据,为了保证该数据的准确性,可将操作该数据的部分改为 ()
A. 同步
B. 异步
C. 只读
D. 只写
【知识点】 多线程
【分析】
【答案】 A
3. (读程序)下面程序运行后在屏幕上显示的结果是()
public class test {
public static void main(String args[]) {
int x,y;
x=5>>2;
y=x>>>2;
System.out.println(y);
}
}
【知识点】 位运算
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。
<< 左移,相当于乘以2的几次方。 >>右移,相当于除以2的几次方。 <<<无符号左移,和<<一样,都是在末尾补0 >>>无符号右移,忽略符号,空位都以0补齐。
【答案】
5 >> 2 -> 5 / 2 2 = 1 5/2^2=1 5/22=1
1>>>2 -> 1 / 2 2 1/2^2 1/22 = 0(空位补0)
4.(读程序)以下java程序运行的结果是()
public class Tester{
public static void main(String[] args){
Integer var1=new Integer(1);
Integer var2=var1;
doSomething(var2);
System.out.print(var1.intValue());
System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
integer=new Integer(2);
}
}
【知识点】 基本数据类型包装类
【分析】
【答案】 1true
5.(单选)下列关于java并发的说法中正确的是:
A. copyonwritearraylist适用于写多读少的并发场景
B. readwritelock适用于读多写少的并发场景
C. concurrenthashmap的写操作不需要加锁,读操作需要加锁
D. 只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了
【知识点】 并发
【分析】
CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。
ReadWriteLock 当写操作时,其他线程无法读取或写入数据,而当读操作时,其它线程无法写入数据,但却可以读取数据 。适用于 读取远远大于写入的操作。
ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。
【答案】 B
6.(读程序题)以下程序执行后结果为
public class Test {
public static void main(String[] args) {
Object o = new Object() {
public boolean equals(Object obj) {
return true;
}
};
System.out.println(o.equals("Fred"));
}
}
【分析】
重写了Object中的equals方法
【答案】
true
7.(单选题)java 的字符类型采用的是 Unicode 编码方案,每个 Unicode 码占用()个比特位。
A. 8
B. 16
C. 32
D. 64
【分析】 在java中一个unicode占2个字节(byte),一个字节等于8比特位(bit),所以每个Unicode码占用16个比特位。
【答案】 B
8.(多选题)对于构造方法,下列叙述正确的是()
A. 构造方法的优先级一般比代码块低。
B. 构造方法的返回类型只能是void型。
C. 构造方法的主要作用是完成对类的对象的初始化工作。
D. 一般在创建新对象时,系统会自动调用构造方法。
【知识点】 构造方法
【分析】
A:静态成员变量或静态代码块>main方法>非静态成员变量或非静态代码块>构造方法
B:think in java中提到构造器本身并没有任何返回值。
C: 构造方法的主要作用是完成对类的对象的初始化工作。
D: 一般在创建(new)新对象时,系统会自动调用构造方法。
【答案】 ACD
9.(多选题)关于volatile关键字,下列描述不正确的是?
A. 用volatile修饰的变量,每次更新对其他线程都是立即可见的。
B. 对volatile变量的操作是原子性的。
C. 对volatile变量的操作不会造成阻塞。
D. 不依赖其他锁机制,多线程环境下的计数器可用volatile实现。
【知识点】 多线程
【分析】
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
volatile只提供了保证访问该变量时,每次都是从内存中读取最新值,并不会使用寄存器缓存该值——每次都会从内存中读取。
而对该变量的修改,volatile并不提供原子性的保证。
由于及时更新,很可能导致另一线程访问最新变量值,无法跳出循环的情况
多线程下计数器必须使用锁保护。
【答案】 BD
10.(读程序题)下列代码执行结果是( )
public class Demo{
public static void main(String args[]){
int num = 10;
System.out.println(test(num));
}
public static int test(int b){
try
{
b += 10;
return b;
}
catch(RuntimeException e)
{
}
catch(Exception e2)
{
}
finally
{
b += 10;
return b;
}
}
}
【知识点】 多线程
【分析】
如果finally块中有return语句的话,它将覆盖掉函数中其他return语句。
【答案】 30
11.(单选)结构型模式中最体现扩展性的模式是()
A. 装饰模式
B. 合成模式
C. 桥接模式
D. 适配器
【知识点】 设计模式——结构型模式
结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例。故可以分为类结构模式和对象结构模式。
在GoF设计模式中,结构型模式有:
1.适配器模式 Adapter
适配器模式是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
两个成熟的类需要通信,但是接口不同,由于开闭原则,我们不能去修改这两个类的接口,所以就需要一个适配器来完成衔接过程。
2.桥接模式 Bridge
桥接模式将抽象部分与它的实现部分分离,是它们都可以独立地变化。它很好的支持了开闭原则和组合锯和复用原则。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这些多角度分离出来让他们独立变化,减少他们之间的耦合。
3.组合模式 Composite
组合模式将对象组合成树形结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
4.装饰模式 Decorator
装饰模式动态地给一个对象添加一些额外的职责,就增加功能来说,它比生成子类更灵活。也可以这样说,装饰模式把复杂类中的核心职责和装饰功能区分开了,这样既简化了复杂类,有去除了相关类中重复的装饰逻辑。 装饰模式没有通过继承原有类来扩展功能,但却达到了一样的目的,而且比继承更加灵活,所以可以说装饰模式是继承关系的一种替代方案。
5.外观模式 Facade
外观模式为子系统中的一组接口提供了同意的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式中,客户对各个具体的子系统是不了解的,所以对这些子系统进行了封装,对外只提供了用户所明白的单一而简单的接口,用户直接使用这个接口就可以完成操作,而不用去理睬具体的过程,而且子系统的变化不会影响到用户,这样就做到了信息隐蔽。
6.享元模式 Flyweight
享元模式为运用共享技术有效的支持大量细粒度的对象。因为它可以通过共享大幅度地减少单个实例的数目,避免了大量非常相似类的开销。.
享元模式是一个类别的多个对象共享这个类别的一个对象,而不是各自再实例化各自的对象。这样就达到了节省内存的目的。
7.代理模式 Proxy
为其他对象提供一种代理,并由代理对象控制对原对象的引用,以间接控制对原对象的访问。
【答案】 A