- 博客(69)
- 收藏
- 关注
原创 Java设计模式 - 适配器模式
1. 定义将一个类的接口,转换为客户期望的另一个接口,让原本接口不相容的类可以合作无间。2. 角色Target:目标抽象类 Accepter:适配器类 Acceptee:适配者类 Client:客户类3. 特点优点:通过引入一个适配器类来重用现有适配者类,而无需修改原代码,提高了适配者类代码的复用性。 缺点:若使用类适配器,对于Java等语言来说只支持单继承,因此只能...
2020-01-11 14:55:25
198
原创 Java设计模式 - 建造者模式
1.定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2.角色Builder:建造者 ConcreteBuilder:具体建造者 Director:指挥者 Product:产品3.特点优点:将产品本身与产品创建过程解耦,每一个具体建造者都相对独立,因此可以方便地替换或新增具体建造者。 缺点:如果产品内部变化复杂,则需要许多具体建造者来应对这...
2020-01-09 14:59:52
108
原创 Java设计模式 - 单例模式
目录一、介绍1.定义2.角色3.特点二、实现1.饿汉式(线程安全)2.懒汉式3.懒汉式(双重检查加锁版本)4. 枚举方式5.静态内部类一、介绍1.定义确保类只有一个实例,并提供一个全局访问点。2.角色Singleton:单例类3.特点优点:因为系统内存中只有一个实例,可以节约系统资源,并且减少了因为创建、销毁对象带来的损耗,提高...
2020-01-09 13:52:13
80
原创 Java设计模式 - 工厂模式
工厂模式能够将对象的创建和使用解耦,且当创建一个对象的过程繁杂时,又有大量地方需要重复创建该对象,使用工厂模式则可以降低代码的重复率。另外,将对象的创建封装到工厂类,当创建过程发生改变时,可直接修改工厂类,而无需到每个创建对象的地方修改代码,降低了系统的维护成本。目录一、简单工厂模式1.定义2.角色:3.特点4.示例二、工厂方法模式1.定义2.角色3....
2020-01-09 13:09:02
105
原创 Java之集合 - ArrayList源码分析
一、简介上图为ArrayList的继承树,可看出实现了四个接口,分别介绍一下:Serializable:是一个空接口,实现了该接口的类可序列化和反序列化 Cloneable:是一个空接口,实现该接口的类覆盖了clone()方法,表明该类的实例对象能被克隆 RandomAccess:是一个空接口,表明该类的实例对象支持随机访问 List:表明该类是一个列表,具有增加、删除、修改、遍...
2019-11-14 11:22:57
127
原创 Java之并发 - 创建线程池的方式
一、通过Executors类提供的静态方法创建1. newFixedThreadPoolpublic static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new Link...
2019-11-09 11:23:16
130
原创 Java 线程池的拒绝策略 RejectedExecutorHandler
当线程池被关闭以后,在execute()方法中提交新任务将被拒绝(线程池被关闭或线程数达到maximumPoolSize),此时会采取定义的拒绝策略。在ThreadPoolExecutor中定义了四个静态内部类,均实现了RejectedExecutorService接口,并对接口中的rejectedExecution方法给出具体实现。一、CallerRunsPolicy如果线程池没有被...
2019-11-08 23:07:42
469
原创 线程池源码分析
一、线程池继承结构二、Executor接口public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thread, or i...
2019-11-08 22:04:40
137
原创 排序算法比较与总结
一、插入排序1. 核心思想共进行 N - 1 趟排序,对于 P = 1 到 P = N - 1 趟,保证从位置0到位置P上的元素为排序状态。在第P趟,将位置P上的元素移动到前P + 1个元素的正确位置上,比其更大的元素都向右移动一个位置。(图片链接:http://www.goyth.com/2018/02/08/straightInsertionSort/)2. 分析如果输入...
2019-10-10 15:56:58
176
原创 HTTP协议入门
一、 简介1. HTTP(HyperText Transfer Protocol)是Web的应用层协议,是Web的核心,由两个程序——服务器程序和客户程序实现。 HTTP定义了Web客户向Web服务器发送请求Web页面的方式,以及服务器向客户传送Web页面的方式。 HTTP运行在TCP上,由HTTP客户发起一个与服务器的TCP连接,一旦连接建立,该浏览器和服务器进程可通过套接字接口访问...
2019-06-09 17:30:34
112
原创 git基本操作命令
一、配置1. 配置用户名,邮箱及文本编辑器$ git config --global user.name "name"$ git config --global user.email email$ git config --global core.editor emacs2. 检查配置信息或某项配置$ git config --list$ git config <...
2018-08-10 14:51:39
106
原创 laravel可用的断言方法(持续更新)
$response->assertCount($num, $data);//断言data的数量为num$response->assertDoneSee($value);//断言给定的字符串包不含在响应中$response->assertEquals($expected, $actual);//断言两个对象是否相等$response->assertInstanc...
2018-08-08 21:35:29
1584
原创 laravel的fillable和guarded属性
所有的Eloquent模型预设会防止批量赋值,所以需要在Model中设置fillable和guarded属性。 protected $fillable = ['name'];protected $guarded = ['password'];fillable为白名单,表示该字段可被批量赋值;guarded为黑名单,表示该字段不可被批量赋值。可为所有属性设置黑名单:pr...
2018-08-06 22:08:26
13187
原创 C++类型转换运算符
语法:Type_cast <type-name> (expression);1. dynamic_cast:使得能够在类层次结构中进行向上转换。用于指针类型转换时,若不能安全转换则返回空指针;用于引用类型转换时,若不能安全转换则返回bad_cast异常。2. const_cast:改变值为const或volatile,其type-name和expression的类型...
2018-04-02 18:19:53
119
原创 C++ Primer Plus 第十六章笔记
一、string类1. 构造函数:注:npos为字符串的最大长度;NBTS表示以空字符结尾的字符串2. 输入:3. 使用字符串:(1) 可以运用关系运算符比较字符串。(2) size() 和 length() 成员函数返回字符串的字符数。(3) 搜索字符串或字符:(4) capacity() 返回当前分配给字符串的内存块的大小;...
2018-03-18 15:33:35
199
原创 C++ Primer Plus 第十五章笔记
1. 友元类的所有方法都可以访问原始类的私有成员和保护成员,其声明可以位于公有、私有或保护部分。2. 包含意味着将类对象作为另一个类的成员,而对类进行嵌套不创建类成员,而是定义了一种类型,该类型仅在包含嵌套类声明的类中有效。3. 嵌套类的作用域:(1) 嵌套类在另一个类的私有部分声明,则只有后者知道它;(2) 在另一个类的保护部分声明,则它对于后者...
2018-03-17 17:13:48
301
原创 C++ Primer Plus 第十四章笔记
1. 建立has-a关系:(1)组合(包含),即创建一个包含其他类对象的类。注意:使用公有继承时,类可以继承接口和实现;使用组合,类可以获得实现但不能获得接口,接口虽然不是共有的,但可以在类方法中使用它。(2)私有继承。使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员,这意味着基类方法将不会成为派生对象公有接口的一部分,但可以在派生类的成员函数中使用它们。使用私有继承时,只...
2018-03-17 11:09:24
177
原创 C++ Primer Plus 第十三章笔记
1. 使用公有派生,基类的公有成员将成为派生类的共有成员;基类的私有部分也将成为派生类的一部分,但只能通过基类的公有和保护方法访问。2. 派生类构造函数必须使用基类构造函数,意味着基类对象应当在程序进入派生类构造函数之前被创建。如果不调用基类构造函数,程序将使用默认的基类构造函数。3. 可将派生类对象和地址赋给基类引用和指针,被称为向上强制转换,不需进行显式类型转换,...
2018-03-16 16:16:48
230
原创 C++ Primer Plus 第十二章笔记
1. 调用复制构造函数:当函数按值传递对象或函数返回对象时,都将使用复制构造函数。2. 如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据,而不是指针,称为深度赋值。复制的另一种形式只是复制指针值,仅浅浅地复制指针信息,称为浅复制。3. 将已有的对象赋给另一个对象时,将使用重载的赋值运算符;初始化对象时,并不一定会使用赋值运算符。4....
2018-03-15 18:21:03
347
原创 C++ Primer Plus 第十一章笔记
1. 友元函数不是成员函数,不需要使用限定符,关键字friend加在原型前而不能加在定义前。只有类声明可以决定哪一个函数是友元,因此类声明仍然控制了哪些函数可以访问私有数据。2. 只接受一个参数的构造函数定义了从参数类型带类类型的转换(含多个参数但除第一个参数外均提供了默认值也可)。如果使用关键字explicit限定了这种构造函数,则它只能用于显式转换。3. ...
2018-03-14 14:15:48
145
原创 C++ Primer Plus 第十章笔记
1. 面向对象编程(OOP)是一种特殊的、设计程序的概念方法,其特性有:抽象、封装和数据隐藏、多态、继承、代码的可重用性。2. 其定义位于类声明中的函数都将自动成为内联函数;也可在类声明之外定义成员函数并使其成为内联函数,需在类实现部分中定义函数时使用inline限定符。3. 公有部分的内容构成了设计的抽象部分——公有接口,将数据封装到私有部分中可以保护数...
2018-03-12 15:22:59
191
原创 C++ Primer Plus 第九章笔记
1.使用#ifndef…#endif不能防止编译器将文件包含两次,而只是让它忽略第一次包含之外的所有内容。2.C++存储数据的方法:自动存储持续性(使用栈管理);静态存储持续性;线程存储持续性(C++11);动态存储持续性。3.三种静态持续变量:在代码块外声明,创建链接性为外部的静态持续变量;在代码块外声明并使用关键字static,创建链接性为内部的静态持续变量;在代码块内声明并使用关键字stat...
2018-03-12 15:21:44
235
原创 C++ Primer Plus 第八章笔记
1. 内联函数的运行速度比常规函数稍快,但占用内存。要使用这项特性,需在函数声明和定义前加上关键字incline。2. 必须在声明引用时将其初始化,且一旦与某个变量关联起来,就不能改变。3. 若将引用作为函数的参数时,其实参应是变量,不能是表达式。4. 对于形参为const引用的C++函数,如果实参不匹配(实参类型正确,但不是左值;实参类型不...
2018-03-10 17:00:13
238
原创 C++ Primer Plus 第七章笔记
1. cin.get()函数读取所有的输入字符,包括空格和换行符,二cin>>跳过空格和换行符。2. 仅当只有一层间接关系时,才可以将非const地址或指针赋给const指针;而C++禁止将const的地址赋给非const指针。3. 通常,要声明指定特定类型的函数的指针,可以首先编写这种函数的原型,然后用(*pf)替换函数名。4. ...
2018-03-10 16:59:06
181
原创 C++ Primer Plus 第六章笔记
1. 若果选项超过两个,则就代码长度和执行速度而言,switch语句的效率比if else高。2. 处理错误输入代码:3. 打开文件open()函数接受一个C-风格字符串作为参数。...
2018-03-09 14:17:29
131
原创 C++ Primer Plus 第五章笔记
1. 对于内置类型,递增/减前缀和后缀不会有差别;对于用户定义的类型,如果有用户定义的递增和递减运算符,则前缀格式效率更高。2. C++规定,逗号表达式的值是第二部分的值。3. 编写延时循环:4. 基于范围的for循环(C++):5. 6. cin.get()版本:cin.get(); cin.get(char); cin.get(char*, int);7. 程序检...
2018-03-08 19:48:03
123
原创 C++ Primer Plus 第四章笔记
1. 只有在定义数组时才能使用初始化,且不能将一个数组赋给另一个数组。C++11数组初始化:可省略等号;在大括号不包含任何东西则为将所有元素设置为0.2. 若没有初始化数组,则元素的值为以前驻留在该内存单元中的值;若只初始化部分元素或将第一个元素设置为0,则编译器将其他元素设置为0.3. 任何两个空白分隔的字符串常量都将自动拼接成一个。4. 字符串输入:(1...
2018-03-07 15:59:23
198
原创 C++ Primer Plus 第三章笔记
1. 变量名命名需注意:以两个下划线或下划线和大写字母打头的名称被保留给实现使用;以一个下划线开头的名称被保留给实现,用作全局标识符。2. 对类型名使用sizeof运算符时,应将名称放在括号中,但对变量名使用时括号可选。3. 头文件climits定义了符号常量来表示类型的限制。4. 若不对函数内部定义的变量进行初始化,则该变量的值将是它被创建之前相应内存单元...
2018-03-05 16:57:59
221
2
原创 C++ Primer Plus 第二章笔记
1. 如果编译器到达main()函数末尾时没有遇到返回语句,则认为main()函数以“return 0;”语句结尾。这条隐含的返回语句只适用于main()函数,而不适用于其他函数。2. 若要使所需名称可用,如endl,可用以下语句实现:std::endl; using std::endl; using namespace std;3. C++中重起一行...
2018-03-05 15:42:08
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