youyichannel

志于道,据于德,依于仁,游于艺!

0%

在 Java 中,线程池会使用固定数量或者可变数量的线程来执行任务,但无论是固定数量还是可变数量的线程,其线程数量都远远小于任务数量,面对这种情况线程池可以通过线程复用让同一个线程去执行不同的任务,那么线程复用原理是什么呢?

阅读全文 »

链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。

Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构,所以 Redis 自主设计了一个链表数据结构。

阅读全文 »

三个问题:

  1. 为什么 wait 方法必须在 synchronized 同步代码块中使用?
  2. 为什么 wait / notify / nojtifyAll 被定义在 Object 类中,而 sleep 定义在 Thread 类中?
  3. wait / notifysleep 方法的异同?
阅读全文 »

题目链接:31. 下一个排列

整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。

  • 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3][1,3,2][3,1,2][2,3,1]

整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。

  • 例如,arr = [1,2,3] 的下一个排列是 [1,3,2]
  • 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2]
  • arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。

给你一个整数数组 nums ,找出 nums 的下一个排列。

必须原地修改,只允许使用额外常数空间。

阅读全文 »

字符串在 Redis 中是非常常见的数据类型,KV 键值对中的键是字符串类型,值有时也是字符串类型。

Redis 没有直接使用 C 语言传统的字符串 (char*) 表示,而是自主封装了 SDS 的数据结构来表示字符串,也就是说 Redis 的 String 数据类型的底层数据结构是 SDS。

为什么 Redis 选择自主设计 SDS 呢?很显然是 C 原生字符串存在一些缺陷无法接受。

阅读全文 »

内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。

阅读全文 »