摘要:
宽表在BI业务中比比皆是,每次建设BI系统时首先要做的就是准备宽表。有时系统中的宽表可能会有上千个字段,经常因为“过宽”超过了数据库表字段数量限制还要再拆分。 为什么大家乐此不疲地造宽表呢?主要原因有两个。 一是为了提高查询性能。现代BI通常使用关系数据库作为后台,而SQL通常使用的HASH JOI 阅读全文
摘要:
永久代和元空间都是 HotSpot 虚拟机中的概念,HotSpot 虚拟机是 Sun JDK 和 Open JDK 中自带的虚拟机,也是目前使用范围最广泛的 Java 虚拟机,当我们提到虚拟机时,大概率指的就是 HotSpot 虚拟机。 但从《Java 虚拟机规范》的层面来说,并没有所谓的“永久代” 阅读全文
摘要:
对于 JVM(Java 虚拟机)来说,它有两个非常重要的区域,一个是栈(Java 虚拟机栈),另一个是堆。堆是 JVM 的存储单位,所有的对象和数组都是存储在此区域的;而栈是 JVM 的运行单位,它主管 Java 程序运行的。那么为什么它有这样的魔力?它存储的又是什么数据?接下来,我们一起来看。 1 阅读全文
摘要:
我们通常所说的 Java 虚拟机(JVM)的内存布局,一般是指 Java 虚拟机的运行时数据区(Runtime Data Area),也就是当字节码被类加载器加载之后的执行区域划分。当然它通常是 JVM 模块的第一个面试问题,所以,接下来我们一起来看它里面包含了哪些内容。 官方定义 《Java虚拟机 阅读全文
摘要:
双亲委派模型是 Java 类加载器的一种工作模式,通过这种工作模式,Java 虚拟机将类文件加载到内存中,这样就保证了 Java 程序能够正常的运行起来。那么双亲委派模型究竟说的是啥呢?接下来我们一起来看。 1.类加载器 双亲委派模型针对的是 Java 虚拟机中三个类加载器的,这三个类加载器分别是: 阅读全文
摘要:
在 Java 中,类加载的流程有一个专门的机制叫做“类加载机制”。类加载机制是指一个类在 Java 虚拟机(JVM)中的执行流程,它也是 Java 程序能够正常执行的关键所在,那它的具体执行流程是啥?接下来我们一起来看。 流程概述 在 JVM 中,类加载会经历以下 5 个阶段: 加载阶段(Loadi 阅读全文
摘要:
我们工作中写SQL处理数据是家常便饭,不管是应用内数据处理还是临时查询分析都可以用SQL完成,相对其他技术(如Java等高级语言)也更简单。不过,SQL的简单只限于简单需求,有些复杂计算场景SQL写起来却很难,嵌套N层以至于达到几百上千行,说SQL代码长度时通常不会以行计而是以KB计。这种情况并不少 阅读全文
摘要:
开源分析数据库ClickHouse以快著称,真的如此吗?我们通过对比测试来验证一下。 ClickHouse vs Oracle 先用ClickHouse(简称CH)、Oracle数据库(简称ORA)一起在相同的软硬件环境下做对比测试。测试基准使用国际广泛认可的TPC-H,针对8张表,完成22条SQL 阅读全文
摘要:
很多数据仓库产品都采用了列式存储。如果数据表的总列数很多而计算涉及的列很少,采用列存就只读取需要的列即可,能够减少硬盘访问量,提高性能。特别是数据量非常大时,硬盘扫描和读取的时间占比很大,这时候列存的优势会很明显。 那么,是不是只要用了列存就一定能做到性能最佳呢?我们来看看,列式存储在哪些方面还可以 阅读全文
摘要:
前段时间的俄乌冲突,Oracle宣布“暂停在俄罗斯的所有业务”,相信大家的心情绝不是隔岸观火,而是细思恐极。 数据库号称IT领域三大核心之一(其他两个是CPU和操作系统),一直以来都被国际巨头垄断,人家控制着核心,想什么时候锁喉就什么时候锁,你一点办法都没有。 现在解决这个问题的办法只能是自强,将数 阅读全文
摘要:
MD5 是 Message Digest Algorithm 的缩写,译为信息摘要算法,它是 Java 语言中使用很广泛的一种加密算法。MD5 可以将任意字符串,通过不可逆的字符串变换算法,生成一个唯一的 MD5 信息摘要,这个信息摘要也就是我们通常所说的 MD5 字符串。那么问题来了,MD5 加密 阅读全文
摘要:
过滤器(Filter)和拦截器(Interceptor)都是基于 AOP(Aspect Oriented Programming,面向切面编程)思想实现的,用来解决项目中某一类问题的两种“工具”,但二者有着明显的差距,接下来我们一起来看。 实现过滤器和拦截器 首先,我们先来看一下二者在 Spring 阅读全文
摘要:
事务隔离级别和事务传播机制都是对事务行为的规范,但二者描述的侧重点却不同。本文这里所说的事务隔离级别和事务传播机制指的是 Spring 框架中的机制。 1、事务隔离级别 事务隔离级别是对事务 4 大特性中隔离性的具体体现,使用事务隔离级别可以控制并发事务在同时执行时的某种行为。 比如,有两个事务同时 阅读全文
摘要:
加入事务和嵌套事务是指在 Spring 事务传播机制中的加入事务(REQUIRED)和嵌套事务(NESTED)的区别,二者看似很像,实则截然不同,那么它们有什么区别呢?接下来我们一起来看。 Spring 事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的,Spring 事 阅读全文
摘要:
Spring 事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。 既然是“事务传播”,所以事务的数量应该在两个或两个以上,Spring 事务传播机制的诞生是为了规定多个事务在传播过程中的行为的。比如方法 A 开启了事务,而在执行过程中又调用了开启事务的 B 方法,那么 阅读全文
摘要:
在 Spring Boot 中,造成事务不自动回滚的场景有很多,比如以下这些: 非 public 修饰的方法中的事务不自动回滚; 当 @Transactional 遇上 try/catch 事务不自动回滚; 调用类内部的 @Transactional 方法事务不自动回滚; 抛出检查异常时事务不自动回 阅读全文
摘要:
导致 @Transactional 失效的常见场景有以下 5 个: 非 public 修饰的方法; timeout 超时时间设置过小; 代码中使用 try/catch 处理异常; 调用类内部的 @Transactional 方法; 数据库不支持事务。 很多人只知道答案但不知道原因,这就像只谈恋爱不结 阅读全文
摘要:
Spring 中的事务隔离级别和数据库中的事务隔离级别稍有不同,以 MySQL 为例,MySQL 的 InnoDB 引擎中的事务隔离级别有 4 种,而 Spring 中却包含了 5 种事务隔离级别。 1.什么是事务隔离级别? 事务隔离级别是对事务 4 大特性中隔离性的具体体现,使用事务隔离级别可以控 阅读全文
摘要:
一个程序中不可能没有事务,而 Spring 中,事务的实现方式分为两种:编程式事务和声明式事务,又因为编程式事务实现相对麻烦,而声明式事务实现极其简单,所以在日常项目中,我们都会使用声明式事务 @Transactional 来实现事务。 @Transactional 使用极其简单,只需要在类上或方法 阅读全文
摘要:
在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现。 1.编程式事务 在 Spring Boot 中实现编程式事务又有两种实现方法: 使用 TransactionTemplate 对象实现编程式事务; 使用更加底层的 TransactionMa 阅读全文
摘要:
跨域问题指的是不同站点之间,使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。 但这个保护机制也带来了新的问题,它的问题是给不同站点之间的正常调用,也带来的阻碍,那怎么解决这个问题呢?接下来我们一起来看。 1.跨域三种情况 在 阅读全文
摘要:
Java 中的公共类称之为 Bean 或 Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交个 Spring IoC 容器来管理的对象。所以 Spring 中的 Bean 对象在使用时,无需通过 new 来创建对象,只需要通过 DI(依赖注入),从 Spring 中取出 阅读全文
摘要:
Spring 框架作为一个管理 Bean 的 IoC 容器,那么 Bean 自然是 Spring 中的重要资源了,那 Bean 的作用域是什么意思?又有几种类型呢?接下来我们一起来看。 PS:Java 中的公共类可称之为 Bean 或 Java Bean。 1.作用域 Bean 的作用域是指 Bea 阅读全文
摘要:
Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录。而 Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:注册中心和配置中心,我们今天来了解和实现一下二者。 1.Naco 阅读全文
摘要:
@Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见的面试题之一,所以我们今天就来盘它。 @Autowired 和 @Resource 的区别主要体现在 阅读全文