自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

清风阁

我在黑夜中游走,为天明而奋斗!

  • 博客(550)
  • 收藏
  • 关注

原创 ThreadLocal笔记

目录1. 概述2. ThreadLocal存在的坑2.1 内存泄漏问题2.2 线程安全问题3. ThreadLocal的实现细节3.1 get()方法3.2 set()方法3.3 remove()方法:4. InheritableThreadLocal5. 总结1. 概述ThreadLocal中文名叫做线程本地变量,用于解决变量在多线程问题下的并发安全问题,其思路是每一个Thread都保存自己的一份变量副本,该变量副本仅本Thread可以访问和修改,其它线程没有权限访问和修改。ThreadLocal是

2021-02-24 23:12:06 330

原创 AbstractQueuedSynchronizer笔记

目录1. 简介1.1 同步队列和条件队列1.2 线程的抽象——Node节点的定义2. 从ReentrantLock的角度看AbstractQueuedSynchronizer2.1 公平锁和非公平锁2.2 acquire()方法2.2.1 tryAcquire()方法2.2.2 addWaiter()方法2.2.3 acquireQueued()方法2.2.3.1 中断的作用2.2.3.2 总流程2.2.3.3 shouldParkAfterFailedAcquire()方法2.2.3.4 parkAndC

2021-02-18 23:04:03 478

原创 JDK1.7、JDK1.8的HashMap、ConcurrentHashMap笔记

什么是HashMap?读小学的时候,我们肯定查阅过《新华字典》。以拼音查字法为例,我们先去找某个字的拼音,然后找到该字的页码,再去相应的页码找详细的解释。在这个例子中,拼音-页码就是一个键值对。HashMap就是Java程序员的《新华字典》,我们能够以O(1)的时间复杂度从HashMap中获取值和存储值。作为Java程序员使用频繁的Java类库之一,HashMap在JDK1.7和JDK1.8两个版本中的差别比较大。JDK1.8中引入了红黑树这一数据结构对HashMap做了更进一步的优化,尽可能地降低哈希

2021-01-15 00:05:02 556 1

原创 JDK动态代理之代理对象与目标对象

问题的引出下述所有类均定义在包structure.proxy.dynamicproxy中。定义一个接口AbstractUserDAOpublic interface AbstractUserDAO { Boolean findUserById(String userId);}定义一个接口AbstractUserDAO的实现类UserDAOpublic class Us...

2020-04-14 19:19:22 2440 2

原创 Spring AOP之Introduction

