JVM 调优指南

从桌面上的小 applet 到大型服务器上的 Web 服务,各种各样的应用程序都使用 Java。为了支持这种多样化的部署场景,Java HotSpot VM 提供了多个垃圾收集器,每个...

May 23, 2021 · 28 min · Zeral

Spring Boot Starter 简介

概述 Spring Boot Starters 是一系列为我们提供方便的依赖项描述符,通过在应用中加入这些依赖项描述符,我们就可以很方便的集齐所有需要的依赖和相关技术,不用再为解...

April 5, 2021 · 5 min · Zeral

JPA 快速适配多种数据库

部分项目可能需要同时适配多种不同的数据库,比如常见的 Mysql、Oracle、Mssql 这几种数据库。首先我们准备测试数据库环境。 测试数据库...

March 19, 2021 · 6 min · Zeral

MySQL utf8 和 utf8mb4 的区别

字符集、校对规则和 Unicode 字符集 (Character Sets) 是指一种从二进制编码到某类字符符号的映射,可以参考如何使用一个字节来表示英文字母。 “校对” (Collations) 是指一组用于某个字...

December 16, 2020 · 4 min · Zeral

JMS vs AMQP

关于 JMS 和 AMQP 在消息和代理上的一些说明。 如今,AMQP 越来越受欢迎。因此,我认为这是一个很好的机会,以了解它如何与旧的 JMS 匹配。 JMS 包括 Java RMI 在内的远...

November 10, 2020 · 5 min · Zeral

Mybatis 快速入门

概述 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects)为数据库中的记录。 MyBatis 作为一款持久层框架,它趋向于以数据库为中心,因此主要的关注点会落在 SQL 定义、结果映射上,相对来说比较轻量,也更容易入手,对于 SQL 优化也比较容易,但也正是由于偏重 SQL,将会和使用的数据库强关联。 对比 ORM 框架 同时使用面向对象的软件和关系数据库既麻烦又费时。由于对象和关系数据库中的数据表示方式之间存在范式不匹配,因此开发成本要高得多。 相比 ORM 框架,ORM 框架更多的将关注点放在面向对象的域模型和业务逻辑层,ORM 框架一般会遵循 JPA 标准,比如最常见的实现 Hibernate。 ORM 框架的主要目的之一是降低与特定数据库的耦合性,它抽象了数据库系统,因此在不同数据库切换、移植时会更加容易,抽象的代价是与之而来的复杂性的增加,但也提供了更多丰富的功能特性:数据变更追踪、审计、一/二级缓存、并发版本控制、数据懒加载、级联操作,以及丰富的查询方式:SQL、HQL、JPQL、Criteria API、Query DSL 等; ...

September 24, 2020 · 9 min · Zeral

Java 并发编程入门

线程安全性 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(Shared)和可变(Mutable)的状态的访问。 对象...

September 1, 2020 · 10 min · Zeral

分布式共识算法

历史 在早些的文献中,共识(consensus)也叫做协商(agreement)。 本文按照最有意义的顺序进行讨论,而不是按照发表的顺序。 我所知...

September 1, 2020 · 35 min · Zeral

数据库索引初探

索引是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。 索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影...

August 4, 2020 · 26 min · Zeral

Java 内存泄漏

1. 引言 Java 的核心优势之一是借助 JVM 内置的垃圾收集器(或简称 GC)的自动内存管理。GC 隐式地负责分配和释放内存,因此能够处理大多数内存泄漏问题。 尽...

July 16, 2020 · 13 min · Zeral