自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 剑指offer(59)——滑动窗口的最大值

文章目录一、题目描述二、解题思路1、思路一:暴力法1.1 代码实现1.2 复杂度分析2、思路二:双端队列2.1 算法思路2.2 代码实现2.3 复杂度分析一、题目描述给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- --

2020-12-24 23:41:40 160

原创 剑指offer(29)——顺时针打印矩阵

文章目录一、题目描述二、解题思路算法分析一、题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]例2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]二、解题思路从左到右,从上到下,从右到左,从下到上依次遍历二维数组。publi

2020-12-23 23:00:50 162

原创 剑指offer(4)——二维数组中的查找

文章目录一、题目描述二、解题思路代码实现一、题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现在有矩阵matrix如下:[ [1,2,8 ,9 ], [2,4,9 ,12], [4,7,10,13], [6,8,11,15]]查找数字7,返回true;查找数字5,返回false。二、解题思路因为二维数组中从左到右,从上到下都是递增的,从右上角开

2020-12-23 20:13:34 109

原创 剑指offer(3)——数组中重复的数字

文章目录一、题目描述二、解题思路1、排序2、哈希表算法说明代码实现复杂度分析3、原地置换算法说明算法流程代码实现复杂度分析一、题目描述在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。如果没有重复的数字,返回-1;二、解题思路1、排序只需要将输入的数组

2020-12-23 17:52:17 131

原创 Java并发编程——阻塞队列

阻塞队列一、阻塞队列(BlockingQueue )四种操作方式方式抛出异常不抛出异常,有返回值阻塞等待超时等待添加add()offer()put()offer(E e,long timeout, TimeUnit unit)重载方法移除remove()poll()take()poll(long timeout, TimeUnit unit)重载方法检测队首元素element()peek()无无public class Blocki

2020-12-20 15:36:22 197

原创 Java并发编程——线程池

线程池线程池核心:三大方法,七大参数,四种拒绝策略池化技术:程序的运行的本质:占用系统的资源!优化资源的使用,可以考虑使用池化技术池化技术:事先准备好一些资源,有人要用,就来这里拿,用完之后还给我线程池的好处:降低资源的消耗提高响应速度方便管理线程的复用,可以控制最大并发数,管理线程阿里巴巴java开发手册中对于线程池的生成是这样规定的:一、创建线程池的三大方法public class ExecutorDemo { public static void ma

2020-12-20 14:28:43 172 1

原创 Java并发编程——锁

锁一、Lock锁Lock是一个接口,有三个实现类,可重入锁是最常用的一个实现类。公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。public class Lock1 { public static void main(String[] args) { Tick

2020-12-19 15:57:58 113

原创 Java并发编程——初识JUC

文章目录初始JUC一、什么是JUC二、进程和线程2.1 进程和线程2.2 并行和并发2.3 Java线程有几个状态2.4 wait/sleep的区别初始JUC一、什么是JUCJUC是java.util .concurrent包的简称,这是一个处理线程的工具包。二、进程和线程2.1 进程和线程进程:一个进程,qq.exe之类的程序的集合,一个进程往往可以包含很多个线程,至少包含一个线程:操作系统能够进行运算调度的最小单位Java默认有两个线程,main和GC这两个线程Java真的可

2020-12-17 22:41:06 167

原创 Spring AOP —— 面向切面编程

文章目录Spring AOP一、AOP概述1.1 什么是AOPSpring AOP一、AOP概述1.1 什么是AOPAOP(Aspect Oriented Programing):面向切面编程按照软件重构的思想,如果多个类中出现相同的代码,则应该考虑定义一个父类,将这些相同的代码提取到父类。比如Horse、Pig、Camel这些对象都有run()和eat()方法,通过引入一个包含这两个方法的抽象的Animal父类,Horse、Pig、Camel就可以通过继承Animal复用run()和eat()方

2020-12-17 21:48:57 116

原创 设计模式——模板方法模式

文章目录模板方法模式1、模式原理1.1 UML类图1.2 实例讲解使用步骤2、优缺点2.1 优点2.2 缺点3、应用场景模板方法模式定义一个模板结构,将具体内容延迟到子类去实现。作用:在不改变模板结构的前提下在子类中重新定义模板中的内容,模板方法模式是基于”继承“的。解决的问题:提高代码复用性将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中实现了反向控制通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制,符合“开闭原则”1、模式原理

2020-12-16 22:46:32 116

原创 设计模式——策略模式

策略模式策略模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的用户。策略模式的关键在于:将行为及其运作方式抽象为策略和策略实现。一、案例分析此处以商场支付为例,可以用微信支付也可以用支付宝支付。此处,支付是一种行为,可以将其视为一种策略,即:支付策略1、不采用策略模式的商场支付public class Mall { private Double price; public Mall setPrice(Double pr

2020-12-16 20:57:34 108

原创 设计模式——抽象工厂模式

文章目录抽象工厂模式1、模式原理1.1 UML类图1.2 模式组成1.3 使用步骤2、代码实现3、优缺点3.1 优点3.2 缺点4、对于抽象工厂方法的改进抽象工厂模式抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类;具体的工厂负责实现具体的产品实例。抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类主要的作用:允许使用抽象的接口来创建一组相关产品,而

2020-12-15 23:06:40 95

原创 设计模式——工厂方法模式

文章目录1、模式原理1.1 UML类图1.2 模式的组成1.3 使用步骤2、实例讲解代码实现3、优缺点3.1 优点3.2 缺点4、应用场景工厂方法模式是一种创建型设计模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类。解决的问题: 工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了“开放 - 关闭原则简单工厂模式的

2020-12-15 18:21:20 124

原创 剑指offer(22)——链表中倒数第k个节点

文章目录一、题目描述二、思路1、暴力解法2、快慢指针法一、题目描述题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。二、思路1、暴力解法把链表遍历一遍,将所有节点存储在list中,然后取倒数第k个节点即可。这样做的时间复杂度为:O(n),空间复杂度为O(n)。代码实现:public static ListNode findKthToTail(ListNode head, int k) { ArrayList

2020-12-12 15:07:36 82

原创 剑指offer(35)——复杂链表的复制

文章目录一、题目描述二、解题思路一、哈希表算法说明算法流程代码实现复杂度分析二、拼接 + 拆分算法说明算法流程代码实现复杂度分析一、题目描述请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。public class Node { int val; Node next; Node random; public Node(int

2020-12-12 15:04:13 108

原创 MySQL学习(1)—— 事务隔离级别

事务的四种隔离级别1、事务的四大特性(ACID)原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态,数据库的完整性约束没有被破坏。隔离性(Isolation):一个事务的影响在该事务提交之前对其他事务都是不可见的。持久性(Durability):事务一旦提交,其结果就是永久性的。即使故障宕机,数据库也能恢

2020-11-04 23:08:57 100

原创 shiro学习——整合jwt时全局异常处理器无法处理JWTFilter中抛出的异常

springboot+shiro+jwt全局异常处理器无法处理JWTFilter中抛出的异常一、shiro中会出现的异常1、 AuthencationException2、 AuthorizationException二、为什么无法被全局异常处理器处理三、解决方案1、把统一返回的信息写入response中2、使用重定向到处理该错误的controller中一、shiro中会出现的异常1、 AuthencationExceptionAuthenticationException 异常是Shiro在登录认

2020-08-09 23:32:24 4659 6

空空如也

空空如也

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

TA关注的人

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