MySQL Generated Columns 序言MySQL 5.7 引入了生成列(Generated Columns 还有一种虚拟列的叫法)的支持。生成列中的值由列定义的表达式计算得出。 创建生成列创建生成的列语法定义如下: 1234col_name data_type [GENERATED ALWAYS] AS (expr) [VIRTUAL | STORED] [NOT NULL | NULL] [UNIQUE [KEY]] [[P 2023-10-26 数据库 > MySQL #数据库 #MySQL #数据类型
MySQL JSON Data Type 序言MySQL 在 5.7.8 版本中首次引入 JSON 数据类型。这使得我们可以更好地处理和操作 JSON 数据,包括存储、查询和索引 JSON 数据。在此之前,要处理 JSON 数据,通常需要将其存储为文本,并使用字符串函数进行操作。程序中我们也无法直接使用从数据库获取的 JSON 数据,需要进一步转化,十分不方便。 JSON 数据类型相对于将 JSON 格式字符串存储在字符串列中具有以下优势 2023-10-17 数据库 > MySQL #数据库 #MySQL #数据类型
CompletableFuture-一种异步任务编排解决方案 序言多线程主要是通过提高对 CPU 的利用率从而提升多任务处理的效率,以满足用户的友好体验。 根据 Oracle 官方文档的描述:JAVA 中创建线程的方式有两种: 继承 java.lang.Thread 类。( Thread 类本质上也是实现了 Runnable 接口) 实现 java.lang.Runnable 接口。 但是,这两种方法都存在一个缺陷——没有返回值,也就是说我们无法得知线程 2023-10-13 JAVA > 多线程 #Thread #多线程
ThreadLocal ThreadLocal是什么在处理多线程并发安全的问题中,我们最常使用的方法就是通过锁来控制多个不同线程对临界区的访问。 但无论是什么样的锁,乐观锁或者悲观锁,尽管JDK 在升级过程中对它们都有不同程度的优化,但在并发冲突的时候总是会对性能产生一定的影响。 而我们今天的主角 ThreadLocal 解决的正是彻底避免多线程之间产生的竞争问题。 从字面意思上看,ThreadLocal 可以解释为线程 2023-10-09 JAVA > 多线程 #Thread #多线程
JDK源码系列-HashMap 介绍HashMap是Java程序员使用频率最高的用于映射(key-value键值对)处理的数据类型。 JDK1.8 之前 HashMap 是由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。 JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于等于阈值(默认为 8)(将链表转换成红黑树前会判断,如果 2023-09-27 源码 > JDK #哈希表 #HashMap
MySQL的自增主键一定是连续的吗? 简介MySQL自增主键的作用是在自增列上定义一个主键,让主键的值由数据库系统自动分配,而不需要用户输入。这样可以避免主键重复或缺失,提高插入数据的效率,保持主键索引的递增顺序,减少索引的碎片化。 索引的碎片化是指索引中的数据在物理存储上不连续,而是分散在磁盘上的不同位置。这样会导致查询需要更多的磁盘I/O操作,降低查询性能和资源利用率。 但实际上,MySQL的自增主键并不能保证一定是 2023-09-26 数据库 > MySQL #数据库 #MySQL
HTTP缓存 简介为什么要使用缓存?HTTP(超文本传输协议)是一种无状态的应用程序级请求/响应协议,使用可扩展语义和自描述消息与基于网络的超文本信息系统进行灵活的交互。对于现代互联网来说存在着大量的静态文件例如HTML、CSS和图片等资源,这些资源在后续的请求中不会发生变更。我们可以缓存存储可缓存的响应,以减少未来等效请求的响应时间和网络带宽消耗。 HTTP 缓存的目标是通过重用先前的响应消息来满足 2023-09-25 网络 > HTTP #HTTP #缓存
JDK源码系列-LinkedList LinkedList简介本文内容均以JDK8为例。 LinkedList 是一个基于双向链表实现的集合类,经常被拿来和 ArrayList 做比较。 不过,我们在项目中一般是不会使用到 LinkedList 的,需要用到 LinkedList 的场景几乎都可以使用 ArrayList 来代替,并且,性能通常会更好!就连 LinkedList 的作者约书亚 · 布洛克(Josh Bloch)自己都 2023-09-24 源码 > JDK #集合 #LinkedList
JDK源码系列-ArrayList ArrayList简介本文内容均以JDK8为例。 ArrayList 继承于 AbstractList ,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。 List : 表明它是一个列表,支持添加、删除、查找等操作,并且可以通过下标进行访问。 RandomAccess : 这是一个标志接口,表明实现这个接口的 List 集 2023-09-24 源码 > JDK #集合 #ArrayList
为什么ConcurrentHashMap的key/value不能为空,HashMap可以? 为什么ConcurrentHashMap的key/value不能为空,HashMap可以?以JDK8为例,在ConcurrentHashMap源码的putVal方法中当传入的参数key或者value为null时,会抛出NullPointerException ConcurrentHashMap 的 key 和 value 不能为 null 主要是为了避免二义性。 null 是一个特殊 2023-09-23 JAVA > 集合 #HashMap #ConcurrentHashMap