自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 问答 (3)
  • 收藏
  • 关注

原创 如何在JAVA项目中实现反向代理功能?

前言(什么是反向代理)反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。举个例子,比如我访问百度(www.baidu.com),但是我们其实并不知道百度内部到底有多少台服务器、百度是怎么处理这次请求的以及我们应该访问那台服务器。我们只是知道我访问了百度(www.baidu.com)的域名或者公网IP,然后就返回

2021-02-21 22:02:45 7331 4

原创 领域驱动设计(DDD)入门&概要

我们为什么需要领域驱动设计在说什么是领域驱动设计之前,我觉得需要先说一下我们为什么需要领域驱动,我个人认为领域驱动设计对于研发来说改进点主要有下面三个:从大泥球风格中解脱出来,控制代码复杂度 回归面向对象编程本质,而不是面向过程编程 专注于业务,实现不同业务领域解偶什么是领域驱动设计领域驱动设计(DDD)是一种软件设计思路,领域指的是业务领域,比如银行业务领域,医药销售领域;不同于传统以数据表为中心的建模方式,它以业务领域为中心来建模,能促使我们以正确的方式使用面向对象,建立饱满的领域对象

2020-10-19 23:16:14 3578 1

原创 读《Redis设计与实现》—Redis入门与数据结构

前言在互联网和大数据时代,特别是分布式系统大行其道的今天,Redis是一个广泛被应用在我们系统之中,不论是传统的ERP、CRM还是互联网高并发的系统。Redis是一款开源、高性能、基于C语言开发的键值对存储的NoSql数据库。所以我们应该需要对Redis有更加深入的了解,下面很多都是Copy了《Redis设计与实现(第二部)》中的内容,因为书中肯定总结的会更加好。概述优势Redis...

2020-10-09 20:30:36 389

原创 Kettle — 常用组件使用

前言Kettle控件分为三种:转换控件、作业控件和Hop(跳)。转换控件输入控件表输入表输入控件是从数据库的表中读取数据的控件。我们可以在表中输入SQL语句(或者通过获取SQL查询语句获取)。比如我们通过获取SQL查询语句获取到SQL语句,我们可以预览这个转换。预览结果如下所示:对于查询语句而言,肯定是需要进行筛选的,这样就需要进行变量的引用。在Kettle...

2019-07-14 20:11:03 32254 3

原创 Java Lambda表达式

前言随着函数式编程的流程,Java8中也引入了函数式编程风格(Lambda表达式)。Lambda表达式允许我们将行为传递到函数中,其可以替换匿名内部类实现的繁琐的代码。下面就是一个最经典的例子,用普通的匿名内部类一共用了6行代码,使用Lambda表达式只需要1行代码即可。也就是说,Lambda表达式在经常使用内部类情况下,可以大大的减少代码量,还有就是Lambda表达式经常和Stream AP...

2019-06-13 14:08:35 424

原创 【分布式】高性能分布式发号器

关于数据库主键生成在我们的业务中,数据库表主键是需要保证唯一的,有序的。通常在单表(不分库、分表)情况下,我们可以直接使用主键自增长来实现。但是这种模式存在几点明显的缺点:1、不能支持分库分表;2、基于数据库生成,会影响数据库性能;3、数据清洗迁移比较麻烦。针对以上的情况,我们可以通过应用服务生成UUID来实现唯一的主键,但是UUID却存在下面几点问题:1、UUID不具有有序性;2、UUID生...

2019-04-19 19:53:24 947

原创 Java NIO简介和使用

前言Java NIO其实就是JDK1.4中加入的新的基于Channel和Buffer的Iuput/Output方式。我个人认为NIO主要有以下两个优点:同步非阻塞:这点是指在结合使用Selector时,会不断的轮询,查看注册的事件是否就绪;而非阻塞模式可以是当前线程不需要傻傻的等待所以的数据都读取完毕再继续向下执行。所以通过通过非阻塞模式加Selector可以仅仅使用一个线程就能管理多个输...

2018-10-28 17:18:00 924

原创 Git日常使用积累

拉取代码1.先将代码fork到自己的仓库2.然后将自己仓库的代码clone下来3.添加远程仓库4.查看是否添加成功更新代码1.查看项目 git remote -v 有没有添加upstream远程主库2.如果没有添加,输入以下命令添加:git remote add upstream [email protected]:bap/orchid...

2018-09-17 16:08:40 254

转载 Kettle — 转换机制

转换机制  每个转换步骤都是ETL数据流里面的一个任务。转换步骤包括输入、处理和输出。输入步骤从外部数据源获取数据,例如文件或者数据库;处理步骤处理数据流,字段计算,流处理等,例如整合或者过滤。输出步骤将数据写会到存储系统里面,例如文件或者数据库。 图 1 转换步骤示例1. Step类图简介  Kettle为扩展插件提供了4个扩展点,这4个扩展点也是每个步骤的组成。每个类都有...

