TJI读书笔记09-访问控制权限 包,package和import 权限修饰符 接口和实现 类的访问权限控制 首先问一个问题,为什么要有访问控制权限? 安全,这当然是一个很重要的原因. 让类库的使用者只能接触他做需要接触的东西. 另外一方面,当我们去重构和修改代码的时候,如何不影响其他的代码和功能?权限访问控制是可以很好的将”变动的事物”和”不变的事物”区分开来.比如一个类库,在移除旧的实现添加新的实现的时候,很有可能会破坏客户端程序员的代码. 那么怎么办呢. 一个很好的思想就是,只暴露有必要的…
强化学习读书笔记 - 10 - on-policy控制的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto c 2014, 2015, 2016 参照 Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto c 2014, 2015, 2016 强化学习读书笔记 - 0…
六星经典CSAPP笔记(1)计算机系统巡游 六星经典CSAPP笔记(2)信息的操作和表示 六星经典CSAPP-笔记(3)程序的机器级表示…
原先刊于自己的域名下面,考虑到博客园之前发过一半,不想烂尾,故在博客园发一版. 到目前为止我们只考虑了直线代码的执行行为,也就是指令一条接着一条执行.C语言中的某些语句,比如条件语句.循环.分支语句,要求有条件地执行,或根据某些表达式的结果决定操作的顺序.机器代码提供基本的低级机制来实现有条件的行为:测试数据值,然后根据测试结果来改变控制流或数据流. 先介绍通过控制流来实现有条件的行为.用jump指令可以改变一组机器代码的执行顺序.jump指令指定控制应该传递到程序的哪个其他部分,这可能依赖于某…
本博客对于汇编的介绍基于32位机器的Intel x86系列处理器和IA32指令集,也涉及少部分x86-64.由于汇编知识相对复杂,这里只做简单介绍和记录,详细请参照书本! 数据格式 下面这张表格中体现了C语言基本数据类型和IA32的对应表示. C语言中的声明 Intel 数据类型 汇编代码后缀 大小(字节) char 字节 b(byte) 1 short 字 w(word) 2 int 双字 l(long) 4 long int 双字 l 4 long long int "四字" -…
程序的机器级表示 计算机能读懂是机器代码(machine code)-- 用字节序列编码的低级操作 -- 也就是0和1.编译器基于编程语言的规则.目标机器的指令集和操作系统的规则,经过一系列阶段产生机器代码.由于机器语言全是由0和1组成的,所以对于编程人员来说编写机器代码十分困难,也不容易学习.汇编语言(assembly language)就是机器语言的可读形式,学习汇编语言有很多的好处. An assembly (or assembler) language,[1] often abbrevi…
x86-64 Linux 内存结构 先来看看一个程序在内存中是如何组织的.Linux 为每个进程维持了一段单独的虚拟地址空间.(进程是计算机科学中很深刻.很成功的一个概念.当我们在运行一个程序时,会得到一个假象,好像我们的程序是系统当中运行的唯一程序,独占存储器和处理器资源.) 最上面是栈(stack),一般用来保存局部变量,有 8 MB 的大小限制,因此不建议在函数内开大数组,递归的效率低是因为容易栈溢出.栈的增长方向是向下的. 堆(heap),动态分配的内存会在这里处理,例如 malloc.…
下面介绍一些C语言中常见的特殊的数据存储方式,以及它们在汇编语言中是如何表示的. 数组 数组是一种将标量数据聚集成更大数据类型的方式.实现数组的方式其实十分简单,也非常容易翻译成机器代码.C语言的一个特点是可以产生指向数组元素的指针,然后可以对这些指针进行运算. 数组的基本原则如下: 对于数组的声明:T A[N];,这句语句有两个效果.首先,它在存储器中分配一个 L * N 个字节的连续区域,L 是数据类型 T 单位为字节的大小,用 $ X_A $ 来表示起始位置.其次,它引入标识符 A ,可以…
一个过程调用包括将数据(以参数和返回值的形式)与控制从代码的一部分传递到另一部分.除此之外,在进入时为过程的局部变量分配空间,在退出的时候释放这些空间.数据传递.局部变量的分配和释放通过操纵程序栈来实现.栈作为一种能够实现先进后出.后进先出的数据结构,非常适合用于实现函数调用以及返回的机制. 在过程调用中主要涉及三个重要的方面: 传递控制:包括如何开始执行过程代码,以及如何返回到开始的地方 传递数据:包括过程需要的参数以及过程的返回值 内存管理:如何在过程执行的时候分配内存,以及在返回之后释放内…
join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long millis):等待millis毫秒 join(long millis,int nanos):很少用,等待毫秒+毫微秒 看示例: package testpack; public class Test2 { public static void main(String[] args) throws…