目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

JMH基准测试

JMH 简介  JMH,即 Java Microbenchmark Harness,这是专 ⻔ ⽤于进 ⾏代码的微基准测试的 ⼀套 ⼯具 API,JMH 由 OpenJDK/Oracle ⾥ ⾯那群开发了 Java 编译器的人员所开发。 使用场景 已经找出了热点函数,⽽需要对热点函数进 ⾏进 ⼀步的优化时,就可以使 ⽤ JMH 对优化的效 果进 ⾏定量的分析。 想定量地知道某个函数需要执 ⾏多 ⻓时间,以及执 ⾏时间和输 ⼊ n 的相关性 ⼀个函数有两种不同实现(例如 JSON 序列化/反序列化有 Jackson 和 Gson 实现),不知道哪种 实现性能更好 快速上手 引入依赖 <dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>1.21</version> </dependency> <dependency> <groupId>or....

JDK8~13新特性

接口新特性_JDK8 使用场景  接口里面定义公用的业务逻辑,抽取出来,每个子类都必须具备;静态方法可以充当工具类 默认方法default  接⼝⾥⾯定义⼀个默认⽅法,这个接⼝的实现类实现了这个接⼝之后,不⽤管这个 default修饰的⽅法就可以直接调⽤,即接⼝⽅法的默认实现。 Animal_interface public interface Animal { void run(); void eat(); default void breath(){ System.out.println("使用氧气呼吸"); } static void test(){ System.out.println("这个是静态方法"); } } Dog public class Dog implements Animal { @Override public void run() { System.out.println("dog 跑"); } @Override public void eat() { System.out.println("dog 吃"); } } 静态方法  接⼝名.静态⽅法来访....

Golang

安装  根据PC架构下载对应版本的安装包。  Go语言官网 配置环境变量 GOROOT:Go语言安装根目录的路径,也就是GO语言的安装路径。 GOPATH:若干工作区目录的路径。是我们自己定义的工作空间。 GOBIN:GO程序生成的可执行文件(executable file)的路径。 GOPATH的作用  GOPATH简单理解成Go语言的工作目录,它的值是一个目录的路径,也可以是多个目录路径,每个目录都代表Go语言的一个工作区(workspace)。  我们需要利于这些工作区,去放置Go语言的源码文件(source file),以及安装(install)后的归档文件(archive file,也就是以“.a”为扩展名的文件)和可执行文件(executable file)。 源码文件通常会被放在某个工作区的src子目录下。 安装后如果产生了归档文件(以“.a”为扩展名的文件),就会放进该工作区的pkg子目录 如果产生了可执行文件,就可能会放进该工作区的bin子目录。 归档文件存放的具体位置和规则  源码文件会以代码包的形式组织起来,一个代码包其实就对应一个目录。  安装某个代码....

Mybatis

# MyBatis  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 快速入门 引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>....

MyBatis-Plus

什么是 MyBatis?  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。消除了 JDBC 的复杂性,MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 MyBatis vs JPA MyBatis 的优势 SQL 语句可以自由控制,更灵活、性能较高。 SQL 与代码分离、易于阅读和维护 提供 XML 标签,支持编写动态 SQL 语句 MyBatis 的劣势 简单的 CRUD 操作还得写 SQL 语句(XML 或注解) XML 中有大量的 SQL 要维护 MyBatis 自身功能很有限,但支持 Plugin MyBatis-Plus  MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。  官网  码云  GitHun 无侵入:只做....

Netty

剖析:启动服务 # 服务启动主线 * Selector selector = sun.nio.ch.SelectorProviderImpl.openSelector() * ServerSocketChannel serverSocketChannel = provider.openServerSocketChannel() * selectionKey = javaChannel().register(eventLoop().unwrappedSelector(), 0, this); * javaChannel().bind(localAddress, config.getBacklog()); * selectionKey.interestOps(OP_ACCEPT); • Selector 是在 new NioEventLoopGroup()(创建一批 NioEventLoop)时创建。 • 第一次 Register 并不是监听 OP_ACCEPT,而是 0: selectionKey = javaChannel().register(eventLoop().unwrap....

ElasticSearch

全文搜索引擎  全 ⽂搜索引擎是 ⽬前 ⼴泛应 ⽤的主流搜索引擎。它的 ⼯作原理是计算机索引程序通过扫描 ⽂章中的每 ⼀个词,对每 ⼀个词建 ⽴ ⼀个索引,指明该词在 ⽂章中出现的次数和位 置,当 ⽤户查询时,检索程序就根据事先建 ⽴的索引进 ⾏查找,并将查找的结果反馈给 ⽤户的。 数据分类 结构化数据:通常可以通过 TRDB 以表的方式存储和搜索、也可以建立索引,通过 b-tree 等数据结构快速搜索数据。 非结构化数据:全文数据,不定长或无固定格式的数据。例如:邮件、word 文档等。对非结构化数据的搜索方法有两种:顺序扫描法、全文搜索法。 顺序扫描法  按字 ⾯意思,我们可以了解它的 ⼤概搜索 ⽅式,就是按照顺序扫描的 ⽅式查找特定的关键字。⽐如让你在 ⼀篇篮球新闻中,找出"科 ⽐"这个名字在哪些段落出现过。那你肯定需要从头到尾把 ⽂章阅读 ⼀遍,然后标记出关键字在哪些地 ⽅出现过。这种 ⽅法毋庸置疑是最低效的,如果 ⽂章很 ⻓,有 ⼏万字,等你阅读完这篇新闻找到"科 ⽐"这个关键字,那得花多少时间。 全文搜索法  对 ⾮结构化数据进 ⾏顺序扫描很慢,可以将 ⾮结构化数据中的....