自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

原创 JAVA正则表达式过滤文件

正则表达式过滤文件列表,听起来简单,如果用java实现,还真需要一番周折,本文简析2种方式 1、适用于路径确定,文件名时正则表达式的情况(jdk6的写法)String filePattern = "/data/logs/.+\\.log";File f = new File(filePattern);File parentDir = f.getParentFile();St

2017-04-10 11:23:14 521

原创 nginx/tomcat日志格式规范

最近准备设计和开发一套日志收集平台,进而后续进行实时的日志分析、业务监控和预警等。在此之前,需要制定日志的格式规范,当然还有其他的约束性规范,才能良好的实现日志搜集、数据分拣、数据分析等特性。     制定日志格式规范的方式与目的:    1)所有项目,日志格式统一,可以极大的简化日志收集和分析的复杂度。    2)nginx、tomcat等日志格式,需要合理,让日志查看和问题排查

2017-04-10 11:23:06 428

原创 《架构漫谈》摘要

一、“Architecture is like teenage sex,everybody talks about it,nobody really knows what is it.”     “Architecture is both the process and the product of planning,designing,and constructing buildings a

2017-04-10 11:22:21 110

原创 nginx线程池模式探讨

nginx的IO模型其实大家应该有所了解,简单而言,就是一个master进程和多个worker进程(进程数由配置决定),master进程负责accept请求并队列化,最后转发给worker进程并由其进行处理请求和响应的整个过程。不过,这是进程层面,每个进程单线程处理。nginx在1.7.11版本提供了多线程特性(multi-threading),不过这个多线程仅用在aio模型(IO模型)中对本地文

2017-04-10 11:21:43 123

原创 Maven+Nexus进行SCM发布

对于java的一些公用依赖包,我们通常需要发布在私有的nexus平台中,以便其他项目组使用。    1)我们首先需要搭建自己的nexus平台。    2)用户授权,指定用户具有release权限。    3)调整maven中的setting.xml文件。    4)调整project中的pom.xml文件。 1、setting.xml配置样例: <setting

2017-04-10 11:21:07 168

原创 JDBC查询超时时间设置

我们有时候需要控制SQL查询的最大耗时,比如一个“执行时长”的SQL在指定时间内如果没有执行完毕,我们需要“取消”此SQL,我们知道在JDBC中Statement类可以通过setQueryTimeout()来实现此特性。    当设置query timeout之后,JDBC客户端发送请求,并等待直到执行完成或者超时,当超时后,客户端尝试cancel当前SQL,要求mysql server中断执

2017-04-10 11:20:29 1152

原创 Tomcat JNDI连接池配置

对于线上应用,我们通常将数据库连接交给容器,比如tomcat容器,那么开发者只需要通过JNDI的方式获取dataSource即可,不需要再关注数据库地址、密码等敏感信息,这样我们就可以简单做到配置隔离。1)在tomcat的context.xml中增加如下配置: <Resource name="jdbc/localDB" factory="org.apache.tomca

2017-04-10 11:20:00 265

原创 算法编程(四)

一、给定一个整数序列,请获取最小(最大)的K个数字    这个题还算比较熟悉,在大数据计算时,经常会遇到类似于“Top N”的情况,这个题的解法有很多种,本例还是采用惯例做法:创建一个K大小的容器,容器内的数字都是排序的;在遍历输入序列时,如果遇到比容器内最大值还要大的数字时,则将容器中的最小值移除,即容器中保留K个“已经遇见”的最大数字。在java中,我们直接使用TreeSet作为容器,当然

2017-04-10 11:19:22 80

原创 算法编程(三)

一、请使用栈,设计一个数据结构,它具有栈的“先进后出”的特性,同时还可以获取栈中的最小值,要求此数据结构的pop、push、min方法的复杂度均为O(1)    这个题,最大的问题就在min方法上,如果不使用其他的辅助数据结构,是无法满足min方法的设计要求,即使使用一个临时变量保存当前的最小值(这种情况下,如果最小是被pop,就断片了。。)。所以我们的注意力就集中在:怎们能让一个栈是有序的?

2017-04-10 11:19:15 80

原创 算法编程(二)

一、用栈来实现队列的功能    描述:栈,stack,特点是先进后出;队列,queue,先进先出;请使用栈来实现队列的功能,且此队列具有两个基本操作--添加、删除。     这个题本身并不难,但是不能钻”牛角尖“;一个栈是无论如何也无法实现队列的,那么可以考虑用两个栈来试一试:    1)两个栈A、B,其中一个只能“添加”,另一个只能“删除”。    2)初始时,栈为空,如果执

