牛客 · 错题集锦 (二)

来源:互联网 发布:学seo好找工作吗 编辑:程序博客网 时间:2024/05/18 02:51

写在左上角的:十题一集合,温故以知新

牛客 · 错题集锦 (二) 

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个阶段:加载、创建、初始化、处理客户端请求,卸载

0 0
原创粉丝点击