07 2018 档案
摘要:题目不难,被第二题卡了半个多小时QAQ,另一个就是以后能用Hashmap和Hashset的绝不遍历。 1. Leaf-Similar Trees dfs、层次遍历把叶子节点遍历然后对比即可,只要是先遍历左节点后遍历右节点就行。 874. Walking Robot Simulation 被这题卡了好
阅读全文
摘要:前言 之前我们将ReentranLock从锁层面到AQS源码层面分析了如何构建一个所需的同步器,使用AQS需要实现哪些方法。ReentranLock的CLH队列中每个节点都是独占(EXCLUSIVE)的,那么节点的另一种等待方式——共享(SHARED)又将是什么样子的呢?本篇博客让我们通过另一个同步
阅读全文
摘要:上一篇我们讲到了ReentrantLock通过使用AQS框架实现了tryAcquire、tryRelease方法,从ReentrantLock层面分析源码,本次我们将进一步深入AQS类,查看AQS底层是如何实现线程同步的。 1.acquire() 首先自然从加锁开始看起,从lock.lock调用AQ
阅读全文
摘要:又是周末,leetcode周赛,菜鸡下定决心要AK一次,然后失败了,周常三题QAQ。 1.Binary Gap 第一题给一个数字,让你找数字的二进制中相邻的1最大距离是多少,直接扫描一遍就好啦。 2.Binary Gap 第二题也不难,找到与所给的数字位数相同的2^n次方数,然后比较所给的数字构成是
阅读全文
摘要:离上一篇AQS概述已经很久惹,期间也看了一点ReentrantLock、CountdownLantch等的源码,不过并没有看的很深入,也没有把我的理解都记录下来。今天简单的看过线程池之后,就准备对ReentrantLock做一个源码分析,来看看这个lock是怎么做到让多个线程同步的。本文主要是Ree
阅读全文
摘要:自从看了《JAVA并发编程实战》,最吸引我的除了AQS构造的一系列同步器以外,就是线程池了,今天就来讲讲JAVA的线程池。 1.构造方法以及主要参数 之前我翻源码是从成员变量看起,不过由于ThreadPoolExecutor的变量有点小多,那么就先从构造方法开始。先找到下面那个最全的构造器: 1 /
阅读全文
摘要:今天看到一个很有意思的问题,如何输出一个程序自己的源码,看到这个问题的第一反应自然是读取源码文件,然后逐行输出即可。 但是,如果加上限制条件不能读取文件呢? emmm...思考许久之后,WIKI解救了我,以下内容皆摘自wiki。先上源码。 程序前半部分是java运行必须的前缀,再添加一个变量q(内容
阅读全文
摘要:emm,两天打的周赛,万年三题qaq,不过这次题目好像比上次的难一丢丢。 1.Transpose Matrix 把矩阵A[i][j]的每个元素改成B[j][i],超级超级大水题,然后wa了两发qaq。 2. Smallest Subtree with all the Deepest Nodes 一开
阅读全文
摘要:前言: ArrayList底层是依靠数组实现的,而LinkedList的实现是含前驱后继节点的双向列表。平时刷题时会经常使用到这两个集合类,这两者的区别在我眼中主要是ArrayList读取节点平均时间复杂度是O(1)级别的,插入删除节点是O(n);LinkedList读取节点时间复杂度是O(n),插
阅读全文
摘要:leetcode周赛,早上起来发现没网,用热点意识模糊的a了三个水题。 1.Lemonade Change 简单模拟题,收到十元用五元钱找回,收到20元时优先用一张10一张5,如果10不够用3张5,如果没有就返回flase(贪心)。 2.All Nodes Distance K in Binary
阅读全文

浙公网安备 33010602011771号