- 博客(82)
- 收藏
- 关注
原创 Java 设计模式 02:原型模式
Java 设计模式 02:原型模式原型模式 原型模式是以一个已经存在的实例为原型,通过复制这个实例的方法创建新实例的模式,实际上复制出来的对象并不一定和原对象相同。原型模式通常指创建相同种类的对象,因为 Java 自带的原型模式是通过二进制流的方式复制的,所以复制速度和复制效率都要高于使用new的方法创建原型模式的设计 Java 由于已经提供了clone方法,在实现原型模式上十分简单,使用原型模式设计的程序必须具备以下几点:抽象原型类:规定了具体原型类中必须要实现的接口具体原型类:实现抽象
2021-03-17 13:46:16 354 3
原创 Java 设计模式 01:单例模式
Java 设计模式 01:单例模式单例模式 单例模式的定义顾名思义就是一个类只有一个实例,形象地说例如 Windows 系统我的电脑属性界面,就是一个单例模式的例子,当已经有一个打开的我的电脑属性界面,我们无法再打开一个新的相同的界面 单例模式有以下特点:单例类只有一个实例对象这个对象只能由单例类自行创建单例类对外提供一个可以访问单例实例的全局访问点单例模式的设计 通常情况下,我们设计的类的构造函数都是共有的(public),我们可以在程序中通过new 构造函数()的方式按需创建多
2021-03-17 10:19:49 302 3
原创 CentOS7.6安装MySQL8
CentOS7 安装 MySQL从官网下载 rpm 包 从 https://dev.mysql.com/downloads/repo/yum/ 下载对应系统版本的 MySQL 安装包,我的系统式 CentOS 7.6,安装 Oracle Linux 7 这条 到下载页面找到名为No thanks,just start my download的链接,复制这个链接的地址,我这里下载到了/tmp/mysql文件夹下[root@VM-8-9-centos mysql]# wget https://dev
2020-12-16 17:05:28 355
原创 HashMap——HashMap中的indexFor方法
HashMap 中如何确定元素的位置 众所周知,在 jdk 1.7 中,HashMap 底层是由数组 + 链表的方式实现的,那我们在使用 HashMap 的时候,是如何将我们的 key-value put 到 HashMap 中的呢HashMap 存放原理 在理解 HashMap 的存放原理前,我们先来回想一下数组,当我们想给数组中的一个元素进行赋值时,我们至少需要知道两个条件,一是数组的引用名称,二是想要被赋值的数组元素的索引,即array[i]中的array和i 我们再来看看,在 jd
2020-05-20 11:45:23 1504 2
原创 面试题——最长上升字串
AcWing 1490 最长上升子串题目 给出一个长度为n的由正整数构成的序列,你需要从中删除一个正整数,很显然你有很多种删除方式,你需要对删除这个正整数以后的序列求其最长上升子串,请问在所有删除方案中,最长的上升子串长度是多少。 这里给出最长上升子串的定义:即对于序列中连续的若干个正整数,满足ai+1 > ai,则称这连续的若干个整数构成的子串为上升子串,在所有的上升子串中,长度...
2020-05-06 21:40:03 445
原创 Docker——CentOS7安装Docker环境
CentOs 7 安装 Docker Docker 是一个开源的应用容器引擎,是一个轻量级容器技术,Docker 支持将软件编译成一个镜像,然后在镜像中对各种软件做好配置,将镜像发布出去,使用者们都可以直接使用这个镜像、 运行中的这个镜像被称为容器,容器的启动是非常快速的,下面我们就来介绍如何在 CentOS 7 系统中安装 Docker准备工作 首先,Docker 官方要求 Li...
2020-04-09 21:47:19 2019
原创 剑指Offer(面试题9-1)——用两个栈实现队列
剑指Offer(面试题9-1)题目请用栈实现一个队列,支持如下四种操作:push(x) – 将元素x插到队尾;pop() – 将队首的元素弹出,并返回该元素;peek() – 返回队首元素;empty() – 返回队列是否为空;注意:你只能使用栈的标准操作:push to top,peek/pop from top, size 和 is empty;如果你选择的编程语言没有...
2020-04-01 11:28:47 223
原创 剑指Offer(面试题8-1)——二叉树的下一个节点
剑指Offer(面试题8-1)题目给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。注意:如果给定的节点是中序遍历序列的最后一个,则返回空节点;二叉树一定不为空,且给定的节点一定不是空节点;样例假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。则应返回值等于3的节点。解释:该二叉树的结构如下,2的后继节...
2020-04-01 11:15:13 171
原创 剑指Offer(面试题6-1)——从尾到头打印链表
剑指 Offer 面试题(6-1)题目输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值。返回的结果用数组存储。样例输入:[2, 3, 5]返回:[5, 3, 2]思路 在这里我们不再解释与反转链表思路相同的做法(用三个指针,改变链表结构,想了解可以看这里——反转链表) 这里我们提供另一种不改变链表结构的方式,首先我们审读题意,将链表从尾到头输出,也就是类似于后...
2020-04-01 10:53:34 151
原创 SpringBoot——SpringBoot自动配置原理(2-2-5版本)
SpringBoot 自动配置原理 作为 SpringBoot 的精髓,自动配置是“习惯优于配置”理念的体现,了解 SpringBoot 自动配置的原理也是学习 SpringBoot 过程中不可绕开的重要内容从启动类开始说起 要了解自动配置原理,我们首先要找到自动配置的入口,或者说是开关,学习过 SpringBoot 的同学都知道,当我们新建一个 SpringBoot 项目时,而这...
2020-03-29 23:51:54 489
原创 算法——简单理解并查集
什么是并查集 并查集是一种树形的数据结构,,用于处理一些不想交集合的合并即查询问题,我们可以通过并查集以接近O(1)的时间完成两个不相交集合的合并,并且以O(1)的时间判断一个元素属于哪个集合理解并查集 假设我们有[1, 2, 3, 4, 5]和[6, 7, 8, 9]两个集合,以并查集的思想,我们要以如下方式存储它1 6| |2 7| |3 ...
2020-03-27 11:15:09 349
原创 剑指Offer(面试题4-1)——二维数组中的查找
剑指 Offer——面试题 4-1题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。样例输入数组:[ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15]]如果输入查找数值为7,则返回true,如果...
2020-03-26 22:31:18 943
原创 算法——使用单调队列解决滑动窗口问题
滑动窗口给定一个大小为n≤106的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。您只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为[1 3 -1 -3 5 3 6 7],k为3。窗口位置最小值最大值[1 3 -1] -3 5 3 6 7-131 [3 -1 -3] 5 3 6 7-331 3 [...
2020-03-25 22:27:39 623
原创 动态规划(一)——从爬楼梯问题简单理解dp
动态规划 今天来谈一谈我对动态规划的理解,我也是初学者,这里只是通过爬楼梯这道简单的问题,介绍一下动态规划的核心思想和基于这道题的 DP 分析dp 思想 动态规划(一下简称 dp)是一种将多个阶段的问题分解成一系列单阶段问题,通过总结各阶段之间的关系得到所谓的状态转换方程,从而解决问题 dp 算法不同于二分、快排、双指针等算法,存在一个大致的模板,dp 问题因为问题要求不尽相...
2020-03-24 23:14:07 1058
原创 算法——前缀和及差分
前缀和及差分 前缀和与差分是互为逆运算的两种计算方式,前缀和指的是一个数组是另一个数组中前n项元素之和,而差分指的是一个数组的前n项的和是另一个数组 实际上就是,如果数组a是数组b的前缀和,那b就是a的差分前缀和 根据如上的的解释,我们可以理解为,假设有数组a为[1, 2, 3, 4, 5]那么代表它的前缀和数组的数组b就是1, 3, 6, 10, 15,也就是说,a[n] ...
2020-03-23 16:36:12 537
原创 Spring框架——Autowired注解用法详解
title: Spring框架——@Autowired注解用法详解date: 2020-03-22 08:38:03tags: Spring 框架Spring 框架中的 @Autowired 注解 在使用注解进行 Spring 项目的开发时,我们经常会用到Autowired注解,它可以对类成员变量、方法及构造函数进行标注,完成IOC容器自动装配的工作如何使用 首先我们根据s...
2020-03-22 11:03:54 1430
原创 剑指Offer(面试题3-2)——不修改数组找出重复的数字
剑指 Offer——面试题 3-2题目不修改数组找出重复的数字在一个长度位n + 1的数组里的所有数字都在1 ~ n的范围内,所以数组中至少有一个数字是重复的,请找出数组中任意一个重复的数字,但不能修改输入的数组输入样例[2, 3, 5, 4, 3, 2, 6, 7]输出样例2 或 3思路 这道题比较特殊的点就是不允许改变输入数组,如果不改变输入数组的话,我们就不能对数...
2020-03-20 23:08:43 241
原创 面试题——移掉k位数字
AcWing 1453 移掉 k 位数字题目给定一个以字符串表示的非负整数num,移除这个数中的k位数字,使得剩下的数字最小注意:空字符串被视为0如果结果中包含前导零,则需要将前导零删除,最后删除的前导零不用包含在移除的k个数字中输入格式第一行输入一个字符串,用来表示非负整数num第二行输入一个整数,表示k输出格式输出一个字符串,表示移除k位数字后所能得到的最小数字数据范...
2020-03-19 16:30:25 518
原创 面试题——反转链表
AcWing 35 反转链表题目定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思考题:请同时实现迭代版本和递归版本。样例输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL思路迭代版本 这道题使用迭代的思想很容易思考,我们只需要准备三个指针,分...
2020-03-19 15:30:34 262
原创 面试题——链表中环的入口节点
AcWing 34 链表中环的入口节点题目给定一个链表,若其中包含环,则输出环的入口节点。若其中不包含环,则输出null。样例给定如上所示的链表:[1, 2, 3, 4, 5, 6]2注意,这里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。则输出环的入口节点3.思路 这道题解法很巧妙,有一股数学的气息,首先我们回忆一下怎么确定...
2020-03-18 19:15:05 227
原创 面试题——包含min函数得栈
AcWing 41 包含 min 函数得栈题目设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。push(x)–将元素x插入栈中pop()–移除栈顶元素top()–得到栈顶元素getMin()–得到栈中最小元素样例MinStack minStack = new MinStack();minStack.push(-1);minStack....
2020-03-18 18:49:57 219
原创 剑指Offer(面试题3-1)——数组中的重复数字
剑指 Offer——面试题 3题目找出数组中的重复数字在一个长度为n的数组里的所有数字都在0 ~ n - 1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次,请找出数组中任意一个重复的数字输入样例[2, 3, 1, 0, 2, 5, 3]输出样例2 或 3思路 这道题是一个很常见的数组问题,解法也有很多种, 首先想到的我们可以...
2020-03-17 11:26:22 167
原创 面试题——寻找矩阵中的极小值
AcWing 1452 寻找矩阵的极小值题目给定一个n×n的矩阵,矩阵中包含n×n个_互不相同_的整数。定义极小值:如果一个数的值比与它相邻的所有数字的值都小,则这个数值就被称为极小值。一个数的相邻数字是指其上下左右四个方向相邻的四个数字,另外注意,处于边界或角落的数的相邻数字可能少于四个。要求在O(nlogn)的时间复杂度之内找出任意一个极小值的位置,并输出它在第几行第几列。本题中矩...
2020-03-17 11:02:33 1660
原创 面试题——单链表快速排序
AcWing 1451 单链表快速排序题目给定一个单链表,请使用快速排序算法对其排序要求:期望平均时间复杂度为O(nlogn),期望额外空间复杂度为O(logn)思考题: 如果只能改变链表结构,不能修改每个节点的val值该如何做呢数据范围链表中的所有数大小均在int范围内,链表长度在[0, 10000]输入样例:[5, 3, 2]输出样例:[2, 3, 5]思路 ...
2020-03-16 23:03:42 907
原创 面试题——蛇形矩阵
AcWing 756 蛇形矩阵题目输入两个整数n和m,输出一个n行m列的矩阵,将数字1到n * m按照回字蛇形填充至矩阵中。具体矩阵形式可参考样例。输入格式输入共一行,包含两个整数n和m。输出格式输出满足要求的矩阵。矩阵占n行,每行包含m个空格隔开的整数。数据范围1≤n,m≤1001≤n,m≤100输入样例:3 3输出样例:1 2 38 9 47 6 5思路...
2020-03-16 08:15:17 1113
原创 SpringMVC——什么是SpringMVC,第一个SpringMVC程序
什么是 SpringMVC? SpringMVC 是一种基于 Java 实现的 MVC 设计模式的请求驱动类型的轻量级 web 框架,使用了 MVC 架构模式的思想,将 web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发SpringMVC 的前置控制器(DispatchServlet ) Spring 的 web 框架围绕 Dispatc...
2020-03-13 20:57:06 193
原创 JAVA基础——使用cglib实现动态代理
JAVA 代理模式 简而言之,代理是一种通过创建代理对象的方式,从而实现对被代理对象实现功能增强的一种方式,JAVA 中有静态和动态两种代理,动态代理又可以分为基于接口的动态代理(JDK 实现)和基于子类的动态代理(cglib 实现),这里我们讲解基于子类的动态代理基于子类的动态代理(cglib 实现的动态代理) 使用代理的好处就是在不修改原代码的基础上可以实现对原方法的增强,使用...
2020-03-08 23:06:35 824
原创 Spring框架——使用注解实现Spring-IOC
完全使用注解实现 IOC 通过使用注解的方式,可以更方便的将我们自己创建的对象放入到 Spring bean 容器中,我们这里介绍使用纯注解的方式实现 IOC,并且主要介绍替代.xml文件配置的过程,虽然这种方式对于包装好的对象使用起来有些麻烦准备 首先我们需要准备一个.java的配置文件,用于取代bean.xml,我们将它建在com的父目录java中的config包下,取名为Sp...
2020-03-06 23:47:51 311
原创 Spring框架——使用构造函数或set实现的依赖注入
Spring 中的依赖注入 依赖注入:Dependency Injection,它是 spring 框架核心 ioc 的具体实现 我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况,ioc 解耦只是降低他们的依赖关系,但不会消除 例如:我们的业务层仍会调用持久层的方法,那这种业务层和持久层的依赖关系,在使用 spring 之后,...
2020-03-03 18:41:36 259 3
原创 Spring框架——Spring中使用XML创建bean的三种方式
Spring-IOC IOC(Inversion of Control)意为控制反转,把创建对象的权利交给框架,是框架的重要特征,IOC 的作用是消减程序的耦合,解除我们代码中的依赖关系 下面我们主要说明基于XML 文件来使用 IOC 的过程,以及使用 XML 文件创建 bean 的三种方式通过配置 XML 文件实现 IOC 首先我这里是使用 Maven 工程创建的 Spri...
2020-03-03 11:05:08 1813
原创 JAVA基础——JAVA中的静态代码块和构造代码块
JAVA 中的代码块 在 Java 的 Class 中,存在着静态代码块、构造代码块、构造函数、普通代码块等结构,他们在 Class 中执行的顺序以及功能也有区别静态代码块 静态代码块的编写格式如下:static { System.out.println("Static");} 静态代码块在 Class 被加载时运行,且只运行一次,它的执行顺序优先于各种其他代码...
2020-03-02 20:39:04 207
原创 算法——使用DFS解决全排列问题
什么是 DFS DFS 是深度优先遍历,将序列抽象成树状结构,以优先深度的方式进行遍历,获取想要的结果例如 假设一个树的结构如下: 1 2 3 4 5 5 7 使用深度优先遍历的遍历顺序就是1->2->4->5->3->5->7,也就是说,深度优先遍历会从根节点root开始,以深度优先遍历到其一个 ...
2020-02-28 10:00:23 2615
原创 JAVA基础——JDK实现的动态代理
JAVA 中的动态代理 动态代理和静态代理类的区别在于,动态代理可以在程序运行时,动态地创建代理类,执行被代理类方法的同时,可以运行被代理类调用的拓展方法JDK 实现的动态代理 JDK 的动态代理要通过import java.lang.reflect包中的内容实现,代理类需要调用该包下的Proxy类下的newProxyInstance方法,返回一个Object类型的对象,这个对...
2020-02-22 09:46:58 161
原创 JAVA基础——静态代理
JAVA 中的代理 代理是一种23种经典设计模式之一,可以实现在不改变功能函数的情况下,实现对该函数、对象的功能拓展静态代理 静态代理是一种手动实现的,在程序运行之前代理类和被代理类的代理关系已经被确定好了,在使用静态代理时,代理类和被代理类必须实现同一个接口,演示如下 首先是接口类,很简单,就两个方法package Aspect;/** * 接口类 */publ...
2020-02-20 22:58:38 152
原创 Spring框架——bean的生命周期
Spring 中 bean 的生命周期bean 生命周期 bean 的生命周期大致流程如下,后面会为大家解释每个流程具体的作用instantiate bean 对象实例化populate properties 封装属性如果Bean实现 BeanNameAware 执行 setBeanName如果 Bean 实现 BeanFactoryAware 执行 setBeanFactor...
2020-02-19 13:10:25 340
原创 算法——插入排序及优化(希尔排序)
插入排序 插入排序是排序算法的一种,顾名思义,是一种插入的形态进行排序的算法原理 插入排序的过程可以形象的比做我们打扑克抓牌时,整理扑克牌的过程,每次我们抽一张新牌时,会以特定的规律,将其插入到已有的牌中,使手中的牌形成一个有序的牌的集合 插入排序也是如此我们使用两个嵌套的for循环从头开始遍历一个序列,外部的for循环顺序向下执行,内部的for循环负责比较其当前遍历的位置元...
2020-02-17 16:24:35 185 1
原创 LeetCode-98——验证二叉搜索树(Java、Python)
题目 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数节点的右子树只包含大于当前节点的数所有左子树和右子树自身必须也是二叉搜索树 示例:输入: 2 / \ 1 3输出: true输入: 5 / \ 1 4 / \ 3 6输出:...
2020-02-15 22:27:12 218
原创 LeetCode-242——有效的字母异位词(Java、Python)
题目 给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词 示例:输入: s = "anagram", t = "nagaram"输出: true输入: s = "rat", t = "car"输出: false解法 这里提供三种解法直接排序 因为大部分语言中都自带排序函数,我们可以直接把两个字符串进行排序,因为如果两个字符串互为字母异位词的话,...
2020-02-15 21:52:07 147
原创 LeetCode-141——环形链表(Java、Python)
题目 给定一个链表,判断链表中是否有环 为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。 如果pos是-1,则在该链表中没有环 示例:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。输入:head = [1,2], pos = 0输出:true解释:链表中...
2020-02-14 22:42:05 124
原创 LeetCode-206——反转链表(Java、Python)
题目 反转一个链表 示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解法 这道题我们需要两个额外的链表节点变量ListNode来协助完成 假设我们有一个1->2->3->4->5的链表,我们定义cur和prev两个节点变量,分别用来...
2020-02-14 22:05:38 133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人