自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

转载 Redis 过期键删除策略

Redis 中数据库键的过期时间都保存在过期字典中,当一个键过期了,Redis 存在三种不同的删除策略:定时删除、惰性删除和定期删除定时删除定义在设置键的过期时间的同时创建一个计时器,让定时器在键过期时间来临时,立即执行对键的删除操作。定时删除策略对内存是最友好的:通过使用定时器,定时删除策略可以保证过期键会尽快被删除,并且释放过期键所占用的内存。但是另一方面,它对 CPU...

2019-02-25 20:30:00 132

转载 int 与 Integer 的区别

int和Integer的区别Integer是int的包装类,int则是java的一种基本数据类型Integer变量必须实例化后才能使用,而int变量不需要Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值Integer的默认值是null,int的默认值是0延伸由于Integer变量实际上是对一个Inte...

2019-02-24 22:48:00 124

转载 Java 平台无关性的基石

Java 在刚刚诞生之初就提出过一个非常著名的口号:“一次编写,到处运行”, 这句话充分表达了软件开发人员对冲破平台界限的渴望在竞争激烈的 IT 领域,各种不同的硬件体系结构和不同的操作系统肯定会长期并存发展。“平台无关性” 的理想最终实现在操作系统的应用层上: Sun 公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的...

2019-02-18 12:00:00 182

转载 Spring 中 IoC 容器简介

IoC 是一种通过描述来生成或者获取对象的技术,可以说 Spring 是一种基于 IoC 容器编程的框架在一个系统中可以生成各种对象,并且这些对象都需要进行管理。为了描述这些对象关系,我们需要一个容器。在 Spring 中把每一个需要管理的对象称为 Spring Bean ,而管理这些 Bean 的容器就被称为 Spring IoC 容器。IoC 容器需要具备两个基本的功能:...

2019-02-02 16:29:00 185

转载 HotSpot 虚拟机垃圾回收算法实现

作为使用范围最广的虚拟机之一HotSpot,必须对垃圾回收算法的执行效率有严格的考量,只有这样才能保证虚拟机高效运行枚举根节点从可达性分析中从 GC Roots 节点找引用链这个操作为例,可以作为 GC Roots 的节点主要在全局性的引用(例如常量或者类静态属性)与执行上下文(例如栈帧中的本地变量表)中。但是现在很多应用仅仅方法区就有数百兆,如果要逐个检查这里面的引用,那么必...

2019-02-01 20:18:00 90

转载 多线程死锁的产生原因以及如何避免

多线程以改善了系统资源的利用率并且提高了系统的处理能力。但是,并发执行同时也带来了新的问题——死锁。所谓的死锁就是多个线程因竞争资源而造成的一种互相等待,如果没有外力作用,这些线程都将无法继续执行死锁产生的原因系统资源的竞争通常系统中拥有的不可剥夺资源,其数量不足以满足多个线程运行的需要,使得线程在 运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞...

2019-02-01 20:16:00 462

转载 Java异常实战——OutOfMemoryError

在Java虚拟机规范描述中,除了程序计数器外,虚拟机内存的其他几个运行区域都有发生 OOM 异常的可能。在这里,用代码验证各个运行时区域存储的内容并讨论该如何进行处理Java堆溢出Java 堆用于存储对象实例,只要不断创建对象,并且保证 GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么对象数量达到最大堆的容量限制之后就会产生内存溢出异常。异常再现代码...

2019-01-30 11:00:00 132

转载 MySQL数据库中的四种隔离级别

事务的隔离性比想象的要复杂,在 SQL 标准中定义了四种级别的隔离级别。通常而言,较低级别的隔离通常可以执行更高的并发,系统的开销也更低READ UNCOMMITTED该级别为未提交读。在该级别中,事务中的修改即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称为脏读。这个级别会导致很多的问题,从性能上来说,它不会比其他级别好太多,但缺乏其他级别的很多好处。除...

2019-01-29 16:14:00 129

转载 Java运行时数据区概述

