自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

清风阁

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

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

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

2020-04-14 19:19:22 355 1

原创 Spring AOP之Introduction

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

2020-04-14 16:45:46 129

原创 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 155

原创 Spring AOP之术语简介

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

2020-04-13 14:03:48 65

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

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

2019-07-13 20:59:07 253

原创 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 300

原创 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 140

原创 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 179

原创 LeetCode399——除法求值

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

2019-06-05 16:21:51 352

原创 LeetCode621——任务调度器

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

2019-06-04 16:12:47 643

原创 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 358

原创 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 352

原创 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 155

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

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

2019-06-01 18:52:21 792

原创 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 99

原创 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 116

原创 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 82

原创 LeetCode394——字符串解码

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

2019-05-29 13:58:45 765

原创 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 169

原创 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 75

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

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

2019-05-26 16:31:33 297 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 277

原创 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 451

原创 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 207

原创 单例模式

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

2019-03-06 22:25:49 140

原创 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 265

原创 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 106

原创 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 221

原创 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 232

原创 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 99

原创 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 93

原创 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 154

原创 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 87

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

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

2019-02-26 16:40:36 274

原创 简单工厂模式

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

2019-02-24 16:26:47 57

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

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

2019-02-24 15:54:21 137

原创 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 136

原创 LeetCode239——滑动窗口最大值

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/sliding-window-maximum/description/题目描述:知识点:双端队列思路一:暴力破解法时间复杂度是O((n - k) * k),其中n为nums数组的长度。JAVA代...

2019-02-20 20:32:50 99

原创 LeetCode238——除自身以外数组的乘积

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/product-of-array-except-self/description/题目描述:知识点:数组思路一:暴力破解法时间复杂度是O(n ^ 2),其中n是数组的长度。空间复杂度是O(1)。...

2019-02-12 16:18:49 88

原创 LeetCode237——删除链表中的节点

我的LeetCode代码仓:https://github.com/617076674/LeetCode原题链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/description/题目描述:知识点:链表思路:用下一个节点的值替换当前节点的值,再删除下一个节点即可众所周知,想删除链表中的一个节点,...

2019-02-12 15:49:29 222

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