Skip to main content

8 posts tagged with "Java"

View All Tags

· 13 min read

概述#

对 Redis 的印象可能很多人都还只停留在 2.8 的阶段,一个结构化的内存存储(嗯,好像也没什么问题)。虽然距离 4.0 发布(2017.7.14)已经一年过去了,但相信很多人已经不再去关心 Redis 的新特性了,因为从 2.8 后的 Redis 已经足够好用了。😄

Redis 3.0 添加了集群的能力,4.0 添加了模块化能力,5.0 添加了流类型。如果说 3.0 和 4.0 添加的新特性对于一般用户来说无足轻重,那 5.0 新的流类型就不可忽视啦!

在没有 Stream 类型之前,其实 Redis 也支持各种类似于流的处理模式,例如 Fire and forget 模式的 Pub/Sub,阻塞队列 BLPOP,时间序列 zsort 存储,等各种方式都能模拟类似的场景,但却都觉得有点欠缺,终于,流类型成功的解决了以上所有问题,并能支持其他的常见使用场景。

说到流消息就不得不说到 Kafka 啦,我相信大家应该都听说过消息中间件 Kafka,至于 RocketMQ 或者 MetaQ 就不再赘述他们与 Kafka 的关系啦,Redis 作者在实现流类型时大量参考了 Kafka 中的概念,例如消费模型,流消息的概念。当然所有的参考只局限于 Kafka 的文档,与 Kafka 的代码实现没有任何关系哦。

心动不如心动,那先一睹为快吧。

· 11 min read

概述#

Java 11 自 2018.9.25 发布以来,已经好几个月了,在还没正式 GA 之前都习惯性的去 java-countdown.xyz check 发布倒计时。Java 11 有比较多的新功能,而其中最吸引我的

  • Java 11 是 LTS 版本
    • 这意味着体验 Java9 带来的模块特性变得更有意义
  • JavaFX 从 JDK 中移除,作为独立模块

· 13 min read

动态策略#

动态策略概念相对宽泛,在进入正式的内容之前容我先明确题目中动态策略的范畴。

这里的动态策略指,现在以 A 方式来做某件事,在过程中可能被切换为 B 方案,但对上层来说是无感的。策略可以映射为策略模式(Strategy Pattern),例如

· 3 min read

Java with GraphQL

ModuleDescription
jraphql-langGraphQL language representation
jraphql-runtimeGraphQL execution engine
jraphql-parser-antlrParser written in Antlr4 parse to jraphql-lang

Get Started#

<dependency>  <groupId>me.wener.jraphql</groupId>  <artifactId>jraphql-runtimer</artifactId>  <version>0.0.6</version></dependency><dependency>  <groupId>me.wener.jraphql</groupId>  <artifactId>jraphql-parser-antlr</artifactId>  <version>0.0.6</version></dependency>

Features#

Language representation#

FeatureDescription
Serializablecan parse or stringify to or from JSON
Immutablefriendly to cache or precompile
Buildableevery type has a builder for it generated by lombok.
Pluggablelanguage representation is not related to parser impl

Syntax Extension#

Add extend by name syntax for object and interface#

Weave multi schemas#

# common.graphqlsscalar Version
# crm.graphqlstype CrmQuery {  customer(id:ID!):Customer  crmVersion: Version!}type CrmUser {  customers: [Customer]}extend type Query by CrmQueryextend type User by CrmUser
# erp.graphqlstype ErpQuery {  product(id:ID!):Product}extend type Query by ErpQuery

Conditional schema#

# Only admin can see and use these methodstype AdminMutation {  changePassword(id:ID,password:String): ChangePasswordPayload}extend type Mutation by AdminMutation @Role(role:"admin")

Allowed directives on directive definition, add DIRECTIVE location#

directive @JavaType(type:String) on DIRECTIVEdirective @Auth(value:String) @JavaType(type:"Auth") on FIELD_DEFINITION;

Allowed schema has optional name#

schema Test {  query: MyQuery}

Runtime Extension#

  1. Type implements interface don't need to write the fields again.
interface Node {    id: ID!}
type User implements Node {    # id: ID! # This is optional}
  1. Can disable introspection
    • new MetaResolver().setDisableIntrospection(true)

Embeddable Schema#

JraphQL Runtime contain a embedded schema MetaSchema, generated by EmbededSchema.

  • Parse Schema
  • Serialize to JSON
  • Best compress GZip
  • Encode use mime base64
  • Original JSON 32631 byte -> Encoded Base64 5352 byte

Example#

StarWar#

Queries you can try

mutation addRev {  createReview(episode: EMPIRE, review: {stars: 4, commentary: "Ok Good"}) {    stars    commentary  }}
query rev($e:Episode = EMPIRE) {  hero(episode: $e) {    id    name    appearsIn  }  reviews(episode: $e) {    stars    commentary  }}
query search {  search(text: "o") {    __typename    ... on Human {      id      name    }    ... on Droid {      primaryFunction    }    ... on Starship {      length    }  }}
query baseQuery {  starship(id: "3000") {    id    name    length(unit: FOOT)  }  character(id: "2000") {    id    ... on Human {      mass      starships {        name      }    }    ... on Droid {      name      appearsIn    }  }  human(id: "1003") {    friendsConnection(after: "1002") {      friends {        name      }      pageInfo {        hasNextPage        startCursor        endCursor      }    }    friends {      name    }  }}

Work with GoaphQL#

GoaphQL can generate code from schema that depends on jrapgql-api, can directly run on jraphql-graphql-java-adapter.

The generated code is static type and full featured, everything is an interface.

· 3 min read

Overviews - Five Ws#

问题答案
是什么一套开源的 Java 公共组件
谁开发的主要由 Google 工程师开发维护
哪里用所有使用 Java 的地方
什么时候出现的2008 年九月 第一个 Google Collection 版本出现在 maven 仓库;
2010 年四月第一个 Guava 版本出现在maven 仓库
什么使用为什么不使用 ?