写在左上角的:十题一集合,温故以知新
牛客 · 错题集锦 (二)
1、无锁化编程有哪些常见方法?
A、针对计数器,可以使用原子加
B、只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)
C、RCU(Read-Copy-Update),新旧版本切换机制,对于旧版本可以采用延迟释放的做法
D、CAS(Compare-and-Swap),如无锁栈,无锁队列等待
2、下面有关共享内存,说法不正确的是?
A、共享内存和使用信号量一样,属于进程间通信的一种方式。
B、使用shmget函数来创建共享内存。
C、尽管每个进程都有自己的内存地址,不同的进程可以同时将同一个内存页面映射到自己的地址空间中,从而达到共享内存的目的。
D、共享内存提供了同步机制,在每一个进程结束对共享内存的写操作之前,会有自动机制可以阻止第二个进程开始对它进行读取。
(解析一下:
共享内存并未提供同步机制,当某一个进程对共享内存提供写操作时,并未自动的阻止另一个进程对它进行读取;
共享内存:就是允许多个进程访问同一内存空间,进程间传递和共享数据非常有效
信号量:为了防止多个进程访问共享资源而造成冲突,设置临界区域每次只让一个进程访问,信号量提供了这样之中机制,用来控制对临界区域的访问
)
3、假设下面的函数foo会被多线程调用,那么让i、j、k三个变量哪些因为线程间共享访问需要加锁保护?
int i = 0;
void foo(){
static int j = 0;
int k = 0;
i++; j++; k++;
}
A、i和k
B、i,j,k都需要
C、i
D、j和k
(解析一下:
多线程调用时要进行保护时,主要是针对全局变量和静态变量的,函数内的局部变量不会受到影响。
)
4、下列方法中哪个是线程执行的方法?
A、run()(解析一下:run是执行方法,start是启动方法)
B、start()
C、sleep()
D、suspend()
5、java中HashTable、Vector、TreeSet、LinkedList哪些线程是安全的?
A、HashTable
B、Vector
C、TreeSet
D、LinkedList
6、在Java中,()类提供定位本地文件系统,对文件或目录及其属性进行基本操作
A、FileInputStream(解析一下:FileInputStream 提供了对文件的字节读取)
B、FileReader
C、FileWriter
D、File(解析一下:File 提供了对文件的基本操作,包括对删除,文件路径登操作)
7、下列关于java中的wait()方法和sleep方法的区别描述错误的是?
A、wait()方法属于Object类,二sleep()属于Thread类
B、调用wait()方法的时候,线程会放弃对象锁
C、调用sleep()方法的过程中,线程不会释放对象锁
D、sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程
(解析一下:
sleep和wait的区别有:
1>.两个方法继承自不同的类:Thread和Object
2>.sleep方法不释放锁,wait方法释放锁
3>.wait、notify、notifyAll只能在同步控制方法或者同步块中使用,而sleep可以在任何地方使用
4>.sleep必须捕获异常,而wait、notify、notifyAll不需要捕获异常
)
8、下面有关Spring的事务传播特性,说法错误的是?
A、PROPAGTION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
B、PROPAGTION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常
C、PROPAGTION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
D、PROPAGTION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚
(解析一下:
PROPAGTION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务
PROPAGTION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常
)
9、给出一下代码,请给出结果
Class Two {
Byte x;
}
Class Pass0{
public static void main(String[] args){
Pass0 p = new Pass0();
p.start();
}
void start(){
Two t = new Two();
System.out.print(t.x+" ");
Two t2 = fix(t);
System.out.print(t.x+" "+t2.x);
}
Two fix(Two tt){
tt.x = 42;
return tt;
}
}
A、null null 42
B、null 42 42(解析一下:形参的改变会改变实参的值)
C、0 0 42
D、0 42 42
E、An exception is thrown at runtime
F、Compilation
10、下列有关Servlet的生命周期,说法不正确的是?
A、在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
B、在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
C、在销毁阶段,执行destroy()方法后会释放Servlet占用的资源
D、destory()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
(解析一下:
Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户端请求,卸载
)