- 博客(87)
- 资源 (1)
- 收藏
- 关注
转载 Statement、 PreparedStatement 、CallableStatement 区别和联系
1. Statement、PreparedStatement和CallableStatement都是接口(interface)。 2. Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。 3. Statement接口提供了执行语句和获取结果的基本方法;
2017-09-28 12:09:47 487
转载 大型高并发高负载web应用系统架构-数据库架构策略
在WEB网站的规模从小到大不断扩展的过程中,数据库的访问压力也不断的增加,数据库的架构也需要动态扩展,在数据库的扩展过程基本上包含如下几步,每一个扩展都可以比上一步骤的部署方式的性能得到数量级的提升。 1、WEB应用和数据库部署在同一台服务器上 一般的小规模的网站采用这种方式,用户量、数据量、并发访问量都比较小,否则单台服务器无法承受,并且在遇到性能瓶颈的时候升级硬件所
2017-09-28 12:05:51 302
转载 MySQL索引类型 btree索引和hash索引的区别
来源一Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。可 能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Ha
2017-09-28 12:04:59 176
转载 B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关
2017-09-27 10:21:40 212
转载 MySQL百万级数据库查询优化技巧
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id f
2017-09-27 10:01:32 268
转载 面试常见问题--数据库优化 百万数据怎么优化
一、数据库访问优化的五个法则 在实际开发,我们主要是需要对SQL语句进行优化,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?根据木桶原理可以知道,最慢的设备往往是性能瓶颈。例如:互联网运用中的带宽,本地数据复制时的硬盘的访问速度。 根据当前计算机硬件的基本性能指标及其在数据库中主要操作内容,可以整理出如下五条性能基本优化法则: (1
2017-09-27 09:54:03 304
转载 mysql分表和表分区详解
为什么要分表和分区?日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。什么是分表?分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实
2017-09-27 09:52:10 237
转载 Spring事务管理(详解+实例)
标签:写这篇博客之前我首先读了《Spring in action》,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下:Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解1 初步理解理解事务之前,先讲一个你日常生活中最常干的事:取钱。 比如你去ATM机取100...
2017-09-27 09:28:58 333
转载 MySQL索引背后的数据结构及算法原理
摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第
2017-09-27 09:18:44 218
转载 SQL经典面试题目总结
一、三点一线当学霸:“学生-课程-成绩”类题目1.1 本题目的表结构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表1.2 本题目的建表及测试...
2017-09-27 09:12:42 709
转载 设计模式(十)——适配器模式
结构型设计模式结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式:类结构型模式关心类的组合,由多个类可以组合成一个更大的 系统,在类结构型模式中一般只存在继承关系和实现关系。对象结构型模式关心类与对象的组合,通过关联关系使得在一 个类中定义另...
2017-09-26 21:29:18 331
转载 设计模式(九)——代理模式(Proxy)
代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。1 代理模式概述近年来,代购已逐步成为电
2017-09-26 21:08:49 1739
转载 设计模式(八)——观察者模式
观察者模式是设计模式中的“超级模式”,其应用随处可见,在之后几篇文章里,我将向大家详细介绍观察者模式。 “红灯停,绿灯行”,在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通。当红灯亮起,来往的汽车将停止;而绿灯亮起,汽车可以继续前行。在这个过程中,交通信号灯是汽车(更准确地说应该是汽车驾驶员)的观察目标,而汽车是观察者。随着交通信号灯的变化,汽车的行为
2017-09-26 18:35:13 606
转载 设计模式(七)——策略模式
介绍一个比较简单的行为型设计模式——策略模式。概念学习过设计模式的人大概都知道Head First设计模式这本书,这本书中介绍的第一个模式就是策略模式。把策略模式放在第一个,笔者认为主要有两个原因:1、这的确是一个比较简单的模式。2、这个模式可以充分的体现面向对象设计原则中的封装变化、多用组合,少用继承、针对接口编程,不针对实现编程等原则。策略模式(Strategy Pattern
2017-09-26 09:14:36 302
转载 Java 8的新特性—终极版
前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class Versus
2017-09-25 22:36:25 252
原创 Java实用类库
每个方法都有一个链接,可以查看他们在开源代码中具体是如何使用的。1. org.apache.commons.io.IOUtilscloseQuietly ( )toString ( )copy ( )toByteArray ( )write ( )toInputStream ( )readLines ( )copyLarge ( )lineIterator ( )readFul
2017-09-25 22:15:58 329
原创 FastJson常用指南
FastJSON是一个Java语言编写的高性能,功能完善,完全支持http://json.org的标准的JSON库。在此,简单的总结一下自己用过,测试过的方法。如果使用Maven,在pom.xml文件加入以下依赖。1 dependency>2 groupId>com.alibabagroupId>3 artifactId>fastjsonartifactId>
2017-09-25 21:27:46 343
转载 JMS(四):TemporaryQueue和TemporaryTopic,MDB
TemporaryQueue和TemporaryTopicTemporaryQueue和TemporaryTopic,从字面上就可以看出它们是“临时”的目的地。可以通过Session来创建,例如: TemporaryQueue replyQueue = session.createTemporaryQueue(); 虽然它们是由Session来创建的,但是它们的生
2017-09-25 09:34:54 339
转载 JMS(三):DeliveryMode例子,JMSReplyTo,Selector
DeliveryMode例子在下面的例子中,分别发送一个Persistent和nonpersistent的消息,然后关闭退出JMS。 import javax.jms.Connection;import javax.jms.DeliveryMode;import javax.jms.MessageProducer;import javax.jms.Queue;impor
2017-09-25 09:28:40 313
转载 JMS(二):MessageListener,实战Queue ,实战Topic,消息头
MessageListener消息的消费者接收消息可以采用两种方式: 1、consumer.receive() 或 consumer.receive(int timeout); 2、注册一个MessageListener。 采用第一种方式,消息的接收者会一直等待下去,直到有消息到达,或者超时。后一种方式会注册一个监听器,当有消息到达的时候,会回调它的onMessage()
2017-09-25 09:14:47 4438
转载 JMS(一):JMS基础;一个JMS例子
1. JMS基本概念 JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。P2P 模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。 对于点到点模型
2017-09-25 09:08:28 957
转载 Java泛型用法总结
写在前面:泛型。很重要~普通泛型class Point T>{ // 此处可以随便写标识符号,T是type的简称 private T var ; // var的类型由T指定,即:由外部指定 public T getVar(){ // 返回值的类型由外部决定 return var ; } public void setVar(T var){ // 设
2017-09-25 09:01:47 348
转载 Java中泛型的理解
Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在JDK 5中的新集合类框架中。对于泛型概念的引入,开发社区的观点是褒贬不一。从好的方面来说,泛型的引入可以解决之前的集合类框架在使用过程中通常会出现的运行时刻类型错误,因为编译器可以在编译时刻就发现很多
2017-09-25 08:49:49 352
转载 Java的类型擦除
写在前面:最近在看泛型,研究泛型的过程中,发现了一个比较令我意外的情况,Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。 其实编译器通过Code sharing方式为每个泛型类型创建唯一的字节码表示,并且将该泛型类型的实例都映射到这个唯一的字节码表示上。将多种泛型类形实例映射到唯一的
2017-09-25 08:43:57 1461
转载 Java泛型中extends和super的理解
Java泛型中K T V E ? object等的含义E – Element (在集合中使用,因为集合中存放的是元素)T – Type(Java 类)K – Key(键)V – Value(值)N – Number(数值类型)? – 表示不确定的java类型(无限制通配符类型)S、U、V – 2nd、3rd、4th typesObject – 是所有类的根类,任
2017-09-25 08:33:19 12198 2
转载 java工厂模式的学习,与反射机制相、外部配置相结合
工厂模式定义:百度百科:实例化对象,用工厂方法代替new操作。工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能
2017-09-23 23:19:31 204
原创 Java反射与动态代理
反射——Java高级开发必须懂的通过反射API可以获取程序在运行时刻的内部结构。反射API中提供的动态代理也是非常强大的功能,可以原生实现AOP中 的方法拦截功能。正如英文单词reflection的含义一样,使用反射API的时候就好像在看一个Java类在水中的倒影一样。知道了Java类的内部 结构之后,就可以与它进行交互,包括创建新的对象和调用对象中的方法等。这种交互方式与直接在源代码中使用的...
2017-09-23 23:16:49 219
转载 详解匿名内部类
在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客。在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始化匿名内部类、匿名内部类使用的形参为何要为final。 一、使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪。创建格式如下:
2017-09-23 14:24:49 199
转载 详解内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类。 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二)。 第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类。[java] view plain copy publi
2017-09-23 14:04:33 182
转载 单例与序列化的那些事儿
本文将通过实例+阅读Java源码的方式介绍序列化是如何破坏单例模式的,以及如何避免序列化对单例的破坏。单例模式,是设计模式中最简单的一种。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。关于单例模式的使用方式,可以阅读单例模式的七种写法但是,单例模式真的能
2017-09-23 13:11:19 231
转载 深入分析Java的序列化与反序列化
序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容。主要涉及到以下几个问题:怎么实现Java的序列化为什么实现了java.io.Serializable接口才能被序列化transient的作用是什么怎么自定义序列化策略自定义的序列化策略是如何被调用的ArrayList对序列化的实现有什么
2017-09-23 13:10:03 221
转载 Java对象的序列化与反序列化
序列化与反序列化序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以是字节或是XML等格式。而字节的或XML编码格式可以还原完全相等的对象。这个相反的过程又称为反序列化。Java对象的序列化与反序列化在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收
2017-09-23 13:07:21 282
转载 异常(二)
五、自定义异常 Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表现程序中可能会遇到的特定问题,总之就是一句话:我们不必拘泥于Java中已有的异常类型。 Java自定义异常的使用要经历如下四个步骤: 1、定义一个类继承Throwable或其子类。 2、添加构造方法(当然也
2017-09-23 12:00:45 148
转载 异常(一)
Java的基本理念是“结构不佳的代码不能运行”!!!!! 大成若缺,其用不弊。 大盈若冲,其用不穷。 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失。同样的道理,计算机的世界也是不完美的,异常情况随时都会发生,我们所需要做的就是避免那些能够避免的异常,处理那些不能避免的异常
2017-09-22 16:49:18 218
转载 Java的枚举类型用法介绍
本文从背景、到定义、特点、使用方式等方面介绍了枚举,深入了解可以看深度分析Java的枚举类型—-枚举的线程安全性及序列化问题和Java 7 源码学习系列(二)——Enum1 背景在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏天,3表示秋天
2017-09-21 22:34:31 272
转载 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题
写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。本文将深入分析枚举的源码,看一看枚举是怎么实现的,他是如何保证线程安全的,以及为什么用枚举实现的单例是最好的方式。枚举是如何保证线程安全的要想看源码,首先得有一个类吧,那么枚举类型到底是什么
2017-09-21 22:32:02 502
转载 集合-subList的缺陷
我们经常使用subString方法来对String对象进行分割处理,同时我们也可以使用subList、subMap、subSet来对List、Map、Set进行分割处理,但是这个分割存在某些瑕疵。一、subList返回仅仅只是一个视图 首先我们先看如下实例:[java] view plain copy public static void
2017-09-21 21:53:30 1339
转载 集合-fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失
2017-09-21 21:44:09 445
转载 集合-Map总结
在前面LZ详细介绍了HashMap、HashTable、TreeMap的实现方法,从数据结构、实现原理、源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结。 推荐阅读: HashMap HashTable HashCode TreeMap一、Map
2017-09-21 21:40:57 250
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人