java
Tmac柴
这个作者很懒,什么都没留下…
展开
-
RateLimiter源码解读
RateLimiter源码解读最近使用了Guava提供的限流器RateLimiter觉得十分好用,遍想一探究竟。RateLimiter使用的限流算法为令牌桶,这里对令牌桶算法不做过多的解释,不懂的同学可以搜索一番。限流器创建public static RateLimiter create(double permitsPerSecond) { return create(permitsPerSecond, SleepingStopwatch.createFromSystemTimer());原创 2020-12-22 00:12:14 · 384 阅读 · 0 评论 -
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 · 2328 阅读 · 0 评论 -
设计模式之单例模式
意图:一个类仅有一个实例,并提供一个访问它的全局访问点特点:该类不能被外界任意实例化,该类向外界提供一个可获得该类的实例方法。该类只能被实例化一次public class Moto {private Moto() {}private static Moto moto;public Moto getInstance(){if(moto ==原创 2015-02-16 11:15:26 · 422 阅读 · 0 评论 -
Java并发之AbstractQueuedSynchronizer分析
在并发程序中一般使用锁对共享变量进行互斥访问。在java程序中一般用synchronized关键字来实现线程对共享变量的互斥访问。而从JDK1.5以后java并发大师 Doug Lea 开发了AbstractQueuedSynchronizer(下文用AQS代替)组件,使用原生java代码实现了synchronized语义。我们通过介绍AQS最常用的ReentrantLock锁来介绍AQS。AQS有原创 2016-02-03 21:05:31 · 2753 阅读 · 0 评论 -
Tomcat源码分析--Connector(连接器)
Tomcat源码分析--Connector原创 2016-04-27 13:15:43 · 2440 阅读 · 1 评论 -
Tomcat源码分析--启动过程
一直使用Tomcat确不知道它的运行原理。看了源码后对它的启动过程有了一定的了解,特来记录一下。 首先先介绍一下Tomcat的架构图: Tomcat主要有两个核心的组件,一个是Connector(连接器)和容器。所谓连接器就是当有HTTP请求到来时,连接器负责接收这个请求,然后将该请求转发到容器。容器有Engine,Host,Context,Wrapper。Engine:表示原创 2016-04-26 16:52:09 · 9159 阅读 · 0 评论 -
设计模式之回调模式
回调在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 · 8873 阅读 · 0 评论 -
Java动态代理
Spring中的AOP是基于Java动态代理实现的,那么什么是动态代理呢?既然“动态代理”有代理两个字,那么肯定和代理模式有关系喽。 代理模式是经典的23种设计模式之一。简单的说,代理模式就是为其他对象提供一种代理,以控制对这个对象的访问。对于什么是代理模式不过多进行解释。 那么什么又是动态代理呢?动态代理是相对于静态代理来说的,静态代理的代理类是手工书写的或者通过工具生成,原创 2016-05-29 17:00:04 · 433 阅读 · 0 评论 -
Tomcat源码分析--一次HTTP请求过程
前两篇我们分析了Tomcat服务的启动过程和Connector(连接器)。现在让我们看看一次Tomcat服务器是怎么提供HTTP服务的。 上文我们说到endpoint是底层处理I/O具体实现类,那么一次HTTP首先也要从这个类中开始。还是以NIOEndPoint实现类为例子。在NIOEndPoint类中有一个名为Acceptor内部类。该内部类负责接收即将到来的TCP/IP连接,并将它们原创 2016-05-08 20:37:45 · 4483 阅读 · 1 评论 -
Java中断初窥
在使用Linux时我们经常可以通过在终端键入 kill quit命令,来结束指定任务。那么Java怎么让一个线程停止呢。其中的一种方法就是让线程中断,什么是中断呢? 在百度百科查到的解释是:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫原创 2016-06-03 19:56:48 · 499 阅读 · 0 评论 -
daoHelper
根据sql语句自动生成po,dao,xml。github: https://github.com/hustchai/dao-helper原创 2016-09-16 10:29:42 · 1230 阅读 · 0 评论 -
基于netty的网络聊天室
基于netty和mybaties的网络聊天室登录界面 一对多聊天界面 注册界面 注册失败界面 github: https://github.com/hustchai/Chat原创 2016-09-16 10:44:05 · 1848 阅读 · 1 评论 -
Spring自定义annotation实现
spring自定义annotation原创 2017-06-30 17:12:14 · 6722 阅读 · 0 评论 -
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 · 1697 阅读 · 0 评论 -
java并发之生产者消费者模型
生产者和消费者模型是操作系统中经典的同步问题。该问题最早由Dijkstra提出,用以演示它提出的信号量机制。经典的生产者和消费者模型的描述是:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者原创 2016-01-10 14:21:30 · 3721 阅读 · 1 评论 -
Java并发之volatile
volatile有两个特性确保volatile修饰的变量对所有线程可见。禁止指令重排确保volatile修饰的变量对所有线程可见为了解释第一个特性,首先我们要知道java内存模型,java内存逻辑上分为工作内存和主内存(这里内存的定义和我们平常所说的java内存分为堆、栈、方法区等并不冲突)java内存模型规定所有的变量都存在主内存中,每条线程还有自己的工作内存,工作内存中保存了该线程使用到变原创 2016-01-08 12:54:25 · 989 阅读 · 0 评论 -
SSH分页
http://blog.csdn.net/zjx102938/article/details/8130401转载 2015-04-30 15:53:07 · 418 阅读 · 0 评论 -
基于springmvc+mybatis+easyui的后台管理系统Demo
效果图上面只是简单的功能展示。具体功能实现有:1,树形菜单 2,更改皮肤 3,分页显示 4,批量删除 5,增加用户 6,删除用户 7,更新用户网盘链接:http://pan.baidu.com/s/1kT1RZHP原创 2015-06-27 11:12:10 · 4854 阅读 · 0 评论 -
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 · 615 阅读 · 1 评论 -
JAVA利用泛型返回类型不同的对象
有时需要在方法末尾返回类型不同的对象,而return 语句只能返回一个或一组类型一样的对象。此时就需要用到泛型。首先先解释个概念, 元组: 它是将一组对象直接打包存储于其中的一个单一对象,这个容器对象允许读取其中元素,但不能修改。利用泛型创建元组public class ReturnTwo<A,B> { public final A first; public final B sec原创 2015-09-24 22:43:37 · 8995 阅读 · 1 评论 -
JAVA泛型擦除机制
Java 泛型擦除机制原创 2015-09-27 17:03:22 · 2985 阅读 · 0 评论 -
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 · 1459 阅读 · 1 评论 -
使用cookie绕过验证码进行模拟登录
1.工具 httpClient jar包 任意抓包工具 推荐 firefox的 firebug(非常好用)在使用httpClient进行模拟登录时,有时候会遇到需要输入验证码的情况。而对验证码进行识别的方法既费时效果还不好。这里提供一个取巧的方法,即使用浏览器登录时产生的cookie进行登录。2.上代码 首先是一个模拟http请求的工具类import java.io.IOException;原创 2015-10-19 22:59:21 · 13542 阅读 · 1 评论 -
Java虚拟机基础知识
最近拜读了《深入理解Java虚拟机》,读完之后受益匪浅。这篇博客也算自己读完之后的一些总结吧。 Java程序运行时会将自己所管理的内存分为以下几个区域,程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池、直接内存。如图1所示: 自我理解,程序计数器功能如cpu控制单元内的指令寄存器IR。程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的原创 2015-11-08 19:20:35 · 677 阅读 · 0 评论 -
BufferedInputStream 源码学习笔记
http://zhhphappy.iteye.com/blog/1562427转载 2015-11-16 17:31:14 · 361 阅读 · 0 评论 -
Android与服务器端通信时 部分中文出现乱码
在android与服务器端通信期间出现部分中文有乱码,如图所示: 众所周知,乱码出现在两种不同的编码格式相互转换过程中,而在项目的一开始便约定所有的编码格式都采用UTF-8 mysql编码 服务器端返回数据编码 由于项目采用的是SpringMVC 所以只需要将其如下配置即可返回UTF-8格式的编码 而在本机中使用httpClient进行http模拟时 数据也正常返回。所以将问题锁定在an原创 2015-12-16 14:20:04 · 1568 阅读 · 2 评论 -
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 · 636 阅读 · 0 评论 -
Java并发之读者写者模型
问题描述:设想一个飞机订票系统,其中有许多竞争的进程试图读写其中的数据。多个进程同时读取是可以接受的,但如果一个进程正在更新数据库,则所有的其他进程都不能访问数据库。即便是读操作也不行。Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。import java.util.concurrent.Executor;import java.ut原创 2016-01-24 21:01:30 · 2119 阅读 · 2 评论 -
设计模式之原型模式
使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。在说什么是原型模式前首先要解释一下两个概念,深复制和浅复制。 浅复制:复制一个对象时,基本类型字段复制其值,引用类型复制其引用。 深复制:复制一个对象时,不仅复制对象的基本类型的字段,而且也复制引用对象的对象。java中使原创 2016-01-25 13:12:32 · 495 阅读 · 0 评论