9 GarfieldEr007

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 17

如何优雅的使用和理解线程池

前言平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条:可见线程池的重要性。简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建。 解耦作用;线程的创建于执行完全分开,方便维护。 应当将其放入一个池子中,可以给其他任务进行复用。线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用,有点吃大锅饭的意思。那在 Java 中又是如何

2020-09-23 23:13:47

Mock工具之Mockito实战

在实际项目中写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖项又会有依赖,导致在单元测试代码里几乎无法完成构建,尤其是当依赖项尚未构建完成时会导致单元测试无法进行。为了解决这类问题我们引入了Mock的概念,简单的说就是模拟这些需要构建的类或者资源,提供给需要测试的对象使用。业内的Mock工具有很多,也已经很成熟了,这里我们将直接使用最流行的Mockito进行实战演练,完成mockito教程。Mock工具概述1.1 Mockito简介EasyMock 以及 Mockito ..

2020-08-31 23:47:35

Mockito 简明教程

什么是 Mock 测试Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。比如一段代码有这样的依赖:当我们需要测试A类的时候,如果

2020-08-31 23:46:34

JSR 303 – Bean Validation 介绍及最佳实践

关于 Bean Validation在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的。在通常的情况下,应用程序是分层的,不同的层由不同的开发人员来完成。很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题,比如说语义的一致性等。为了避免这样的情况发生,最好是将验证逻辑与相应的域模型进行绑定。Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 A

2020-08-31 23:44:55

Git命令按人统计提交次数和代码量

=== 统计每个人的代码量git log --format='%aN'|sort-u |whilereadname;doecho-en"$name\t"; git log --author="$name"--pretty=tformat: --numstat |awk'{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %...

2020-08-31 23:31:28

整洁架构

本文是关于Bob大叔关于整洁架构的一篇学习笔记。前言整洁架构(Clean Architecture)是由Bob大叔在2012年提出的一个架构模型,顾名思义,是为了使架构更简洁。在开始深入的介绍这个架构之前,Bob大叔首先提到了近些年来比较流行的一个系统架构,包括Hexagonal Architecture,Onion Architecture,以及他自己以前提出的Screaming architecuture等。并且着中说道通过这些架构产生的系统特点是:独立的框架. 这样的.

2020-07-03 20:41:48

忘掉 Snowflake,感受一下性能高出 587 倍的全局唯一 ID 生成算法

今天我们来拆解 Snowflake 算法,同时领略百度、美团、腾讯等大厂在全局唯一 ID 服务方面做的设计,接着根据具体需求设计一款全新的全局唯一 ID 生成算法。这还不够,我们会讨论到全局唯一 ID 服务的分布式 CAP 选择与性能瓶颈。已经熟悉 Snowflake 的朋友可以先去看大厂的设计和权衡。百度 UIDGenertor:https://github.com/baidu/uid-...美团 Leaf:https://tech.meituan.com/2017...腾讯 Seqsvr

2020-07-03 20:33:16

Zookeeper集群脑裂问题

关于集群中的"脑裂"问题,之前已经在这里详细介绍过,下面重点说下Zookeeper脑裂问题的处理办法。ooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调内核,用户可以在此之上构建更多复杂的分布式协调功能。脑裂通常会出现在集群环境中,比如ElasticSearch、Zookeeper集群,而这些集群环境有一个统一的特点,就是它们有一个大脑,比如ElasticSearch集群中有Master节点,Zookeeper集群中有Leader节点。一、 Zookeeper 集群节点为什么

2020-06-24 23:15:36

Resilience4j-轻量级熔断框架

Resilience4j简介Resilience4j是一款轻量级,易于使用的容错库,其灵感来自于Netflix Hystrix,但是专为Java 8和函数式编程而设计。轻量级,因为库只使用了Vavr,它没有任何其他外部依赖下。相比之下,Netflix Hystrix对Archaius具有编译依赖性,Archaius具有更多的外部库依赖性,例如Guava和Apache Commons Configuration。要使用Resilience4j,不需要引入所有依赖,只需要选择你需要的。Resil

2020-06-11 23:08:22

高可用框架Resilience4j使用指南

介绍Hystrix停更之后,Netflix官方推荐移步至resilience4j,它是一个轻量、易用、可组装的高可用框架,支持熔断、高频控制、隔离、限流、限时、重试等多种高可用机制。与Hystrix相比,它有以下一些主要的区别:Hystrix调用必须被封装到HystrixCommand里,而resilience4j以装饰器的方式提供对函数式接口、lambda表达式等的嵌套装饰,因此你可以用简洁的方式组合多种高可用机制 Hystrix的频次统计采用滑动窗口的方式,而resilience4j.

2020-06-11 23:07:34

JSR 303 - Bean Validation 介绍及最佳实践

关于 Bean Validation在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的。在通常的情况下,应用程序是分层的,不同的层由不同的开发人员来完成。很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题,比如说语义的一致性等。为了避免这样的情况发生,最好是将验证逻辑与相应的域模型进行绑定。Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 A

2020-06-11 23:04:40