2017-04-10 11:19:08 83

原创 算法编程(一)

一、字符串转换成数字    设计要求:将输入的任意字符串,转换成数字(int类型),如果转换失败则抛出异常。    输入:"1234","+1234","-1234","1234567890","1234ab"    输出:1234,1234,-1234,异常,异常     思路:字符串有字符序列组成,每个字符都对应ASCII值,比如字符'0'为48,‘1’为49...'9'为

2017-04-10 11:19:01 67

原创 Mysql Replication基本原理(一)

Replication的思想是将数据在集群的多个节点同步、备份,以提高集群数据的可用性(HA);Mysql使用Replication架构来实现上述目的,同时可以提升了集群整体的并发能力。5.6版本作为一个里程碑,对replication做了不少的优化调整,提高了集群数据的一致性、同步的性能以及数据自动恢复(recovery)的能力。(本文内容基于MySQL 5.6+,不过在5.7+版本仍有部分调整

2017-04-10 11:18:31 236

原创 Mongodb中Mapreduce特性与原理

对于每个从事数据技术的人才而言,mapreduce都不陌生,简单而言就是一种大数据计算、分类、分析的一个编程模式,目前很多大数据存储平台都支持mapreduce,比如hadoop、hbase等等,也有很多采用了类似于mapreduce的算法的其他数据计算平台,关于mapreduce的原理不再赘言,我们直接来了解mongodb中如何使用mapreduce。     Mongodb中提供了2种

2017-04-10 11:18:09 129

原创 Mongodb中Aggregation特性

Mongodb是目前最受欢迎的大数据存储平台之一,它可以作为云计算技术的底层存储层,比如为spark、hadoop、pig、hive、drill等计算框架提供源数据。Mongodb本身也提供了aggregation、mapreduce特性,以支持对大数据的计算、统计、分类等需求。      Aggregation简单来说,就是提供数据统计、分析、分类的方法,这与mapreduce有异曲同工

2017-04-10 11:18:02 381

原创 Mongodb中Sharding集群

随着mongodb数据量的增多,可能会达到单个节点的存储能力限制,以及application较大的访问量也会导致单个节点无法承担,所以此时需要构建集群环境,并通过sharding方案将整个数据集拆分成多个更小的chunk,并分布在集群中多个mongod节点上,最终达到存储和负载能力扩容、压力分流的作用。在sharding架构中,每个负责存储一部分数据的mongod节点称为shard(分片),sha

2017-04-10 11:17:52 322

原创 Mongodb客户端原理

JAVA客户端原理简述    mongodb提供了官方的JAVA客户端,在上文中我们已经看到了示例。    接下来我们简单的阐述一下它的基本原理:    1)MongoClient参数列表中,允许指定多个mongod的addresses,注意,它们要么是同一个replica set中所有memebers列表,要么为同一个cluster的mongos列表,且不能混合使用。    mo

2017-04-10 11:17:45 109

原创 Mongodb中Index特性

Mongodb支持多种index类型,这相对于其他Nosql数据库而言具有很大的优势,它的索引类型比较接近SQL数据库,所以开发者在mongodb中使用索引将是非常便捷的。索引最大的作用就是提高query的查询性能,如果没有索引,mongodb需要scan整个collection的所有的documents,并筛选符合条件的document,如果有索引,那么query只需要遍历index中有限个索引

2017-04-10 11:17:24 139

原创 Nginx学习总结:geo与image模块(四)

斜体下划线,表示建议采用默认配置,无需显式的配置一、ngx_http_geo_module    核心特性为:根据客户端IP(段),geo模块将会匹配出指定的变量(比如,国家代码,城市代码)。geo模块可以帮助我们实现如下场景:    1)简易的CDN网络    2)多机房部署,站点分流。    3)limit非法IP(段)的访问,或者限流。    1、geo 【$addr

2017-04-10 11:16:37 88

原创 Protobuf与JAVA

我们在开发一些RPC调用的程序时,通常会涉及到对象的序列化/反序列化的问题,比如一个“Person”对象从Client端通过TCP方式发送到Server端;因为TCP协议(UDP等这种低级协议)只能发送字节流,所以需要应用层将Java对象序列化成字节流,数据接收端再反序列化成Java对象即可。“序列化”一定会涉及到编码(encoding,format),目前我们可选择的编码方式:    1)使

2017-04-10 11:15:45 98

原创 Jenkins + Git + Maven + tomcat集成环境搭建

