自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

anlian523的博客

今天不学习,明天变垃圾,后天垃圾分类

  • 博客(8)
  • 资源 (1)
  • 收藏
  • 关注

原创 听说你看过ThreadLocal源码,来面试下这几个问题

ThreadLocal的用途ThreadLocal用来给各个线程提供线程隔离的局部变量。使用很简单,通过调用同一个ThreadLocal对象的get/set方法来读写这个ThreadLocal对象对应的value,但是线程A set值后,不会影响到线程B之后get到的值。ThreadLocal对象通常是static的,因为它在map里作为key使用,所以在各个线程中需要复用。简单说下Th...

2020-04-19 22:54:00 1143

原创 JUC ThreadLocal源码行级解析 JDK8

ThreadLocal看类名就是线程本地变量的意思。从使用上来说,如果定义了一个ThreadLocal,那么各个线程针对这个ThreadLocal进行get/set都是线程独立的,也就是说,是线程隔离的本地变量。从实现上来说,每个线程在运行过程中都可以通过Thread.currentThread()获得与之对应的Thread对象,而每个Thread对象都有一个ThreadLocalMap类型的成员,ThreadLocalMap是一种hashmap,它以ThreadLocal作为key。所以,通过Thre

2020-04-19 20:00:40 1530 3

原创 Java 生产者消费者案例——等待唤醒机制、虚假唤醒

wait() \ notify() \ notifyAll()这三方法必须在synchronized方法或synchronized同步代码块中执行,因为这样就说明currentThread已经获得了对象的monitor。wait()使得当前线程释放已获得的对象monitor,并陷入一种等待。这种等待必须依靠别的获得同一个对象monitor的线程来调用notify() \ notifyAll()才会重新唤醒,但重新唤醒后需要继续执行没执行完的同步代码,而执行同步代码的前提是获得被调用成员方法的对象的moni

2020-04-11 19:53:39 772

原创 【LeetCode.53】 最大子序和——以及变种 返回开始结束索引

不用新建一个dp数组了,直接在nums数组上覆盖就好,因为无后效性,当前元素遍历后,就可以覆盖为dp[i]的值。dp[0]的值,初始时,就是确定的,因为只有一个元素的数组,它的唯一的子序列就是它自己。从递推公式dp[i+1] = max(nums[i+1], dp[i]+nums[i+1])可以看出,其实关键在于上一次递推结果是否大于0,如果大于0,那么当前递推结果就得加上 上一次递推结果。maxNum在遍历过程,保存最大的那个递归结果。

2020-04-09 22:58:28 1808

原创 你真的会写二分查找吗——分析二分查找变种代码

我们已经知道循环条件是left <= right,所以循环结束条件是left > right,且肯定是right = left -1。而且在key存在的情况下,left 和 right 肯定有一个落在边缘key上(边缘key是指,多个key时的最左key或最右key);如果key不存在,那么left 和 right 肯定right在 刚好小于key的元素上,left在 刚好大于key的元素上。

2020-04-05 00:16:31 384

原创 【LeetCode.167】 两数之和 II - 输入有序数组

双端指针如果是用来遍历单个元素时,肯定没有问题的,最终每个元素都能遍历到。但此题实际是,要求我们去遍历元素的组合,即两个元素的组合,那么双端指针在遍历过程中,肯定不能遍历到所有组合情况,或者说,在遍历过程中,它会选择方向,适当排除掉某些情况。

2020-04-04 13:07:49 301

原创 【LeetCode.27】 移除元素

我们将算法结束后关心的前n个元素,称为压实数组。因为整个过程看起来就是在往左压实。compactIndex代表即将加入压实数组的那个元素应该赋值的索引。所以初始时,compactIndex为0,因为初始时一个非val元素都没有得到确认。cursor即为遍历指针。当遍历元素非val时,将其赋值给compactIndex位置,并compactIndex增加1.由于compactIndex刚好与压实数组的长度一样,所以函数返回compactIndex。

2020-04-02 23:59:04 209

原创 【LeetCode.26】 删除排序数组中的重复项

遍历数组,如果cursor所在元素与compareNum相同,那么只增加cursor。如果cursor所在元素与compareNum不同,那么除了增加cursor外,还需要压实操作:把cursor所在元素赋值给 compactIndex下标元素,更新compareNum为 cursor所在元素(因为现在它才是压实数组最后一个元素),当然compactIndex也得加1.当然cursor到底末尾,结束循环。

2020-04-01 23:36:18 263

ArcGIS 10.1 破解文件.rar

ArcGIS 10.1 破解文件。在你安装完ArcGIS 10.1 for Desktop.iso后使用的。

2019-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除