JUC并发编程-AQS ①. AQS是什么? ①. 是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的CLH(FIFO)队列的变种来完成资源获取线程的排队工作,将每条将要去抢占资源的线程封装成一个Node节点来实现锁的分配,有一个int类变量表示持有锁的状态(private volatile int state),通过CAS完成对status值的修改(0表示没有,1表示阻塞)CLH:Crai 2022-12-04 JUC并发编程 #八股文
JUC并发编程-对象内存布局+对象头+Synchronized+锁升级 Java对象内存布局和对象头 Object object = new Object() 谈谈你对这句话的理解?一般而言JDK8按照默认情况下,new一个对象占多少内存空间 位置所在在JVM堆里的新生区的伊甸园区(这些都是之前的基础知识了) 构成布局可以联想一下我们的HTML报文 对象在堆内存中布局权威定义—周志明老师JVM第3版在HotSpot虚拟机里,对象在堆内存中的存储布局可以划 2022-12-03 JUC并发编程 #八股文
进阶算法—图论篇 图相关的算法BFS模板12345678910111213141516171819202122public class BFS { public static void bfs(Node node){ if (node==null){ return; } Queue<Node> 2022-12-02 进阶算法 #算法
JUC并发编程-ThreadLocal ThreadLocal简介大厂面试题 ThreadLocal中ThreadLocalMap的数据结构和关系? ThreadLocal的key是弱引用,这是为什么? ThreadLocal内存泄漏问题你知道吗? ThreadLocal中最后为什么要加remove方法? 是什么ThreadLocal提供线程局部变量。这些变量与正常的变量不同,因为每一个线程在访问ThreadLocal实例的时候(通过 2022-12-02 JUC并发编程 #八股文
进阶算法—单调栈篇 什么时候用单调栈?通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。 那么单调栈的原理是什么?单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是只需要遍历一次。 在使用单调栈的时候首先要明确如下几点:1.单调栈里存放的元素是什么? 单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的 2022-12-01 进阶算法 #算法
JUC并发编程-CAS和原子操作类 原子类何为原子类 即为java.util.concurrent.atomic包下的所有相关类和API 没有CAS之前 多线程环境不使用原子类保证线程安全i++(基本数据类型) 常用synchronized锁,但是它比较重 ,牵扯到了用户态和内核态的切换,效率不高。 1234567891011121314public class T3{ volatile int number = 2022-11-30 JUC并发编程 #八股文
进阶算法—动态规划子序列篇 300. 最长递增子序列思路300. 最长递增子序列 674. 最长连续递增序列思路最长连续递增序列 718. 最长重复子数组思路718. 最长重复子数组 1143. 最长公共子序列思路1143. 最长公共子序列 1035. 不相交的线思路不相交的线 53. 最大子数组和思路最大子数组和 392. 判断子序列思路判断子序列 115. 不同的子序列思路115. 不同的子序列 583. 2022-11-29 进阶算法 #算法
进阶算法—动态规划打家劫舍+股票篇 198. 打家劫舍思路198. 打家劫舍 213. 打家劫舍 II思路213. 打家劫舍 II 337. 打家劫舍 III思路337. 打家劫舍 III 740. 删除并获得点数思路 删除并获得点数 2560. 打家劫舍 IV1388. 3n 块披萨121. 买卖股票的最佳时机思路121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II思路122. 买卖股票的最佳时机 II 12 2022-11-28 进阶算法 #算法
进阶算法—动态规划背包篇 01背包问题 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 例子: 背包最大重量为4。 物品为: 重量 价值 物品0 1 15 物品1 3 20 物品2 4 30 问背包能背的物品最大价值是多少? 二维dp数组01背包1.确定dp数组以及下标的 2022-11-27 进阶算法 #算法
进阶算法—动态规划基础篇 什么是动态规划动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。 动态规划的解题步骤 确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历顺序 举例推导dp数组 基础题目5 2022-11-26 进阶算法 #算法