JavaNIO之Channel
JavaNIO中的Channel类似Stream,可以读写,通常与Buffer进行交互,不存储数据,只负责在具体的io设备与buffer之间搬运数据。
JavaNIO中的Buffer详解
Java NIO的基础,Buffer的使用详解
创建自定义签名证书
几种常见的证书文件的格式
Java的SPI机制详解
SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。
Spring表达式语言
Spring表达式语言(简称SpEl)是一个支持查询和操作运行时对象导航图功能的强大的表达式语言. 它的语法类似于传统EL,但提供额外的功能,最出色的就是函数调用和简单字符串的模板函数。
kali引导修复
grub2 默认安装在第一硬盘(hd0)的 mbr,其实就是把引导文件 boot.img 写入硬盘的 mbr,当然,用户也可以选择不写入硬盘 mbr 而是写入 linux 分区的引导扇区。启动时根据 mbr 所提供信息找到启动分区后,加载分区内的 grub 核心文件 core.img 和配置文件 grub.cfg,进入选择菜单画面。可以用命令行启动系统:
1234grub>set root=【grub所在的磁盘 ,如(hd1,2)】grub>linux /boot/vmlinuz-xxx-xxx root=【系统的磁盘 如/dev/sda1】grub>initrd /boot/initrd.img-xxx-xxxgrub>boot
引导修复在 grub rescue>下输入以下命令:ls。会罗列所有的磁盘分区信息,比方说:引用:
1(hd0,1),(hd0,5),(hd0,3),(hd0,2)
逐个试探ls(hd0,X)/boot/grub,找到有boot的分区。如果找到了正 ...
响应式编程实战
Reactor相关API和数据结构的使用。
依赖需要引入相关的pom依赖,如下:
123456789101112<!--引入reactor的依赖--><dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-core</artifactId> <version>3.2.3.RELEASE</version></dependency><!--引入reactor的测试依赖--><dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <version>3.2.3.RELEASE</version></dependency>
用到了Reactor两个重要的类:Flux ...
理解响应式编程
命令式编程是工作中常用的,一行一行的代码,正像一行一行的命令,程序按照顺序,执行。当一条命令阻塞,那么整个任务也就阻塞了。响应式编程则是一种基于观察者的设计模式,目的提升系统的响应能力,是一种异步非阻塞的模型,基于数据驱动,当数据变化后,其他的观察者会收到相应的通知,Java8中引入了诸如CompletionStage及其实现,CompletableFuture等概念。响应式宣言,The Reactive Manifesto。
接口规范响应式流的规范定义了四个接口:
Publisher消息发布者,Publisher 为每一个 Subscription 的 Subscriber 生产数据。Publisher 接口声明了一个 subscribe() 方法,通过这个方法 Subscriber 可以订阅 Publisher:
123public interface Publisher<T> { void subscribe(Subscriber<? super T> subscriber);}
Publisher可以提供0-N个序列元素, ...
Java调用C++程序
Java调用Native方法。
定义native方法在Java程序中,定义native方法。
1234567891011121314/** * 本地方法 * * @author zhangguofeng * @version 1.0 * @date 2021/12/6 */public class HelloNative { /** 回显字符串*/ public native String echoStr(String msg); /** 两数相加*/ public native int add(int a, int b);}
然后编译这个Java文件,然后使用命令生成对应的C++程序。
1javah.exe -jni -classpath . com.abumaster.HelloNative
生成C++的头文件,如下:
1234567891011121314151617181920212223242526272829/* DO NOT EDIT THIS FILE - it is machine generated */#includ ...
Spring环境集成EventBus
Guava中提供了一种事件总线(EventBus)的技术,是观察者模式的一种实现。jdk中也提供了Observer的接口,Guava的优势是更易于使用,并且提供了同步和异步的通知机制。
简介Guava中提供了一种事件总线(EventBus)的技术,是观察者模式的一种实现。jdk中也提供了Observer的接口,Guava的优势是更易于使用,并且提供了同步和异步的通知机制。
利用Spring的特性,实现对事件总线的使用。
使用定义一个注解,用来标识哪些类需要被注册到EventBus中。
123456789101112131415161718192021package com.abumaster.example.eventbus.grace; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** ...