折腾了好几天,终于把Jenkins + Git + Maven + tomcat集成环境搭建起来了,最终主要实现“自动构建、部署”web应用。 1、安装环境    操作系统:Centos 6.5    JDK:1.7.x    Maven:3.1.x    Git: 1.7.1,自建GitLab平台    tomcat:7.x     上述宿主机器2台:192.

2017-04-10 11:15:37 357

原创 Mongodb与GridFS

一、概述    GridFS是基于mongodb存储引擎是实现的“分布式文件系统”,底层基于mongodb存储机制,和其他本地文件系统相比,它具备大数据存储的多个优点。GridFS适合存储超过16MB的大型文件,不过16M数据在当今互联网时代,已经不足为奇。我们可以使用GridFS构建大规模的“图片服务器”、“文档服务器”、“视频、音频”文件服务器,GridFS对于web应用,可以结合ngin

2017-04-10 11:15:30 108

原创 JAVA中BitSet使用

JAVA中BitSet     JAVA中BitSet就是“位图”数据结构,根据“位图”的语义,数据的存在性可以使用bit位上的1或0来表示;一个bit具有2个值:0和1,正好可以用来表示false和true。对于判断“数据是否存在”的场景,我们通常使用HashMap来存储,不过hashmap这个数据结构KEY和Value的保存需要消耗较多的内存,不适合保存较多的数据,即大数据场景;比如在

2017-04-10 11:15:16 102

原创 guava cache与编程实践

Guava-cache    guava cache是google开源代码库中的一个辅助功能模块,可以作为JVM嵌入式cache来使用,基于key-value模型。对于Rdedis、Memcached,这种缓存系统,我们称之为“分布式缓存”,它们通过集群扩容,可以将海量数据cache在远端。而guava cache,作为“嵌入式cache”,这些cache的数据寄宿在当前JVM堆中,和JVM进

2017-04-10 11:15:09 78

原创 JAVA中try-catch异常逃逸

有时候一些小的细节,确实比较纠结,对于try-catch-finally代码块中代码依次执行,当try中有exception抛出时,将会有catch拦截并执行,如果没有catch区块,那么exception将被添加到“return栈顶”并执行finally。    1) 如果catch中,再次抛出exception,那么原try中的exception是否还能抛出呢?    2) 如果cat

2017-04-10 11:15:02 59

原创 ServiceLoader加载基于配置的类服务

Java中有一个ServiceLoader类,可以用来加载指定的类服务。Java中目前还没有简单的办法来获取指定接口子类的列表。ServiceLoader能够在一定程度上,根据配置,加载并实例化指定接口的子类。 1、声明Service:在META-INF/services目录下创建配置文件,文件名称为Super类或者接口全名称,文件的内容每一行为一个子类全名,这个文件必须放在META-IN

2017-04-10 11:14:46 137

原创 YARN指令[官网整理]

【YARN指令(2.2+)】 1、jar:运行jar    “yarn jar [mainClass] args”2、application:操作application(job)    “yarn application ”,其中可选的options有:    -status :查看application的状态。    -list:从AM中列出所有的applicait

2017-04-10 11:14:32 99

原创 HDFS Quotas[官网整理]

【HDFS Quotas(2.2+)】    HDFS允许管理员对各个目录设定文件的个数(name quotas)或者空间使用(space quotas)总量。其中“name quotas”和“space quotas”可以分别设定。 一、Name Quotas    Name Quota是一个硬性限制,用来控制目录下文件或者子目录的个数。如果超过了设定的quota,那么创建文件或

2017-04-10 11:13:59 89

原创 HDFS架构[官网整理]

【HDFS Architecture(2.2+)】    HDFS是一个分布式文件系统,可以运行在廉价的商用机器上。它与现有的其他分布式文件系统有很多相似之处,当然也有很多不同之处。HDFS具有较高的容错性,适用于存储较大集合的数据,并能够支撑较高的吞吐能力。HDFS放宽了一些POSIX要求,以能够流式的访问数据。  一、硬件故障    硬件故障是常见的,而不是例外;一个HDF

2017-04-10 11:13:49 96

原创 HDFS Snapshot[官网整理]

【HDFS Snapshot(2.2+)】HDFS Snapshot是文件系统在某一时间点的只读的备份,Snapshot可以针对文件系统的子树或者整个文件系统。Snapshot的通常用法是做数据backup,以避免用户错误和灾难恢复。       HDFS Snapshot实现是高效的:    1、Snapshot的创建是瞬间完成:除了节点遍历耗时之外,其创建的开销为O(1)。

2017-04-10 11:13:42 76