2018-09-11 18:09:05 5163

原创 Kettle — 源码启动和代码结构分析

众所周知Kettle是一个开源的项目,所有我们有必要把Kettle的源码pull下来进行简单的分析,搞清楚Kettle的执行原理和实现过程。首先我们需要从Github中将源代码Pull下来。从Github上的分支可以看到,最新的版本应该是8.1.0.3的版本,而master分支最新的应该是9.0的RC版Kettle源码地址:https://github.com/pentaho/pentah...

2018-09-11 18:03:24 9184 5

原创 Kettle — 自定义插件

Kettle开发体系是基于插件的,平台自身提供接口,开发者按照规范实现接口就能进行插件的开发。在Kettle8.1的官方文档上有关于插件非常详细的介绍,如果有任何疑问可以先去官方文档查看。下面先介绍一下需要进行插件开发最基本的原理。插件类型在Kettle中插件涵盖以下四种类型:         1.步骤插件:Kettle中转换的核心对象         2.作业输入插件:Kettl...

2018-09-11 18:00:13 16027 3

原创 Kettle — Spoon加载源码解析

在Kettle中,我们知道Spoon是其中最重要的一个组件。它可以让我们以图形化的方式开发转换和作业等工作。在spoon中Kettle采用了Xul界面技术和Swt相结合的方式进行图形界面的开发。启动流程1)首先程序在启动时会创建一个spoon.log日志Path parent = Paths.get( System.getProperty( "user.dir" ) + File...

2018-09-11 17:49:39 3290

原创 Kettle — 使用手册

介绍ETL是EXTRACT(抽取)、TRANSFORM(转换)、LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环,也是工作量较大的一块。Kettle是ETL中其中一个开源工具,基于纯Java开发。kettle有两种脚本transformation(转换)和Job(作业)Kettle有三个主要组件:Spoon、Kitchen、P...

2018-09-11 17:35:42 210659 25

原创 Kettle — 集群使用

Kettle集群介绍在Kettle中合理的使用集群可以加快执行的速度,并且还能在部分服务器宕机的情况下继续使用。在Kettle中集群是由一个主Carte服务器和多个从Carte服务器组成。在执行转换时,主服务器负责分发跟踪任务和收集结果总汇,从服务器负责具体的转换执行。在Kettle中,如果主服务器也宕机的话并不存在服务器(类似于redis、zookeeper等)重新选举的功能,也就是说一旦主...

2018-09-11 17:23:00 15558 7

原创 Kettle — 常见错误

错误1:点击SQL时报错,执行转换不生效。需要点击hop,使之生效。错误2:资源库配置变为灰色,且没有Connect按钮原因是有些中文配置导致Kettle的repositories.xml文件乱码。删除红框中的文件,并重启Kettle。错误3:kettle8打开后会发现很多kettle8以前版本存在的插件不存在了,比如xml相关的操作、Json相关的操作...

2018-09-11 17:12:21 4935

原创 Kettle — 安装和部署

前提Kettle是纯Java编写的ETL开源工具,目前Kettle7和Kettle8都需要Java8或者以上才能正常运行。所以开运行Kettle前先检查Java环境是否正确配置,Java版本是否是8或者以上。Kettle安装1)创建Kettle的目录,并将Kettle的zip包解压到Kettle目录下2)查看一下sh文件使用都有执行的权限,如果没请加上。4)执行...

2018-09-11 16:47:35 31769 2

原创 Java并发编程—内存模型

