自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不想打代码

只是一个菜鸟的学习记录

  • 博客(117)
  • 资源 (6)
  • 收藏
  • 关注

原创 Docker 2020 超详细教程

Docker 目录文档介绍Docker 概述Docker 为什么会出现?Docker 简介Docker 的历史文档介绍本文档基于B站教学视频,强烈推荐去看一看这个UP主的教学视频,点击跳转Docker 概述Docker 为什么会出现?在一款产品/项目的开发过程中,要经历 开发==> 上线 这样的一个过程,就会有两套环境(dev prod),例如是应用环境和应用配置一般公司也会配有两个部门(开发、运维),环境问题就会导致项目出现问题,有句话是这么说的:明明在我的电脑就可以运行。这就有对运

2020-06-17 11:25:38 4765 3

原创 【23种设计模式】23种设计模式简介及其应用 总纲

23种设计模式的简单介绍23种设计模式之间的区别23种设计模式的应用

2020-04-29 16:06:58 306

原创 软件设计师考试中的一些知识点(持续更新)

MENU 字节,字,位之间的关系主存与cache的地址映射方式算数移位和逻辑移位常见的2的次方数总线结构的优缺点DPI像素计算中间代码表示形式PV操作4种耦合关系软件设计模型分类及优缺点UML图相关概念软件体系结构风格环路复杂性计算DFD与DD范式规范需求及相关例子数据库的三级模式二级映像数据库的物理独立性和逻辑独立性关系规范化入度和出度FTP服务器各种算法时间复杂度及空间复杂度各种码的表示范围其...

2020-01-07 16:29:21 1068

原创 【Spring 基础注解】基础注解、高级注解、配置Bean

参考自B站视频《孙哥说Spring5》文章目录注解基础概念什么是注解编程?为什么要使用注解编程?注解的作用注解的发展历程Spring 基础注解对象创建相关注解@Component@Repository、@Service、@Contoller@Scope@Lazy生命周期注解 @PostConstruct、@PreDestroy注入相关注解用户自定义类型 @AutowiredJDK类型注入@Value注解扫描注解XML扫描Spring 高级注解@Configuration@Bean注解基础概念什么是.

2020-09-11 16:23:17 446

原创 【Spring 持久层整合】整合MyBatis、事务操作

文章目录持久层整合总述MyBatis 开发步骤持久层整合总述1、Spring 框架为什么要与持久层技术进行整合?JavaEE开发需要持久层进行数据库的访问操作JDBC、Hibernate、MyBatis 进行持久开发过程存在大量的代码冗余Spring 基于模板设计模式对于上述的持久层技术进行了封装2、Spring 可以与哪些持久层技术进行整合?JDBC —— JDBCTemplateHibernate(JPA)—— HibernateTemplateMyBatis —— SqlSes

2020-09-09 16:50:53 345

原创 【Spring AOP】Spring动态代理、切入点、AOP编程

参考自B站视频《孙哥说Spring5》文章目录为什么要使用代理设计模式?Spring 动态代理开发动态代理细节分析动态代理开发详解MethodBeforeAdvice接口MethodInterceptor 方法拦截器为什么要使用代理设计模式?关于代理模式,详情可参考 https://blog.csdn.net/Kobe_k/article/details/105771530在 JavaEE 分层开发开发中,哪个层次对于我们来讲最重要?Service 层Service 层中包含了哪些代码?.

2020-09-02 09:45:55 468

原创 【Spring IOC】Spring Bean生命周期、配置文件参数化、自定义类型转换器、后置处理Bean

对象的生命周期什么是对象的⽣命周期?⼀个对象 创建、存活、消亡 的⼀个完整过程。为什么要学习对象的⽣命周期?由 Spring 负责对象的 创建、存活、销毁,了解⽣命周期,有利于我们使用好 Spring 为我们创建的对象。⽣命周期的 3 个阶段:创建阶段 —> 初始化阶段 —> 销毁阶段创建阶段Spring 工厂何时创建对象?scope="prototype":Spring 工厂在获取对象 ctx.getBean("xxx") 的同时,创建对象。scope="si

2020-08-29 20:21:03 252

原创 【Spring IOC】Spring工厂创建对象

参考自B站UP主视频《孙哥说Spring5》文章目录什么是复杂对象?Spring 工厂创建复杂对象的三种方式(1)FactoryBean接口(2)实例工厂(3)静态工厂总结控制 Spring 工厂创建对象的次数什么是复杂对象?Spring 工厂创建复杂对象的三种方式(1)FactoryBean接口开发步骤实现FactoryBean接口实现 getObject,getObjectType,isSingleton 方法getObject():用于书写创建复杂对象时的代码。getOb.

