基础

java NIO 主要由以下几个核心部分组成:Channels、Buffers、Selectors,这些构成了核心的API。
其他组件,如Pipe、FileLock等,不过是其他三个组件的工具类。

所有的IO在NIO中都是从Channel开始的。Channel有点像流,数据可以从Channel读到Buffer,也可以从Buffer写到Channel。

Channel、Buffer

Channel的实现:FileChannel、DatagramChannel、SocketChannel、ServerSocketChannel,这些通道涵盖了UDP、TCP网络IO和文件IO,还有一些其他的接口。
Buffer的实现:ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer,这些Buffer涵盖了你能通过IO所能传送的所有数据类型:short、int、long、byte、char、float、double,还有一个MappedByteBuffer,这个用于表示内存映射文件。

Read more »

xxx.png

加号的操作

1
2
3
4
5
6
console.log(1+'32');
// 132
console.log(1+ +'32');
// 33
+[]
// 0

加号的操作有很多的妙用,等待你的探索。

Read more »

原生Java 导出

基础

Apache POI 是用Java 编写的免费开源的跨平台的Java API ,Apache POI 提供API 给Java 程序对Microsoft Office(Excel、WORD、PowerPoint、Visio 等)格式档案读和写的功能。
POI 为”Poor Obfuscation Implementation” 的首字母缩写,意为“可怜的模糊实现”。

实现

https://github.com/vgbhfive/SpringBootDemo -> poidemo

Read more »

简介

NoSQL

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009 年趋势越发高涨。
NoSQL 的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

NoSQL 指的是非关系型的数据库。NoSQL有时也称作Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

NoSQL 用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

CAP 定理(CAP theorem)

在计算机科学中,CAP 定理又被称为布鲁尔定律,他指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性: 所有节点在同一时间具有相同的数据。
  • 可用性: 保证每个请求不管成功或者失败都有响应。
  • 分隔容忍: 系统中任意信息的丢失或失败不会影响系统的继续运行。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
因此,根据CAP 原理将NoSQL 数据库分成了满足CA 原则、满足CP 原则和满足AP 原则三大类。

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展上不太强大。
  • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求比较低一点。
Read more »

并发编程

并发这一块的东西,自己之前都是断断续续的一边学一下,一边用一下,都没有很系统的整理一下,所以今天他来了。

Read more »

目的

Java Web 目前最常用的三款服务器:

  • Undettow
  • Jetty
  • Tomcat

Tomcat 是Apache下的一款重量级的服务器,不用多说历史悠久,经得起实践的考验。
然而,现在当下微服务兴起,Spring boot、Spring cloud 越来越热的情况下,选择一款轻量级而性能优越的服务器是必要的选择。

Jetty 和Undertow 都是基于NIO 实现的高并发轻量级的服务器,支持servlet3.1 和websocket 。

Read more »

步骤

  • 创建Stater 项目
  • 定义Starter 需要的配置类
  • 编写自动配置类
  • 编写spring.factories 文件加载自动配置类
  • 编写配置提示文件spring-configuration-metadata.json (非必需)
Read more »

简介

JMX(Java Management Extensions) 是一个为应用程序植入管理功能的框架。
JMX 也是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理资源。

API

JMX 的API 主要在这两个地方:

  • java.lang.management
  • javax.management.*
Read more »

简介

JDWP 与其他许多协议不同,它仅仅定义了数据传输的格式,但并没有指定具体的传输方式。这就意味着一个JDWP 的实现可以不需要做任何修改就正常工作在不同的传输方式上。
JDWP 是语言无关的。理论上我们可以选用任意语言实现JDWP 。然而我们注意到,在JDWP 的两端分别是target vmdebugger
Target vm 端,JDWP 模块必须以Agent library 的形式在Java 虚拟机启动时加载,并且它必须通过Java 虚拟机提供的JVMTI 接口实现各种debug 的功能,所以必须使用C/C++ 语言编写。而debugger 端就没有这样的限制,可以使用任意语言编写,只要遵守JDWP 规范即可。
JDI(Java Debug Interface)就包含了一个Java 的JDWP debugger 端的实现,JDK 中调试工具jdb 也是使用JDI 完成其调试功能的。


Read more »

简介

java.lang.instrument 包是Java 中来增强JVM 上的应用的一种方式,机制是在JVM 启动前或启动后attach 上去进行修改方法字节码的方式。
instrument 包的用途很多,主要体现在对代码侵入低的优点上。
例如一些监控不方便修改业务代码,但是可以使用这种方式在方法中植入特定逻辑,这种方式能够直接修改JVM 中加载的字节码的内容,而不需要在像Spring AOP 实现中创建新的代理类,所以在底层侵入更高,但是对开发者更透明。

使用方式是通过在启动命令上添加参数的方式添加一个称为agent 的jar 包。

1
java -javaagent:xxx.jar xx.jar
Read more »