主页

内部类

2020-04-09
java

成员内部类 #

  • 成员内部类可以使用外部类的所有属性方法。

局部内部类 #

  • 如果希望访问所在方法的局部变量,那么这个局部变量就必须是有效final的。
  • 从java8开始,只要局部变量事实不变,那么final关键字可以省略。
  • 可以使用外部类的所有属性和方法。

匿名内部类 #

  • 参考局部内部类。

interface

2020-04-09
java

  • 接口中的抽象方法,修饰符必须是public abstract,这两个关键字可以选择性的忽略。
  • 接口中的属性,修饰符必须是public static final,这三个关键字可选择性的忽略。
  • 接口中的常量必须赋值,且命名建议完全大写(多个单词之间用“_”隔开)。
  • jdk8及以后版本:
    • 被default修饰的方法,修饰符必须是public,可省略。子类可覆盖重写default方法。
    • 被static修饰的方法,修饰符必须是public,可以省略。
    • 不能通过接口实现类的对象来调用接口中的static方法。

final

2020-04-09
java

  • final修饰局部变量
public void test1(){
    //正确写法
    final int a;
    a=10;
    
    //正确写法
    final int b=10;
    
    //定义后不能再次进行赋值
    a=10;//错误
}
//tips:final如果修饰一个对象,那么该对象的引用的地址不能改变,但是对象的属性可以改变。
  • final修饰对象属性
//正确写法,即在属性定义处赋值
class Student{
    private final int a=10;
}

//正确写法,当在属性处没有赋值时,必须在该类的所有构造方法中进行赋值
class Student2{
    private final int a;
    
    public Student2(){
    	a=10;    
    }
    public Student2(int a){
    	this.a=a;
    }
}
//tips:不能既在属性定义处赋值,又在类的构造方法中赋值

临界资源

2020-04-09
操作系统

  • 临界资源:某段时间内只能允许一个进程使用的资源。
  • 临界区:进程中访问临界资源的代码段。
进程P1
tmp1=s;
tmp1=tmp1+1;
s=tmp1;

进程P2
tmp2=s;
tmp2=tmp2-1;
s=tmp2;

当并发执行进程P1和进程P2时,可能会造成s的结果无法预测
此时,我们可以将s设置为临界资源,让进程P1P2互斥的访问sP1P2的代码就叫做临界区。

系统调用

2020-04-09
操作系统

  • 系统调用是操作系统提供给应用程序使用的接口,应用程序可以发出系统调用请求来获取操作系统的服务。
  • 在用户程序中,凡是和资源有关的操作(如存储分配、io操作、文件管理等),都必须由系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性。
  • 系统调用的相关处理运行在核心态。
  • 有些库函数会封装一些系统调用。

中断

2020-04-09
操作系统

  • 当中断发生时,cpu立即进入核心态。
  • 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理。
  • 用户态 —>核心态 是通过中断实现的,并且中断是唯一途径。
  • 核心态—>用户态 是通过执行一个特权指令,将程序状态字psw的标志设置为“用户态”。

中断处理过程 #

中断

  1. 执行完每个指令后,cpu会检查当前是否有外部中断信号。
  2. 如果检测到了外部中断信号,则需要保护现场。
  3. 根据中断信号类型转入相应的中断处理程序。
  4. 恢复原进程的cpu环境并退出中断,返回原程序并继续执行。

管程

2020-04-07
操作系统

管程是一种特殊的软件模块,由这些部分组成: #
  1. 局部与管程的共享数据结构说明;
  2. 对该数据结构进行操作的一组过程;
  3. 对局部于管程的共享数据设置初始值的语句;
  4. 管程有一个名字。
管程的基本特征: #
  1. 局部于管程的数据只能被局部于管程的过程访问;
  2. 一个进程只有通过调用管程内的过程才能进入管程访问共享数据;
  3. 每次仅允许一个进程在管程内执行某个内部过程。

浮点数

2020-03-27
计算机组成原理

浮点数 #

  • 浮点表示法:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示的方法。

32位浮点数 #

  • 数的量级在1x2-126至1.11…x2127之间,大概就是1.19x10-38至3.40x1038之间,如果有一个数为1040,就不能使用float来存了。

0 | 100 0001 0 | 011 0110 0000 0000 0000 0000 #

  • 第一部分表示符号位,0为正数,1为负数
  • 第二部分共8位,表示阶码(指数),需要减去127
  • 第三部分(23位)表示尾数(小数点后面的数)。
  • 0表示为正数,100 0001 0减127为3,剩余23位放在1.的后面,即1.011011,所以结果为1.011011x23

64位浮点数 #

  • 阶码宽度为11位,
  • 位数宽度为52位
  • 数的量级在1x2-1022 至 (2-2-52)x21023之间,大概就是10-308至10308

程序计数器 #

  • PC总是存储将要执行的下一条指令的地址