记录

正在加载古诗词……

816 基准测试回顾

OCP 816  2020年2月15日

The following are the details of the interface ScheduledExecutorService: All Superinterfaces: Executor, ExecutorService All Known Implementing Classes: ScheduledThreadPoolExecutor

An ExecutorService that can schedule commands to run after a given delay, or to execute periodically. The schedule methods create tasks with various delays and return a task object that can be used to cancel or check execution. The scheduleAtFixedRate and scheduleWithFixedDelay methods create and execute tasks that run periodically until cancelled.

阅读更多📰

Exercises for Inner class

内部类章节的练习  2020年2月15日

QUESTIONS AND EXERCISES

  1. What is an inner class? Differentiate between member, local, and anonymous inner classes.

    An inner class declares inside a top-level class without a static modifier. Inner classes that declared at member level are called member inner classes, local to the method, or instance initialization block are local inner class. And local inner classes that have no name are anonymous inner classes.

阅读更多📰

Travis CI上手

玩下持续构建、持续集成  2020年2月12日

配置文件

我用于博客自动构建的.travis.yml脚本:

language: ruby
rvm:
  - 2.6.3
env:
  global:
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
  - secure: D0RrVHHBEEJMyJK9OUUPM6Wms+D+zifJhHFl4BcmC0leSR0vANoQ6357Bl4miZL2flmnBU/1Z9WNzcDVM0JwQpF8ZVeEdMvgBY5+73Xjp8cIwYfWx8MAUB8J1Hug2aEiXw6KoSxjFOnUpSRnhCcWpviFNCZOa5XavMfe7+OHbNQT1U1xu+ZOmDG6Hrm3CMhfzu2cRPIfziAAgnWVfgtqA0STXnY9D0HvfsKPl6khy6VWkeF09Chqo/XVO/SV5LSgplkgXh1OzS6ITwT99UWDRqIeXYAvMJFyrHkzdxNgtAddYVxmx8WQqfqUFQ6A3HSnJy2Fq04H3gLszQxrVPzw8fNeOzBe7hIviaZdgRsglc26NO13EX//e4DA1ImiYKciFGvDNDBrqtv8u3XAG+8jVe/dLwKbBXnvi64udh2/H/lTBfWQ3eV08/R6m0m4aF8jbv0oBuXReyXuEy9D6xNm+yceekWzKAmTYPFb9W5XLveIgt8SIQO9P6tGuMWV6w7KRhgbpgI886ZeSVS3WcAGIr11SvSNa+x5WapOd/mizHrA8VvW4v8GjmYYwTOsmiLuYl2t1fWY76yYOOdSDLC9XhJN/mS3qxxX7WR4KCJgpstyzTVXj+uyuzi23sV1SdUvO35r3VkZk11ad9Qmp9WLXpdSQfMAKbu/lC7C9HfrGuM=
cache:
  bundler: true
  directories:
    - /home/travis/.rvm/
