自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 资源 (18)
  • 收藏
  • 关注

原创 Netty4之IO模型及线程模型

本文是基于Netty4.1.x,Netty作为异步事件驱动的网络,高性能之处主要来自于其I/O模型和线程处理模型,前者决定如何收发数据,后者决定如何处理数据。一、I/O模型用什么的通道将数据发送给对方,BIO(Blocking I/O)、NIO(Nonblocking I/O)或AIO,I/O模型在很大程度上决定了框架的性能。传统阻塞型I/O(BIO)特点:每个请求都需要独立的线程完...

2019-09-26 10:46:28 1067

原创 Netty4之处理链

本文是基于Netty4.1.x,Handler在Netty占据着很重要的位置,跟Servlet中的filter很像,通过Handler可以完成消息的编解码、拦截指定的消息、统一对日志错误进行处理、统一对请求进行计数。所有的Handler都实现ChannelHandler接口,分为两大类,ChannelInboundHandler与ChannelOutboundHandler,ChannelInbo...

2019-09-23 19:05:22 475

原创 Netty4之编解码

本文是基于Netty4.1.x,一般在使用Netty作为网络框架进行开发时,编解码框架是我们应该注意的一个重要部分。应用从网络层接收数据需要经过解码(Decode),将二进制的数据报转换从应用层的协议消息,这样才能被应用逻辑所识别。同样,客户端发送或服务端在返回消息时,是需要将消息编码(Encode)成二进制字节数组(在Netty4中就是ByteBuf)对能发送到网络对端。对于编解码Netty4本...

2019-09-22 14:25:39 629

原创 Netty4之启动流程

