Java/Scala
文章平均质量分 63
某先生xxxx
服务端
展开
-
试用配置管理库typesafe.config
Typesafe的Config库,纯Java写成、零外部依赖、代码精简、功能灵活、API友好。支持Java properties、JSON、JSON超集格式HOCON以及环境变量。它也是Akka的配置管理库UseageTypesafe的Config库,默认加载classpath下的application.conf,application.json和application.prope原创 2014-04-29 16:32:03 · 14920 阅读 · 0 评论 -
Coursera Scala 4-1:函数作为对象
Coursera Scala 4-1:函数作为对象Functions Types Relate to ClassesScala是纯粹的面向对象的语言,函数是拥有apply方法的对象。函数类型A=>B等价于:package scalatrait Function1[A,B]{ def apply(x:A):B}Functions Values Ralate原创 2014-07-11 16:45:50 · 924 阅读 · 0 评论 -
Coursera Scala 5-4:List的高阶函数
Coursera Scala 5-4:List的高阶函数Recurring Patterns for Computations on Lists重复出现的Lists计算模式lists的很多函数有相似的结构,重复出现的模式有:用某个方法转换每个元素用某个条件提取元素用某种方法链接元素函数式编程语言,让程序员能写出更通用的计算模式,通过使用高阶函数。Ap原创 2014-07-11 16:49:39 · 1217 阅读 · 0 评论 -
scala的类与类型
scala的类与类型类和类型List和List类型是不一样的,但是jvm运行时会采用泛型擦除。导致List和List都是Class.为了得到正确的类型,需要通过反射。泛型擦除Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。泛型擦除原创 2014-08-08 15:35:48 · 14451 阅读 · 1 评论 -
Java Metrics
Java MetricsJava Metrics是一个功能比较强大的java统计库,它的输出组件也很强大,帮我们做好了:输出到Ganglia输出到控制台输出到JMX输出Json详细见:dropwizard.github.io/metrics/依赖添加依赖,如gradle: compile "io.dropwizard.metrics:metrics原创 2014-10-24 10:33:52 · 8376 阅读 · 4 评论 -
Java时间:GMT以及UTC
EditJava时间:GMT以及UTCGMT即格林威治标准时间,以英国伦敦郊区皇家格林威治天文台的标准时间。世界被分为24个时区。而北京在东八区UTC即世界协调时间,以格林威治时间为准,经过平均太阳时等修正后,以秒为单位的国际原子时所综合计算而成的时间。所以UTC比GMT更加精准。Java Date使用UTC时间,如Tue Nov 11 16:59:08 CST原创 2014-11-12 11:16:10 · 12173 阅读 · 0 评论 -
ServiceLoader服务提供者模式,实现动态插件加载,类责任链模式
EditServiceLoader服务提供者模式,实现动态插件加载,类责任链模式ServiceLoader的功能比ClassLoader简单,它可以帮我们获取所有实现了某接口或基类的类。当然前提是ClassLoader已经加载过的类。举个例子:定义一个接口:public interface IService { public String sayHello(原创 2014-12-04 14:21:24 · 4426 阅读 · 2 评论 -
Spring Boot自动配置源码
Spring Boot自动配置源码SpringBoot初始化上下文环境SpringBoot会从META-INF/spring.factories文件中加载Initializers,Auto ConfigureInitializers用于加载配置(Environment) Auto Configure用于自动配置类如果是web类型的工程,SpringBoot会创建EmbeddedWebApplica原创 2015-11-27 12:00:19 · 8836 阅读 · 0 评论 -
使用Netflix Hystrix编写弹性可容错的应用程序
弹性指的是在复杂网络环境下,面对各种故障和挑战,仍能提供和维持一个可以接受的服务水平,并正常运作。 -来自Wikipedia自从长期服务和最近的微服务被大家熟知和使用,很多应用程序开发人员已经将整体式的API,转换成简单的、功能单一的微服务。然而,这样的转换,导致为了保证一致的响应时间和弹性,依赖关系变得不可用时,造成额外的损耗。例如,一个单体式的web应用程序,执行一次重试,在一定程度上是弹性的翻译 2015-12-03 21:07:00 · 9602 阅读 · 0 评论 -
使用Elasticsearch,Kafka和Cassandra构建流式数据中心
在过去的一年里,我遇到了一些软件公司讨论如何处理应用程序的数据(通常以日志和metrics的形式)。在这些讨论中,我经常会听到挫折感,他们不得不用一组零碎的工具,随着时间的推移将这些数据汇总起来。这些工具,如: - 运维人员使用的,用于监控和告警的工具 - 开发人员用于跟踪性能和定位问题的工具 - 一个完整独立的系统,商业智能(BI)和业务依赖其分析用户行为虽然这些工具使用不同的视角,适用不同翻译 2015-12-03 21:08:22 · 5852 阅读 · 2 评论 -
Coursera Scala 2-5,6:类
Coursera Scala 2-5,6:类class Rational(n: Int, d: Int) { require(d != 0) private val g = gcd(n.abs, d.abs) //将构造器传入的参数,赋值成成员变量,外部才可以访问 val numer = n / g val denom = d / g def this(n: Int)原创 2014-07-11 16:47:53 · 835 阅读 · 0 评论 -
Coursera Scala 4-3:子类型和泛型
Coursera Scala 4-3:子类型和泛型Type Boundsdef assertAllPos[S ](r: S): S = ...S S >: T表示S是T的父类也可以这么用:[S >: NonEmpty <: IntSet]协变covariant这个的意思是:如果List是convariant的,Scovariant带来原创 2014-07-11 16:49:17 · 2123 阅读 · 0 评论 -
Coursera Scala 2-2:Curry函数
Curry函数,将一个函数的参数,拆分成多个。概念不好理解,还是用代码最好。如下:乘积函数有一个乘积函数,计算a~b基于函数f转化后的值的乘积def product(f:Int=>Int)(a:Int,b:Int): Int = if( a > b ) 1 else f(a) * product(f)(a + 1, b)这样做可以让函数复用,比如:def原创 2014-05-11 21:19:20 · 1860 阅读 · 0 评论 -
Coursera Scala 1-7:递归和尾递归
递归大家都不陌生,一个函数直接或间接的调用它自己,就是递归了。我们来看一个简单的,计算阶乘的例子。def factorial(n: Int): Int = { if( n 1 ) 1 else n * factorial(n-1)}以上factorial方法,在n>1时,需要调用它自身,这是一个典型的递归调用。如果n=5,那么该递归调用的过程大致如下:facto原创 2014-05-11 21:18:08 · 7742 阅读 · 2 评论 -
Coursera Scala 2-1:高阶函数
把函数当做参数,传递给函数(好绕-..-),称为高阶函数。高阶函数使我们的代码保持DRY(Dont't Repeat Yourself)举个例子一个返回所有扩展名为".scala"的文件的方法:def filesHere = (new java.io.File(".")).listFilesdef filesEnding(query: String) =for (fi原创 2014-05-11 21:18:54 · 1155 阅读 · 0 评论 -
Scala的foldLeft和foldRight
Scala的foldLeft和foldRightFoldLeft定义如下: override /*TraversableLike*/ def foldLeft[B](z: B)(f: (B, A) => B): B = { var acc = z var these = this while (!these.isEmpty) { acc原创 2014-07-11 16:50:16 · 13760 阅读 · 1 评论 -
Coursera Scala 5-5 List:Reduction of Lists
Coursera Scala 5-5 List:Reduction of Lists另一个list常用的操作是:连结集合元素。例如sum(list)ReduceLeft使用ReduceLeft可以很方便的编写通用的连结方法def sum(xs: List[Int]) = (0 :: xs) reduceLeft ((x,y) => x+y)def product(xs原创 2014-07-11 16:52:45 · 905 阅读 · 0 评论 -
Coursera Scala 4-6:模型匹配
Coursera Scala 4-6:模型匹配匹配值val times = 1times match { case 1 => "one" case 2 => "two" case _ => "some other number"} List(('a',1), ('b',2), ('a',1)) match { case Nil => printl原创 2014-07-11 16:46:55 · 891 阅读 · 0 评论 -
Coursera Scala 4-7:Lists
Coursera Scala 4-7:ListsListsval nums = List(1,3,4)val empty = List()val fruit = List("apples","oranges")val diag3 = List(List(1,0,0),List(0,1,0),List(0,0,1))immutableList是递归的,arrays则不是原创 2014-07-11 16:47:14 · 721 阅读 · 0 评论 -
Coursera Scala 5-3:Implicit
Coursera Scala 5-3:Implicit归并排序上一节课的排序函数不够通用,类型只适用Int:object mergesort{ def msort(xs: List[Int]):List[Int] = { val n = xs.length/2 if(n==0) xs else{ d原创 2014-07-11 16:52:04 · 983 阅读 · 0 评论 -
Coursera Scala 5-2:Pairs和Tuple
Coursera Scala 5-2:Pairs和Tuplepair: (x,y)scala> val (label,value) = (1,"s")label: Int = 1value: String = sscala> (1,"s")res0: (Int, String) = (1,s)超过两个元素的就是tuple了(T1,....,Tn)是Scala.Tu原创 2014-07-11 16:50:55 · 1061 阅读 · 0 评论 -
Spring Actuator源码分析
Spring Actuator源码分析Actuator EndpointActuator模块通过Endpoint暴露一些接口,可以是Rest方式,也可以是JMX等其他方式.如果使用Rest方式,通常SpringMVC是使用@RequestMapping,以及@Controller标注一个控制器方法,如果不使用SpringMVC,即没引入SpringMVC的包,那么Springboot就会出错.所以为原创 2015-12-03 21:13:59 · 4619 阅读 · 0 评论