自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (6)
  • 收藏
  • 关注

原创 RateLimiter源码解读

RateLimiter源码解读最近使用了Guava提供的限流器RateLimiter觉得十分好用,遍想一探究竟。RateLimiter使用的限流算法为令牌桶,这里对令牌桶算法不做过多的解释,不懂的同学可以搜索一番。限流器创建public static RateLimiter create(double permitsPerSecond) { return create(permitsPerSecond, SleepingStopwatch.createFromSystemTimer());

2020-12-22 00:12:14 358

原创 netty源码浅析--accept

前面我们分析了netty线程启动和服务器bind的过程,接着我们要分析的是服务器accept的过程。        我们先看一下java nio中是怎么处理accept这个操作的。我们截取java nio中的一个代码片段。 selector获取活跃key之后,然后会判断key是否是可accept的,如果是则执行accept操作。我们都知道netty是对java nio的封装,所以对netty的

2017-07-07 19:59:38 1631

原创 Spring自定义annotation实现

spring自定义annotation

2017-06-30 17:12:14 6692

原创 基于netty的网络聊天室

基于netty和mybaties的网络聊天室登录界面 一对多聊天界面 注册界面 注册失败界面 github: https://github.com/hustchai/Chat

2016-09-16 10:44:05 1838 1

原创 daoHelper

根据sql语句自动生成po,dao,xml。github: https://github.com/hustchai/dao-helper

2016-09-16 10:29:42 1209

原创 netty源码浅析--服务器bind

netty源码分析--服务器bind

2016-09-03 16:55:17 1824

原创 netty源码浅析--线程启动

一直对Java高并发比较感兴趣,最近在学习netty特来记录。        提到netty首先要了解一下什么是Reactor设计模式,在网上找了一下关于Reactor设计模式的介绍,链接在文档的最下方。        在《Scalable IO in Java》中讲到了一种多线程下的Reactor模式。 在这种设计模式中,有一个前端mainReactor主要负责响应client的连接请求并建

2016-08-20 16:42:17 2818

原创 Java中断初窥

在使用Linux时我们经常可以通过在终端键入 kill quit命令,来结束指定任务。那么Java怎么让一个线程停止呢。其中的一种方法就是让线程中断,什么是中断呢?      在百度百科查到的解释是:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫

2016-06-03 19:56:48 489

原创 Java动态代理

Spring中的AOP是基于Java动态代理实现的,那么什么是动态代理呢?既然“动态代理”有代理两个字,那么肯定和代理模式有关系喽。       代理模式是经典的23种设计模式之一。简单的说,代理模式就是为其他对象提供一种代理,以控制对这个对象的访问。对于什么是代理模式不过多进行解释。       那么什么又是动态代理呢?动态代理是相对于静态代理来说的,静态代理的代理类是手工书写的或者通过工具生成,

2016-05-29 17:00:04 424

原创 设计模式之回调模式

回调在Spring中被大量使用,那什么是回调呢?        简单的说,在A类中调用B类的C方法,然后B类调用A类中的D方法。方法D被称为回调方法。回调是实现异步的基础。经典的回调方式如下:Class A实现回调接口CallBack——背景1class A中包含一个class B的引用b ——背景2class B有一个参数为callback的方法f(CallBack callback) —

2016-05-26 17:37:44 8761

原创 Tomcat源码分析--一次HTTP请求过程

前两篇我们分析了Tomcat服务的启动过程和Connector(连接器)。现在让我们看看一次Tomcat服务器是怎么提供HTTP服务的。       上文我们说到endpoint是底层处理I/O具体实现类,那么一次HTTP首先也要从这个类中开始。还是以NIOEndPoint实现类为例子。在NIOEndPoint类中有一个名为Acceptor内部类。该内部类负责接收即将到来的TCP/IP连接,并将它们

2016-05-08 20:37:45 4464 1

原创 Tomcat源码分析--Connector(连接器)

Tomcat源码分析--Connector

2016-04-27 13:15:43 2408 1

原创 Tomcat源码分析--启动过程

一直使用Tomcat确不知道它的运行原理。看了源码后对它的启动过程有了一定的了解,特来记录一下。      首先先介绍一下Tomcat的架构图:       Tomcat主要有两个核心的组件,一个是Connector(连接器)和容器。所谓连接器就是当有HTTP请求到来时,连接器负责接收这个请求,然后将该请求转发到容器。容器有Engine,Host,Context,Wrapper。Engine:表示

2016-04-26 16:52:09 9131

原创 Java并发之AbstractQueuedSynchronizer分析

在并发程序中一般使用锁对共享变量进行互斥访问。在java程序中一般用synchronized关键字来实现线程对共享变量的互斥访问。而从JDK1.5以后java并发大师 Doug Lea 开发了AbstractQueuedSynchronizer(下文用AQS代替)组件,使用原生java代码实现了synchronized语义。我们通过介绍AQS最常用的ReentrantLock锁来介绍AQS。AQS有

2016-02-03 21:05:31 2740

原创 java并发之CAS操作

CAS即compare and set的缩写。常见于java.util.concurrent中,是构成concurrent包的基础。CAS有三个操作数,内存值M,旧的预期(expect)值E和更新(update)值U。在CAS操作中,只有当M==E时,才会更新U。否则什么都不做。这些操作都是原子的。

2016-01-29 15:55:30 2314

原创 设计模式之原型模式

使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。在说什么是原型模式前首先要解释一下两个概念,深复制和浅复制。 浅复制:复制一个对象时,基本类型字段复制其值,引用类型复制其引用。 深复制:复制一个对象时,不仅复制对象的基本类型的字段,而且也复制引用对象的对象。java中使

2016-01-25 13:12:32 478

原创 Java并发之读者写者模型

问题描述:设想一个飞机订票系统,其中有许多竞争的进程试图读写其中的数据。多个进程同时读取是可以接受的,但如果一个进程正在更新数据库,则所有的其他进程都不能访问数据库。即便是读操作也不行。Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。import java.util.concurrent.Executor;import java.ut

2016-01-24 21:01:30 2106 2

原创 设计模式之生成器模式

将一个复杂对象的创建和它的表示分离,使得同样的创建过程可以有不同的表示。应用场景:一水杯工厂要生产各式各样的水杯,无论杯子是神马造型,但都包括绳子,帽子和杯体。以此模型创建各种类型的杯子。类图 cup类public class Cup { private String string; //绳子 private String cap; //帽子 private

2016-01-19 10:27:30 2487

原创 设计模式之抽象工厂

抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。应用场景:想必大家都玩过暴力摩托这款游戏(暴露了年龄),在游戏中赛车手可以骑行摩托和携带武器,我们假定他拿的武器是AK47(好拉风有木有)。这只是在普通的模式下,现在我们虚拟一个魔法模式。在魔法模式下赛车手骑的是扫把(对,你没有看错,是扫把)

2016-01-15 12:07:56 348

原创 java并发之生产者消费者模型

生产者和消费者模型是操作系统中经典的同步问题。该问题最早由Dijkstra提出,用以演示它提出的信号量机制。经典的生产者和消费者模型的描述是:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者

2016-01-10 14:21:30 3708 1

原创 Java并发之volatile

volatile有两个特性确保volatile修饰的变量对所有线程可见。禁止指令重排确保volatile修饰的变量对所有线程可见为了解释第一个特性,首先我们要知道java内存模型,java内存逻辑上分为工作内存和主内存(这里内存的定义和我们平常所说的java内存分为堆、栈、方法区等并不冲突)java内存模型规定所有的变量都存在主内存中,每条线程还有自己的工作内存,工作内存中保存了该线程使用到变

2016-01-08 12:54:25 972

原创 Android与服务器端通信时 部分中文出现乱码

在android与服务器端通信期间出现部分中文有乱码,如图所示: 众所周知,乱码出现在两种不同的编码格式相互转换过程中,而在项目的一开始便约定所有的编码格式都采用UTF-8 mysql编码 服务器端返回数据编码 由于项目采用的是SpringMVC 所以只需要将其如下配置即可返回UTF-8格式的编码 而在本机中使用httpClient进行http模拟时 数据也正常返回。所以将问题锁定在an

2015-12-16 14:20:04 1551 2

转载 BufferedInputStream 源码学习笔记

http://zhhphappy.iteye.com/blog/1562427

2015-11-16 17:31:14 352

原创 git连接本地服务器教程

1、前期准备服务器上配置好的gitgit客户端 1.1 在服务器上安装git (本机所使用的linux是ubuntu) 在服务器输入命令:sudo apt-get install git即可 然后创建名字为git的用户组和用户1.2 下载客户端 在浏览器地址栏输入:https://git-for-windows.github.io/ 回车后 点击Download进行下载2、具体

2015-11-13 20:28:55 12686 1

原创 Java虚拟机基础知识

最近拜读了《深入理解Java虚拟机》,读完之后受益匪浅。这篇博客也算自己读完之后的一些总结吧。 Java程序运行时会将自己所管理的内存分为以下几个区域,程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池、直接内存。如图1所示: 自我理解,程序计数器功能如cpu控制单元内的指令寄存器IR。程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的

2015-11-08 19:20:35 667

原创 使用cookie绕过验证码进行模拟登录

1.工具 httpClient jar包 任意抓包工具 推荐 firefox的 firebug(非常好用)在使用httpClient进行模拟登录时,有时候会遇到需要输入验证码的情况。而对验证码进行识别的方法既费时效果还不好。这里提供一个取巧的方法,即使用浏览器登录时产生的cookie进行登录。2.上代码 首先是一个模拟http请求的工具类import java.io.IOException;

2015-10-19 22:59:21 13478 1

原创 JAVA泛型擦除机制

Java 泛型擦除机制

2015-09-27 17:03:22 2958

原创 JAVA利用泛型返回类型不同的对象

有时需要在方法末尾返回类型不同的对象,而return 语句只能返回一个或一组类型一样的对象。此时就需要用到泛型。首先先解释个概念, 元组: 它是将一组对象直接打包存储于其中的一个单一对象,这个容器对象允许读取其中元素,但不能修改。利用泛型创建元组public class ReturnTwo<A,B> { public final A first; public final B sec

2015-09-24 22:43:37 8911 1

原创 Springmvc+mybatis 问题总结(续ing)

1、java.lang.IllegalStateException: getWriter() has already been called for this response拦截器中相关代码@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response,

2015-09-23 15:58:26 624

原创 JAVA中复杂对象调用构造器顺序

最近读《JAVA编程》思想有点心得,给大家分享下。 关于Java中复杂对象调用构造器顺序,话不多说直接上代码public class A { public A() { System.out.println("A被初始化了"); }}public class B { public B() { System.out.println("B被初始化了")

2015-09-15 22:35:10 1439 1

原创 设计模式之工厂模式

根据单一职责原则,专门的类用来实例化对象。我们习惯把这种类叫做工厂。 public interface Ihelper { void open(); void close(); }public class ORACLEHelper implements Ihelper{ @Override public void open() { Sy

2015-08-09 14:55:39 365

原创 Hadoop WordCount源码解读

MapReduce编程模型MapReduce采用“分而治之”的思想。将HDFS上海量数据切分成为若干块,将每块的数据分给集群上的节点进行计算。然后通过整合各节点的中间结果,得到最终的结果。 HDFS上默认块的大小要比磁盘默认的大小大的多。其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间明显大于定位这个块开始位置所需时间。这样,传输一个由多个块组成的文件时间取决于磁盘传输速率。

2015-07-26 17:43:04 3340 1

原创 Ubuntu环境下安装jdk

ubuntu环境下安装jdk1.工具 工欲善其事必先利其器,首先需要工具若干 ① ubuntu 12.04以上的环境 ② jdk源码包本教程默认已经安装好ubuntu12.04以上的环境。 jdk源码包可以在oracle官网上下载到,地址为: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213

2015-07-07 21:45:29 610 1

原创 基于springmvc+mybatis+easyui的后台管理系统Demo

效果图上面只是简单的功能展示。具体功能实现有:1,树形菜单        2,更改皮肤         3,分页显示        4,批量删除        5,增加用户        6,删除用户        7,更新用户网盘链接:http://pan.baidu.com/s/1kT1RZHP

2015-06-27 11:12:10 4839

转载 SSH分页

http://blog.csdn.net/zjx102938/article/details/8130401

2015-04-30 15:53:07 406

原创 关于eclipse创建android项目没有自动生成r文件的解决方法

1 第一看xml文件里面有没有错误2 一定要把project->Build automatically勾选上

2015-03-26 12:35:10 1665

原创 已知一颗二叉树S的前序遍历和中序遍历 序列,请编程输出二叉树S的后续遍历序列.

#include #include //在中序中查找根的下标int FindRoot(char c, char in[], int s, int e){int i;for(i=s; i{if(in[i] == c){break;}}return i;}/* *递归遍历求得后序 *@pre:先序序列 *@pre_

2015-02-25 14:23:23 2092 2

转载 约瑟夫环

#include#include/*约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列依此规律重复下去,直到圆桌周围的人全部出列。*/int main(){     int n;  printf("报数出列游

2015-02-22 17:23:31 451

原创 全排列,回溯

#include#define n 3int a[n];int vis[n+1];void dfs(int cur){if(cur == n){int j;for(j = 0 ; j printf("%d",a[j]);}printf("\n");}int i;for(i = 1 ; i if(vi

2015-02-20 17:29:05 512

原创 LCS 最长公共字串

#include#includeint c[10000][10000];char str1[10000];char str2[10000];void func(int m,int n) {if(m return ;int i,j;for(i = 0 ; i for(j = 0 ;j c[i][j] = 0;int besti = 0,

2015-02-17 10:35:18 498

看透springMvc源代码分析与实践

看透springMvc源代码分析与实践

2017-07-14

数据挖掘--概念与技术

数据挖掘---概念与技术这本书是一本很好的学习数据挖掘的入门教材

2015-06-11

机器学习实战

是很好的机器学习实战的教材,本书主要开发语言为python

2015-06-11

Google云计算三大论文英文版.rar

大名鼎鼎的谷歌三篇论文 是很好的学习mapreduce hdfs hbase入门教材

2015-06-11

log4j详解与实战

深入的介绍log4j的各种使用方法,不容错过

2013-12-02

[深入理解Java虚拟机:JVM高级特性与最佳实践].周志明.高清扫描版.pdf

[深入理解Java虚拟机:JVM高级特性与最佳实践].高清扫描版

2013-12-02

空空如也

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

TA关注的人

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