- 博客(130)
- 资源 (5)
- 收藏
- 关注
转载 【Guava】Optional接口来避免空指针错误
null会带来很多问题,从开始有null开始有无数程序栽在null的手里,null的含义是不清晰的,检查null在大多数情况下是不得不做的,而我们又在很多时候忘记了对null做检查,在我们的产品真正投入使用的时候,空指针异常出现了,这是一种讨厌的情况。鉴于此google的guava库中提供了Optional接口来使null快速失败,即在可能为null的对象上做了一层封装,在使用Optional静态方
2017-08-22 09:10:19
624
转载 SOA与微服务基本原则及对比
一、面向服务设计的原则服务可复用:不管是否存在即时复用的机会,服务均被设计为支持潜在的可复用服务共享一个标准契约:为了与服务提供者交互,消费者需要导入服务提供者的服务契约,这个契约可以是一个IDL文件,Java接口定义,WSDL文件,甚至是接口说明文档服务是松耦合的:服务被设计为功能相对独立,尽量不依赖其他服务的独立功能提供者服务是底层逻辑的抽象:只有经服务契约所暴露的服务队外部世界可见,契
2017-08-20 21:47:28
416
转载 Java 8学习之Stream API
一个Stream表面上看与一个集合很类似,允许你改变和获取数据。但是实际上他与集合是有很大区别的:Stream自己不会存储元素。元素可能被存储在底层的集合中,或者根据需要产生出来。Stream操作符不会改变源对象。相反,他们会返回一个持有结果的新Stream。Stream操作符可能是延迟执行的。意味着他们会等到需要结果的时候才执行。下面是一段如何并行统计长单词的代码:long count =
2017-08-15 20:52:39
204
转载 Java 8学习之Lambda表达式
一、lambda表达式一个lambda表达式包含三个部分: - 一段代码 - 参数 - 自由变量的值,这里的自由指的是哪些不是参数并且没有在代码中定义的变量。示例:public static void repeat(String text, int count) { Runnable r = () -> { for (int i = 0; i < count; i++)
2017-08-15 16:19:58
247
原创 【Druid】Access Denied for User ''@'ip'
今天在写单元测试时,遇到一个很奇葩的问题,一直在报这样的错误:Caused by: java.sql.SQLException: Access denied for user ''@'183.134.103.169' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
2017-08-07 14:52:34
814
转载 【Guava】基于guava的重试组件Guava-Retryer
一、使用场景在日常开发中,我们经常会遇到需要调用外部服务和接口的场景。外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失败重试策略重新调用 API 接口来获取。重试策略在服务治理方面也有很广泛的使用,通过定时检测,来查看服务是否存活( Active)。Guava Retrying 是一个灵活方便的重试组件,包含了多种的重
2017-08-03 09:36:15
567
原创 【Guava】使用Guava的RateLimiter做限流
一、常见的限流算法目前常用的限流算法有两个:漏桶算法和令牌桶算法。1.漏桶算法漏桶算法的原理比较简单,请求进入到漏桶中,漏桶以一定的速率漏水。当请求过多时,水直接溢出。可以看出,漏桶算法可以强制限制数据的传输速度。2.令牌桶算法令牌桶算法的原理是系统以一定速率向桶中放入令牌,如果有请求时,请求会从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务。这种算法可以应对突发程度的请求,
2017-07-20 11:13:48
1922
原创 【Kafka】Kafka集群搭建
一、准备工作服务器:最好是多台,大于等于2已经搭建好的zookeeper集群下载软件kafka_2.11-0.10.0.1.tgz二、创建目录#创建目录cd /opt/mkdir kafka #创建项目目录cd kafkamkdir kafkalogs #创建kafka消息目录,主要存放kafka消息#解压软件tar -zxvf kafka_2.11-0.10.0.1.tgz三、修
2017-07-17 19:04:15
324
原创 【ZooKeeper】单机伪集群搭建(适用于mac)
1.配置.zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/可以选择需要的版本,我下载的是zookeeper-3.4.6.tar.gz,解压得到文件夹zookeeper-3.4.3由于手头机器不足,所以在一台机器上部署了3个server,如果你手头也比较紧,也可以这么做。在主文件夹下建立一个zookeeper文件夹,在zo
2017-07-17 15:17:26
2295
原创 高性能队列Disruptor的使用
一、什么是 Disruptor从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是什么。我们知道 BlockingQueue 是一个 FIFO 队列,生产者(Producer)往队列里发布(publish)一项事件
2017-06-08 15:03:00
3624
原创 【Maven学习】maven-enforcer-plugin的使用
我们会经常碰到这样的问题,在pom中引入了一个jar,里面默认依赖了其他的jar包。jar包一多的时候,我们很难确认哪些jar是我们需要的,哪些jar是冲突的。此时会出现很多莫名其妙的问题,什么类找不到啦,方法找不到啦,这种可能的原因就是jar的版本不是我们所设想的版本,但是我们也不知道低版本的jar是从哪个maven里面引用的。此时我们的maven-enforcer-plugin就可以登场了。<p
2017-06-08 09:04:24
599
转载 【Maven学习】maven-assembly-plugin的使用
转自http://liugang594.iteye.com/blog/2093607maven-assembly-plugin使用描述(拷自 maven-assembly-plugin 主页) The Assembly Plugin for Maven is primarily intended to allow users to aggregate the project output al
2017-06-01 17:13:19
1096
原创 【源码分析】Guava源码解析之EventBus
最近看Elastic-Job源码,看到它里面实现的任务运行轨迹的持久化,使用的是Guava的AsyncEventBus,一个内存级别的异步事件总线服务,实现了简单的生产-消费者模式,从而在不影响任务执行效率的基础上,将任务执行和任务轨迹记录解耦,大大提高了EJ的性能。EventBus在Elastic-Job中的使用EventBus的使用方法不难,具体可以参考EJ里面几个相关的类:JobEventLi
2017-05-23 16:34:10
495
原创 【源码分析】Elastic-Job源码分析之AbstractElasticJobExecutor分析
还记得我们在JobScheduler中,在创建任务详情时,会调用一个建造器JobBuilder来创建一个Job,类型是LiteJob。LiteJob.java/** * Lite调度作业. * * @author zhangliang */public final class LiteJob implements Job { @Setter private ElasticJo
2017-05-19 18:23:00
1138
原创 【Maven学习】远程仓库的配置
很多情况下,默认的中央仓库无法满足项目的需求,我们可能需要配置新的远程仓库,此时我们可以这样配置:<repository> <id>java-net</id> <url>https://oss.sonatype.org/content/repositories/snapshots/</url> <snapshots> <enabled>false</enabl
2017-05-16 21:22:36
442
原创 【Maven学习】maven中依赖的配置详解
根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或多个项目依赖。每个依赖可以包含的元素有:groupId,artifactId和version:依赖的基本坐标,对于一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。type:依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,默认值为jar
2017-05-15 23:03:39
415
原创 【Maven学习】maven基本命令
maven最主要的命令如下:mvn clean compile:告诉Maven编译项目主代码mvn clean test:执行src/test/main下面的test方法,在执行测试之前,会自动执行项目主资源处理、主代码编译、测试资源处理、测试代码编译等工作mvn clean package:打包,使用默认打包类型jar,在打包前会执行编译、测试等操作。生产的jar文件位于target下面m
2017-05-15 22:28:53
446
原创 【源码分析】Elastic-Job源码分析之JobScheduler类分析
JobScheduler这个类是EJ中比较核心的一个类,我们现在开始解析这个类。一、构造器首先我们看一下JobScheduler的几个构造器。 private JobScheduler(final CoordinatorRegistryCenter regCenter, final LiteJobConfiguration liteJobConfig, final JobEventBus jo
2017-05-10 20:24:23
841
转载 【源码分析】分布式锁-RedisLockRegistry源码分析[转]
前言官网的英文介绍大概如下: Starting with version 4.0, the RedisLockRegistry is available. Certain components (for example aggregator and resequencer) use a lock obtained from a LockRegistry instance to ensure th
2017-05-10 16:59:50
2338
原创 elastic-job动态添加定时任务
在elastic-job的使用过程中,我们会遇到动态添加定时任务的时候,但是官网上面并没有对这块内容进行说明。按照我的理解以及官网上面elastic-job的框架图,ej的定时任务其实是存储在zookeeper的一个个节点上面,所以通过给zookeeper添加对应的节点即可完成定时任务的添加动作。下面上代码:import java.text.SimpleDateFormat;import java
2017-04-26 15:34:09
2740
原创 Java程序员的面试经历和题库
最近打算换城市了,受不了北京的雾霾了,所以准备逃离啦。所以一直在面试中,整理了下最近遇到的一些面试题,供大家参考。其中会包含一些面试的小经验,如果您是面霸,希望能给予指导。自己不是大牛,如果您是大牛,也可以忽略之。我面试的岗位是Java后端开发工程师。一、简历简历里面需要包含的内容应该是学历,自己的技术栈,然后自己做过的一些项目。简历不需要太长,两页纸即可。里面应该重点写你使用过的一些框架,自己做的
2017-03-19 21:33:21
12118
39
原创 java中String、StringBuffer、StringBuilder的区别
java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。private final char value[]; StringBuild
2017-02-18 17:13:30
637
原创 linux命令-寻找超过100M的文件,并将其删除
find / -type f -size +100M | xargs rm -rf其中第一个/表示路径,此时表示的是根目录,也就是搜索全部的文件-type表示类型f表示是文件-size 表示大小+100M:表示大于100M后面就是执行的命令。当然也可以寻找特定后缀的文件,比如:find / -name “*.mp3” |xargs rm -rf,就是寻找以mp3结尾的文件并删除。一般我们在删除之前
2017-02-15 09:34:38
4857
原创 LeetCode-14. Longest Common Prefix
1.题目描述Write a function to find the longest common prefix string amongst an array of strings.找到一组字符串的最长前缀。2.我的分析思路这一题的第一思路就是,把第一个字符串作为基准,遍历每个子字符串,然后判断其他字符串是否以这个子字符串为前缀,然后求出最长的即可。上代码:public String longes
2017-02-12 21:06:37
454
原创 LeetCode-13. Roman to Integer(罗马数字转阿拉伯数字)
1.题目描述Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.2.我的分析思路罗马数字转成阿拉伯数字,这里面需要知道罗马数字的构成规则。罗马数字通过7个不同字母的重复或组合,能够表示出所有正整数(罗马数字中没有0)。I = 1V = 5
2017-02-12 20:59:27
475
原创 LeetCode-3. Longest Substring Without Repeating Characters
1.题目描述Given a string, find the length of the longest substring without repeating characters.Examples:Given ==”abcabcbb”==, the answer is ==”abc”==, which the length is 3.Given ==”bbbbb”==, the answer i
2017-02-12 20:44:29
251
原创 LeetCode-2. Add Two Numbers(链表实现数字相加)
1.题目描述You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and ret
2017-02-09 09:56:55
443
原创 LeetCode-9. Palindrome Number(回文数)
1.题目描述Determine whether an integer is a palindrome. Do this without extra space.Some hints: Could negative integers be palindromes? (ie, -1)If you are thinking of converting the integer to string, not
2017-02-07 21:23:51
429
原创 LeetCode-7. Reverse Integer
1.题目描述Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321Note:The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed i
2017-02-07 09:35:27
449
原创 LeetCode-1.Two Sum
1.题目描述Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the sa
2017-02-06 11:43:46
393
转载 JAVA源码分析-深度剖析ConcurrentHashMap
还记得大学快毕业的时候要准备找工作了,然后就看各种面试相关的书籍,还记得很多面试书中都说到: HashMap是非线程安全的,HashTable是线程安全的。那个时候没怎么写Java代码,所以根本就没有听说过ConcurrentHashMap,只知道面试的时候就记住这句话就行了…至于为什么是线程安全的,内部怎么实现的,通通不了解。今天我们将深入剖析一个比HashTable性能更优的线程安全的Ma
2017-01-15 20:02:17
659
原创 JAVA源码分析-HashMap源码分析(二)
本文继续分析HashMap的源码。本文的重点是resize()方法和HashMap中其他的一些方法,希望各位提出宝贵的意见。话不多说,咱们上源码。final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; //如果老的数组为空,老的数组容量设为0 int oldCap = (oldTab == nul
2017-01-06 21:33:43
493
原创 JAVA源码分析-HashMap源码分析(一)
一直以来,HashMap就是Java面试过程中的常客,不管是刚毕业的,还是工作了好多年的同学,在Java面试过程中,经常会被问到HashMap相关的一些问题,而且每次面试都被问到一些自己平时没有注意的问题。因为HashMap不管对于毕业生,还是对于老司机来说,都非常熟悉,熟悉到你经常忽略它。本着知其然,更要知其所以然的精神,本人对JDK 1.8版本的HashMap源码进行了仔细的学习。大家知道,JD
2017-01-06 17:27:02
537
1
原创 设计模式-桥梁模式
一、定义桥梁模式(Bridge Pattern)也叫做桥接模式,是一个比较简单的模式,其定义如下: Decouple an abstraction from its implementation so that the two can vary independently.(将抽象和实现解耦,使得两者可以独立地变化。)桥梁模式的重点是在“解耦”上,如何让它们两者解耦是我们要了解的重点,我们先来看 桥
2017-01-03 11:31:47
459
原创 设计模式-享元模式
一、定义享元模式(Flyweight Pattern)是池技术的重要实现方式,其定义如下:Use sharing to support large numbers of fine-grained objects efficiently.(使用共享对象可有效地支持大量的细粒度的对象。)享元模式的定义为我们提出了两个要求:细粒度的对象和共享对象。我们知道分配太多的对象到应用程序中将有损程序的性能,同时还
2017-01-03 11:07:49
376
原创 设计模式-解释器模式
一、定义解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案,在现在项目中使 用较少,其定义如下:Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences
2016-12-29 23:08:53
361
原创 设计模式-状态模式
一、定义定义如下:Allow an object to alter its behavior when its internal state changes.The object will appear to change its class.(当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其 类。)状态模式的核心是封装,状态的变更引起了行为的变更,从外部看起来就好像这个对象 对应的
2016-12-29 22:51:30
269
原创 设计模式-访问者模式
一、定义访问者模式(Visitor Pattern)是一个相对简单的模式,其定义如下:Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the ele
2016-12-29 18:22:18
310
原创 设计模式-备忘录模式
一、定义备忘录模式(Memento Pattern)提供了一种弥补真实世界缺陷的方法,让“后悔药”在程 序的世界中真实可行,其定义如下:Without violating encapsulation,capture and externalize an object’s internal state so that the object can be restored to this state l
2016-12-29 07:56:56
406
原创 设计模式-门面模式
一、定义门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如 下:Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.(要求一
2016-12-29 07:39:41
436
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人