0%

历史

sun.misc.Unsafe至少从2004年Java1.4开始就存在于Java中了。
在Java9发布之前,有传闻说Oracle会在Java9正式发布时移除sun.misc.Unsafe,引起了激烈的争论。
因为有不少重要的Java开发库都在底层使用了sum.misc.Unsafe,例如Netty,Neo4J,Spring Framework,Apache Kafka,Apache Storm等。
新的替代API成熟之前,直接移除Unsafe是很冒险的一项做法。

JEP 260是Java9中一项重要内容,意在封装那些JDK内部使用的API,而不再提供给外部应用使用。
鉴于类似Unsafe这类非常关键而广泛使用的API,目前也没有非常有效的替代方案,暂时得到了保留,因此在JDK9中,我们仍然可以使用Unsafe类,目前没有被内部封装。
在JDK9中jdk.internal.misc中也可以找到Unsafe类。

JDK9中没有被封装的关键内部类有:

  • sun.misc.{Signal,SignalHandler}
  • sun.misc.Unsafe (许多功能可以通过variable handles实现,后面介绍)
  • sun.reflect.ReflectionFactory
  • com.sun.nio.file.{ExtendedCopyOption,ExtendedOpenOption, ExtendedWatchEventModifier,SensitivityWatchEventModifier}

这些类在以后的版本中可能被移除或封装。而非关键类例如sun.misc.BASE64Encoder和sun.misc.BASE64Decoder则直接被移除了。

阅读全文 »

正式发布

9月25日,Oracle官方宣布Java11(18.9 LTS)正式发布,可在生产环境中使用!
Java11是Oracle在2017年宣布新的JDK发布时间表之后,第一个长期支持 - Long Term Support(LTS)版本,非常值得大家关注。
如果说之前的Java9和Java10关注度都比较小,基本都被大家忽略的话,Java11可是绝对不容错过的。
作为新版发布路线的第一个LTS版本,其重要性和对后面版本的影响都不言而喻,
Oracle直到2023年9月都会为Java 11提供技术支持,而补丁和安全警告等扩展支持将持续到2026年。
LTS版本每三年发布一次,根据后续的发布计划,下一个LTS版本,应该是Java17,要在3年后的2021年才会与大家见面。

为了更快地迭代,以及跟进社区反馈,自2018年起,Java的版本发布周期变更为每六个月一次 —— 每半年发布一个大版本,每个季度发布一个中间特性版本,并且承诺不会跳票。
通过这样的方式,开发团队可以把一些关键特性尽早合并到JDK之中,以快速得到开发者反馈,在一定程度上避免出现像Java 9这样两次被迫延迟发布的窘况。

按照官方的说法,新的发布周期会严格遵循时间点,将于每年的3月份和9月份发布。所以Java 11的版本号是18.9(LTS)。

不过与Java 9和Java 10这两个被称为“功能性版本”不同(两者均只提供半年的技术支持),Java 11不仅提供了长期支持服务,还将作为Java平台的参考实现,并技术支持到2023年9月。

阅读全文 »

两年前比较早的时候,git刚流行起来,私服方案记得只有一个,就是gitlab,gitlab自己提供累死github的公有服务器,也提供自己搭建
服务的功能,现在官方还有了docker image,可以说是非常方便了。

Gitlab的特点:

  • 优点:功能很全,自带CI持续集成和Issue tracking。
  • 缺点:比较重,配置要求高。建议独立部署,内存需求比较大。

最近偶尔看到了几个非常轻量的自建git服务,这里简单记录一下,以后也许会用得到:

  1. Gogs。https://gogs.io/。GO语言开发,跨平台,支持docker。
  2. Gitea。Gogs的社区开发维护版本。https://gitea.io/zh-cn/。

静态代码压缩

因为Blog中都是静态页面,基本都可以压缩优化,针对html,css,js,图片进行。
这里没必要用gulp去压缩,配置太繁琐,也没法自动化。
直接使用hexo-all-minifier这个模块,
安装:

npm install hexo-all-minifier –save

增加配置:

all_minifier: true

搞定!

文章唯一链接

hexo-abbrlink

文章字数统计和阅读时长

hexo-symbols-count-time
可以替代老的hexo-wordcount。

SEO-搜索引擎收录和优化

利用插件生成sitemap,hexo自带的两个插件,百度搜索要使用单独的一个。

阅读全文 »

