-
工厂模式
工厂模式是一个很常用的设计模式,在项目中经常能见到它的身影。工厂模式常被用作解耦。应用场景与数据库打交道时,我们使用JDBC隔离了数据库的具体实现,当从MYSQL切换到Oracle时只需修改驱动名称;在Android开发中,BitmapFactory也是工厂模式的典型案例,我们可以使用这个工厂类解析多种资源返回bitmap对象。定义UML图UML图中,Product为抽象产品类,提供事物的抽象定义,ConcreteProduct为Product的具体实现,工厂方法返回的也是这些类的对象。C...…
-
单例模式
单例模式,顾名思义,就是这个类只能有一个实例,生命周期一般与应用相同,作用域一般是全局。单例模式是23中设计模式里面最简单的一个,本身也比较常见,所以了解它也是学习编程的基本要求。应用:计数器、打印机对象、I/O流和socket等实现1.懒汉式(线程不安全)这是最基本的单例模式,很简单,但是在多线程情况下可能会创建超过一个实例public class Singleton { private static Singleton instance; private Singl...…
-
Windows下caffe环境搭建
近期由于课程设计需要用到caffe框架,就尝试了Windows环境配置caffe环境,谁知这是一个大坑啊,各种问题解决起来花个两三天是正常的。本人大部分按照下面的教程进行https://blog.csdn.net/maltliquor/article/details/78261339 和 https://blog.csdn.net/maltliquor/article/details/78284141 ,并记录一些自己遇到的奇特的坑。这两个教程是连续的,后面一个在caffe安装成功后配置p...…
-
类型信息
在运行时我们如何识别类和对象的信息呢?一般有两种方式: “传统”RTTI,假定编译时已经知道所有类型信息 “反射”机制,运行运行时发现使用类的信息Class对象可通过forName()创建Class引用类字面常量——另一种生成对class对象的引用:Name.class类型转换前的检查instanceof:返回对象是否是某个特定类型的实例反射:运行时的类信息与RTTI的区别:RTTI在编译时打开和检查.class文件,反射是在运行时检查…
-
注解
使用注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。java有三个内置注解 @Override @Deprecated @SuppressWarnings基本语法注解的语法与修饰符的使用几乎一样元注解: @Target @Retention @Documented @Inherited…
-
异常
基本异常异常情形是阻止当前方法求作用域继续执行的问题(区别于普通问题)标准异常类的构造器包含有: 默认构造器 接收字符串做参数捕获异常监控区域——在try块里面异常处理程序——catch块:就像一个接收且仅接收一个特殊类型的参数的方法。对于出现异常的处理有两种模型:终止模型和恢复模型。终止模型即结束方法,恢复即企图恢复现场,这种想法很美好但是实际中实现难度大,所以一般的语言都选择终止模型。创建自定义异常创建异常,类名最重要,最好使用那种能一眼看出作用的名字。打印时使用System.er...…
-
持有对象
“如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个简单的程序”。为了方便存放数量,java提供了一些“集合类”(也叫“容器类”)。泛型和泛型安全的容器容器顾名思义是容纳对象的,但是对象有很多种,如何保证存放的类型相同,或者更重要的取出来是哪个类型,就需要用到泛型。具体用法是使用ArrayList<>指定具体类型。基本概念总的来说,List、Set和Queue实现Collection接口,Map是单独一个添加一组元素可以把数组变为List,使用Arrays.a...…
-
内部类
所谓内部类,就是把一个类的定义放在另一个类的定义内部。创建内部类创建内部类的方式很简单,只需在一个类里面进行定义即可,并且也可能是public的。如果在外部类的。如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,需要具体指明:OuterClassName.InnerClassName。链接到外部类使用内部类可以做到名字隐藏和组织代码,此外内部类还能与外部类拥有联系,它拥有对外部类所有元素的访问权。这个怎么做到的呢?事实上当某个外部类的对象创建一个内部类的时候,这个内部类对象会秘...…
-
接口
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 ### 抽象类和抽象方法 形如```abstract void f();```的方法称为抽象方法。抽象方法是不完整的,只有声明没有方法体(注意不是空函数的意思)。而含有抽象方法的类就叫**抽象类**。如果一个类想从抽象类中继承,就必须为所有抽象方法提供定义。接口接口在抽象的概念上走得更远。抽象类允许有非抽象方法,而接口里面所有方法都只声明而没有方法体。接口的访问权限有两种:public和包访问权限。如果接口里面含有数据域,则...…
-
多态
面向对象语言有三个基本特征:封装、继承和多态。向上转型有时候在调用一个方法传参时,可以把某个类的子类当作基类传进去,这种把某个对象的引用视为对其基类型的引用的做法称为向上转型。这种做法的好处是不需要知道确切的对象类型,使代码更加通用。绑定将一个方法调用和一个方法的主体关联起来的做法叫做绑定。绑定分为前期绑定和后期绑定,C只有前期绑定。为了解决多态中方法调用主体的问题,java使用后期绑定(也就是多态),顾名思义,在调用方法时才会和这个方法所属的对象绑定。在java中,除了static方法和...…
-
复用类
利用旧代码实现功能的拓展,如果只是复制黏贴就显得笨拙,更优雅的方式是组合和继承。组合,顾名思义,即是在新的类中产生现有类的对象,也就是新的类由现有类组成,显得非常直观。而继承则是按照现有类来创建新类,采用现有类的形式并在其中添加新代码。组合语法这种方法很常见也很直观,只需把对象引用放进新类中即可。例如public class A{ private String str1,str2; private B b = new B(); private int i;}这里要注意,初始化时基...…
-
访问权限控制
在一份java程序中,为了说明哪些可用哪些不可用,java提供了访问权限修饰词。权限等级从大到小排列依次为:public > protected > 包访问权限(不写关键词) > private。包:库单元包是一种层次结构,里面包含一组类。如果要使用一个类库里面的文件,就要使用package或import,例如package access.mypackage;public class MyClass{ //}和import access.mypackage.*;pu...…
-
初始化与清理
要深入学习java,了解初始化和清理过程时必不可少的。构造器构造器是一个特殊的方法,它名字与类名相同,没有返回值(不同于void),可以含参数列表(没有任何参数则为默认构造器,如果你的类没有构造器,则编译器会自动创建一个默认构造器)。使用new语句则调用构造器,会为对象分配存储空间。方法重载在前面我们看到,几个构造器名字相同,为了解决名字相同造成的冲突问题,java引入了一种叫方法重载的机制。所谓重载,即在一个类里面,方法名字相同而参数不同,返回类型、修饰符可同可不同。所以,对...…
-
一切都是对象
java是一种OOP(面向对象)语言,它假设我们只进行面向对象设计。在学习java过程中我们可以感受到,在java中(几乎)一切都是对象。用引用操纵对象尽管java一切都可看作对象,但实际上我们操纵的是对象的一个“引用”。它指向保存在内存中的对象,就像我们用遥控器可以操控电视机。在生成对象语句Person a =new Person();中,Person是我们编写的类,类是对象的模版,这一句就表示初始化一个对象并把该对象的引用赋给a,而不是把整一个保存在内存中的元素拿出来。对象的创建对象创...…
-
区块链入门
这篇文章主要基于中本聪的《Bitcoin: A Peer-to-Peer Electronic Cash System》。区块链技术可以追溯到数十年前,但是2008年中本聪发表的比特币原始论文提出一种基于区块链的项目——比特币,因为其创新和可实现让这种货币和它的底层技术——区块链一起带火起来。中本聪的这篇论文着重讲述网络结构,公式较少,尝试用现代技术去完成去中心化的网络体系,更像是一篇蓝图,阅读起来并不困难所以推荐阅读原文。简介比特币是一种区别于我们平时使用的第三方支付(比如微信、支付宝)...…
-
RL学习笔记二:MDP
MDP(Markov Decision Processes)是强化学习的基础,理解MDP对RL的后续学习起着关键的作用。下面利用上一个笔记的基本概念和马尔科夫性,对MDP进行展开和理解。马尔科夫过程(Markov Process)现实世界是复杂的,为了刻画现实中的不确定性,常引用随机的概念。在考察含有随机因素的动态系统时,常有:系统在每个时期的状态是随机的,从这个时期到下一个时期的状态按照一定概率进行转移(即状态转移概率),并且下个时期的状态只取决于这个时期的状态和转移概率,与以前...…
-
RL学习笔记一:简介
这几年人工智能火爆,近期也因为项目的原因开始接触机器学习。目前学的是强化学习,为了对学过的知识进行整理总结,准备以博客的形式写出来,主要内容是David Silver的公开课。限于水平如有错误欢迎指正! 强化学习(Reinforcement Learning)也叫增强学习,是一种机器学习方法。有一种机器学习分类是把学习算法分为三种:监督学习、无监督学习和强化学习。不同于监督学习,强化学习没有标签数据,只有一种叫reward(奖励)的标量信号评价动作的好坏,所以强化学习看起来很另类。这...…