Netty是基于JAVA NIO的网络应用框架,使用Netty可以迅速的开发网络应用。主要是用在服务端。这篇文章主要是分析Netty4.1.x的启动流程。通过启动流程可以更新清晰的知道Netty的运行逻辑。在介绍启动流程之前先说说几个名词的基本概念:Bootstrap 启动器,负责对于整个Netty应用的启动,分为ServerBootstrap(Server端使用),Bootstrap(Cli...

2019-09-13 15:16:54 474

原创 Netty4之业务线程池的使用

此文章是基于Netty4.1,一般在使用Netty做服务端开发时,通常会定义I/O线程池及业务线程池。I/O线程池顾名思义用于处理网络连接及维护Channel的相关事件(一般像心跳及编解码都可以使用I/O线程池)。当需要处理比较耗时的业务逻辑也共用I/O线程池话会对整个服务的吞吐量有比较大的影响(曾经遇到过)。所以在生产环境中建议定义业务线程池。下面说说如何使用业务线程池及业务线程池处理逻辑的原理...

2019-09-13 15:08:00 8838

原创 Redis Sentinel 与 Redis Cluster

一、前言互联网高速发展的今天,对应用系统的抗压能力要求越来越高,传统的应用层+数据库已经不能满足当前的需要。所以一大批内存式数据库和Nosql数据库应运而生,其中redis,memcache,mongodb,hbase等被广泛的使用来提高系统的吞吐性,所以如何正确使用cache是作为开发的一项基技能。本文主要介绍Redis Sentinel 及 Redis Cluster的区别及用法,Redi...

2018-07-26 14:06:18 69721 9

原创 Spring专题一:SpringMVC请求处理流程

本文主要是从整体介绍springmvc处理请求的流程一、简介Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。Spring Web MVC也是服务...

2018-04-20 09:21:54 606

原创 异步的AsyncHttpClient使用详解

背景       前面的一篇文章【同步的HttpClient使用详解】中,提到了服务端通进行网络请求的方式。也讲述了在并发量大的情况下使用HttpClient的连接池来提高性能。此方法虽然很有效果,但是当访问量极大或网络不好的情况下也会出现某些网络请求慢导致其它请求阻塞的情况,为此本文引入了异步的HttpClient包,将网络请求变成一个异步的请求,不影响其它的请求。异步httpClien...

2017-02-16 15:59:25 48975 9

原创 日志组件logback使用详解

背景问题定位是日常程序开发过程中不可或缺的一部分,能高效的定位程序中的问题能大大提高开发的效率。目前程序中所存在的问题大致有以下两种类型:1、代码本身有问题,这类问题通常会有比较常见的错误提醒,如UnsupportedOperationException不支持的操作,IllegalArgumentException非法参数,IndexOutOfBoundsException索引

2017-11-25 12:57:26 1213

原创 乐观锁与悲观锁

一、前言在多用户的环境中,经常会出现多个用户同对一条记录进行修改,这时就不可避免的产生冲突。这也是并发场景中经常会遇到的问题。比较常见的冲突有:丢失更新与脏读。一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失,如用户把A的值由6变成2,用户B把2变成6.此时对于用户A来说,他的修改是无效的;当一个事务读取其它完成一半事务的记录时,就会发生脏读取。如用户A,B看到的值都是6,用户B

2017-09-02 14:27:59 410

原创 闭锁CountDownLatch与栅栏CyclicBarrier

一、闭锁与栅栏介绍(jdk1.5)闭锁(CountDownLatch):在并发时的同步辅助类,在一组线程正在完成某个任务之前,允许一个或多个线程一直等待。即一组线程等待某一事件发生,事件没有发生前,所有线程将阻塞等待;而事件发生后,所有线程将开始执行;闭锁最初处于封闭状态,当事件发生后闭锁将被打开,一旦打开,闭锁将永远处于打开状态。栅栏(CyclicBarrier):在并发时的同步辅助

2017-08-08 10:53:35 374

原创 Tomcat启动流程解析

一、前言众所周知,Tomcat是作为一款优秀的web服务容器被广泛应用。Tomcat是基于J2EE规范实现了经典的双亲委派模型的类加载体系。二、相关概念1、JAVA虚拟机主要的类加载器:a、Bootstrap Loader:加载lib目录下或者System.getProperty("sun.boot.class.path")、或者-XBootclasspath所指定的路径或jar。

2017-07-23 12:16:07 1699

原创 java类加载器 classLoader原理解析

一、classLoader说明目前主的JAVA应用都是由若干个.class文件组织而成的,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异常。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需...

2017-07-20 13:35:32 759

原创 并发编程中的Volatile与synchronized

一、引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。与 synchronized 块相比,volatile 变量所需的编码较少,不会引起线程上下文的切换和调度且运行时开销也较少,但是

2017-07-15 13:22:36 1115

原创 同步的HttpClient使用详解

HttpClient使用详解

2017-01-11 10:32:31 3996 2

原创 JDK源码中使用的设计模式

结构型模式:适配器模式:用来把一个接口转化成另一个接口。java.util.Arrays#asList()javax.swing.JTable(TableModel)java.io.InputStreamReader(InputStream)java.io.OutputStreamWriter(OutputStream)javax.xml.bind.annotation.adapt

2016-03-24 17:17:38 4353 2

原创 echart使用

折线图              *{margin: 0;padding: 0}      #bar_chart{width: 600px;height: 500px;margin-left: 10%;margin-top: 50px;}                    // 路径配置        require.config({ paths:

2016-03-24 17:16:20 1478

原创 利用栈Stack实现队列(Queue)

实现说明:入队时,将元素压入s1;出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队;这个思路,避免了反复“倒”栈,仅在需要时才“倒”一次。package com.knowledgeStudy.threadLocal;import java.util.Stack;public class MyQueue

2015-07-15 15:04:18 1438

原创 Spring事务传播行为和隔离级别

Spring事务的传播行为和隔离级别在spring中有7个传播行为,4个隔离级别。Propagation :  key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS--支

2015-06-16 10:04:30 562

原创 LRUCache 详解

LRU的基本概念:    LRU是Least Recently Used的缩写,近期最少使用算法。Java 实现LRUCache  1、基于LRU的基本概念,为了达到按近期最少使用排序,可以选择HashMap的子类 LinkedHashMap来作为LRUCache的存储容器。  2、LinkedHashMap的原理:  a、 对于LinkedHashMap而言,它继承与Ha

2015-06-10 12:44:06 5214

转载 tomcat详解

Tomcat简介 一、Tomcat背景  自从JSP发布之后,推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet, 这样Tomcat就诞生了。Tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最

2015-06-09 15:18:58 1005

原创 Java 关键字详解

访问控制修饰符号1)        private私有的 private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。 只能在声明 private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言,它们是不可见的。 所有类成员的默认访问范围都是 package 访问,也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中

2015-06-09 15:02:32 1348

原创 微信分享引导页效果

Php*{margin:0px;padding: 0px;}#shareit {-webkit-user-select: none;display: none;position: absolute;width: 100%;height: 100%; background: rgba(0,0,0,0.85);text-align: center;top: 0;left: 0;z-index

2015-06-05 14:13:56 9307

原创 Github之BASH使用教程

GitHub简介:        Git 是基于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS,Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的分支、合并、跟踪的能力。安装 GIT 客户端

