浅谈 ThreadLocal

ThreadLocal JDK 提供的 ThreadLocal 可以实现让每个线程都有自己的专属本地变量,虽然每个线程操作的是同一个 ThreadLocal 对象,但是 get() 和 set() 方法操作的变量都保存在每个线程内部,和其他线程互不影响。 举个例子,下面的代码创建了 10 个线程对一


浅谈 Java 内存模型:从 CAS 到 AQS

Java 内存模型 Java 的内存模型(Java Memory Model, JMM)规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存保存了被该线程使用的变量的主内存副本。线程对变量的读取、赋值等操作都必须在工作内存中执行,而不能直接读写主内存中的数据。 比如下面的例子


题型:回溯

回溯入门 17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按


题型:单调栈

739. 每日温度 public int[] dailyTemperatures(int[] temperatures) { Deque<Integer> st = new ArrayDeque<>(); int n = temperatures.length; int[]


HOT100:链表

19 相交链表 ⭐ 链表中的经典题 当我在我的路上走过一遍依然没有遇见你时,那么我会接着来到你走过的路走一遍,而你如果也和我一样心有灵犀,那么总有一天我们将在合适的时候相遇。 public ListNode getIntersectionNode(ListNode headA, ListNode h


手写数据结构:堆

堆是一种满足特定条件的完全二叉树,可以分为两种: 最小堆:任意节点的值 \le 其子节点的值。 最大堆:任意节点的值 \ge 其子节点的值。 一、堆的实现 1.1 堆存储与表示 完全二叉树非常适合用数组表示给定索引 i,左子节点的索引为


HOT100:二叉树

33 二叉树的中序遍历 中序遍历是先左子树,再根节点,最后是右节点的顺序。递归的写法比较直观: List<Integer> ans = new ArrayList<>(); public List<Integer> inorderTraversal(TreeNode root) { dfs


HOT100:栈与堆

数组中的第 K 个最大元素 215. 数组中的第K个最大元素 方法一、基于快速排序的选择算法,时间复杂度 O(n) 这道题是经典的 Top K 问题,可以使用快速排序中的 Partition 思想来解决,而不需要对整个数组进行完全排序。这种方法被称为快速选择(Quickselect)算法。主要思想是