MySQL优化器:index merge介绍

在MySQL官方手册上,关于index merge的介绍非常非常少。甚至还有不少误导的地方,这次把5.1版本关于此类优化处理的代码细看了一遍,以案例的方式介绍了各种实用index merge访问类型的SQL。后续的还会继续介绍index merge实现的主要数据结构,以及成本评估。1. 什么是index mergeMySQL优化器如果发现可以使用多个索引查找后的交集/并集定位数据,那么MySQL优化器就会尝试index merge这类访问方式。index merge主要分为两大类,多个索引交集访问(

2020-05-26 21:22:50

MySQL 优化之 index merge(索引合并)

深入理解 index merge 是使用索引进行优化的重要基础之一。理解了 index merge 技术,我们才知道应该如何在表上建立索引。1. 为什么会有index merge我们的 where 中可能有多个条件(或者join)涉及到多个字段,它们之间进行 AND 或者 OR,那么此时就有可能会使用到 index merge 技术。index merge 技术如果简单的说,其实就是:对多个索引分别进行条件扫描,然后将它们各自的结果进行合并(intersect/union)。MySQL5.0之前

2020-05-26 21:20:30

MySQL 优化之 index merge(索引合并)

深入理解 index merge 是使用索引进行优化的重要基础之一。理解了 index merge 技术,我们才知道应该如何在表上建立索引。1. 为什么会有index merge我们的 where 中可能有多个条件(或者join)涉及到多个字段,它们之间进行 AND 或者 OR,那么此时就有可能会使用到 index merge 技术。index merge 技术如果简单的说,其实就是:对多个索引分别进行条件扫描,然后将它们各自的结果进行合并(intersect/union)。MySQL5.0之前

2020-05-26 21:19:33

MySQL 优化之 index merge(索引合并)

深入理解 index merge 是使用索引进行优化的重要基础之一。理解了 index merge 技术,我们才知道应该如何在表上建立索引。1. 为什么会有index merge我们的 where 中可能有多个条件(或者join)涉及到多个字段,它们之间进行 AND 或者 OR,那么此时就有可能会使用到 index merge 技术。index merge 技术如果简单的说,其实就是:对多个索引分别进行条件扫描,然后将它们各自的结果进行合并(intersect/union)。MySQL5.0之前

2020-05-26 21:18:56

谷歌OKR指导手册 (译)

译者:乔梁 来源:《持续交付2.0》公众号这是一本关于 OKR 迷你小册子,名为《google OKR playbook》,由www.whatMatters.com网站发布。该网站由John Doerr 团队经营,而John Doerr 正是 1999年将 OKR 引入谷歌的那个人。本文仅供大家学习参考,虽然文章较长,但值得一读,欢迎收藏。文章的末尾有一些8 道自我测试题,...

2020-04-29 23:52:16

记录下两个孩子在MineCraft里面还原公寓的经历

前不久,我们家两个小朋友沉迷于玩“我的世界”(MineCraft),考虑到堵不如疏,还是正面引导他们比较好,于是和孩子的妈妈商量后,给他两出了个题目:“把我们住的公寓在MineCraft里面搭出来”。为了激励他们,告诉他们如果2个月内搭好,还可以给他们奖励一个大乐高玩具。小朋友们一听,可来劲了,觉得又有意思又有挑战,还有玩具拿,马上就要打开游戏机开始搭。哪是那么容易的事情!于是就问了他们几个问...

2020-04-13 00:12:27

Make it run, make it right, make it fast

如果问我工作十多年后相比刚毕业参加的时候,学到了哪些重要的经验,那么“Make it work, make it right, make it fast”一定是其中最重要的经验之一。第一次听到这句话是从以前老板@沈嵘那里,然后发现是来源自大牛Kent Beck《Make It Work Make It Right Make It Fast》。这是软件项目开发的一条经典原则,实际上不...

2020-04-13 00:11:18

涨工资的那点事

刚毕业那几年,每次到加薪前,心里总是充满忐忑和期待,加薪后,有时惊喜有时失望。但当时并不太明白加薪背后的事情,公司到底是按照什么来给我们加工资的?随着工作经历增加,对涨工资这件事慢慢能泰然处之,也开始转变角色,要去处理部门员工涨薪资的事情。尝试写篇文章总结一下,当是给当年的自己或有类似困惑的对这个问题的一个解答。加薪这个事情,每个公司的操作方式肯定都是不一样的,大公司和小公司,外企国企私企,甚...

2020-04-13 00:10:10

《构建之法》读后感之项目计划

最近看到《构建之法》的“8.6 计划和估计”这一节,颇多感触。这些年来,不同的阶段,对项目计划都有不同的认识和掌握。邹老师提到了制定计划的几个概念:目标、估计和决心。目标:表明一个希望达到的状态。例如,软件“五一”之前要投放市场!在建校一百周年之时把我校建成世界一流大学!不论这类目标如何重要,它们未必能够实现。 估计:以当前了解的情况和掌握的资源,要花费多少人力物力时间才能实现某事。...

2020-04-13 00:03:53

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。