JDK 11即将于09/25正式发布,包含了诸多新的特性,主要的新特性JEP(JDK Enhancement Proposal 特性增强提议)有17个,参见下表

  • 181: Nest-Based Access Control
  • 309: Dynamic Class-File Constants
  • 315: Improve Aarch64 Intrinsics
  • 318: Epsilon: A No-Op Garbage Collector
  • 320: Remove the Java EE and CORBA Modules
  • 321: HTTP Client (Standard)
  • 323: Local-Variable Syntax for Lambda Parameters
  • 324: Key Agreement with Curve25519 and Curve448
  • 327: Unicode 10
  • 328: Flight Recorder
  • 329: ChaCha20 and Poly1305 Cryptographic Algorithms
  • 330: Launch Single-File Source-Code Programs
  • 331: Low-Overhead Heap Profiling
  • 332: Transport Layer Security (TLS) 1.3
  • 333: ZGC: A Scalable Low-Latency Garbage Collector(Experimental)
  • 335: Deprecate the Nashorn JavaScript Engine
  • 336: Deprecate the Pack200 Tools and API

其中,非常值得大家关注的是JEP-333,ZGC,一个可扩展的低延迟垃圾回收器。ZGC目前仍处于实验阶段,不建议在生产环境使用。
目前使用ZGC需要添加JVM参数:-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

阅读全文 »

值得一读的高分计算机书籍:
https://www.douban.com/doulist/37472347/?start=0&sort=seq&playable=0&sub_type=

从我的角度来看呢,高级程序员推荐必读

计算机基础

深入理解计算机系统(英文版·第2版)

网络相关

HTTP权威指南

图解HTTP

TCP/IP详解 卷1:协议

操作系统

现代操作系统(原书第4版)

Operating Systems 在线免费版本

数据库

高性能MySQL

算法

算法(第4版)

算法导论(原书第3版)

Java

Elasticsearch嵌套查询,具体可参考Nested Query.

建议还是要多看多熟悉Elasticsearch的官方文档,比到处去搜强多了。

简而言之,在对ES doc的多层嵌套对象进行查询的时候,要使用Nested Query,常规查询无效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"query": {
"nested" : {
"path" : "obj",
"query" : {
"bool" : {
"must" : [
{ "match" : {"obj.info.name" : "zhangsan"} }
]
}
}
}
}
}

Role-Based-Access-Control System Design.
比较常见的基于角色的访问控制系统,这次是主要了解和简单设计,不涉及到特别复杂的功能。

介绍

参考文档:https://blog.csdn.net/yangwenxue_admin/article/details/73936803

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联

其主要特点如下:

一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。
这种模型中,用户与角色之间,角色与权限之间,一般是多对多的关系。
在此基础上,可以扩展出用户组等实体类型。
根据实际需求,可以考虑增加用户组,并对具体权限的类型进行了细分。

阅读全文 »

在前一段做安全接入的时候,结合了多种安全和密码学的算法,设计了一套敏感数据传输方案。今天主要介绍的是其中用到的消息认证码(Message authentication code,缩写为MAC)。这里的MAC并不是网卡物理地址的那个MAC,注意区分。

介绍

在密码学中,MAC是一小段字节信息,用于验证发送消息的完整性(data integrity),以及消息的身份认证(确定消息的发送者的身份 - its authenticity)。
另一方面来说,MAC可以做到识别内容篡改和内容伪造。
回忆一下,Hash算法例如SHA256、MD5等,也可以完成消息完整性的验证,数字签名算法(其实内部也结合了消息散列函数)也可以达到MAC的这两项作用。

定义

MAC(生成tag)由三个算法组成:

  • 密钥key生成算法。从密钥空间中选择出来的key是均匀和随机的。
  • 签名算法。给定Key和消息,生成唯一的tag。
  • 验证算法。给定Key,tag和消息,验证是否符合。

安全

MAC方法必须能够抵御chosen-plaintext attacks。
简单解释一下:
Alice和Bob约定一个只有他们两个知道的MAC key。Eve在监视他们的通信,并且可以获取到他们通信的信息和对应的tags。
但是Eve根据得到的这些对应信息,并不能推算出其他消息的有效tag。
即使Eve可以说服Alice和Bob发送一些指定的信息,也依旧不能推算出来。
在Eve看来,tag是完全随机的字节。

阅读全文 »

Redis在日常开发中可以说是非常常用的服务了,提供了灵活的数据结构、高效率、方便的lua script等多种功能。
在开发运用过程中,有一些点是需要特别注意的,也是对Redis的一种比较正确的使用方式,简单总结如下:

  1. KEY的格式要规范,可读性要强,注意控制KEY的长度。
  2. VALUE的大小限制。Redis限制每个String类型value大小不超过512MB,
    实际开发中,不要超过10KB,否则会对CPU和网卡造成极大负载。
    hash、list、set、zset元素个数不要超过5000。
    阅读全文 »