Java 虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,如图所示:程序计数器程序计数器是一块比较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型中(仅是概念模型,各种虚拟机可能会通过一些更加高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循...

2019-01-20 20:00:00 94

转载 MySQL 字符集和校对

字符集是指一种从二进制编码到某类字符符号的映射,校对是一组用于某个字符集的排序规则。每一类编码字符都有其对应的字符集和校对规则MySQL 如何使用字符集每种字符集都可能有多种校对规则,并且都有一个默认的校对规则。每个校对规则都是针对某个特定的字符集的,和其他的字符集都没有关系。校对规则和字符集总是一起使用的,我们也将这样的组合统称为一个字符集。MySQL的设置可以分为两类:创建...

2019-01-20 11:09:00 99

转载 MySQL高级特性——绑定变量

从MySQL 4.1 版本开始,就支持服务器端的绑定变量,这大大提高了客户端和服务器端数据传输的效率介绍当创建一个绑定变量 SQL 时,客户端会向服务器发送一个SQL语句的原型。服务器端收到这个SQL语句框架后,解析并存储这个SQL语句的部分执行计划,返回个客户端一个 SQL 语句处理句柄。以后每次执行这类查询,客户端都指定使用这个句柄。绑定变量的SQL,使用问号标记可以接受参...

2019-01-19 14:49:00 328

转载 MySQL高级特性之分区表

对于用户而言,分区表是一个独立的逻辑表,但是在底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装,对分区表的请求都会通过句柄对象转化成对存储引擎的接口调用意义MySQL在创建表的时候可以通过使用 PARTITION BY 子句定义每个分区存放的数据。在执行查询的时候,优化器根据分区定义过滤那些没有我们需要的数据的分区,这样查询就可以无需扫描所有分区——只需...

2019-01-17 15:03:00 130

转载 MySQL优化特定类型的查询

优化关联查询如果想要优化使用关联的查询,我们需要特别留意以下几点:确保ON或者USING子句中的列上有索引。在创建索引的时候需要考虑到关联的顺序。当表A和表B用列c关联的时候,如果优化器的关联顺序是B、A,那么就不需要在B表的对应列上建索引。除非有其他理由,否则只需要在关联顺序的第二个表的对应列上创建索引,没有用的索引只会带来额外的负担。确保任何的GROUP BY 和 ORDER...

2019-01-17 10:14:00 135

转载 MySQL优化COUNT()查询

COUNT()聚合函数,以及如何优化使用了该函数的查询,很可能是最容易被人们误解的知识点之一COUNT()的作用COUNT()是一个特殊的函数,有两种非常不同的作用:统计某个列值的数量统计行数统计列值在统计列值时,要求列值是非空的,即不统计NULL。如果在COUNT()的括号中指定了列或者列的表达式,则统计的就是这个表达式有值的结果数。统计结果集的行数当MySQL...

2019-01-14 11:58:00 85

转载 设计模式之迭代器模式——Java语言描述

迭代器模式是Java和.NET编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示介绍意图提供一种方法顺序访问一个聚合对象中各个元素,无需暴露该对象的内部表示应用实例Java中的iterator优点它支持以不同的方式遍历一个聚合对象迭代器简化了聚合类在同一个聚合上可以有多个遍历迭代器模式中,增加新的聚合类和迭代器类都非常...

2019-01-14 10:27:00 67

转载 设计模式之解释器模式——Java语言描述

解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等介绍意图给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。应用实例编译器、运算表达式计算等优点可拓展性比较好,灵活增加了新的解释表达式的方法易于实现简单文法缺点...

2019-01-14 09:57:00 91

转载 设计模式之责任链模式——Java语言描述

责任链模式为请求创建了一个接受者对象的链。这种模式给予请求的类型,对请求的发送者和接受者进行解耦。这种类型的设计模式属于行为模式。在这种模式下,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该对象,那么它会把相同的请求传给下一个接收者,以此类推介绍意图避免请求发送者和接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直...

2019-01-13 17:52:00 55

转载 设计模式之外观模式——Java语言描述

外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它想现有的系统添加了一个接口,以隐藏系统的复杂性介绍意图为子系统中的一组接口提供了一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用应用实例电脑只要按下开机键,就会自动执行开机的程序Java的三层开发模式优点减少系统相互依赖提高灵活性提高安全性缺点不符合...

2019-01-12 14:37:00 83

转载 MySQL查询执行的基础——查询优化处理

查询的生命周期的下一步是将一个SQL转换成一个可执行计划,MySQL再按照这个计划和存储引擎进行交互语法解析器和预处理首先,MySQL通过关键词将SQL语句进行解析,并生成一颗对应的“解析树”。MySQL解析器将使用MySQL语法规则验证和解析查询。比如是否使用了错误的关键字,关键字的顺序是否正确,或者引号是否能够正确的前后匹配。预处理器则会根据一些MySQL规则进一步检查解析...

2019-01-11 17:38:00 77

转载 设计模式之组合模式——Java语言描述

组合模式又叫做部分整体模式,适用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次介绍意图将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性优点高层模块调用简单节点自由增加缺点在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口类,违反了依赖导致的原则实现创...

2019-01-11 11:21:00 136

转载 设计模式之过滤器模式——Java语言描述

过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来实现创建一个Person对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准和它们的结合来过滤 Person 对象的列表。创建一个Person类public ...

2019-01-11 10:50:00 101

转载 MySQL查询执行的基础

当我们希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则让优化器能够按照预想的合理方式运行当我们想向MySQL发送了一个请求时,MySQL到底做了什么:客户端首先发送一条查询请求给服务器服务器首先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段。...

2019-01-10 17:02:00 53

转载 设计模式之桥接模式——Java语言描述

桥接适用于把抽象化和实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构性模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦这种模式设计到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可以被结构化改变而不互相影响。介绍设计模式意图: 将抽象部分和实现部分分离,使得它们可以独立变化。优点:抽象和实现的分离优秀的拓展能力缺点: ...

2019-01-10 11:54:00 67

转载 让MySQL查询更加高效——对查询进行重构

在优化有问题的查询时,目标应该是找到一个更优的方法获得实际需要的结果,而不是一定总是要求从MySQL获取一模一样的结果集一个复杂查询还是多个简单查询设计查询的时候一定需要考虑的问题就是,是否需要将一个复杂的查询分成多个简单的查询。虽然在传统实现中,总是强调需要在数据库层完成尽可能多的工作,这是因为在过去总是认为网络通信、查询解析和优化是一件代价很高的事情。但是这样的想法对于M...

2019-01-07 21:46:00 71

转载 设计模式之适配者模式——Java语言描述 | Amos H's blog

适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模糊属于结构性模式,它结合了两个独立接口的功能概念阐述使用适配器模式可以解决在软件系统中,将一些旧的类放入新环境中,但是新环境要求的接口旧的类不能满足的情况。使用情形:系统需要使用旧的类,但是此类的接口不符合系统的需要需要建立一个可以重复使用的类,用于一些彼此之间没有太大关系的一些类通过接口转换,将一个类插入到另...

2019-01-06 14:50:00 69

转载 慢查询基础:优化数据访问

查询性能低下最基本的原因是访问的数据太多。某些查询不可避免的需要筛选大量数据,但这并不常见。大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化对于低效的查询,可以通过下面两个步骤进行分析:确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,但有时候也可能是访问了太多的列确认MySQL服务器层是否在分析大量超过需要的数据行是否向数据库请求了不需要...

2019-01-05 19:12:00 61

转载 设计模式之原型模式——Java语言描述

原型模式是用于创建重复对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的方式这种模式实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则适合采用这种模式。应用实例:细胞分裂Java中的Object.clone()方法优点:性能较高逃避构造函数的约束缺点:配备克隆方法需要对类的功能进行通盘考虑,这对...

2019-01-05 10:35:00 67

转载 MyBatis进阶使用——动态SQL

MyBatis的强大特性之一就是它的动态SQL。如果你有使用JDBC或者其他类似框架的经验,你一定会体会到根据不同条件拼接SQL语句的痛苦。然而利用动态SQL这一特性可以彻底摆脱这一痛苦MyBatis精简了元素种类,在MyBatis3中,我们只需要学习以下4种元素:ifchoose(when,otherwise)trim(where,set)foreachif动态S...

2019-01-04 16:18:00 69

转载 在Java中进行序列化和反序列化

对象序列化的目标是将对象保存在磁盘中,或者允许在网络中直接传输对象。对象序列化允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上或者通过网络将这种二进制流传输到另外一个网络节点。其他程序一旦获得了这种二进制流,都可以将这种二进制流恢复成原本的Java对象。序列化的含义和意义序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节...

2019-01-04 16:17:00 85

转载 Java五种基本的Annotation,提高程序的可读性

从JDK5开始,Java增加了对元数据的支持,也就是Annotation(即注解也被翻译为注释)。这里的Annotation和普通的注释有一定的区别,它是代码中的特殊标记,这些标记可以在编译、类加载或者运行时被读取,并执行相应的处理。通过这样的注解,可以帮助开发人员在不改变原有的逻辑的情况下,在源文件中补充一些信息。而代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者...

2019-01-04 16:15:00 63

转载 设计模式简介

设计模式代表了最佳实践,是开发人员在开发过程中面临的一般问题的解决方案。这些解决方案是众多开发人员经过相当长的一段时间的试验和错误总结出来的历史设计模式是一套被反复使用,经过考验的设计经验的总结。使用设计模式是为了重用代码,增强代码的可读性。1994年,由Gang of Four在《设计模式-可复用的面向对象软件元素》中首次提到了软件开发中的设计模式的概念。他们所提出的设计模式...

2019-01-04 16:14:00 58

转载 MyBatis中映射器Mapper概述

MyBatis真正强大之处在于它的映射器。因为它异常强大并且编写相对简单,不仅比传统编写SQL语句做的更好并且能节省将近95%的代码量XML中顶级元素汇总cache: 给定命名空间的缓存配置cache-ref: 其他给定命名空间缓存配置的引用resultMap: 最复杂也是最强大的元素,用来描述如何从数据库结果集中加载对象sql: 可以被其他语句引用的重复语句块inse...

2019-01-04 14:13:00 64

转载 Mybatis入门实例

MyBatis 简介MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。构建项目...

2019-01-04 14:11:00 58

转载 Java面向接口编程,低耦合高内聚的设计哲学

接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性。因此,很多的软件架构设计理念都倡导“面向接口编程”而不是面向实现类编程,以期通过这种方式来降低程序的耦合。但是在讨论这些之前,我们先要搞清楚一个问题:接口还是抽象类?为什么会有这个问题,因为在某些情况下,接口和抽象类很像:接口和抽象类都不能被实例化...

2019-01-04 12:19:00 122

转载 详解Java中对象的软、弱和虚引用的区别

对于大部分的对象而言,程序里会有一个引用变量来引用该对象,这是最常见的引用方法。除此之外,java.lang.ref包下还提供了3个类:SoftReference、WeakReference和PhantomReference。它们分别代表了系统对对象的另外3中引用方式:软引用、弱引用和虚引用。Java中四种引用的区别和关联:强引用。这是Java中最常见的引用方式。程序创建一个对...

2019-01-04 12:17:00 104

转载 Java中的匿名内部类及内部类的二三事

匿名内部类适合创建那些只需要使用一次的类,它的语法有些奇怪,创建匿名内部类会立即创建一个该类的实例,这个类定义立即消失,且不能重复使用。定义匿名类的格式如下:new 实现接口() |父类构造器(实参列表){//匿名内部类的类体部分}从定义来看,匿名内部类必须继承一个父类,或者实现一个接口,但是最多只能继承一个父类或者实现一个接口。关于匿名内部类,还有如下两条规则:匿名...

2019-01-04 12:11:00 169

转载 六种主要的垃圾回收算法和思想

Java语言的一大特点就是可以自动进行垃圾回收处理,无需开发人员过于关注系统资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。一个不合适的垃圾回收方法和策略将会对系统性能造成不良影响。1. 引用计数法引用计数法是最经典古老的一种垃圾收集方法,它的实现也很简单:对于一个对象A,只要有任何一个对象引用了A,则A的计数器就加1,当引用失效时,引用计数器...

2019-01-04 11:57:00 83

转载 设计模式之建造者模式简明示例

建造者模式将一个复杂对象的创建和它的表示分离,使用同样的创建过程可以创建不同的表示应用实例在Java中,建造者模式是一种常见的设计模式,StringBuilder以及okhttp3.Request都应用了建造者模式:OkHttpClient client = new OkHttpClient();Request request = new Request.Bu...

2019-01-04 11:53:00 86

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除