- 博客(31)
- 资源 (3)
- 收藏
- 关注
原创 5. 抽象工厂方法
抽象工厂方法模式文章目录抽象工厂方法模式1. 意图2. 概述3. 结构图4. java代码实现5. 优缺点6. 使用场景7. 与其他模式的关系8. Java应用1. 意图工厂方法模式解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。可考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产2. 概述抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依
2020-08-19 01:27:03
597
原创 4. 工厂方法模式
工厂方法模式文章目录工厂方法模式1. 意图2. 概述3. 结构图4. java代码实现5. 优缺点6. 使用场景7. 与其他模式的关系8. Java应用1. 意图简单工厂模式通过所传入的不同来创建不同产品,必须要修改工厂类源代码,违反开闭原则,需要实现增加新产品而不影响源代码2. 概述工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pa
2020-08-19 01:25:26
397
原创 3. 简单工厂模式
简单工厂模式文章目录简单工厂模式1. 概述2. 意图3. 结构图4. Java代码实现5. 优缺点6.适用场景6.适用场景1. 概述简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。要点:当你需要什么,只需要传入一个正确的参
2020-08-18 22:36:24
318
原创 浅克隆和深克隆
Java-1. 深克隆和浅克隆深克隆和浅克隆* 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址(克隆地址)。* 即:克隆的非基本类型属性发生变化会使两个对象相互影响* 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址(克隆值)。* 即:克隆的非基本类型属性发生变化不会使两个对象相互影...
2019-10-16 22:18:33
167
原创 java排序算法(九)------基数排序
基数排序代码实现:public class RadixSort { public static void sort(int[] a) { int digit = 0;// 数组的最大位数 for (int i : a) { // 获取数组中数的最大位数 digit = Math.max(digit,...
2018-09-23 16:02:05
150
原创 java排序算法(八)------桶式排序
桶式排序实现代码:/** *桶式排序:有限个数字m,每个数字的大小都在1与n之间 *,则我们可以假设有n个桶,遍历m个数字,将其存入对应的桶中 *(如数字的值为3,就存入3号桶,桶的值对应存入数字的个数) */public class BucketSort { public static void sort(int[] arr){ //求得最大值 int max = arr...
2018-09-23 16:00:36
259
原创 java排序算法(七)------堆排序
堆排序代码实现:public static void sort01(int[] arr) { for (int i = 0; i < arr.length; i++) { headAdust01(arr, arr.length - 1 - i); swap(arr, 0, arr.length - 1 - i); } } public static void ...
2018-09-23 15:58:00
175
原创 java排序算法(六)------快速排序
快速排序基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列第一种方法:以第一个数为枢纽值public class QuickSort { public static int[] sortQuick(int[] array) {...
2018-09-23 15:50:06
323
原创 java排序算法(五)------归并排序
归并排序: 是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。合并相邻有序子序列代码实现:public class MergeSort { public static void sort(...
2018-09-23 13:30:40
152
原创 java排序算法(四)------希尔排序
希尔排序希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。代码实现:/** *希尔排序的诞生是由于插入排序在处理大规模数组的时候会遇到需要移动太多元素的问题。希尔排序的思想是将一个大的数组“分而治之”, *划分为若干个小的数组,以 gap 来划分,比如数组 [1, 2, 3, 4, 5, 6, ...
2018-09-23 13:22:14
149
原创 java排序算法(三)------选择排序
选择排序基本思想:每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。选择排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1)代码实现:public static void sort(int[] arr){ int t = 0; int min; for(int i = 0;i < arr.len...
2018-09-23 12:36:56
151
原创 java排序算法(二)------插入排序
插入排序直接插入排序基本思想: 每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。public static void sort(int[] arr) { int i; int t; for (int j = 1; j &lt; arr.length; j++) { t = arr[j]; for (i = j - 1; arr[...
2018-09-23 12:30:58
177
原创 java排序算法(一)------冒泡排序
冒泡排序冒泡排序: 两两比较相邻记录的关键字,如果反序则交换,直到没有反序记录为止冒泡排序是將比較大的數字沉在最下面,较小的浮在上面最简单的冒泡排序/* * 严格意义上说不满足冒泡排序思想,应该是最简单的交换排序而已 * 思路:让每一个关键字都和它后面的每一个关键字比较, * 大则交换,这样第一位置就变成最小值 */ //134 1172 35 91 119 85 4...
2018-09-23 12:22:47
181
原创 idea开发出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误
本人用Idea开发,出现如下Bug:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.younger.dao.UserMapper.findById at org.apache.ibatis.binding.MapperMethod$SqlCommand.<i...
2018-08-19 13:28:35
6110
2
原创 深入理解Java虚拟机----第十三章:线程安全与锁优化
第十三章:线程安全与锁优化13.1概述13.2线程安全 当多个线程访问一个对象的时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的13.2.1Java语言中的线程安全不可变在Java语言里(特指JDK1.5以后),不可变(...
2018-08-08 09:23:05
506
原创 深入理解Java虚拟机----第十二章:Java内存模型与线程
第十二章:Java内存模型与线程12.1概述衡量一个服务端的好坏,每秒事物处理数(Transactions Per second,TPS)是最重要的指标之一12.2硬件的效率与一致性基于高速缓存的存储交互很好的解决了处理器与内存的速度矛盾,但是也为计算机系统带来了更高的复杂性,引入了新的问题:缓存一致性为了使处理器内部运算单元尽量充分利用,处理器会对输入代码乱序执行优化...
2018-08-08 09:20:55
569
1
原创 深入理解Java虚拟机----第十一章:晚期(运行期)优化
第十一章:晚期(运行期)优化11.1概述为了提高热点代码的运行效率,在运行时,虚拟机会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler ,JIT编译器)java虚拟机规范中没有约束JIT的应该如何实现,所以这部分功能完全是与虚拟机具体实现相关的内容11.2HotSpot虚拟机即时编译...
2018-08-08 09:12:13
410
原创 深入理解Java虚拟机----第十章:早期(编译器)优化
第十章:早期(编译器)优化10.1概述Java语言的“编译期”其实是个“不确定”的过程:前端编译器:把Java文件编译成class文件,例如Sun的javac、Eclipse JDT中的增量编译器(ECJ)后端编译器(JIT编译器,just in time compiler):把字节码转换为机器码,例如HotSpotVM的C1、C2编译器静态提前编译(AOT编译器,Ahea...
2018-08-07 23:18:05
929
1
原创 深入理解Java虚拟机----第九章:类加载及其执行子系统的案例与实战
第九章:类加载及其执行子系统的案例与实战9.1概述在class文件格式和执行引擎这部分内容中,用户程序能直接影响的并不多,Class文件以何种形式存储,类型何时加载、如何连接,以及虚拟机如何执行字节码指令都由虚拟机直接控制,用户无发改变;能够通过程序控制的,主要是字节码生成和类加载器两部分9.2案例分析9.2.1Tomcat:正统的类加载架构一个功能健全的web服务...
2018-08-07 23:15:28
803
原创 深入理解Java虚拟机----第八章:虚拟机字节码执行引
第八章:虚拟机字节码执行引8.1概述 执行引擎:输入字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果8.2运行时栈帧结构 栈帧:是虚拟机用于方法调用和方法执行的数据结构,是虚拟机运行时数据区的虚拟机栈的栈元素栈帧存储了方法的局部变量表、操作数栈、动态连接、方法返回地址等信息每一个方法从调用开始到执行结束,就是栈帧在虚拟机栈中入栈出栈的过程...
2018-08-07 23:13:28
617
1
原创 深入理解Java虚拟机----第七章:虚拟机类加载机制
第七章:虚拟机类加载机制7.1概述 虚拟机把描述类的数据从class文件加载到内存,经过校验、转换解析、初始化,最形成能够被虚拟机直接使用的java类型,这就是虚拟机的加载过程类的加载、连接、初始化在运行期进行动态扩展的语言特性是依赖于运行期动态加载和动态连接这个特点实现的运行期类加载应用:applet、jsp、osgi7.2类的加载时机 类的加载...
2018-08-07 23:09:05
637
原创 深入理解Java虚拟机----第六章:类文件结构
第六章:类文件结构6.1概述计算机只能识别0和1虚拟机以及建立在虚拟机上语言的出现,使编写的程序编译成二进制本地机码(native code)非唯一选择,越来越多编程语言选择了与操作系统和机器指令集无关、平台中立的格式作为程序编译后的存储格式6.2无关性的基石虚拟机可以载入和执行同一种平台无关的字节码各种平台不同的虚拟机和各个平台统一使用的程序存储格式-字节码(By...
2018-08-07 23:00:52
786
1
原创 深入理解Java虚拟机----第三章:垃圾收集器与内存分配策略
第三章:垃圾收集器与内存分配策略3.1概述 程序计数器、虚拟机栈、本地方法栈 3 个区域随线程生灭(因为是线程私有),栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。而 Java 堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期才知道那些对象会创建,这部分内存的分配和回收都是动态的,...
2018-08-07 22:53:28
1272
1
原创 深入理解Java虚拟机----第二章:Java内存区域与内存溢出异常
第二章:Java内存区域与内存溢出异常2.2运行时数据区域2.2.1 程序计数器(Program Counter Register)概述:一块较小的内存空间,可以看作是当前线程所执行的字节码的 行号指示器作用:通过改变计数器的值来选取下一条需要执行的字节码指令。(分支、循环、跳转、异常处理、线程恢复等)基础功能都依赖与其完成。特点: 1.线程私有,每条线程都需要有一个独...
2018-08-07 22:50:36
585
1
原创 深入理解Java虚拟机----第一章:走进Java
第一章:走进Java1.1 java概述java技术体系:java程序设计语言各种硬件平台上的java虚拟机Class 文件格式Java API类库来自商业机构和开源社区的第三方Java类库JDK:java程序设计语言、java虚拟机、Java API 这三部分统称为 JDK(Java Development Kit)。JRE:Java API类库中的 Java...
2018-08-07 22:42:50
1734
1
原创 MySQL常用基础语法
MySQL语法MySQL语法启动和关闭分类:数据类型DDLDMLDCLDQL条件查询模糊查询字段控制查询排序聚合函数分组(GROUP BY)查询HAVING子句LIMIT完整性约束MySQL数据库备份与还原多表查询启动和关闭启动:net start mysql;关闭:net stop mysql;登录:my...
2018-08-02 17:20:23
26943
2
原创 git命令教程
git教程git教程初始设置创建版本库查看状态版本回退工作区和暂存区撤销修改删除文件远程仓库创建与合并分支解决冲突分支管理Bug分支其他本文来自Git教程 廖雪峰的笔记初始设置$ git config --global user.name "Your Name"$ git config --global user.email ...
2018-08-01 20:18:00
134
Java Web开发实战经典
2018-03-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人