摘要: 1、多态 将方法调用同方法主体关联起来的操作叫做绑定(分派)。 前期绑定:程序执行前由编译器和链接程序实现的绑定。 后期绑定:在运行时根据对象的类型确定调用方法。 Java中除了static方法和final方法外(private方法属于final方法),都是后期绑定的(构造器隐式地为static的) 阅读全文
posted @ 2021-09-17 12:49 Lqblalala 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 1、组合和继承 A is-a B:A、B本质上是一个东西。——继承 A has-a B: B是A的一部分,但它们不是一回事。——组合 组合复用了功能,而非形式。 继承不只是复制基类的接口和字段,当创建一个导出类对象时,该对象中包含了一个基类的子对象。 所以,要对基类子对象进行初始化,在导出类构造器中 阅读全文
posted @ 2021-09-17 12:49 Lqblalala 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 1、创建和实例化内部类 可以将一个类的定义放在另一个类的内部,这就是内部类。 把类的定义放在外围类的里面,这就创建了一个内部类。 内部类持有指向其外围类的引用,这是在编译时自动添加上去的。 所以,内部类自动拥有对其外围类的所有成员的访问权限(包括private成员)。 可以 .this获取内部类引用 阅读全文
posted @ 2021-09-17 12:48 Lqblalala 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 1、抽象类和抽象方法 包含抽象方法的类叫做抽象类。只要类中包含抽象方法,就要声名为抽象类。 导出类会继承基类的所有方法,因此如果没有覆写(实现)基类中的所有抽象方法, 就必须声名为抽象类。 2、接口 interface声名一个接口,接口是比抽象类更加抽象的存在。 除了默认方法和静态方法,接口中的其他 阅读全文
posted @ 2021-09-17 12:48 Lqblalala 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 1、摘要 发现错误的最好时机是在编译时,在程序运行之前发现的错误容易修改,且修改的代价小。 但是,如果程序在运行时发生错误怎么办? 对于没有错误处理机制的代码,它将直接退出。 稍微改进一点,就是在退出时,返回错误码,允许人们通过错误码来检查错误。(错误码怎么设计完全取决于实现者,难以统一) 更进一步 阅读全文
posted @ 2021-09-17 12:47 Lqblalala 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 1、概述 现代计算机中,CPU的运算速度远远快于内存存取速度,为了更好利用CPU的硬件性能,人们想出来很多办法。 1、减小CPU和内存的速度差距——cache 通过在CPU和内存之间加入一层缓冲层,CPU的输出输入到cache中,输入从cache中获得。 然后再利用局部性原理,预先在cache中存入 阅读全文
posted @ 2021-09-17 12:46 Lqblalala 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 1、构造器保证初始化 没有定义构造器时,编译器会生成一个默认构造器(无参构造器);但是,当自己定义了有参构造器时,编译器不会生成默认构造器,调用new时,必须传入匹配的参数。 2、方法重载 每个重载的方法都具有独一无二的参数列表(类型、顺序)。 3、this关键字 调用对象方法时,编译器把对象的引用 阅读全文
posted @ 2021-09-17 12:46 Lqblalala 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 1、什么是流 提到流,首先想到的就是Linux中的管道,它可以将几个函数的输入和输出连接起来。 Stream也可以达到类似的效果,它在内部维护了数据迭代的过程,我们不用处理数据的迭代, 同时,它为我们提供了一些接口,使得我们可以对流中的数据进行处理。 经过Stream的抽象后,对数据的处理就像流水线 阅读全文
posted @ 2021-09-17 12:45 Lqblalala 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 1、什么是线程安全 Brian Goetz 在 《Java Concurrency In Practice》中定义的线程安全为: “当多线程访问一个对象时,无论这些线程在运行时环境下以何种方式调度和交替执行, 在使用对象时,都不需要任何额外的同步,就可以得到正确的行为和结果,那么这个对象就是线程安全 阅读全文
posted @ 2021-09-17 12:45 Lqblalala 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 1、摘要 用更少的代码干更多的事,一直是程序员的追求。 但是很多时候,需求的变化,很容易让我们写出高度冗余的代码。 很多函数可能就是几句核心代码不一样,复制粘贴稍微改改就行。 行为参数化,就是把行为封装起来,然后作为参数传递。 策略模式就是一种行为参数化的实现,将行为封装在不同的类中,然后通过传递类 阅读全文
posted @ 2021-09-17 12:44 Lqblalala 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 1、摘要 让线程和任务启动很容易,但是,要安全地关闭它们,就不是那么容易了。 Java中没有提供任何机制来安全地终止线程。 中断(Interruption)只是一种协作机制,然一个线程告诉另一个线程:我想让你停下来。 但是,另一个线程是否会停下来取决于它执行的任务里面是否响应了中断,并且采取了什么中 阅读全文
posted @ 2021-09-17 12:43 Lqblalala 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 1、任务 什么是任务? 任务通常是一组抽象且离散的工作单元,通过把程序的功能分解到多个任务, 可以简化程序结构,优化错误处理,以及提供自然的并行工作结构。 找出任务的边界: 在理想的情况下,任务应该是相互独立的,任务的独立有助于实现并发。 每一项任务都应该表示程序的一部分处理能力,以便方便实现调度和 阅读全文
posted @ 2021-09-17 12:43 Lqblalala 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 1、同步容器类 同步容器类包括Vector、HashTable以及在这两者基础上实现的类(如基于Vector实现的Stack), 还包括通过Collections.synchronizedXxx工厂方法创建的同步封装器类。 这些同步封装器类通过将底层类的状态封装起来,并对每个公有方法都进行了同步,来 阅读全文
posted @ 2021-09-17 12:43 Lqblalala 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 1、摘要 虽然知道了如何去编写线程安全的类,但是,我们不希望每一次都从底层的类开始写。 我们如何能够使用现有的线程安全类来组合为更大规模的组件或程序呢? 如何用不是线程安全的类来组合构建我们的线程安全类呢? 2、设计线程安全的类 在设计线程安全类时,需要包含以下三个要素: 1、找出构成对象状态的所有 阅读全文
posted @ 2021-09-17 12:42 Lqblalala 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 1、并发简介 进程是操作系统资源分配的基本单位,线程是操作系统调度的基本单位。 线程允许在同一个进程中同时存在多个程序控制流。 线程会共享进程范围内的资源(内存句柄,文件句柄等),但每个线程都有自己的PC、栈以及局部变量等。 Java堆、方法区是线程间共享的;PC、虚拟机栈、本地方法栈是线程私有的。 阅读全文
posted @ 2021-09-17 12:41 Lqblalala 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 1、简介 单例模式下,一个类只能有一个实例。外部能获取到的实例都是一样的。 Spring中的Bean默认就是单例的。 单例减少了内存占用。 如何实现? 唯一实例:static。 外部不能再创建对象:将构造器声名为私有的。 外部获取单例对象:声名一个工厂方法返回单例引用。 2、实现 /** * 线程不 阅读全文
posted @ 2021-09-17 12:40 Lqblalala 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 1、对抗性搜索 对抗搜索也称为博弈搜索。 在人工智能领域可以定义为:在一定规则条件下,有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏(如象棋)。 零和游戏:即你死我活,损人利己,为了我取得最佳结果,对手必须取得最差结果。 既然是游戏,那么就可以对其进行建模了: 初始状态:游戏开始时的初始值 阅读全文
posted @ 2021-09-17 02:05 Lqblalala 阅读(549) 评论(0) 推荐(0) 编辑