原创 HDFS常用命令[备忘]

【HDFS常用命令】一、appendToFile:将一个或多个目标文件append到hdfs文件中,目标文件可以为本地文件或者stdin。    使用方式:hdfs dfs -appendToFile     1) ./hdfs dfs -appendToFile /data.txt /hdfs/data.txt    2) ./hdfs dfs -appendToFile /d

2017-04-10 11:13:13 179

原创 Mapreduce部署与第三方依赖包管理

Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错。本文介绍几种常用的配置方式: 1. HADOOP_CLASSPATH    在hadoop的相关配置文件中,添加CLASSPATH路径,那么在hadoop的各个进程启动时都会载入这些包,因此对于mapreduce-job jar中则不需要

2017-04-10 11:12:51 84

原创 ActiveMQ分布式网络(Forward Bridge)

当ActiveMQ面对大量消息存储和大量Client交互时,性能消耗将会达到单个broker极限,此时我们需要对ActiveMQ进行水平扩展。ActiveMQ提供了“network”机制,可以把多个broker实例“串联”一起,形成“Forward Bridge”模型(转发桥)。这些Broker通过有向网络(networkerConnector)链接在一起,组成broker集群,任何一个Borke

2017-04-10 11:12:28 157

原创 ActiveMQ与虚拟通道

ActiveMQ提供了虚拟通道的特性(Virtual Destination),它允许一个逻辑通道(logical destination)映射成一个或者多个物理通道(physical destination);它可以非常灵活的解决"消息整合"方面的问题,它可以实现:    1) 提供了VirtualTopic特性,可以让一个订阅者的消息列表,作为Queue来消费。    2) 提供了Co

2017-04-10 11:12:14 96

原创 Mysql索引失效(备忘)

创建一个user表:CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT '', `age` tinyint(4) DEFAULT NULL, `email` varchar(128) DEFAULT NULL, `title` varchar(

2017-04-10 11:11:22 73

原创 Thrift-client与spring集成

Thrift-client作为服务消费端,由于thrift使用socket通讯,因此它需要面对几个问题:    1) client端需要知道server端的IP + port,如果是分布式部署,还需要知道所有server的IP + port列表.      2) client为了提升性能,不可能只使用一个socket来处理并发请求,当然也不能每个请求都创建一个socket;我们需要使用连接

2017-04-10 11:11:14 93

原创 Apache curator-frameworker简述

Apachecurator-framework是一个高层API,对curator-client组件进行了二次封装,开发者可以更少的关注zookeeper底层,进行快捷的开发.    特性一览:链接管理: 框架已经兼容了zookeeper网络链接异常问题,并提供了自动重连机制.简洁的API设计: fluent风格API(最大亮点),大部分API中已经兼容了zookeeper操作异常问题

2017-04-10 11:10:29 177

原创 Apache curator-client详解

Apache curator框架中curator-client组件可以作为zookeeper client来使用,它提供了zk实例创建/重连机制等,简单便捷.不过直接使用curator-client并不能减少太多的开发量,因为它相对比较底层,稍后我们继续了解curator-framework组件提供的更多的便捷特性. 一.核心API    1. CuratorZookeeperClie

2017-04-10 11:10:22 134

原创 Tomcat中Connector常用配置(备忘)

Tomcat中server.xml有些配置信息是需要我们了解的,最起码知道如何进行简单的调试.     默认情况下配置信息是这样的,在dev环境中,基本上可以用了.如下,简单的介绍Connector标签上还能挂载的其他配置项.  1. port     tomcat作为一个网络server端,它需要暴露一个socket端口来accept客户端的链接,可以通过port指定

2017-04-10 11:10:01 146

原创 Tomcat请求乱码(备忘)

纠结了数日,终于搞定了乱码问题,归结是tomcat配置问题,在tomcat server.xml中有2个参数是配置编码的,一个是URIEncoding,另一个是useBodyEncodingForURI. 1. URIEncodingThis specifies the character encoding used to decode the URI bytes, after %xx

2017-04-10 11:09:54 103

原创 SpringMVC项目搭建过程备忘

一个小小的springMVC项目,看着简单,其实折腾的还是有点苦逼,仅作备忘.    环境要求:maven3.x,spring3.x,velocity1.7,mybatis3.2.x    项目样板,参见附件.如下为注意事项:1) pom.xml:    在maven3.x之后,不再支持profile.xml方式配置参数,而是改成将profile信息直接包含在pom.xml中.

2017-04-10 11:09:22 104

空空如也

空空如也

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

TA关注的人

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