在文章Spring AOP之术语简介中有提到,introduction代表为一个类添加的新字段或方法定义。Spring AOP允许我们为任何对象introduce(引入)新的接口实现。如何使用IntroductionSpring为我们提供了一个注解@DeclareParents来定义需要introduce(引入)新的接口实现的类、以及默认的接口实现类型。@DeclareParents(val...

2020-04-14 16:45:46 1192

原创 Spring AOP之pointcut语法

在文章Spring AOP术语简介中有提到,pointcut定义了一种模式,用于匹配join point。Spring AOP中使用了AspectJ的pointcut模式定义语言。声明一个pointcut一个pointcut由两部分组成:Pointcut signature:pointcut签名,类似于方法签名,但该方法返回值必须是voidPointcut expression:@Poi...

2020-04-13 21:40:22 4027

原创 Spring AOP之术语简介

AOP是Aspect-oriented Programming的缩写,是Spring的两大核心概念之一(另一概念是IoC)。初次接触AOP编程,会被一些术语搞懵,本文就简单介绍一下这些术语的概念,与读者共勉。Aspect(切面)Aspect的作用是对具有横切性质的业务逻辑进行集中处理,典型的应用就是Spring中的事务管理功能。在Spring中,可以用注解@Aspect定义一个类为一个切面...

2020-04-13 14:03:48 408

原创 基于JDK 8的HashMap源码解析

看再多的源码解析,自己不亲身去阅读源码,都是徒劳无功。为了我们能轻松地阅读源码,JDK的开发者们已经为我们准备了许多详尽的注释,阅读这些注释对我们理解代码起着事半功倍的效果,那么我们就先来看看HashMap在JDK8中的注释吧!Hash table based implementation of the Map interface. This implementation provides ...

2019-07-13 20:59:07 574

原创 LeetCode442——数组中重复的数据

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/题目描述:知识点:数组思路一:哈希表显然,这个思路没有利用好题目所给的条件——1 <= a[i] <= n。时间复杂度...

2019-06-08 16:13:31 1134

原创 LeetCode429——N叉树的层序遍历

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/题目描述:知识点:树的层序遍历思路:与LeetCode102——二叉树的层序遍历同样的思路时间复杂度和空间复杂度均是O(n),其中n...

2019-06-07 15:10:04 298

原创 LeetCode501——二叉搜索树中的众数

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/题目描述:知识点:二叉树的中序遍历思路一:用哈希表保存每个数字出现的次数这个思路,遍历二叉树时用前、中、后序3种遍历方式均可。时间...

2019-06-06 22:46:19 719

原创 LeetCode399——除法求值

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/evaluate-division/题目描述:知识点:图的深度优先遍历思路:图的深度优先遍历本题是一题经典的图论算法,这里的除法运算可以看成是连接两个节点的一条有向边,那么计算结果存在的条件是什么呢...

2019-06-05 16:21:51 938

原创 LeetCode621——任务调度器

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/task-scheduler/题目描述:知识点:优先队列、贪心算法思路一:每一轮分配后重新排序优先分配数目最多的任务,当任务间隔i <= n时,即使没有任务分配,结果时间也要增加,这是冷却时间...

2019-06-04 16:12:47 1805

原创 LeetCode312——戳气球

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/burst-balloons/题目描述:知识点:动态规划、分治算法思路一:暴力破解法(在LeetCode中提交会超时)时间复杂度是O(n ^ 3),其中n为数组的长度。空间复杂度是O(n ^ 2)。...

2019-06-03 16:05:08 764

原创 LeetCode647——回文子串

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/palindromic-substrings/题目描述:知识点:动态规划思路一:暴力破解法时间复杂度是O(n ^ 3),其中n为所给字符串的长度。空间复杂度是O(1)。JAVA代码:pub...

2019-06-03 14:37:40 883

原创 LeetCode739——每日温度

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/daily-temperatures/题目描述:知识点:栈思路一:暴力破解法时间复杂度在最差情况下是O(n ^ 2),其中n为列表长度。空间复杂度是O(1)。JAVA代码:public c...

2019-06-02 20:07:14 421

原创 LeetCode301——删除无效的括号

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/remove-invalid-parentheses/题目描述:知识点:回溯思路一:回溯法(用栈来判断括号是否匹配)由于没有任何剪枝操作,该回溯过程穷举了所有可能的情形,时间复杂度是O(2 ^ n)...

2019-06-01 18:52:21 1663 1

原创 LeetCode338——比特位计数

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/counting-bits/题目描述:知识点:位运算、动态规划思路一:动态规划状态定义:f(x) -------- 数组中索引为x处的值状态转移:(1)如果x是偶数,f(x) = f(x /...

2019-05-31 22:19:09 296

原创 LeetCode342——4的幂

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/power-of-four/题目描述:知识点:位运算思路:先将2的幂和4的幂都筛选出来,再筛选出4的幂(1)先去除小于0的数。(2)如何筛选出2的幂呢?对于2的幂,其二进制表示是有规律的,就...

2019-05-30 19:32:01 389

原创 LeetCode448——找到所有数组中消失的数字

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/题目描述:知识点:数组思路:与LeetCode041——缺失的第一个正数同样的思路核心原则就是重构原数组,使得索引为...

2019-05-30 18:46:44 204

原创 LeetCode394——字符串解码

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/decode-string/题目描述:知识点:栈、递归思路一:利用栈这种数据结构从左到右遍历所给字符串:当遇到右括号时,我们需要利用栈将与该右括号相匹配的左括号找出来,并将两括号间的内容重复相应...

2019-05-29 13:58:45 2142

原创 LeetCode319——灯泡开关

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/bulb-switcher/题目描述:知识点:数学、找规律思路一:暴力破解法(在LeetCode中提交会超时)提供两种思路的暴力破解法,时间复杂度均是O(n ^ 2),空间复杂度均是O(n):(...

2019-05-28 16:55:40 360

原创 LeetCode287——寻找重复数

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/find-the-duplicate-number/comments/题目描述:知识点:链表思路:LeetCode142——环形链表II的抽象本题难在条件限制太多。(1)不能更改原数组——禁止我...

2019-05-27 14:25:10 164

原创 LeetCode295——数据流的中位数

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/find-median-from-data-stream/题目描述:知识点:优先队列、堆思路:用一个最大堆有一个最小堆将数据分成两部分最终,我们希望得到的数据分布结果是这样的:如果数据是偶数个,...

2019-05-26 16:31:33 1137 1

原创 LeetCode279——完全平方数

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/perfect-squares/题目描述:知识点:广度优先搜索、动态规划思路一:广度优先搜索深搜用栈,广搜用队列。时间复杂度是O(n ^ 2)。空间复杂度是O(n)。JAVA代码:cl...

2019-03-10 10:12:03 436

原创 LeetCode278——第一个错误的版本

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/first-bad-version/题目描述:知识点:二分查找法思路一:顺序查找时间复杂度是O(n)。空间复杂度是O(1)。JAVA代码:public class Solution ext...

2019-03-09 09:25:40 881

原创 LeetCode275——H指数II

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/h-index-ii/题目描述:知识点:二分查找法思路一:顺序遍历时间复杂度是O(n),其中n为citations数组的长度。空间复杂度是O(1)。JAVA代码:class Solutio...

2019-03-08 10:15:30 381

原创 单例模式

定义确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。模式结构单例模式使结构最简单的设计模式,它只包含一个类,即单例类。优点(1)单例模式提供了对唯一实例的受控访问。因为单例类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它。(2)由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能...

2019-03-06 22:25:49 238

原创 LeetCode274——H指数

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/h-index/题目描述:知识点:排序思路一:排序后依次查找时间复杂度是O(nlogn),其中n为数组的长度。空间复杂度是O(1)。JAVA代码:class Solution { ...

2019-03-06 21:15:16 445

原创 LeetCode268——缺失数字

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/missing-number/题目描述:知识点:数学思路一:开一个空间大一位的数组来记录每个数字出现与否时间复杂度和空间复杂度均是O(n),其中n为数组的长度。JAVA代码:public ...

2019-03-05 21:08:55 280

原创 LeetCode273——整数转换英文表示

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/integer-to-english-words/题目描述:知识点:数学思路:分区间递归求解(1)首先,按千来划分,[0, 999],[1000, 999999],[1000000, 9999999...

2019-03-04 21:24:22 643

原创 LeetCode264——丑数II

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/ugly-number-ii/题目描述:知识点:动态规划思路一:暴力破解法(在LeetCode中提交会超时)从0开始依次判断每一个数是否是丑数,每次递增1,直到找到第n个丑数。时间复杂度是O(n...

2019-03-03 21:47:39 508

原创 LeetCode263——丑数

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/ugly-number/题目描述:知识点:数学思路:判断将因数2,3,5均剔除后的数是否为1(1)首先需要判断num是否小于等于0,如果num小于等于0,直接返回false。(2)接着,将num...

2019-03-03 21:27:56 270 1

原创 LeetCode258——各位相加

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/add-digits/description/题目描述:知识点:数学思路一:循环求解时间复杂度和空间复杂度均与输入的数字有关。JAVA代码:public class Solution {...

2019-02-27 09:31:57 209

原创 LeetCode257——二叉树的所有路径

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/binary-tree-paths/description/题目描述:知识点:树、深度优先遍历、递归思路:利用递归实现二叉树的深度优先遍历递归出口:(1)如果root为null,说明这是一棵空树...

2019-02-27 09:11:02 371

原创 LeetCode242——有效的字母异位词

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/valid-anagram/description/题目描述:知识点:排序、哈希表思路一:排序时间复杂度是O(nlogn),其中n为输入字符串的长度。空间复杂度是O(n)。JAVA代码:p...

2019-02-26 16:53:31 193

原创 LeetCode241——为运算表达式设计优先级

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses/description/题目描述:知识点:分治算法、递归思路:对字符串中的每个符号分而治之遍历输入字符串中的每一个运算符,分别递归...

2019-02-26 16:40:36 474

原创 简单工厂模式

定义定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。模式结构简单工厂包含以下3个角色:(1)Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Produc...

2019-02-24 16:26:47 226

原创 7个常用的面向对象设计原则

1 单一职责原则单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。单一职责原则的另一种定义方式:就一个类而言,应该仅有一个引起它变化的原因。在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,相当于将这些职责耦合在一起,当其中一个职责变化时可能...

2019-02-24 15:54:21 3618 1

原创 LeetCode240——搜索二维矩阵II

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/search-a-2d-matrix-ii/description/题目描述:知识点:分治算法、二分查找法思路一:暴力破解法时间复杂度是O(m * n),其中m为矩形的行数,n为矩阵的列数。空间复杂...

2019-02-23 09:43:21 320

空空如也

空空如也

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

TA关注的人

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