记录

响应式变革 Reactive Evolution 第 2 部分

根据龙之春 Josh Long Devoxx Belgium 2019 演讲整理  2019年12月3日

响应式变革第 2 部分——构造边缘服务客户端

第二节开场

现在 我们已经构建了一个服务是一个 HTTP API 额…… 我们演示了 WebSocket 我们演示了 响应式 NoSQL 和 SQL 数据访问 在 Spring Data 的世界里 我们全部用 Java 写的加点 JavaScript 对吧 那有点 额…… 你懂得 总会遇到 JavaScript 的对吧?就如谚语所说那样。额 然后 现在 是时候将我们的注意力转到 构建客户端 构建一个东西 我们可以用来 额 与那个服务进行通信 去构建边缘服务 而边缘服务是在逻辑上在架构的边缘的东西 首个来自外界请求的端口。会被适配到对下游微服务的请求,而边缘服务是逻辑上我们处理,一些边界关键问题。例如 负载均衡 路由 还有安全之类的。所以我们要在这里做 在这个边缘服务里做,额 我们要构建一个 像往常一样。通过到 start.spring.io OK? 所以我们开始,啊 现在。我们要构建一个应用,你知道吗 顺便说一下 有点失望。之前从 10 月 31 日开始。那时候是万圣节前夜。从 10 月 31 日开始,这是万圣节前夜风格的。那很酷啊,现在变回暗色模式也很好 你懂的。但 当时这里有个南瓜和鬼怪的,随意啦 没关系。

阅读更多📰

JHipster Registry 使用过程

JHipster 搭微服务  2019年11月21日

JHipster Registry 的使用过程

是一个 Eureka server 应用程序发现服务,处理路由,负载均衡和扩展。

是一个 Spring Cloud Config server 提供应用运行时配置

是一个运维管理服务器,有仪表板,监控,管理应用程序。

所以这东西是整合了 Eureka server 和 Spring Cloud Config server ?

阅读更多📰

响应式变革 Reactive Evolution 第 1 部分

根据龙之春 Josh Long Devoxx Belgium 2019 演讲整理  2019年11月21日

响应式变革第 1 部分——构造服务端

传统的方式

​ 响应式编程不是一个特别新的话题,不是新的概念。大概在 5 年前就开始讨论这个话题了。它更多地应该是一个答案。对更老的问题的答案,一个已经存在很久了的问题——如何扩展系统,可以支持更多用户,处理更多进入系统的请求。响应式编程是一种表达方式,一种新的答案。而答案的本身,并不是很新颖。响应式编程,更多是关于线程的使用效率。是关于让你的系统,让你的软件,在 JVM 上更好地处理线程的一种方式。这是很重要的,因为线程代价高,JVM 的线程开销大。

阅读更多📰

Effective Java 条款1

读书笔记  2019年11月17日

ITEM 1: Consider static factory methods instead of constructors

属于 “创建和销毁对象” 那章。静态工厂方法跟“四人帮”设计模式里面的工厂方法模式是不同的。

阅读更多📰

Java 并发

基础内容  2019年11月15日

Concurrency 并发

Synchronized 语句块

package synchronizing;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class SheepManager {
	
	private int sheepCount = 0;
	
	// private void incrementAndReport() {
	private void incrementAndReport() {
		synchronized(this) {
        System.out.print((++sheepCount)+" ");
        }
	}

	public static void main(String[] args) {

		ExecutorService service = null;
		try {
			service = Executors.newFixedThreadPool(20);
			
			SheepManager manager = new SheepManager();
			for(int i = 0; i < 10; i++) 
				service.submit(()-> manager.incrementAndReport());
			} finally {
				if (service != null) service.shutdown();
			}
	}
}

使用 Monitor 或称为 Lock,使用 synchronized 的时候,注意🔒的对象是那个。保证同步,就要去要锁同一个对象。

阅读更多📰

升级到 Java SE 11 开发者考试大纲

考点准备  2019年11月14日

升级到 Java SE 11 开发者考试大纲

Understanding Modules

  • Describe the Modular JDK
  • Declare modules and enable access between modules
  • Describe how a modular project is compiled and run
阅读更多📰

Java 中级试题

记录过程  2019年11月11日

你们的试题要求

中级试题

使用我们的脚手架工具生成项目mini-system,实现一个系统最基本的功能:用户认证+权限控制,要求:

  • 根据RBAC模型进行数据库设计
  • 用户密码非明文存储
  • 使用JWT进行认证控制
  • 使用你喜欢的框架实现接口级的权限控制
  • 为重要的逻辑添加单元测试保护

考虑到工作量的问题,不强制要求实现数据的CRUD相关接口,你可以直接往数据库中添加数据来测试上述功能。

阅读更多📰

JDK 的 jpackage 早期预览版

Java 应用新的打包方式  2019年11月11日

在 Windows 测试

jpackage --type exe --name javafx-library --description "Demo of jpackage" --vendor "Zhao Wentao" --app-version 0.0.1 --input input --dest output --main-jar app.jar --win-shortcut --win-menu

需要 Wix Toolsets

阅读更多📰

Java 多线程编程

回顾 Java 多线程编程的基础知识  2019年11月7日

多线程编程

Java 的线程模型

线程的优先级
线程同步问题
线程的消息机制
Thread 类 和 Runnable 接口
阅读更多📰

Java Lambda 表达式

深入理解 Lambda  2019年11月6日

Lambda Expressions

Introducing Lambda Expressions

Lambda Expression 基础
函数式接口
一些函数表达式例子

演示一个简单的 Lambda 表达式

// Demonstrate a simple lambda expression. 
 
// A functional interface. 
interface MyNumber { 
  double getValue();  
}

使用 Lambda 表达式

阅读更多📰