自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lynn

生活与技术,缺一不可

  • 博客(55)
  • 资源 (18)
  • 收藏
  • 关注

原创 Hadoop RPC分析 (二) -- Server

[Hadoop RPC服务端:Server]服务端的基本思路可以简述如下:通过网络获取到远程调用相关的信息,找到对应的方法,执行完成后,将结果通过网络发送给客户端。对于服务端,我们将主要关心内部的实现机制,找到服务端处理一次远程调用的整个流程。与Server相关的类主要为下面几个(都是Server的内部类)Server.Listener & Server.Liste

2016-07-25 20:49:12 3436

原创 Hadoop RPC分析(一) -- Client

[Hadoop RPC调用入口]在使用Hadoop RPC基本框架中,主要是通过getProxy来获得一个客户端代理对象,通过这个对象来向服务端发送RPC请求。getProxy有多个重载方法,最终都是调用到了下面这个函数来进行实现(来自org.apache.hadoop.ipc.RPC)publicstatic ProtocolProxy getProtocolProxy(

2016-07-25 20:47:31 4510

原创 MySQL数据库小结---待完善

1、索引mysql基本的索引都是使用B-tree系列来进行存储,例如PK、建表时的INDEX、UNIQUE约束。InnoDB使用的是B+树来存储索引信息。mysql对索引的使用较广:     a、找到对应的行     b、简化数据查询量,一次查询中有多个索引可用时,会选择对应数据更少的那个     c、在sort操作中,对group by的指定字段使用索引来进行计算

2016-04-03 17:08:16 2223

原创 ThreadLocal的原理

在多线程环境下,会使用ThreadLocal来保存变量,这样即使在多线程的环境下,也能够以线程安全的方式来使用变量。1、在多线程环境中,使用ThreadLocal来保存变量时,变量是存在什么地方?     简要来说,使用ThreadLocal来保存相关变量时,这个变量是存在当前使用ThreadLocal对象的这个线程中的,也就是当前线程,即Thread.curren

2016-03-05 23:25:35 2368

原创 一个ClassCastException引发的思考

一个ClassCastException引发的思考,在做一个简单的功能试验时,代码抛出了下面的异常明明类的完全限定名是一样的,竟然会转换失败。。。完整的项目代码如下所示import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.se

2015-11-07 11:27:03 4704

原创 Session和Cookie

Session是属于服务器端生成和管理的对象,由于HTTP请求本身是无状态的,因此在服务器端使用Session来管理HTTP请求的状态。服务器端会把session对象存在内存中。Cookie是属于浏览器前端的数据存储方案,数据存储于电脑本地磁盘上,在访问某个域名的服务时,浏览器会自动加载属于当前域的cookie数据,将cookie信息发送到服务器端。[Cookie和

2015-10-27 20:28:50 2238

原创 求解!关于Http和Socket

问题是这样,我写了一个LynnHttpClient的类,还有一个Socket的服务器类。在LynnHttpClient类的main方法中,我使用HttpURLConnection向服务端发了一条记录。但在服务端使用Socket读取数据的时候,为什么要读两次才能把HTTP头和内容读出来。代码如下客户端public class LynnHttpClient {    p

2015-09-02 14:43:57 2092 1

原创 tomcat服务器解析(七)-- Processor&Endpoint&ProtocolHandler

请求到达Poller处理,最终是由Processor来进行处理,为了说明这中间过程所涉及的部分,先整理下在tomcat服务的各个组成部分:ProtocolHandler、Endpoint、Endpoint.Handler、Processor它们之间的引用关系如下[ProtocolHandler]     org.apache.coyote.ProtocolHan

2015-06-17 20:26:11 5035 2

原创 Java Reference

Java Reference简要笔记。。。

2015-06-11 20:26:29 2467

原创 tomcat服务器解析(六)-- Acceptor

Acceptor负责用来管理连接到tomcat服务器的数量,来看看Acceptor在tomcat服务器中的应用,是如何实现连接管理的,socket连接建立成功之后,是如何实现内容的读写的(读写是交由Poller机制去完成)。先准备一点java nio中实现socket连接所需的基础知识:SocketChannel和ServerSocketChannelSocketChann

2015-06-07 17:41:26 6119

原创 tomcat服务器解析(五)-- Poller

在前面的分析中介绍过,Acceptor的作用是控制与tomcat建立连接的数量,但Acceptor只负责建立连接。socket内容的读写是通过Poller来实现的。 Poller使用java nio来实现连接的管理。关于nio,主要需要明确三个概念:Channel、Selector和SelectionKey.在这里的使用上,它们之间的关系可以简单这样理解,Channel必须

2015-06-05 22:59:07 9606 1

原创 tomcat服务启动解析

[web容器简介]先需要区分几个概念:Web Server 、Web ContainerWeb Server:能够通过HTTP提供服务的进程,可以是一套完整的系统、一个软件等Web Container:管理Java Servlet、JSP的容器,是Web Server的一个组件。一般负责,负责管理servlet的生命周期,url请求映射,请求权限验证等。常见的web容器

2015-05-14 17:25:07 4413

原创 tomcat服务器解析(三)---- Handler for Endpoint

前面的分析到,请求最终被封装成了一个SocketProcessor对象,放在Executors线程池中去执行。这些都还只是在tomcat内部的socket的处理层面上,那请求最终是如何被转到开发人员所写的servlet上的?NioEndpoint.SocketProcessor所做的工作在私有方法doRun中                if (handshake == 0)

2015-05-11 20:15:06 3757

原创 tomcat服务器解析(四) ---- 组成模块分解

前面部分梳理了tomcat服务器处理http请求的一个流程,这里进行内容总结,梳理下在tomcat服务器实现中的,各种功能模块。[Endpoint]Endpoint是基础的网络设施,通过Endpoint来实现网络连接和控制,它是服务器对外I/O操作的接入点。主要任务是管理对外的socket连接,同时将建立好的socket连接交到合适的工作线程中去。content:org.a

2015-05-11 20:13:54 4387

原创 tomcat服务器解析(二) --- Endpoint

Endpoint主要用来提供基础的网络I/O服务,封装了网络通讯相关的细节。在AbstractProtocol中对Endpoint有这样一段注释    /**     * Endpoint that provides low - level network I/O - must be matched to the     * ProtocolHandler im

2015-05-11 20:12:14 10728 1

原创 tomcat服务器解析(一)

httpservlet自己并不能独立运行,需要依赖于一个web容器才能够运行。维基百科中对httpservlet和web容器的关系做了简要说明 A web container (also known as a servlet container) is essentially the component of a web server that interacts with the s

2015-05-11 20:09:25 4282 2

原创 ZooKeeper简要笔记

整理的ZooKeeper的简要笔记

2015-04-16 20:28:22 3080

原创 synchronized锁住了什么

先看一个简单示例,下面这段代码能够正常通过编译。public class SyncTest {    public SyncTest syncVar;    public static SyncTest syncStaticVar;    public static synchronized void testStaticSync() {

2015-03-17 11:12:27 11704

原创 Executor-ThreadPoolExecutor实现

1、ThreadPoolExecutor的主要作用在Oracle中对ThreadPoolExecutor的作用进行了说明:1、在大量的异步任务到达的情况下,使用线程池能够提升性能;2、提供一种资源管理和调度的方法。一般通过Executors的工厂方法来生成一个线程池对象,Executors提供了多种方法来构造不同的线程池:1、带有缓存性质的线程池 Executors.new

2014-12-06 10:23:09 3663

原创 Executor实现----AbstractExecutorService实现分析

1、首先来看一段使用示例        ExecutorService recmdService = Executors. newFixedThreadPool(1);        Future> recmdFuture = recmdService.submit( new Callable>() {            @Override            publi

2014-11-23 14:42:46 5969 2

原创 Executor框架

1、框架定义的接口     Executor框架的接口主要由三个接口定义,Executor、ExecutorService和ScheduledExecutorService     Executor是最上层接口,定义了一个Runnable的任务执行的接口 void execute(Runnable command);     ExecutorService继承自Executor,在

2014-11-18 19:52:05 985

原创 Java自旋锁

Linux系统中自旋锁的原理和实现想当复杂,会涉及操作系统、内核等等一系列的东东,Java的自旋锁可以理解成让当前线程不停地在循环体内执行,直到满足线程进入临界区为止。在AbstractQueuedSynchronizer中就有自旋锁的使用,参见 acquireQueued方法final boolean acquireQueued(final Node node, 

2014-11-17 20:43:26 2678

原创 共享锁和排它锁(ReentrantReadWriteLock)

1、什么是共享锁和排它锁     共享锁就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有。     排它锁,也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁。2、排它锁和共享锁实例     ReentrantLock就是一种排它锁。CountDownLatch是一种共享锁。这两类都是单纯的一类,即,要么

2014-11-16 14:27:22 15989 1

原创 条件锁

ReentrantLock类有一个方法newCondition用来生成这个锁对象的一个条件(ConditionObject)对象,它实现了Condition接口。Condition提供了线程通讯的一套机制await和signal等线程间进行通讯的方法。。1、适用场景     当某线程获取了锁对象,但因为某些条件没有满足,需要在这个条件上等待,直到条件满足才能够往下继续执行时,就需要

2014-10-30 17:47:55 3844

原创 ReentrantLock解析

最近学习Jdk的源代码时,读到了ConcurrentHashMap的源码实现时,发现每一个分段Segment都是ReentrantLock类型,于是顺带对ReentrantLock的源代码进行了学习。。在这里做一个笔记总结。因为只有在工作之余才能有空看看,所以思路有点零散,仅供参考。。。。1、如何确定哪个线程可重复进入该锁               在获取锁的时候,首先会检查

2014-10-25 10:56:26 20666 1

原创 java线程同步之CountDownLatch

1、类说明jdk的concurrent包中的CountDownLatch类是一个线程同步的辅助类,它使得线程可以一直等待在其它线程中执行的操作,直到此操作结束。CountDownLatch在初始化的时候指定一个大小值N,调用CountDownLatch的await方法的线程会陷入等待之中,直到这个CountDownLatch对象的countDown方法被调用N次为止,无论是在一个线程中调用N次

2014-01-22 16:47:12 1752

原创 Netty的ChannelPipeline

1、如何理解Netty的ChannelPipeline     在Netty中,每个Channel被创建的时候都需要被关联一个对应的pipeline(通道),这种关联关系是永久的(整个程序运行的生命周期中)。ChannelPipeline可以理解成一个消息( 或消息事件,ChanelEvent)流转的通道,在这个通道中可以被附上许多用来处理消息的handler,当消息在这个通道中流转的时候,如

2014-01-16 10:43:43 15946

原创 Netty的ChannelFuture

在Netty中的所有的I/O操作都是异步执行的,这就意味着任何一个I/O操作会立刻返回,不保证在调用结束的时候操作会执行完成。因此,会返回一个ChannelFuture的实例,通过这个实例可以获取当前I/O操作的状态。ChannelFuture为完成或未完成状态。完成和未完成可对应的各种I/O操作结果如下所示 *                             

2014-01-16 10:42:41 14355

转载 Netty详解

原文链接 http://www.blogjava.net/czihong/articles/391927.htmlNetty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序[官方定义],整体来看其包含了以下内容:1.提供了丰富的协议编解码支持,2.实现自有的buffer系统,减少复制所带来的消耗,3.

2014-01-16 10:41:01 7468 2

原创 Struts2的IoC解析

个人学习笔记,不保证内容的正确率。转载请声明!!对于IoC来说,常见的就是Spring框架的了。并且在目前Java EE开发中,使用SSH框架时,也主要依赖于Spring框架所提供的IoC功能。但Struts2框架本身也提供了IoC的功能。本人对于Spring框架的IoC功能的实现没怎么做了解,所以也不对此发表什么见解。这里主要是对Struts2框架的IoC的使用方法和实现原理

2013-05-18 18:23:32 5930

原创 Struts2缓存解析

缓存在Struts2中起到了重要的作用,Struts2中使用缓存来进行延迟加载。[构成缓存的类和数据结构]构成缓存的类主要是两个类,在com.opensymphony.xwork2.inject.util包中,分别是ReferenceMap和ReferenceCache,其中前者是后者的父类。说起来,这两个类并没有构成一个完整的缓存系统,它还留有一个create接口,用于供使用方来

2013-05-12 10:39:30 6718 1

原创 Struts2的Builder模式解析

Builder设计模式是一种创建型模式,可以将一个复杂对象的构建构成和它的表示区分开来,使得同样的构建过程可以创建出不同的表示。Builder模式的适用场景如下:1、要将创建一个复杂对象的算法与组成这个对象的部分以及组成部分的组合方式相互独立的时候;2、需要构建多种对象的表示时Builder模式的基本结构如下在Builder模式的结构组成中,Buil

2013-05-05 20:18:00 3776 2

原创 Filter and Dispatcher

使用Struts框架时,需要在web应用程序的web.xml文件中增加filter配置。如下代码filter>      filter-name> struts filter-name>      filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter filte

2013-04-22 17:08:06 2455

原创 ThreadLocal简单学习

学习Struts2时,遇到ThreadLocal,不甚理解,所以对此作了一番学习。ThreadLocal是什么呢?首先这并不是一个线程类,它是用来提供本地线程数据,也就是它保存的数据是线程相关的,每个线程都有一份数据副本,一个线程可以对其保存的副本进行修改,却不会影响其它的线程中的数据。这样说不易理解,比较这三种情况的数据,1、非ThreadLocal类型的静态成员数据;2、非Thre

2013-04-21 19:54:23 1892 1

原创 http请求的参数和属性

练习搭建和使用SSH框架的时候,遇到一个http方面很简单的问题。一个form的表单登录请求,表单为最基本的html表单内容,代码如下在struts的action中需要获取输入的用户名和密码,最开始我采用的代码如下但是在运行的时候,一直在user.setUserName(request.getAttribute("user_name").toString());这里报空指针

2013-04-19 12:53:30 7654

原创 Android测试用例执行线程和UI线程

在做Android的AsyncTask测试的时候,发现测试用例在执行的时候是在一个名为“Instr: android.test.InstrumentationTestRunner”的线程中执行的,而activity是在main线程,个人这里也将其理解成UI线程。对此的原因做一些探究。在Android测试工程的AndroidManifest.xml文件中,instrumentation标

2013-04-11 11:05:53 4400

原创 关于Android程序入口的猜想

对Android程序的入口一直不大理解,因为它不像一般的C、C++或者Java程序有一个main函数入口,在执行的时候可以很清晰地知道程序的整个流程。为此,查了下相关资料,在《Android技术内幕-系统卷》中找到了相关内容,关于整个Android的初始化内容这里就不抄了,主要说下应用程序的执行,书中这样说到“当系统加载完所有的服务之后会处于等待状态,等待程序运行。但是,每一个应用程序都将启动一个

2013-04-10 20:55:15 982

原创 Linux内存管理

Linux 0.11的内存管理总结。。。许多其它内容参见“地址翻译”部分1、分页相关的页目录表和页表     Linux 0.11中的内存管理是分页式的内存管理。程序中的逻辑地址,在经过地址翻译后会被转成线性地址。内存管理部分所接触的地址,基本上都以线性地址为主。     在分页式的内存管理中,将物理内存看成是一个个的连续的页组成。在Linux 0.11中,这个页的大小是4KB。因此,

2013-01-14 19:43:47 2163 1

原创 i节点

以Linux 0.11为实例,兴趣所至,个人总结,不保证正确性。。。[i节点]     i节点是表征文件的方式,因此在linux 0.11内核中,有一系列专门操作i节点的函数,在fs/inode.c中。与i节点进程同步相关的函数,主要是wait_on_inode、lock_inode和unlock_inode,这几个函数都比较简单。以lock_inode函数为例,sta

2013-01-06 13:58:18 3393 2

原创 Linux文件系统概述

以Linux 0.11为实例,个人总结,不保证正确性。。。[文件系统]磁盘上的数据以块为单位进行读写,每一个块称为一个逻辑块。在理解磁盘的逻辑视图时,以逻辑块为单位来理解。磁盘上数据按照使用情况分,可以分成以下几个部分:引导块、超级块、i节点位图区、逻辑块节点位图区、i节点区、数据区引导块中是整个系统的启动代码,只有用于启动的文件系统才有数据,其它的文件系统这个块没有数据(

2013-01-05 13:44:11 1519

ThreadLocal测试工程

说明ThreadLocal功能的一个测试工程,eclipse项目

2013-04-21

Linux程序设计第四版

Linux程序设计第四版。内容清晰,索引齐全,英文版

2012-11-23

Virtualization with Xen

内容清晰,带索引。讲解Xen的安装、管理等内容

2012-11-15

Linux内核之旅

属于Linux内核学习书籍中偏中下层的书籍。讲解很全面

2012-11-12

Java API官方文档

方便的java api文档,chm格式,查找和使用相当方便

2012-11-08

程序员面试题精选100题

主要是面向数据结构、C++方面的面试题精选。来自于各大公司的真实面试题目

2012-11-08

平衡树的C++实现

用C++实现的平衡树的插入和删除操作,查询操作没实现。测试数据量比较大,可以根据需要在insert和remove方法里面修改打印的东西

2012-11-04

红黑树的C++实现(只实现插入操作)

实现了红黑树的插入操作,删除操作太复杂未实现。数据量比较大,根据需要可在main中修改测试数据

2012-11-04

b树的C++实现

B树的C++实现,实现了插入和删除操作。数据量比较大,可以根据需要修改main中的测试数组

2012-11-04

linux内核0.11版本源代码

linux内核版本0.11的源代码,配套《Linux内核完全注释》

2012-10-30

MySql权威指南-英文版

MySQL权威指南最新英文版,高清,索引齐全

2012-10-29

INTEL 80386 Programmer's Reference Manual

Intel程序员的开发手册,经典必备,高清英文版

2012-10-26

Unix操作系统设计

非常经典的讲解Unix操作系统内核原理的pdf电子书。不过内容不是高清的那种

2012-10-26

经典Git学习资料ProGit

英文版的Pro Git,详细地讲解Git相关知识。

2012-10-25

VC6.0编程实例精解

VC6.0的编程实例,很完整.实例过程清晰,适用于自学参考

2011-04-06

Essential C++中文版

很不错的一本电子书。详细讲解了C++的一些底层操作内容

2011-04-06

空空如也

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

TA关注的人

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