2020-08-25 21:15:34 226

原创 【Spring IOC】注入、IOC、DI

参考自B站UP主视频《孙哥说Spring5》文章目录概述Spring 中如何注入Spring中的注入原理分析简化Set注入概述什么是注入?注入:通过 Spring ⼯⼚及配置⽂件,为所创建对象的成员变量赋值。为什么要注入?通过编码的⽅式,为成员变量进⾏赋值,存在耦合。注入的好处:解耦合。举个例子public void test4() { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicatio.

2020-08-25 16:51:43 199

原创 【数学】剑指Offer:孩子们的游戏

题目描述有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中从他的下一个小朋友开始,继续0...m-1报数直到剩下最后一个小朋友,可以不用表演请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)如果没有小朋友,请返回-1题目分析首先我们可以模拟整个过程,从而获得最后一个的编号只需要将孩子们存入一个List中,然后每次

2020-08-23 12:39:54 200

原创 Spring源码解读:引言、第一个Spring程序、使用日志框架Logback

参考自B站UP主视频《孙哥说Spring5》文章目录什么是Spring Framework?EJB存在的问题什么是Spring?设计模式简介Spring的核心:工厂模式第一个 Spring 程序Spring 的核心API程序开发应用配置文件中需要注意的细节Spring5.x 整合 logback框架logback简介与log4j的区别导入依赖配置文件什么是Spring Framework?EJB存在的问题运行环境苛刻代码可移植性差(只要运行的服务器改变了,代码就要随之而改变,且服务器因为是.

2020-08-22 18:28:16 266

原创 【二叉树】剑指Offer:二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/题目分析首先最容易想到的,是用一个数组来存储中序遍

2020-08-21 22:26:48 136

原创 【位运算】剑指Offer:不用加减乘除做加法

题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。题目分析不用加减乘除四则运算符号,那就只能通过逻辑操作来完成加法了,也就是通过位运算众所周知,计算机中整数时通过补码存的,如果是整数,那么原码=反码=补码;如果是负数,则补码=反码+1如果要通过位运算来操作,首先要将数字转换成二进制,然后再通过逻辑运算来完成加法运算一位加法也就是执行加法x ^ y;进位操作(x & y) << 1那二位加法呢?一次类推,

2020-08-16 11:03:00 148

原创 【贪心】剑指Offer:变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目分析一次可以上N个台阶,问上一个N级的台阶总共有多少种跳法。假设当前在第 N 级,那么有一下的跳法。如果上一步跳 1 步到达第 n 个台阶,说明上一步在第 n-1 个台阶。已知跳到第 n-1 个台阶的方法数为 f[n-1]如果上一步跳 2 步到达第 n 个台阶,说明上一步在第 n-2 个台阶。已知跳到第 n-2 个台阶的方法数为 f[n-2]…以此类推…如果上一步跳 n

2020-08-16 09:52:06 148

原创 详解JVM中的经典7种垃圾回收器(Garbage Collector)

@TOC垃圾收集器分类与性能指标概述垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。小技巧学Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enum、泛型等API层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域

2020-08-14 22:38:42 2828 1

原创 这么多人问的JVM的垃圾回收到底是个啥?

概述这次我们主要关注的是黄色部分,内存的分配与回收众所周知,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是 Java 的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展

2020-08-14 10:24:17 344

原创 从JVM的角度来深入剖析一下String类

String的基本特性String的基本特性String:字符串,使用一对 ”” 引起来表示String s1 = "hello" ; // 字面量的定义方式String s2 = new String("hello");String 是声明为final的,不可被继承String 实现了Serializable接口:表示字符串是支持序列化的。String 实现了Comparable接口:表示String可以比较大小String 在 JDK8 及以前内部定义了final char[]

2020-08-12 18:58:35 196

原创 详解Java虚拟机之执行引擎

概述执行引擎属于JVM的下层,里面包括 解释器、及时编译器、垃圾回收器执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价

2020-08-11 19:14:52 528

原创 What is 直接内存 ?

概述因为JDK8之后,方法区的落地实现(元空间)使用的是本地的直接内存,因此对直接内存要有所了解。直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区

2020-08-10 22:46:19 300

原创 通过对象的实例化、内存布局、访问定位加深JVM内存的理解

对象的实例化创建对象的方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器Constructor的newInstance(XXX):反射的方式,可以调用空参的,或者带参的构造器使用clone():不调用任何的构造器,要求当前的类需要实现Cloneable接口中的clone接口使用序列化:从文件、网络中获取一个对象的二进制流(序列化一般用于Sock

2020-08-10 22:10:40 169

原创 不会吧不会吧,不会还有人不知道JVM 方法区吧

前言方法区也是运行时数据区的一部分。方法区是线程共享的ThreadLocal:如何保证多个线程在并发环境下的安全性;典型应用就是数据库连接管理,以及线程会话管理栈、堆、方法区的交互关系最简单的一个例子:实例化一个对象。Person:存放在元空间,也可以说方法区person:存放在Java栈的局部变量表中new Person():存放在Java堆中方法区的理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或

2020-08-10 17:32:08 267

原创 带你走进 JVM 中堆的世界

文章目录堆的概述堆内存细分堆的概述堆针对一个JVM进程来说是唯一的,也就是一个进程就对应着一个JVM实例,一个JVM实例当中就有一个运行时数据区(对应着java类中的Runtime),另外,一个进程包含多个线程,他们共享同一堆空间和方法区,每个线程又有一套自己的程序计数器、本地方法栈、虚拟机栈(独享)。共享也就意味着要考虑线程安全问题一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间

2020-08-09 16:20:29 279 2

原创 一篇文章带你搞懂JVM的内存结构(运行时数据区)

简介当字节码通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对类进行使用,同时执行引擎将会使用到我们运行时数据区内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM 内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内

2020-08-07 21:50:34 359

原创 一篇文章搞懂类加载子系统的加载过程

JVM整体架构JVM被分为三个主要的子系统:(1)类加载子系统(2)运行时数据区(3)执行引擎如果我们想自己写一个Java虚拟机的话,主要考虑的就是类加载器和执行引擎。类加载子系统的过程字节码文件存在于本地硬盘上,可以理解为设计师画在纸上的模板,在执行的时候要先把字节码文件加载到 JVM 当中,再根据这个模板实例化出 n 个一模一样的实例。字节码文件加载到 JVM 中,被称为 DNA元数据模板,存放在方法区当中在字节码文件到JVM中,最后称为元数据模板,此过程需要一个运输工具

2020-08-05 17:39:41 572 3

原创 【贪心法】Leetcode --- NO.665 非递减数列(Java)

题目描述题目分析当这个数组删去n个数后,呈现非递减的趋势,即每一个值都会比前一个值更大或相等解法分析循环判断当前值是否比前一个值更大或相等,否则就删去这个值,累计删除的次数,如果大于n就返回false这里的删去值不是真正的删去,如果真正删去还要重新排一次数组,可以用值来覆盖优先考虑令 nums[i - 1] = nums[i],因为如果修改 nums[i] = nums[i - 1] 的话,那么 nums[i] 这个数会变大,就有可能比 nums[i + 1] 大,从而影响了后续操作还

2020-07-29 14:34:42 198

原创 【贪心法】Leetcode --- NO.605 种花问题(Java)

题目描述题目分析种花的条件就是不能相邻种植,也就是说如果当前这个值为1,那左右两边的值都要为0,这样才符合条件解法分析对于每个数都要看左值和右值,如果是开头和结尾,就只需要看其中一个就行了代码class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int i = 0, count = 0; // 遍历数组 while (i < flo

2020-07-29 11:36:11 217

原创 【贪心法】Leetcode --- NO.406 根据身高重建队列(Java)

题目描述题目分析这道题就是将原本排好的队列在打乱后整理恢复原状第一个数h代表身高,第二个数k代表这个人之前有几个身高更高或相等的人数解法分析可以知道,k只跟身高更高的人相关,跟身高较矮的人没有关系所以可以先按照身高降序排序,如果身高相同就根据第二个数升序排序那这样排好序之后,逐个遍历,放到结果队列中因为身高已经是从高到低了,那么插入的时候主要是根据k如果k=2,就代表前面有两个更高的人,假设之前已经插入了n个人了,这n个人肯定都是比当前这个人更高的,那么直接插入到索引为2的位置即可

2020-07-29 10:10:46 199

原创 【贪心法】Leetcode --- NO.452 用最少数量的箭引爆气球(Java)

题目描述题目分析一支弓箭可以引爆有重叠部分的多个气球,求引爆所有气球所需要的最少的弓箭数量类似于求所有区间的最少重叠部分解法分析使用贪心法求解先对数组按照结束区间升序排序,然后逐个遍历气球如果这个气球的起始区间在当前这个弓箭引爆气球的区间的结束坐标之内,就不需要新增一个弓箭了否则就新增一支弓箭,并将这个气球的结束坐标定为这个弓箭的引爆气球的区间的结束坐标那么在这个坐标之内,气球都能够被已有的弓箭引爆假定现在有四个气球,红[2,8]、黄[7,12]、左绿[1,

2020-07-28 11:45:25 285

原创 【贪心法】Leetcode --- NO.435 无重叠区间(Java)

题目描述题目分析计算让一组区间不重叠所需要移除的区间个数的最小值反之就是计算最多能组成的不重叠区间个数的最大值,然后用总区间个数减去即可解法分析这道题是一个很经典的贪心算法问题 Interval Scheduling(区间调度问题)如果把一个区间表示这个时间段内要完成一个任务,那就类似于在一段时间内找到最大的完成任务数显然一个时间段内,一个人无法完成两件事,所以完成一个任务所用的时间越短,完成的任务越多那是每次选择完成用时最短的,还是开始最早的,还是其他的更优的呢?因为区间是固定

2020-07-28 10:55:41 219

原创 【DFS、BFS】Leetcode --- NO.104 二叉树的最大深度(Java)

题目描述题目分析题目非常简单,就是判断树的最大深度,可以使用深度优先算法或广度优先算法解法分析深度优先,递归遍历子结点,比较左子树和右子树的最大结点后 +1广度优先,使用队列,如果有子结点就将子结点放入队列中,然后弹出自身,循环操作直到队列为空代码深度优先/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *

2020-07-28 10:11:17 189

原创 【贪心法】Leetcode --- NO.455 分发饼干(Java)

题目描述题目分析要满足尽量多的孩子,所以小饼干用来满足胃口小的孩子,大饼干用来满足胃口大的孩子因为胃口小的孩子更容易满足,所以可以优先给胃口小的孩子分配解法分析贪心法可以保证每次选择是最优的,但是无法保证对于全局来说是最优的那么先假设有一种算法比贪心法更优,如果假设不成立,那就说明没有算法比贪心法更好,也就是说贪心法是最优策略假设在某次选择中,贪心法选择给当前满足度最小的孩子分配第 m 个饼干,第 m 个饼干为可以满足该孩子的最小饼干。假设存在一种最优策略,可以给该孩子分配第 n

2020-07-27 12:07:42 192

原创 【动态规划】Leetcode --- NO.121 买卖股票的最佳时机(Java)

题目描述类似题目:122. 买卖股票的最佳时机 II题目分析根据题意,我们需要找出给定数组中两个数字之间的最大差值(即最大利润)并且第二个数字(卖出价格)必须大于第一个数字(买入价格)。解法分析双重遍历:找到每个点和后面的点的差值,取最大动态规划:前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}代码class Solution { public int maxProfit(int[] prices) { //

2020-07-26 14:01:43 122

原创 【贪心算法】Leetcode --- NO.122 买卖股票的最佳时机 II(Java)

题目描述题目分析根据题意,为了获取最大利润,我们需要在上涨时买入,下跌时卖出如果是连续的上涨,上述规则也可满足最大利润,如下图中,D = A + B + C解法分析遍历,前后比较如果第二天比第一天小,那就是要下跌了,不要买入如果第二天比第一天大,那就是要上涨了,可以买入,并累计盈利代码class Solution { public int maxProfit(int[] prices) { int res = 0; int len =

2020-07-26 14:01:16 186

原创 Springboot Security 分布式项目整合 SpringBoot + JWT

文章目录理解 Jwt理解RSA分析SpringSecurity认证流程环境准备导入jar包,整个项目的 jar 包依赖都在这了工具类:生成 token、解析tokenJsonUtilsPayloadJwtUtilsRsaUtils认证服务(需要认证用户信息并返回token给用户)用户和角色的实体类Dao层Service 层,基于数据库实现用户认证获取RSA加密Jwt 验证和认证的过滤器security 配置类再来个controller测试一下其他服务(只需要验证请求是否携带token并校验token即可)

2020-07-25 23:47:47 568

原创 【双指针】Leetcode --- NO.75 颜色分类(Java)

题目描述题目分析这道题给定得数组中只有 0 1 2 这三个数字,所以唯一要做的就是排序最直接的方法就是直接双重遍历排序可以使用多指针的方法,尽量一次遍历就完成排序可以使用两个个指针,分别指向 0 1 2 三个数字的交界处如果当前值是 0 就往头部放,如果是 2 就往尾部放,这样中间的值自然就是 1 了再用这两个指针和当前遍历的值进行判断,直到数组所有元素全部遍历一遍为止解法分析使用 while 循环,直到当前遍历的指针与指向 1 和 2的交界处 的指针相遇,表示已经排序完成如果当

2020-07-25 12:34:20 158

原创 【桶排序、堆排序】Leetcode --- NO.451 根据字符出现的频率排序(Java)

题目描述题目分析这道题就是找出每个字符出现的频率,然后根据频率来重组字符串频率多的放前面,频率少的放后面,频率一样先后顺序随便,但是要字母要放在一次跟 《Leetcode — NO.347 前K个高频元素》一样的解法解法分析首先要计算每个字符出现的频率,可以通过 Map 来存储字符和频率的对应关系因为最后要将频率出现的多的字符放在前面,那就要对频率做一个排序这里可以使用桶排序:第 i 个桶中出现的字符就说明出现了 i 次也使用堆排序,跟第 347 那道题大同小异代码桶排序

2020-07-25 11:49:09 220

原创 【桶排序、堆排序】Leetcode --- NO.347 前K个高频元素(Java)

题目描述题目分析这道题就是找出数组内出现频率前几的数组那么首先要计算数字出现的频率然后对频率进行排序,但是排序时不可打乱数字和频率的对应关系,找出前几大的数字解法分析累计数字出现的频率,这个可以通过map来累计,将数字当作键,将频率当作值因为最后要返回的是出现频率前几的数字数组,所以频率和数字不可以分开可以使用桶排序,第几个桶中存储的数据就出现了几次或者使用堆排序【官方题解】代码使用桶排序class Solution { public int[] topKFr

2020-07-25 10:27:55 216

原创 【动态规划法】Leetcode --- NO.64 最小路径和(Java)

题目描述题目分析最小路径和:即 起点到终点的所有路径的和的最小值每次只能 向右 或 向下 移动一步解法分析对于网格中的每一个点,到该点的最小路径为 到左边点的最小路径和到上边点的最小路径的最小值 加上 当前点的值使用动态规划法求路径数组代码动态规划法class Solution { public int minPathSum(int[][] grid) { if (grid == null || grid.length == 0 || grid[0]

2020-07-23 12:21:24 124

原创 【排序】Leetcode --- NO.215 数组中的第K个最大元素(Java)

题目描述题目分析这道题简而言之,就是将数组排序,然后取第K个大的值如果数组升序排序,就是取倒数第K个值如果数组降序排序,就是直接取第K个值即可《官方题解》解法分析这道题重点在数组排序可以直接使用Array.sort()来对数组进行排序,时间复杂度 O(NlogN),空间复杂度 O(1)堆排序:时间复杂度 O(NlogK),空间复杂度 O(K)快速选择:时间复杂度 O(N),空间复杂度 O(1)代码排序class Solution { publ

2020-07-22 12:07:16 159

原创 【二分法】Leetcode --- NO.154 寻找旋转排序数组中的最小值 II(Java)

题目描述这题是 第153题的延伸版本,点击查看题解题目分析这道题也是寻找排序数组的最小值,但是相比于 153 题,数组中多了可重复的元素这样就会带来一个问题,如果在比较的时候,两个值相等,那是忽略左区间好呢?还是忽略右区间好呢?来分析一下,如果两个元素相等,那就说明数组内含有相等的元素,由于重复元素的存在,就无法直接判断最小值是在中值的左还是右但是我们能够知道 右值 和 中值 是相等的如果 中值 在 最小值 的 左边 那 中值 的左边的值都是相等的,且等于 右值,移动

2020-07-22 11:25:13 161

Spring 注解.xmind

https://blog.csdn.net/Kobe_k/article/details/108514254 搭配博客使用

2020-09-11

jdk-6-7-8-11.zip

jdk-6-7-8-11.zip

2020-08-30

cglib依赖包.zip

这个是cglib的依赖jar包,需要先导入,然后才能使用,用于生成动态代理的对象。主要用于生成动态代理对象

2020-04-26

Hibernate 学习笔记&代码.zip

此文件配套博客使用,里面有课程原版课程笔记以及代码,个人博客中未大量采用文档内容,而是站在自己的角度记录,仅供学习,课程是B站的《Hibernate框架》课程,讲得非常细,大力推荐。

2020-01-15

Hibernate配置文件例子.zip

Hibernate 配置文件例子 例子仅供学习参考 其中包含一个实体类的配置文件以及Hibernate核心配置文件

2020-01-13

百度贴吧一键签到.py

一键即可进行百度贴吧签到操作,绿色无毒又安全,你值得拥有!欢迎大家留言评论修改更新,让这个小工具变得更加强大

2019-08-21

空空如也

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

TA关注的人

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