2015-05-27 10:46:12 1022

转载 ConcurrentHashMap源码解读

曾经研究过jkd1.5新特性,其中ConcurrentHashMap就是其中之一,其特点:效率比Hashtable高,并发性比hashmap好。结合了两者的特点。   集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发

2015-03-13 21:14:35 704

原创 事务性质以及隔离级别

事务的概念事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都会执行,要么都不会执行,它是一个不可分割的工作单位。事务的提出主要是为了解决并发情况下保持数据一致性的问题。事务的基本特征Atomic(原子性):事务中包含的操作被看作是一个逻辑单元,这个逻辑单元中的操作要么全部执行成功,要么全部执行失败。Consistentcy(一致性)

2015-03-06 20:29:58 725

原创 Java异常机制Throwable

Java中异常的概念以及处理异常在Java程序运行期间出现了一个错误,这个错误可能是由于文件包含了错误信息,或者是由于网络连接出现问题,也可以是因为使用了无效的数组下标,或者是试图使用一个没有被赋值的对象引用而造成的,我们称这样的错误为异常。在出现异常时用户期望程序能够采用一些理性的行为。如果由于出现错误而使得程序操作没有完成,这时程序应该:返回到一种安全状态,并能够让用户执行一些

2015-02-08 09:04:44 13256 3

原创 数据结构之堆

堆的定义堆是一棵完全被填满的二叉树,可以的例外是在底层,底层上的元素从左到右填入。这样的树被称为完全二叉树。下面是一棵完全二叉树的结构图:                                           堆的性质堆可以使我们想要的操作得到快速的执行,为了达到快速执行的目的,一般来说堆的最小元应该在根上,当我们要考虑任意子树也应该是堆,那么任意节点就应该小于它

2015-02-05 14:44:53 507

原创 Java New IO(NIO)详解

I/O简介1、I/O 输入或者输出指的是计算机与外部世界或者一个程序与计算机的其余部分之间的接口,它对于任何计算机系统都非常重要,因面所有的I/O的主体实际上是内置在操作系统中的,单独的程序一般是让系统为它们完成大部分的工作。2、在Java编程中,直到JDK1.4之前一直使用的是流的方式来完成I/O,所的有I/O都被看作是单个字节的移动,通过一个称为Stream的对象一次移动一个字节。流I

2015-02-01 14:08:03 2010

原创 JavaScript两种定时器详解

setTimeoutsetInterval

2015-01-27 09:08:07 1008

原创 EhCache详细解读

特性一览1、快速轻量过去几年,诸多测试表明Ehcache是最快的Java缓存之一。Ehcache的线程机制是为大型高并发系统设计的。大量性能测试用例保证Ehcache在不同版本间性能表现得一致性。很多用户都不知道他们正在用Ehcache,因为不需要什么特别的配置。API易于使用,这就很容易部署上线和运行。很小的jar包,Ehcache 2.2.3才668kb。最小的

2015-01-26 18:00:33 5855 5

原创 Java IO 流体系

文件类File1、java.io.File类:文件和目录路径名的抽象表示方式与平台无关。2、File能新建、删除、重命名文件和目录,但是不能访问文件本身的内容;File类关心的是磁盘上文件的存储,而流类关心的是文件的内容。3、File 类可以作为参数传递流的构造函数。相对路径:在当前文件(工程)目录下文件的路径。绝对路径:包括盘符在内的完整文件路径。4、File类的使用的方

2015-01-24 09:26:24 966

原创 Servlet之监听器Listener

监听器(Listener)

2015-01-21 19:32:32 1845

原创 Java 反射机制

反射的概念1、反射被看作是动态语言的关键,反射机制允许程序在执行期间借助Reflect的API取得任何类的内部信息以及操作内部属性和方法。Class类1、Class类被定义为反射的源头。在Object类中定义了public final Class getClass(){}这个方法来获取运行时类Class,这个Class可以保存类的运行时信息。2、有了反射,可以通过反射创建一个对

2015-01-21 18:10:58 621

原创 Servlet过滤器Filter详解

Filter概述1、Filter意为过滤镜或者过滤器,用于在Servlet之处对request或者response进行修改。Filter提出了过滤链(FilterChain)的概念。这个概念体现了设计模式中的2、Filter的处理过程:Filter基本使用方法Filter适用的案例

2015-01-21 11:30:01 1739

原创 java 多线程详解