什么是并发?并发是指多个执行单元同时并行执行,并发通常能够加大系统的利用率和吞吐量。不过并发的执行单位经常会造成共享资源出现竞争状态。Java内存模型在Java并发中,线程间的通信是通过Java内存模型(Java Memory Model)控制的。JMM能屏蔽掉各种硬件和操作系统的内存访问差异,使Java在各种平台让运行的效果一致。要实现Java并发编程我们必须要了解Java内存模型(...

2018-08-11 18:41:05 380

原创 读Spring实战(第四版)概括—Restful API

一、前言什么是rest?什么是restful?我相信很多人区分不开来,Rest的英文全称为Representational State Transfer,即表述性状态转移,就是将资源的状态以最适合客户端或服务端的形式从服务器端转移到客户端(或者反过来)。Rest是一种软件架构风格而不是标准,提供了设计原则和约束,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。而Restf...

2018-08-05 13:56:56 451

原创 读Spring实战(第四版)概括—保护Web应用(Spring Security)

一、前言Spring Security是为基于Spring的应用程序提供声明式安全保护的安全性框架。Spring Security提供了完整的安全性解决方案,它能够在Web请求级别和方法调用级别处理身份认证和授权。因为基于Spring框架,所以Spring Security充分利用了依赖注入(dependency injection,DI)和面向切面的技术。二、Spring Securit...

2018-08-01 20:24:59 412

转载 Zookeeper Recepes使用

Curator食谱(高级特性)提醒:首先你必须添加curator-recipes依赖,下文仅仅对recipes一些特性的使用进行解释和举例,不打算进行源码级别的探讨 <dependency> <groupId>org.apache.curator</groupId> <artifactId...

2018-07-22 15:29:45 415

原创 Zookeeper Curator使用

一、前言Curator是Netflix公司开源的一套Zookeeper客户端框架。了解过Zookeeper原生API都会清楚其复杂度。Curator帮助我们在其基础上进行封装、实现一些开发细节,包括接连重连、反复注册Watcher和NodeExistsException等。目前已经作为Apache的顶级项目出现,是最流行的Zookeeper客户端之一。从编码风格上来讲,它提供了基于Fluent...

2018-07-22 15:20:30 2549

转载 Zookeeper Leader选举

一、前言  前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举。二、Leader选举  2.1 Leader选举概述  Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举。  (1) 服务器初始化启动。  (2)...

2018-07-16 07:50:15 251

转载 使用Spring Tool Suite创建Maven Web工程

使用STS或者Eclipse这样的IDE创建Maven Web工程还真不是一般的麻烦!看了网上不少的方法介绍,操作下来总有区别,不是这里不对就是那里不对。 下面是尝试了几次之后成功的方法,记录一下。 环境信息Spring Tool SuiteVersion: 3.8.3.RELEASEBuild Id: 201612191351Platform: Eclipse ...

2018-07-16 07:35:17 2001

原创 Zookeeper隐藏通道和羊群效应

隐藏通道ZooKeeper客户端总是会观察到相同的更新顺序,即使它们连接到不同的服务端上。但是客户端可能是在不同时间观察到了更新,如果他们还在ZooKeeper以外通信,这种差异就会更加明显。让我们考虑以下场景: 客户端c1更新了/z节点的数据,并收到应答 客户端c1通过TCP的直接连接告知客户端c2,/z节点状态发生了变化   客户端c2读取/z节点的状态,但是在...

2018-07-10 09:03:27 3303

转载 Zookeeper ACL权限控制

Zookeeper使用ACL来控制访问Znode,ACL的实现和UNIX的实现非常相似:它采用权限位来控制那些操作被允许,那些操作被禁止。但是和标准的UNIX权限不同的是,Znode没有限制用户(user,即文件的所有者),组(group)和其他(world)。Zookeepr是没有所有者的概念的。每个ZNode的ACL是独立的,且子节点不会继承父节点的ACL。例如:Znode /app对于...

2018-07-09 17:03:54 402

原创 Linux常用命令总结

下面是一年多前读《鸟哥的Linux私房菜》总结的常用的命令、快捷键、Linux特殊符号。Linux 常用命令 commond [-opt] param1 param2 ...ls 列出目录内容 ls [opt]...  [file]... 参数: -a 列出所有的条目,包括隐藏的文件 -l 列出文件的详细信息 -s 打印文件的大小[块] -t 文件按时间排序 -h 用人类易读的方式...

2018-07-09 09:00:56 3174

原创 Zookeeper典型应用场景介绍

1.前言之前自己写了一些关于Zookeeper的基础知识,Zookeeper作为一种协调分布式应用高性能的调度服务,实际的应用场景也非常的广泛,这里主要通过几个例子来具体的说明Zookeeper在特定场景下的使用方式(下面的这些功能估计consul和etcd也能实现,以后学到了再说吧)。2.具体应用2.1.一致性配置管理我们在开发的时候,有时候需要获取一些公共的配置,比如数据库连接信息等,并且偶然...

2018-07-07 22:08:05 22591 7

转载 Zookeeper ZkClient简介

直接使用zk的api实现业务功能比较繁琐。因为要处理session loss,session expire等异常,在发生这些异常后进行重连。又因为ZK的watcher是一次性的,如果要基于wather实现发布/订阅模式,还要自己包装一下,将一次性订阅包装成持久订阅。另外如果要使用抽象级别更高的功能,比如分布式锁,leader选举等,还要自己额外做很多事情。这里介绍下ZK的两个第三方客户端包装...

2018-07-04 16:51:41 7894 1

转载 VMware磁盘扩容

0 前言    创建虚拟机时候默认虚拟硬盘容量为20GB, 一天在编译内核的时候突然提示硬盘空间不足, 因此需要对原有的虚拟硬盘进行扩容(此外, 还可以添加新虚拟磁盘, 详细见《VMware10+Ubuntu14.04添加新硬盘》). 网上已经有相关虚拟机扩容的资料, 但是说的不够完整, 因此本文对此做一个详细的总结.1 虚拟磁盘扩容1.1 方法一&nbs...

2018-07-02 08:53:35 88860 26

转载 VirtualBox虚拟机网络连接设置的四种方式

 VirtualBox虚拟机网络设置(四种方式) VirtualBox是一款SUN出品的非常优秀的虚拟机程序,版本也非常齐全,你可以在官网上找到适合各种操作系统平台的版本。这里我先给大家大致讲解下VBox的网络配置及应用。VirtualBox的提供了四种网络接入模式,它们分别是:1、NAT    网络地址转换模式(NAT,Network ...

2018-07-02 08:49:40 3686

原创 跨域访问及Nginx解决跨域访问

同源策略(Sameorigin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略是处于对用户安全的考虑,如果非同源就会受到以下限制:Cookie不能读取Dom无法获得Ajax请求不能发送但是事实是经常需要借助非同源来提供数据,所以就需要进行跨域请求...

2018-07-02 08:42:51 1734

原创 zookeeper通过API使用

前言Zookeeper是一种作用于分布式应用高性能的调度服务。在zookeeper中提供了原生的API可以供我们开发使用,zookeeper官方的API文档网址:http://zookeeper.apache.org/doc/r3.4.11/api/index.html这里对zookeeper原生API操作使用进行一些简单的总结,主要的操作包括:连接、创建节点、获取节点、删除节点、修改节点、权限认...

2018-07-01 23:38:44 5286

原创 Zookeeper开发者手册

Zookeeperapi官网:http://zookeeper.apache.org/doc/r<version:版本号>/index.htmlZookeeper是一种作用于分布式应用高性能的调度服务。Zookeeper提供了公共的服务,在一组简单的接口中,例如例如命名、配置管理、同步和集群服务等,因此你不需要从底层开始写这些服务。你可以使用现成的这些接口来实现一致性,组管理,选举和现...

2018-06-25 09:14:48 1239

转载 Zookeeper命令行使用

一、前言  在学习了Zookeeper相关的理论知识后,下面接着学习对Zookeeper的相关操作。二、Zookeeper部署  Zookeeper的部署相对来说还是比较简单,读者可以在网上找到相应的教程,点这里,笔者不再累赘。  Zookeeper有三种运行形式:集群模式、单机模式、伪集群模式。  以下实验都是在单机模式下进行。三、服务端  bin目录下常用的脚本解释    zk...

2018-06-17 13:02:09 3477

原创 读Spring实战(第四版)概括—面向切面的Spring

AOP即面向切面编程,它通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。常用于日志记录,性能统计,安全控制,事务处理,异常处理等等。1.定义AOP...

2018-06-13 21:37:07 326

原创 Zookeeper入门

1.什么是ZookeeperZooKeeper是一个开源的分布式协调服务,他为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如统一命名空间服务,配置服务和分布式锁等分布式基础服务。2.Zookeeper基本概念2.1.Zookeeper角色Zookeeper角色有三种:群首(leader)、追随者(follower)、观察者(observer)。通过一次选举过程,被选举的机器...

2018-06-10 21:11:40 359

原创 Dubbo学习入门

本文参考自:Dubbo用户手册(中文)http://dubbo.apache.org/books/dubbo-user-book/现在的参考文档地址:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html入门请参考自《Dubbo用户手册(中文)》第一节,在手册第二节说明如何快速启动Dubbo,下面就顺着手册的使用方式,自己搭建一个快...

2018-06-04 20:51:46 247

转载 Spring下自定义xml标签

dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子。一 编写模型类 1 package com.hulk.testdubbo.model; 2 3 public class Hero { 4 private String name; 5 privat...

2018-06-01 08:54:44 1022

原创 Docker远程连接和Docker Remote Api

在Docker生态系统中一共有3种API:Registry API、Docker Hub API、Docker Remote API这三种API都是RESTful风格的。这里Remote API是通过程序与Docker进行集成和交互的核心内容。Docker Remote API是由Docker守护进程提供的。默认情况下,Docker守护进程会绑定到一个所在宿主机的套接字:unix:///var/r...

2018-05-27 22:58:51 5660

原创 Docker Compose使用手册

Docker Compose是一个比较简单的docker容器的编配工具,以前的名称叫Fig,由Orchard团队开发的开源Docker编配工具,在2014年被Docker公司收购,Docker Compose是使用Python语言开发的一款docker编配工具。使用Docker Compose,可以用一个yml文件定义一组要启动的容器,以及容器运行时的属性。Docker Compose称这些容器为...

2018-05-27 22:24:03 2037

空空如也

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

TA关注的人

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