- 博客(33)
- 资源 (11)
- 收藏
- 关注
原创 44543
package ProxyTest;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * 1.引入PersonDaoImpl(代理的真实实现类)和Trascation * 2.完成Invoke方法 */public class MyInvocationHandler im
2016-01-31 22:31:00 950
原创 java排序算法(三):快排
要点快速排序是一种交换排序。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。详细的图解往往比大堆的文字更有说明力,所以直接上图:
2016-01-30 21:43:59 682
原创 自己写MVC框架:(一)数据库连接池
一.连接池的结构设计二.数据库配置1.数据库配置文件config_db.properties文件放到src下,如下:driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/framwork?useUnicode=true&characterEncoding=UTF-8username=rootpasswo
2016-01-30 14:01:11 2394
原创 MySql优化--使用索引优化
1.索引优化的原理 在没有使用索引的时候,数据库系统会根据要查找的值到数据表中一个个挨着找,只到最后一个 例如:找empno=4,在无索引时从,emp表中的empno=1开始一行一行往下面找,只到empno=4(注意:找到4后,还会继续往下查找,只到所有的都查找完,因为不能保 证,只有一个empno=4,所以要把全部的记录都检索完)
2016-01-29 15:58:51 534
原创 Mysql--存储引擎
数据库对同样的数据,有着不同的存储方式和管理方式。在Mysql中,称为存储引擎。对于用户来说同样一张表的数据,无论用什么引擎来存储,用户看到的数据都是一样的。单对于服务器来说,有区别。常用的表的引擎 Myisam:批量插入速度快,不支持事务,锁表 InnoDB:批量插入速度较慢,支持事务,锁行
2016-01-28 21:02:31 539
原创 MySql中的事务
MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务、行级锁、并发3.Berkeley DB:支持事务 一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行。换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的。如果在事务的任何操作失败,
2016-01-28 20:10:36 417
原创 java排序算法(二):直接选择排序
java排序算法(二):直接选择排序一、基本概念首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(注:要把最大最小的元素和起始的元素交换),然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 二、算法特点是否稳定: false平均时间复杂度:O(n^2)最差
2016-01-28 16:12:54 572
原创 java排序算法(一):堆排序
Java排序算法(三):堆排序 堆排序(Heapsort)是指利用 堆 这种数据结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。 堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog2n) ,堆排序的堆序的平均性能较接近于最坏性能。
2016-01-28 11:09:21 576
原创 Mysql数据库优化---2.慢查询(一)
1.SQL优化的一般步骤 通过show status命令了解各种SQL的执行频率。 定位执行效率较低的SQL语句(重点select) 通过explain分析低效率的SQL语句的执行情况 确定问题并采取相应的优化措施问题是: 如何从一个大项目中,迅速的定位执行速度慢的语句? (定位慢查询) 首先要找到哪些查询是慢查询2.
2016-01-27 14:32:56 803
原创 Mysql自定义函数
1.自定义函数的要素:函数名参数列表函数体返回值2.语法定义: Create function 函数名(参数列表) 返回类型 函数体 注:这里的返回类型必须要是mysql的类型,varchar() int 等等例子: delimiter $$create function say() returns varchar(200)beginret
2016-01-27 10:32:56 614
原创 (Slor)java对solr的基本操作
package cn.solr;import java.io.IOException;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.SolrQuery.ORD
2016-01-26 14:01:56 6183 1
原创 Mysql数据库优化---1.可以优化的地方
Mysql数据库的优化技术对mysql优化是一个综合性的技术,主要包括: 1.表的设计合理化(符合3NF)2. 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]3.分表技术(水平分割、垂直分割)4.读写[写: update/delete/add]分离5. 存储过程 [模块化编程,可以提高速度]6.对mysql配置优化 [配置
2016-01-21 23:07:14 606
原创 Redis集群
1.1. 集群原理1.1.1. redis-cluster架构图 架构细节:(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可(4)redi
2016-01-11 23:11:25 714
原创 Reids集群的分片机制
Redis 集群的数据分片Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念. Redis 集群有16384(这个大小不能改变)个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽(Slot).集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:节点 A 包含 0 到 5500号哈希槽.节点 B 包含55
2016-01-11 22:52:07 2720
原创 (Java基础--反射)框架的概念及用反射技术开发框架的原理
框架的概念及用反射技术开发框架的原理一、概述1、框架:通过反射调用Java类的一种方式。 (框架与房子非常类似,使用的用户写的程序写配置文件,就相当于给房子装修) 如房地产商造房子用户住,门窗和空调等等内部都是由用户自己安装,房子就是框架,用户需使用此框架,安好门窗等放入到房地产商提供的框架中。 框架和工具类
2016-01-10 21:06:52 2262
原创 Tomcat启动分析
tomcat在启动时的重点功能如下:初始化类加载器:主要初始化CommonLoader、CatalinaLoader以及SharedLoader;解析配置文件:使用Digester组件解析Tomcat的server.xml,初始化各个组件(包含各个web应用,解析对应的web.xml进行初始化);初始化连接器:初始化声明的Connector,以指定的协议打开
2016-01-09 22:46:37 633
原创 eclipse中运行tomcat7源代码
1. 到http://archive.apache.org/dist/tomcat/tomcat-7下载Tomcat源代码,本文用到的是apache-tomcat-7.0.19-src.zip;2. 在Eclipse中新建Java Project,取名为Tomcat7(可随意);3. 把源码中的所有文件import到新建的项目;4. 把conf、java、test三个文件夹
2016-01-08 15:17:05 1231
原创 (Java基础--反射)构造方法的反射应用
Constructor类反射1、概述 如果指定的类中没有空参数的构造函数,或者要创建的类对象需要通过指定的构造函数进行初始化。这时怎么办呢?这时就不能使用Class类中的newInstance方法了。既然要通过指定的构造函数进行对象的初始化。就必须先获取这个构造函数——Constructor。Constructor代表某个类的构造方法。2、获取构造方法:
2016-01-06 16:21:47 742
原创 (Java基础--反射)理解反射的概念
反射就是把Java类中的各种成分映射成相应的java类。例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。 表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类
2016-01-06 16:13:27 561
原创 (Java基础--反射)透彻分析反射的基础--Class类
1、所有的类文件都有共同属性,所以可以向上抽取,把这些共性内容封装成一个类,这个类就叫Class(描述字节码文件的对象)。 Class类中就包含属性有field(字段)、method(方法)、construction(构造函数)(注:这是所有的类的结构中都有的属性结构)。 而field中有修饰符、类型、变量名等复杂的描述内容,因此也可以将字段封装
2016-01-06 15:56:56 567
原创 冒泡排序算法
冒泡排序是一种交换排序。什么是交换排序呢?交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。 算法思想它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故
2016-01-05 09:22:19 583
原创 设计模式--职责链模式观察者模式
\以汽车组装为例子来说明package responsibility;/** * 定义的汽车生产处理的抽象类 * Title: CarHandler * Description: * Company: * @author 夏 杰 * @date 2016年1月4日下午7:44:53 * @version 1.0 */public abstrac
2016-01-04 20:43:16 1133
原创 Tomcat中的设计模式--责任链模式
责任链模式Tomcat 中一个最容易发现的设计模式就是责任链模式,这个设计模式也是 Tomcat 中 Container 设计的基础,整个容器的就是通过一个链连接在一起,这个链一直将请求正确的传递给最终处理请求的那个 Servlet。责任链模式的原理责任链模式,就是很多对象有每个对象对其下家的引用而连接起来形成一条链,请求在这条链上传递,直到链上的某个对象处理此请求,或者每
2016-01-04 18:29:32 2197 1
原创 Tomcat中的设计模式--命令模式
命令设计模式 前面把 Tomcat 中两个核心组件 Connector 和 Container,比作一对夫妻。男的将接受过来的请求以命令的方式交给女主人。对应到 Connector 和 Container,Connector 也是通过命令模式调用 Container 的。命令模式的原理 命令模式主要作用就是封装命令,把发出命令的责任和执行命令的责任分开。
2016-01-04 17:15:08 1230
原创 Tomcat中的设计模式--观察者模式
观察者设计模式 这种设计模式也是常用的设计方法通常也叫发布 - 订阅模式,也就是事件监听机制,通常在某个事件发生的前后会触发一些操作。观察者模式的原理 观察者模式原理也很简单,就是你在做事的时候旁边总有一个人在盯着你,当你做的事情是它感兴趣的时候,它就会跟着做另外一些事情。但是盯着你的人必须要到你那去登记,不然你无法通知它。观察者模式通常包
2016-01-04 16:46:09 902
原创 设计模式--观察者模式
例子:以订阅博客发布为例子package ObverserBlog;/** * 封装的文章对象 * Title: Article * Description: * Company: * @author 夏 杰 * @date 2016年1月4日下午3:36:07 * @version 1.0 */public class Article { private Stri
2016-01-04 16:23:31 597
原创 Tomcat中的设计模式--外观模式(门店模式)
门面设计模式门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中、Standard Wrapper 到 ServletConfig 封装中、ApplicationContext 到 ServletContext 封装中等都用到了这种设计模式。门面设计模式的原理这么多场合都用到了这种设计模式,那这种设计模式究竟能有什么作用呢?顾名思
2016-01-03 20:52:57 1801
原创 (数据结构)排序--直接插入排序
要点直接插入排序是一种最简单的插入排序。插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。先拿一张5在手里,再摸到一张2,比5小,插到5前面,摸到一张6,嗯,比5大,插到5后面,摸到一张3,插到2和5之间,
2016-01-03 19:45:36 676
原创 Tomcat源码分析(一)--总体结构
1.总览Tomcat总体结构图: Tomcat主要有两个组件:连接器(Connector)和容器(Container) 1.所谓连接器(Connector)就是一个http请求过来了,连接器负责接收这个请求,然后转发给容器。Connector组件是可以被替换的,这样可以给服务器 设计者提供更多的选择,这个组件非常的重要,不仅和服务器本
2016-01-03 17:53:46 1152
原创 (java并发)CAS操作原理以及Atomic的原理
CAS操作可以分为以下三个步骤: 步骤 1.读旧值(即从系统内存中读取所要使用的变量的值,例如:读取变量i的值) 步骤2.求新值(即对从内存中读取的值进行操作,但是操作后不修改内存中变量的值,例如:i=i+1,这一步只进行 i+1,没有赋值,不对内存中的i进行修改) 步骤3.两个不可分割的原子操作第一步:比较内存中变量现在的值与 最开
2016-01-02 21:47:20 1688
原创 (java多线程并发)控制并发线程数的Semaphore
1.简介 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。2.概念 Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。以一个停车场运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人
2016-01-02 15:58:49 10205 1
原创 (java多线程与并发)java并发库中的阻塞队列--BlockingQueue
1.阻塞队列的概念 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列,下图展
2016-01-02 13:52:13 1333
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人