JAVA学习
闲庭细步
我生本无乡,心安是归处。
展开
-
聊聊MySQL:总览
MySQL技术架构及功能分析原创 2023-02-26 18:35:16 · 120 阅读 · 1 评论 -
ElasticSearch源码解析(二):ES的CharFilter、Tokenizer、TokenizerFilter
CharFilterelasticsearch的CharFilter一共有2种分别是:HTMLStripCharFilter、MappingCharFilter。 HTMLStripCharFilter这是用来去除html标签的filter,主要的逻辑在read方法中:public int read() throws IOException { //输入字符的字节是否已读完原创 2016-07-04 00:18:15 · 5536 阅读 · 1 评论 -
ActiveMQ源码解析(二):聊聊客户端和broker的通讯
ActiveMQ支持以下几种通讯协议:协议 备注HTTP/HTTPS基于http协议TCP默认协议UDP 性能更好,但不可靠SSL 安全链接NIO基于tcp,使用异步非阻塞方式使性能得到提升,具有更好的扩展性VM如果客户端和代理运行在同一个vm中就直接通讯不占用网络带宽原创 2016-06-20 00:01:52 · 4535 阅读 · 2 评论 -
ElasticSearch源码解析(一):转一篇介绍中文分词的文章
主要讲ElasticSearch的以下几个方面:1、索引创建 2、分词(IK为例主要讲第三方分词库与es怎么对接) 3、query分析4、文件搜索 5、排序转载 2016-07-02 00:56:35 · 2540 阅读 · 0 评论 -
ActiveMQ源码解析(五):聊聊activemq的broker集群
总的来说broker的集群就两种,主从集群(master-slave)和多主集群(network of brokers),看到有网文将apache activemq的官网的文档中clustering一节中的Queue comsumer cluster当成一种集群部署方式,其实仔细理解文档意思,这种集群是cusumer的集群,并不是我们通常在实际生产环境中用到的broker集群,所以这里声明一下本文原创 2016-06-29 02:16:55 · 2266 阅读 · 0 评论 -
ActiveMQ源码分析(三):聊聊broker到broker的通讯
Broker到Broker的通讯涉及到activemq集群,主要由network包下的类来实现,我们主要来分析一下NetworkConnector和NetworkBridge类,读者就能大概了解broker的通讯机制了。NetworkBridge是一个借口,所以我们使用 NetworkBridge的子类DemandForwardingBridgeSupport来做讲解。DemandForwar原创 2016-06-20 02:02:35 · 3370 阅读 · 0 评论 -
ActiveMQ源码解析(四):聊聊消息的可靠传输机制和事务控制
在消息传递的过程中,某些情况下比如网络闪断、丢包等会导致消息永久性丢失,这时消费者是接收不到消息的,这样就会造成数据不一致的问题。那么我们怎么才能保证消息一定能发送给消费者呢?怎么才能避免数据不一致呢?原创 2016-06-27 03:27:55 · 9235 阅读 · 1 评论 -
ActiveMQ源码解析(一):聊聊broker
一、Broker 消息队列核心,相当于一个控制中心,负责路由消息、保存订阅和连接、消息确认和控制事务1.Broker接口 定义了一些获取broker本身相关信息,添加connection、destination、session、消息生产者、控制事务的接口1.1 CompositeDestinationBroker 多目的地Broker,Pr原创 2016-05-30 22:49:52 · 12418 阅读 · 2 评论 -
关于电商仓储系统wms的一些思考
最近很忙,想写点关于wms系统的东西,先立一个题目,等把自己建的一个系统写完再来分享,wms系统已经开源分享在开源中国,地址:http://git.oschina.net/coliza/SSIMS原创 2016-05-17 01:31:36 · 4085 阅读 · 0 评论 -
电商峰值系统设计
1.1 系统架构设计目录摘要:双11来临之际,《程序员》以“电商峰值系统架构设计”为主题,力邀京东、当当、小米、1号店、海尔商城、唯品会、蘑菇街、麦包包等电商企业,及商派、基调网络等服务公司,分享电商峰值系统架构设计的最佳技术实践。自2009年11月11日,淘宝商城(现名天猫)拉开网购狂欢节的序幕,各大电商的促销浪潮此起彼伏。此时的电商大战不仅是价格之争,更是技术的较量。如何设转载 2016-05-17 01:24:08 · 40022 阅读 · 1 评论 -
缓存key生成策略的一些思考
首选说说策略设计目标:1、唯一性保证2、方便获取3、高效性MD5码等编码策略:效率太低,原创 2016-05-17 01:18:23 · 10062 阅读 · 0 评论 -
jdk基础设施回顾:jdk中的concurrent包
1、并发和多线程(以jdk1.7为例)并发是伴随着多核处理器的诞生而产生的,为了充分利用硬件资源,诞生了多线程技术。但是多线程又存在资源竞争的问题,引发了同步和互斥的问题,jdk中使用concurrent包来解决这些问题。2、Atomic原子计算对象包包括:AtomicIntegerAtomicBooleanAtomicLongAtomicReference原子原创 2016-05-03 00:52:54 · 1564 阅读 · 0 评论 -
分享一些互联网公司j2ee面试题
问题一:Thread类中的run方法中有exception并且没被处理会发生什么情况?[答]exception会被转到UncaughtExceptionHandler中进行处理。问题二:yield和sleep的区别[答]复习下thread的五个状态:挂起(suspend)、就绪(ready)、运行(running)、死亡(dead),调用sleep()方法时线程停止执行但不释放资源原创 2016-04-10 16:30:00 · 1166 阅读 · 0 评论 -
在windows中安装Hadoop
第一步:安装cygwin,运行在window上的Unix模拟软件 在https://cygwin.com/install.html下载cygwin软件。 Net Catagory:openssl, openssh Base Category:sed Devel Category:subversion 安装完成:原创 2016-02-28 16:14:23 · 559 阅读 · 0 评论 -
我的大数据之路(三):HDFS文件系统
数据块(block):大文件会被分割成多个block进行存储,block大小默认为64MB。每一个block会在多个datanode上存储多份副本,默认是3份namenode:namenode负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系。datanode:datanode就负责存储了,当然大部分容错机制都是在datanode上实现的。 元数原创 2016-02-24 00:05:44 · 743 阅读 · 0 评论 -
我的大数据之路(二):从zookeeper说起
由于zookeeper在hadoop中只是扮演一个应用程序协调服务的角色,提高hdfs和hbase集群节点的稳定和高效性,所以这里只捡些重要的点来说。后面再来补齐源码分析。1、fast-paxos算法(选举算法)基本的原理是每个节点都充当自己的推荐人推荐自己当leader,如果有别的候选者的评分比自己高则推荐评分高的znode(评分一般提取znode的zxid或者最后修改时间),最后选出一原创 2016-02-23 23:15:16 · 721 阅读 · 0 评论 -
从搜索引擎说起
开始写一个搜索引擎原创 2015-12-05 01:53:48 · 822 阅读 · 0 评论 -
数据库中间件Mycat源码解析(三):Mycat的SQL解析和路由
mycat对sql的解析分为两部分,一个是普通sql,另一个是PreparedStatment。首先解析普通sql,sql从客户端发过来后server接收后会调用FrontendCommandHandler的handle方法,这个方法会调用FrontendConnection的query方法,接着query方法会调用ServerQueryHandler的query方法,接着调用ServerCo原创 2016-08-29 00:35:55 · 10360 阅读 · 0 评论 -
数据库中间件Mycat源码解析(四):Mycat的心跳管理
MyCat的服务端在启动时会执行node.startHeartbeat()去设置每个node的heartbeat的状态为DBHeartbeat.OK_STATUS,然后针对每个node节点启动一个线程去对对应的node发送heartbeat sql(比如select user())进行心跳检测。private Runnable dataNodeHeartbeat() { return ne原创 2016-08-31 00:53:07 · 3929 阅读 · 2 评论 -
数据库中间件Mycat源码解析(二):Mycat的网络通讯层
网络层主要的就是ServerSocketChannel和SocketChannel(请参照NIO2看此篇blog),讲Mycat的网络通讯层首先得说几个概念:FrontEnd/BackEnd:mycat将网络通讯分成了两部分,第一部分叫FrontEnd即负责接收业务方用户请求的部分;第二部分叫BackEnd即负责和后端数据库通讯的部分。AIO/NIO/BIO:BIO是jdk1.4以前就提供原创 2016-08-21 02:21:50 · 1450 阅读 · 0 评论 -
开发一款开源爬虫框架系列(六):爬虫分布式化RPC
最近终于有部分时间继续开发爬虫,主要的任务是客户端和服务器端分离,这就涉及到远程调用的问题,所以研究了RPC,主要对象是Hessian、JMI、Dubbo、Thrift。进而想用几篇博文分享一下几种远程调用协议的一些东西,以后再接着聊爬虫。有兴趣可以访问我的爬虫项目:https://gitee.com/coliza/MongooCrawler ...原创 2018-05-22 13:38:56 · 1663 阅读 · 0 评论 -
Lombok 安装、入门 - 消除冗长的 java 代码
转载自:http://www.blogjava.net/fancydeepin/archive/2012/07/12/lombok.html前言: 逛开源社区的时候无意发现的,用了一段时间,觉得还可以,特此推荐一下。 lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码。特别是相对于 POJO,光说不做不是我的风格,先来看看吧。转载 2017-09-12 14:05:55 · 572 阅读 · 0 评论 -
读书笔记:分布式系统系统与概念(图灵丛书)
书的第一章作者介绍了分布式系统的概念,分布在网络的不同组件并相互传递消息协调的系统,其特征是组件的并发性(这是说可以很多进程或线程可以同时运行,充分利用硬件资源)、缺乏全局时钟(网络上没有一个共有的时钟来同步不同节点上的操作)、故障的独立(故障具有隔离性)。然后讲了分布式系统的例子,以及趋势包括分布式计算和移动化(现在有很多不同的联网设备:pad、手机等等)、分布式多媒体(这几年兴起的视频、直播等原创 2017-07-30 17:06:50 · 826 阅读 · 1 评论 -
《微服务架构与实践》读书笔记
这本书主要回答了关于微服务的三个问题:微服务怎么来的,微服务是什么样的,微服务怎么做的。 第一部分介绍了单体架构和微服务架构的区别,单体架构易于开发、测试、部署、水平扩展,微服务架构优势在于易于扩展、持续交付部署能力、进程隔离有效提升鲁棒性、对新人的培养成本更低,同时它也带来了降低系统的性能、可靠性、业务异步化后的复杂性、调试和问题定位难度增加、以及数据一致性问题。 第二部分原创 2017-07-17 00:45:50 · 764 阅读 · 0 评论 -
ZooKeeper源码解析(三):Watcher如何监控ZNode
Watcher是一个接口类,有一个接口方法:由用户来实现,后续我们会讲它如何配合ZooKeeper和ClientCnxn来监控节点。上图ZooKeeper中的watchManager实际上是ZKWatchManager,它实现了ClientWatchManager,内部有三个主要成员变量,dataWatches监控数据,比如ZooKeeper类的getData方法会触发该监原创 2017-04-27 23:57:12 · 1613 阅读 · 0 评论 -
ZooKeeper源码解析(二):用户如何和ZooKeeper交互
zookeeper涵盖的方法很多此处捡重要的说。首先是构造函数,这是我们使用zookeeper时第一个要使用到的方法ZooKeeper类重载了多个构造函数,上面的仅仅是最简单的一个。参数主要由连接字符串,session超时时间设置,监听器watcher,只读属性。其中的watcher能够根据路径监听各个znode的变化,一旦znode代表的服务器挂掉就能进行及时的处理,zk原创 2017-04-27 23:47:48 · 2552 阅读 · 0 评论 -
ZooKeeper源码解析(一):ZooKeeper概述
zk主要的架构图zk主要的包结构如上图所示,zk大概涵盖了以下的包以及功能:Admin包: 它里面只有一个继承了ZooKeeper类的ZooKeeperAdmin类,用以承担管理zk集群的任务,例如重新注册集群Cli包:接收并执行用户输入的各种命令Client包: 主要是客户端连接的一些辅助类Common包:公共工具类jmx包:提供jmx原创 2017-04-27 01:00:55 · 3324 阅读 · 0 评论 -
ZooKeeper源码解析(六):ZooKeeper的三种选举算法
zookeeper中有三种选举算法,分别是LeaderElection,FastLeaderElection,AuthLeaderElection,FastLeaderElection和AuthLeaderElection是类似的选举算法,唯一区别是后者加入了认证信息,FastLeaderElection比LeaderElection更高效。我们只分析前两种算法。LeaderElect原创 2017-05-03 00:52:13 · 5449 阅读 · 0 评论 -
ZooKeeper源码解析(五):server端如何运行
server的启动机制:classZooKeeperServerMain.runFromConfig创建了连接工厂后开始启动server。class NIOServerCnxnFactory.startup其中start()函数会启动一个acceptThread使用reactor线程模型不断的使用Selector在serverchannel中select,一原创 2017-05-03 00:45:53 · 893 阅读 · 0 评论 -
ZooKeeper源码解析(四):client如何和server连接
客户端使用ClientCnxn和服务器端的ServerCnxn连接客户端sendThread负责向集群服务器发送请求,我们来看看它做了什么?sendThread的run方法的关键代码:我们再来看看eventThread的run方法通过以上的分析我们不难发现客户端是从Outgoing queue取数据发出请求后,再将返回的请求塞原创 2017-05-03 00:40:32 · 1572 阅读 · 0 评论 -
开发一款开源爬虫框架系列(一):分析nutch,scrapy的爬虫设计
nutch的架构分析 injector首次会从url.txt中取出url然后将url分配给hadoop中的不同job进行url标准化和校验,并构造对象。generator会利用hadoop中不同的job进行url过滤、打分和计算hash值,然后将信息存入ParseSegment,fetcher会利用多线程下载网页将内容存入content,将url返回给crawl_fetch,crawl原创 2016-09-07 01:48:24 · 4974 阅读 · 0 评论 -
开发一款开源爬虫框架系列(二):设计爬虫架构
既然是构建分布式爬虫架构,分布式说明爬虫能在多台机器同时运行,所以一定是多客户端的,多客户端就有可能运行在不同的操作系统不同的语言环境,所以我们让它暂时支持java和scala两种依赖jvm的语言,不用区分平台。提到客户端也一定意味着有服务端的存在,服务端和客户端使用netty进行通讯。那么问题来了,我们怎么保活呢?很显然是用心跳管理能完成这个功能。那么我们怎么保证可靠性呢?很显然是用tcp通讯协原创 2016-09-09 14:18:40 · 2965 阅读 · 0 评论 -
开发一款开源爬虫框架系列(三):聊聊并发包中的队列(Queue)
说到队列尤其是阻塞队列,不得不说jdk的并发包(java.util.concurrent)中的相关数据结构,今天我们就来对java中的队列做一个总结。1、Queue队列接口,定义了队列基本的接口方法 前两个方法是往队列塞数据,在队列空间不足的情况下add会抛出异常,而offer会返回false。poll和peek的区别是后者不会从队列中移除元素。2、BlockingQu原创 2016-11-04 01:32:58 · 1450 阅读 · 0 评论 -
开发一款开源爬虫框架系列(四):设计fetcher
这一期我们来聊聊怎么设计fetcher,既然说到设计,我们首先要明确设计的目的。fetcher的主要功能是根据传入的url获取网页内容,同时我们还面临如下一些问题:1、使用什么工具发出http请求下载网页?【答】使用最新的httpclient2、怎么提高下载的性能?【答】因为性能消耗主要在网络IO,那么我们要提高下载的性能可以使用线程池多线程并发下载网页,同时为了降低编程难度提高效原创 2016-11-11 02:01:30 · 1075 阅读 · 0 评论 -
数据库中间件Mycat源码解析(一):初识Mycat
Mycat是国内一款基于阿里Cobar的面向企业级应用开发的数据中间件,社区较为活跃,它有很多非常实用的特性,比如融合了内存缓存技术,NoSQL技术和传统关系型数据库技术,它拥有心跳管理功能能完成中间件与数据库之间保活的任务,它实现了负载均衡使资源能够得到充分使用,它既能适应传统应用开发中对数据库的需求又能适应当前比较火的大数据开发对数据库的需求等等。部分公司实用它替代了昂贵的oracle数据库集原创 2016-08-15 00:44:14 · 916 阅读 · 0 评论 -
介绍一个成功的 Git 分支模型 Release 分支
装载自:http://www.cnblogs.com/yaks/p/5666400.html英文原文:http://nvie.com/posts/a-successful-git-branching-model/中文版:在这篇文章中,我提出一个开发模型。我已经将这个开发模型引入到我所有的项目里(无论在工作还是私人)已经一年有余,并且它被证明是非常成功的。我打算写这些转载 2016-08-22 11:48:22 · 8751 阅读 · 0 评论 -
JAVA并发API源码解析:并发数据结构、线程、线程池及其应用
首先介绍Callable这个接口,它仅包含一个方法call,它是类似于Runnable接口,是Future并发设计模式下实际的任务执行单元,它能返回一个对象。我们可以实现它的子类并使用Future对象来提交它。现在我们再来看看Futrue,futrue提供了get方法来返回计算结果,cancel来中断任务。Future还会进一步被封装成FutureTask等任务类,这些任务会被提交给Executo原创 2015-05-11 00:38:52 · 2273 阅读 · 0 评论 -
JAVA并发API源码解析:锁
在包java.util.concurrent.lock下面为并发编程提供了一组锁相关的类,其中AbstractOwnableSynchronizer,AbstractQueuedLongSynchronizer,AbstractQueuedSynchronizer是提供的几个同步器,注释中说它被线程所拥有,并且是创建锁和同步器的基础,但它本身不管理这些信息而是留给实现它的子类来管理。目前尚不知其妙原创 2015-05-10 22:13:26 · 1073 阅读 · 0 评论 -
Spring Framework源码(二):spring beans之ApplicationContext
接着上一章的内容这章讲spring最重要的IOC容器中的另一个容器ApplicationContext。 首先来看看spring资源文件绑定的相关接口。第一个便是ResourceLoader接口:public interface ResourceLoader { String CLASSPATH_URL_PREFIX = ResourceUtils.CLASSPATH_U原创 2015-01-03 23:28:42 · 1911 阅读 · 0 评论 -
Spring Framework源码(十二):SpringMVC之数据绑定、验证、转换
Springmvc中的数据绑定工作得从DiapatcherServlet的doDispatch方法说起:mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); 在前面的章节介绍过,这里的ha就是HandlerAdapter,我们以AnnotationMethodHandlerAdapter为例看它原创 2015-01-21 01:38:01 · 6046 阅读 · 0 评论