关于线程的概念1、程序一般是指一段静态代码,静态对象;进程是程序的一次执行过程或正在运行的程序动态的的过程,有它的产生、存在和消亡的过程;线程是指一个程序内部的一条执行路径,也就是说每一个任务就代表一个线程。进程与线程相互联系然而又有区别,从本质上来说每个进行都有自己的一整套变量,而线程间可以共享变量,共享变量使得线程之间的通信比进行之间通信更有效、更容易。2、并不是每种情况都需要多线程,

2015-01-06 18:11:33 795 1

原创 javascript获取页面信息和对象的位置

javaScript获取屏幕的分辨率大小1、获取屏幕的分辨率宽:widow.screen.height2、获取屏幕的分辨率高:window.screen.width3、屏幕可用工作区高度: window.screen.availHeight4、屏幕可用工作区宽度: window.screen.availWidthjavaScript获取网页可视区的大小1、获取网

2015-01-02 10:26:50 696

原创 struts2的运行流程

struts2的运行流程:1、首先在浏览器中输入一个url就相当于提交了一个HttpServetRequest请求,会经过一系列的过滤器如ActionContext Clear up 等等,这些过滤器是有序的。2、经过FilterDispatcher过滤器,FilterDispatcher是struts的前端控制器,这时会发一个请求询问ActionMapper来决定是否要处理请求。Acti

2014-12-31 19:24:43 571

原创 JVM调试日志详解

1、GC 表示垃圾回收,其中DefNew:表示GC发生的区域,这里表示新生代; 6972K->431K(9216K)表示GC前该内存区域已经使用的容量为6972K,回收后该区域使用的容量为431K,该内存的总量为9216K; 6972K->6575K(19456K)表示GC前java堆已经使用的容量为6972K,回收后java堆使用的内存为6575K,java堆的总容量为19456K。2、

2014-12-30 19:00:10 1575

原创 JVM内存介绍与参数配置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出。一、Java JVM内存介绍JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(

2014-12-29 18:12:05 663

GitGUI客户端

用于操作git的客户端口,包括图形界面和bash命令工具

2015-05-27

MemCache-release

这个工具主要是要安装MemCache服务器的。

2015-03-18

jquery.blockUI

这是一款前端开发的工具包,这是一个框架包。

2015-01-22

Jquery.2.0.0

Jquery2.0.0.js开发包,可以使用的。

2015-01-22

jstl开发包

用于jsp页面展示的jstl标签库所需要的jar包。

2015-01-22

javaMail.jar

这是一个Javamail工具包可以通过这个包来实现发送邮件的功能。如有不懂可参考我的个人博客。

2015-01-22

SVN客户端工具

用来连接SVN的客户端工具,可用作协同开发。

2015-01-22

ssh整合步骤

里面详细介绍SSH的整合过程,以及一些注意事项.但是开发包需要自己去下,有需要的可以联系我。

2015-01-22

POI_3.10.jar

使用Java来操作office当中的Excel表格。包括读取和新建。

2015-01-22

commons-codec.jar

将目标字符串进行MD5加密,这个过程是不可逆的。

2015-01-22

jackson.jar

用Jackson.jar包将目标对象数据转换为json格式的数据。

2015-01-22

Oracle JDBC连接驱动包

Java用JDBC方式连接Oracle数据库的驱动包。

2015-01-22

数据库Mysql连接驱动

Java使用JDBC连接Mysql数据库的驱动包

2015-01-22

MVC与Struts简介

简单的介绍了MVC的架构模式以及Struts2的产生、Struts的简单介绍

2014-11-09

java 经典小程序

一些java有趣的小算法,可用做初学java的人学习。

2014-11-08

基于web数据挖掘的数字图书馆个性化服务--王军强

就数字图书馆而言, 每一个用户所追求的信息目标 不同, 关注的信息子空间也就不同。现在大多数图书馆 的服务模式并没有考虑到用户之间的差异性, 这使得每 一个用户必须面对相同的用户空间。用户迫切需要一 种能够依据自身特点自动组织调整信息的服务模式, 因 此个性化服务应运而生, 并成为许多图书馆所追求的目的

2014-05-29

Web数据挖掘在数字图书馆个性化服务中的应用

摘 要: 阐述了 Web 数据挖掘技术的有关问题, 论述了 Web 数据挖掘在个性化信息服 务中的作用, 提出了基于一个 Web 数据挖掘的个性化信息服务体系结构。 关键词: 数字图书馆;Web 数据挖掘; 个性化服务

2014-04-18

空空如也

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

TA关注的人

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