install:
- gem install bundler
- bundle install
script:
- bundle exec rake deploy
after_success:
- bash <(curl -s https://codecov.io/bash)

发现启用了 cache 之后,快很多了。搞到动图凑内容:

cache_1581461859_5053

用来测试构建时长,哈哈哈哈!

阅读更多📰

AsciiDoc语法参考

学习笔记  2020年2月12日

段落

段落不需要特别的格式,直接写就是了。 然后呢

自然段

这是普通段落

开始至少空一格就成为自然段,同一个自然段里面的内容必须相邻,
即不能隔空行。
隔空行就是另一个自然段了。自然段文字是等宽字体,然后会保留空格和新行。
例如    保留了前边的空格,
然后这样,保留了换新行。

现在这里又是一个普通段落了。

阅读更多📰

Java 内部类

Inner Class  2020年2月4日

在这一篇文章,你将会学习到:

  • 内部类是什么
  • 如何声明内部类
  • 如何声明成员、局部,以及匿名内部类
  • 如何创建内部类的对象

什么是内部类?

我们知道类(class)是包(package)的成员(member)。即顶层类,直接放在包下面的类。例如以下这段代码:

// TopLevel.java
package io.zwt.innerclasses;

public class TopLevel {
    private int value = 101;
    
    public int getValue() {
        return value;
    }
    
    public void setValue(int value) {
        this.value = value;
    }
}

上面的 TopLevel 类是 io.zwt.innerclasses 包的成员。 这个里有三个成员:

  • 一个实例变量(instance variable):value
  • 两个方法(method):getValue() and setValue()

一个类也可以声明在另一个类里面。这种类称为内部类。如果定义在另一个类中的类显式或隐式被声明为static,则它被称为嵌套类,而不是内部类。包含内部类的类称为外层类外部类。看一下下面的 OuterInner 类声明:

// Outer.java
pakcage io.zwt.innerclasses;

public class Outer {
	public class Inner {
		// 内部类的成员在这里
	}
	// 外部类的其它成员在这里
}

An instance of an inner class can only exist within an instance of its enclosing class. That is, you must have an instance of the enclosing class before you can create an instance of an inner class. This is useful in enforcing the rule that one object cannot exist without the other.

An inner class has full access to all the members, including private members, of its enclosing class.

阅读更多📰

深入生成器设计模式

Builder Pattern in Depth  2020年2月2日

GoF 定义

Separate the construction of a complex object from its representation so that the same construction processes can create different representations.

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同表示。(中文版书里的翻译)

Builder 在《设计模式》的中文版里边翻译为“生成器”,那我就按这个译法吧。生成器模式属于创建型模式(Creational patterns),它关注如何创建对象。当需要构建的对象比较复杂,由多个部分组成,也就说它的构造方法会有很多参数,就可以考虑使用这种模式。生成器模式认为对象的构建机制应该独立于它的组成部分(也就是属性),对象的构建过程不关注对象的组成部分。所以同一个构建过程可以构建出不同表示(属性)的对象(通过改变构建步骤)。

阅读更多📰

Spring Boot的类

学习笔记  2020年2月1日

常见类的用途

SpringApplicationBuilder

java.lang.Object
org.springframework.boot.builder.SpringApplicationBuilder

Builder for SpringApplication and ApplicationContext instances with convenient fluent API and context hierarchy support. Simple example of a context hierarchy:
new SpringApplicationBuider(ParentConfig.class).child(ChildConfig.class).run(args);
Another common use case is setting active profiles and default properties to set up the environment for an application:

new SpringApplicationBuilder(Application.class).profiles("server")
    			.properties("transport=local").run(args);

If your needs are simpler, consider using the static convenience methods in SpringApplication instead.

(org.springframework.boot:spring-boot:2.2.4.RELEASE)

阅读更多📰

Spring Boot 消息

Messaging简单笔记  2020年2月1日

消息通信

messaging

最简单的消息机制,从A点到B点,通过某种信道传递消息,可以使一个简单的函数调用,一个socket连接,或者是一个HTTP请求。主要目的是发送端发送消息给接收端消费。

消息通信使用场景

下面列出一些消息通信常见的使用场景:

可靠送达

通常需要一些消息确认机制,如果中间有个Broker,消息生产者要通过一些确认,了解Broker确实收到了消息。同理在消费者段也需要给Broker确认已经收到消息。通常支付、股票交易等系统会使用这种模式。

阅读更多📰

Java线程间通信

生产者与消费者例子  2020年1月30日

生产者与消费者

一种典型的线程间通信的例子是涉及到生产者线程与消费者线程之间的关系。生产者生产数据项被消费者消费,每个被生产出的数据项被存放在共享的变量中。

想象线程以不同的速度运行,消费者可能来不及处理掉生产者之前生产出来并放到共享变量中的数据项。还有可能就是消费者消费速度太快了,未等到生产者产生数据就去取了。

为了克服这类问题,生产者线程必须等到它被通知之前生产的数据项已经被消费掉了才继续生产,而消费者线程必须等到它被通知已经有新的数据项产生了才取消费。下面代码展示如何通过使用 wait()notify() 完整这样的任务。

阅读更多📰

水密舱壁模式

云原生微服务模式系列  2020年1月29日

水密舱壁模式是一类容错的应用程序设计。在水密舱壁模式架构中,应用程序的个组成元素被分隔到隔舱中,这样一旦其中一个出故障,其它部分仍能够运行。这是命名来自船体当中的分隔区域(水密舱壁)。如果一艘船的水密隔舱坏了,那么只是受损部位会进水(其它部分被隔开了),这样能够防止沉船。

水密壁舱

阅读更多📰