笔试错题记录2

####选择题

1.在Java中哪个修饰词可以体现变量的原子性volatile

  1. static 修饰符表示变量被所有实例共享,变量属于类
  2. final 修饰符表示变量的值是不能改变的
  3. transient 修饰的变量在类实例的序列化处理过程中会被忽略。这个变量是短暂的变量,不能贯穿对象的序列化和反序列化。如果类中有Logger实例,那么Logger实例也是不能被序列化的。
  4. volatile 具有两层含义。但是volatile是无法保证原子性的。
  • 保证不同线程对这个变量操作时的可见性,即一个线程修改了某个变量的值,这个值对其他线程来说是立即可见的。
  • 禁止进行指令的重排序。

原子性
原子性的意思是一个操作要么执行,要么不执行,在执行的过程中不会被打断。Java中原子性适用于除了long和double的原始数据类型的"简单操作"。从内存中读写除了long和double的原始数据类型都是原子操作。但是变量之间的相互赋值不是原子操作。

int a = 1;   //是原子操作
int b = 1;   //原子操作
int c = a;   //这一步中需要从内存中取出a的值再赋值给c。这是两步操作。

可见性
可见性是指当多个线程访问同一个变量的时候,一个线程修改了一个变量的值,那么其他线程立即可以看到变量值的变化。

有序性
即程序执行的顺序按照代码先后顺序执行。

int a =1;    //语句1
Int b =2;    //语句2

虽然语句1看上去在语句2的前面,但是在执行的时候不一定是语句1先执行。因为可能会发生指令重排序。指令重排序是指处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的先后顺序一致,但是它保证程序最终执行结果和程勋顺序执行的结果是一致的。但是处理器在进行重排序的时候,考虑指令之间的数据依赖性。

2.Java中的垃圾处理机制
垃圾的定义:如果对象实体没有引用指向,那么存储该实体的内存就是垃圾。

3.多线程之间有两种关系:同步互斥

4.大端模式是指数据的高字节保存在内存的低地址中。这种模式有点类似于把数据当字符串处理,地址由小向大增加,数据从高位往低位放。
小端模式是指数据的高字节保存在内存的高地址中。这种存储模式把地址位高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

5.动态链接:动态就是不对那些组成程序的目标文件进行链接,等到程序运行时才进行链接。把链接的过程推迟到了运行时再进行。
静态链接的缺点

  1. 同一个模块被多个模块链接时,那么这个模块在磁盘和内存中都有多个副本,导致很大一部分空间被浪费。
  2. 当程序的任意一个模块发生变化时,整个程序都要更新链接、发布给用户。

链接文件

  1. 在Linux中,ELF的动态链接文件被称为动态共享对象(Dynamic shared object,DSO),是以**.so**为扩展名结尾的文件。
  2. 在Windows中,EP的动态链接文件被称为动态链接库(Dynamic linked library,DLL),以**.dll**为扩展名的文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章