开源精华
文章平均质量分 90
kobejayandy
十多年互联网产品研发经验,历经华为、腾讯、字节跳动等公司,主要从事后端技术研发及技术管理工作(andyjaykobe)
展开
-
C++开源库,欢迎补充。
C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。因为当今商业应用程序类型,已经从桌面应用迅速转移成 Web应 用。当Java横行天下之后,MS又突然发力,搞出C#语言,有大片的曾经的C++程序员,以为C++要就此沉沦,未料,这三年来,C++的生命力突然被 严重地增强了。主力原因就是开源的软件、基础软件(比如并发原生支持,比如Android必定要推出原生的SDK转载 2013-03-16 18:07:16 · 1266 阅读 · 0 评论 -
12个最好的免费和开源的NoSQL数据库
NoSQL数据库一天天变得越来越流行。以下是最好的,免费,开源NoSQL数据库的一个列表。其中MongoDB是这些开源NoSQL数据库中最好的。这个列表包括:MongoDB, Cassandra, CouchDB, Hypertable, Redis, Riak, Neo4j, HBASE, Couchbase, MemcacheDB, RevenDB and Voldemort。这些免费和开转载 2014-03-31 23:13:59 · 11185 阅读 · 0 评论 -
主要开源协议一览
主要的开源协议有GPL、LGPL、CPL、Mozilla、Apache、BSD、MIT等,总的来说 后三种较为自由宽松,使用起来不用过多顾虑;前面几种使用有注意的地方,特别是GPL如果产品是要做商业用途的需要谨慎使用。 各协议的一句话总结: GPL: 只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必转载 2014-04-12 20:56:37 · 1123 阅读 · 0 评论 -
Redis与Memcached的区别
传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。 2.Mem转载 2014-06-29 21:06:47 · 1169 阅读 · 0 评论 -
消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
RabbitMQ、ActiveMQ和ZeroMQ都是极好的消息中间件,但是我们在项目中该选择哪个更适合呢?很多开发者面临这个烦恼。下面我会对这三个消息中间件做一个比较,看了后你们就心中有数了。RabbitMQ 是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队。此特性使得RabbitMQ易于 使用和部署,适宜于很多场景如路由、负转载 2015-06-28 23:17:11 · 1441 阅读 · 0 评论 -
ZooKeeper的事务日志可视化
在zookeeper server的配置文件zoo.cfg中可以通过dataLogDir来配置zookeeper的事务日志的输出目录,这个事务日志类似于下面这样的文件:这个文件是一个二进制文件, 一般不能够直接识别, 那么是否有方法可以把这些事务日志转换成正常日志文件呢, 答案是肯定的~ Zookeeper自带一个工具类:org.apache.zookeeper.ser转载 2015-07-02 17:08:20 · 4494 阅读 · 0 评论 -
Tomcat 7服务器线程模型
Tomcat 7服务器网络处理主要由NioEndpoint,其处理客户端连接的主要流程如图所示图中Acceptor及Worker分别是以线程池形式存在,Poller是一个单线程。注意,与BIO的实现一样,缺省状态下,在server.xml中没有配置,则以Worker线程池运行,如果配置了,则以基于java concurrent 系列的java.util.concurrent.ThreadP转载 2015-08-20 16:48:03 · 8681 阅读 · 0 评论 -
ActiveMQ持久化方式
消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和ReliableMessaging结合起来应该是很好的保证了消息的可靠传送。消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库转载 2016-02-25 11:38:16 · 6993 阅读 · 2 评论 -
RocketMQ与kafka对比
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kafka这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,Kafka无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用在淘宝交易、订单转载 2016-08-07 21:51:18 · 3011 阅读 · 0 评论 -
几款消息中间的调研
消息系统简介本次主要调研业界使用广泛的两款消息队列——RabbitMQ, Kafka, 以及阿里云的提供的两个服务, MNS和ONS.RabbitMQRabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了Broker构架,这意味着消息在发送给客户端转载 2016-09-17 23:07:33 · 2945 阅读 · 0 评论 -
全面分析 Spring 的编程式事务管理及声明式事务管理
开始之前关于本教程本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务。通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之。先决条件本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解。您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等。本文将直接使用这些概念而不做详细解释。另外,转载 2016-10-05 16:20:44 · 1407 阅读 · 0 评论 -
LevelDb 深入介绍
LevelDb日知录之一:LevelDb 101 说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Google公司重量级的工程师,为数甚少的Google Fellow之二。 Jeff Dean其人:http://research.g转载 2016-10-30 21:09:24 · 890 阅读 · 0 评论 -
技术选型:Sentinel vs Hystrix
Sentinel 是阿里中间件团队研发的面向分布式服务架构的轻量级高可用流量控制组件,于今年7月正式开源。Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户提升服务的稳定性。大家可能会问:Sentinel 和之前经常用到的熔断降级库 Netflix Hystrix 有什么异同呢?本文将从资源模型和执行模型、隔离设计、熔断降级、实时指标统计设计等角度将...转载 2019-01-27 22:08:45 · 332 阅读 · 0 评论 -
Google Protocol Buffer 的使用和原理
简介什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Pro转载 2014-03-09 23:08:26 · 2087 阅读 · 0 评论 -
Tomcat基于Coyote的HTTP 1.1协议连接器
1. 模块架构org.apache.coyote.http11包支持http1.1协议,内部分为三类:ARP、NIO、普通http,这里只对最基本的普通http(使用java的IO流,而非NIO流)作简单研究。这个包主要有以下几个类:Http11Protocol,实现了ProtocolHandler接口Http11Processor,实现了ActionHook接口InternalI转载 2014-01-17 20:35:40 · 3359 阅读 · 0 评论 -
Apache MINA 快速入门
Apache MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。它通过Java NIO提供了一个抽象的、事件驱动的、异步的位于各种传输协议(如TCP/IP和UDP/IP)之上的API,Apache MINA 是一个网络应用程序框架,它对Java中的socket和NIO进行了有效和清晰的封装,方便开发人员开发TCP/UDP程序,从而抛开在使用原始的 socket时转载 2013-07-02 21:59:28 · 764 阅读 · 0 评论 -
Hibernate VS MyBatis 区别
关于O/R Mapping的理论,网上也有很多。其实完整的O/R mapping理论是想让程序员从数据的CRUD中解放出来,专注于使用OO的思想来实现业务逻辑,使用OO的思想当然就很大程度上需要遵守SOLDI原则,而不是一会要用OO的眼光建立业务领域模型,一会要用Relation的数学观点来操作数据。还有一点,在O/R Mapping也提到了,就是要让那些不熟悉SQL的人也能开发需要数据存储的工程转载 2013-07-23 22:04:11 · 1890 阅读 · 0 评论 -
开源点评:ZeroMQ简介
今天,向各位程序猿同学介绍一个和网络通讯有关的开源项目——ZeroMQ(绰号 �MQ,以下简称 ZMQ)。事先声明,本帖仅仅是简介,不涉及太深入话题。★ZMQ是啥玩意儿? 通俗地说,ZMQ是一个开源的、跨语言的、非常简洁的、非常高性能、非常灵活的网络通讯库。 它的官方网站在"这里",维基百科的介绍在"这里"(暂时没有中文的维基词条)。 这玩意儿推出的时间不长,貌似09年下转载 2013-09-08 22:58:05 · 5456 阅读 · 0 评论 -
Java NIO框架Netty教程(一) – Hello Netty
先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。 如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛弃了"Hello world"转载 2013-09-09 22:05:25 · 272164 阅读 · 26 评论 -
利用Digester把XML转换为Java对象
在一个比较完整的应用系统里,经常需要有一些配置文件。简单的属性使用.properties文件即可,但要配置一些复杂对象,则应该考虑使用xml文件。一般用来读取xml文件的工具包有DOM、SAX和JDOM等,但用过的人都知道,它们属于比较底层的API,写起来代码量很大,而且如果修改了 xml文件的格式,代码也要做大幅度的改动。Jakarta Commons项目里的Digester包,可以轻松实现xm转载 2013-10-09 00:22:24 · 2170 阅读 · 0 评论 -
Google Guava 类库简介
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦。下面我转载 2013-10-26 23:56:22 · 1038 阅读 · 0 评论 -
使用Google Guava来编写优雅的代码一Guava简介
以往我们在使用工具包的时候首先想到是著名的Apache的Commons系列,今天我要介绍的是同样出色,并且目前发展比Apache Commons系列更为迅速的Google Guava库。Google Guava库是一个非常优秀的包含很多Java工具类集的库,广泛使用在Google公司内部,因此它可以被使用到几乎所有的Java项目中。Google Guava库最初发布在2007年,经过几年的转载 2013-10-27 22:16:28 · 17057 阅读 · 2 评论 -
Java Cache系列之Guava Cache
Guava作为Google开源出来的工具库,Google自己对Guava的描述:The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support, concurrency转载 2013-10-28 21:11:42 · 3225 阅读 · 0 评论 -
Apache commons (Java常用工具包)简介
Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.htmlBeanUtilsCommons-BeanUtils 提供对 Java 反射和自省API的包装 BetwixtBetwixt提供将 JavaBean 映射至 XML 文档,以及相反映射的转载 2013-12-16 23:15:32 · 1475 阅读 · 0 评论 -
开源爬虫Labin,Nutch,Neritrix介绍和对比
从网上找了一些开源spider的相关资料,整理在下面: -----------------------------------------------------------------------------------Larbin开发语言:C++http://larbin.sourceforge.net/index-eng.htmllarbin是个基于C++的web爬虫转载 2013-03-16 17:43:47 · 992 阅读 · 0 评论 -
Tomcat基于Coyote的连接器源码分析
不论Tomcat的容器设计得如何精妙,本质上Tomcat就是个HTTP服务器,需要从socket中获得HTTP数据流;另一方面,容器只能处理封装好的org.apache.coyote.Request,从socket到Request之间需要有个转换过程。因此,连接socket和容器之间的重任就交给了CoyoteCoyote简介Coyote是Tomcat的Connector框架的名字,简单说就转载 2014-01-22 20:57:57 · 1582 阅读 · 0 评论 -
Disruptor框架入门
Disruptor是LMAX出品的一个高效的无锁并发框架,它高效核心在于其无锁队列RingBuffer的独特设计。1.Disruptor是什么? Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。 Disruptor 比传统的基于锁的消息框架的优势在于:它是无锁的、CPU友好;它不会转载 2014-01-16 00:08:39 · 3812 阅读 · 0 评论 -
十分钟入门RocketMQ
本文首先引出消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,Apache RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件否可以解决,规范中如何定义这些问题。然后本文将介绍RocketMQ的架构设计,以期让读者快速了解RocketMQ。消息中间件需要解决哪些问题?Publish/Subscribe发布订阅是消息中间件的最基本功能,也是相对于传统...转载 2019-08-27 13:52:48 · 361 阅读 · 0 评论