自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

flunggg的博客

java后端

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

原创 设计模式:7大原则加例子

文章目录1. 前言2. UML类图2.1 泛化(Generalization)2.2 实现(Realization)2.3 依赖(Dependency)2.4 关联(Association)2.5 组合(Composite)2.6 聚合(Aggregation)3. 其他原则3.1 单一责任原则3.2 接口隔离原则3.3 依赖倒置(倒转)原则3.4 里氏替换原则3.5 开闭原则3.6 迪米特原则3.7 合成复用原则4. 总结5. 设计模式因为疫情回不了校,5月份打算学设计模式,《HeadFirst设计模

2020-08-05 00:06:37 960 3

原创 HashMap源码详解

前言HashMap 是基于哈希表对 Map 接口的实现,增删改查的时间复杂度都可以看成是O(1)(平均地),性能很高,但是内存的消耗也很高。存储的是键值对,允许存储 key 为 null 和 value 为 null,但是一个 HashMap 中只有一个 key 为 null,可以有多个 value 为 null。哈希表有哈希函数,而且可能存在哈希碰撞/哈希冲突的问题。哈希函数:一种算法,可以让 key 映射到哈希表中的存储位置。哈希冲突:哈希表会让 key 通过一个哈希函数映射到哈希表中的某个位置

2020-08-26 22:28:03 615

原创 [剑指 Offer] 35. 复杂链表的复制

题目leetcode 剑指 Offer 35. 复杂链表的复制提供的Node:static class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; }}题解解法一:用hashMap很简单,key为原节点,value

2020-08-13 21:50:59 181

原创 SpringBoot集成ElasticSearch出现的异常

1. 异常在使用springboot2.2.8+elasticsearch6.8.10时,测试时报错:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchClient' defined in class path resource [org/springframework/boot/autoconfigure/data/elastic

2020-08-08 20:37:05 5320

原创 设计模式:装饰者模式

文章目录1. 装饰者模式2. 实现3. Java中的装饰者模式4. 总结1. 装饰者模式装饰器模式(Decorator Pattern)允许向一个现有的对象动态地添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。什么意思呢?比如去吃火锅,我们会先选择一种汤底(假设是鸳鸯锅),然后选择食材(假设是牛肉,生菜)来搭配该汤底。本质上就是一个鸳鸯锅,而牛肉、生菜等食材是用来“装饰”该鸳鸯锅的,或者说这些食材用来扩展鸳鸯锅的功能(除非你是来喝汤的)。装饰器模式由为

2020-08-04 18:04:47 342

原创 设计模式:适配模式与外观模式

文章目录1. 适配器模式2. 适配器模式的实现2.1 “对象”适配器2.2 “类”适配器3. 适配器模式总结4. 外观模式5. 外观模式的实现6. 外观模式的总结1. 适配器模式该模式容易理解,在现实中有种东西叫转换头,比如插座转换头(把三头插变成二头插的接口等),type转换头等。总之就是把一个接口转换成另一个接口,而适配器模式的作用也是一样,比如已有一个软件系统,现在希望跟一个新的厂商类库搭配使用,但是该新厂商设计的接口跟旧厂商设计的接口不同,如下:有一种方法就是去修改旧厂商的代码使得接口跟新厂

2020-08-04 18:01:46 435

原创 设计模式:命令模式

1. 命令模式命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化。比如在餐厅,我们只需要在订单上勾选想吃的,而服务员只需要把这份订单交给厨师,服务员就是中介,他并不需要如何做菜;或者一个遥控器,遥控器不需要知道如何实现灯光的开关命令,只需要知道按“开”的按钮就开灯等。命令模式的组成:接收者、请求者、命令(如果想要扩展,那就定义成接口)。比如上面的餐厅:接收者是厨师、请求者是服务员、命令是订单、顾客是客户端。命令模式的类图:2. 实现假设制作一个简易遥控器,要求对灯光进行开

2020-08-04 17:58:17 217

原创 模式模式:模板方法

1. 模板方法模板方法:在一个方法中定义一个算法的骨架(步骤),而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法的类图:2. 实现假设有一家店卖咖啡和茶,对于咖啡的冲泡法有4个步骤:把水煮沸;咖啡滴过过滤器;倒进杯子;加糖。而茶的冲泡法也有4个步骤:把水煮沸;用沸水冲泡茶包;倒进杯子;加柠檬。现在来设计这两个类,从上面的步骤来分析两个类,第一个步骤和第三个步骤是一样的,而第二和第四个步骤是完全不同,如果设计一

2020-08-04 17:56:50 341

原创 设计模式:观察者模式

1. 观察者模式观察者模式(Observer)是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。比如关注某博主,当博主发布新文章时,就会通知你;在邮箱中也可以订阅某些文章,文章更新时会发邮件给你等。观察者模式又可称为发布-订阅模式(Publish/Subscribe)。观察者的结构由两部分组成,分别为Subject和Observer,UML图如下:2. 实现想来想去还是拿《HeadFirst设计模式》中观察者章节的气象监测

2020-08-04 17:51:21 302

原创 设计模式:工厂模式

任何可以生产对象的方法或类,都可以称为工厂。单例模式也是一种工厂。1. 工厂模式(静态工厂模式/简单工厂模式)先来看看下面的例子:汉堡店卖汉堡假设目前有三种种类的汉堡:鸡腿汉堡、牛肉汉堡、鲜虾汉堡。可以使用一个通用接口:public abstract class Burger { String name; void machining() { System.out.println("制作" + this.name + "中"); } void b

2020-08-04 17:49:56 221

原创 设计模式:策略模式

文章目录1. 引入2. 策略模式3. 实现4. 总结类图是以前画的,不是正规画法,目前在备战秋招没时间以后在该1. 引入先来看看一个例子:飞机大战public class Aircraft { /** * 切换攻击方式 */ public String attackMode(int change) { if(change == 1) { return "双弹攻击"; } else if(change ==

2020-08-04 17:48:19 302

原创 设计模式:代理模式

文章目录1. 代理模式2. 静态代理3. 动态代理3. Cglib代理3.1 实现4. 代理模式的变体4.1 防火墙代理4.2 缓存代理4.3 远程代理4.4 同步代理1. 代理模式代理模式:为一个对象提供一个替身,以控制对这个对象(被代理)的访问。即通过代理对象访问目标对象。这样的好处是:可以在目标对象实现的基础上,增强额外的功能操作(符合开闭原则)。被代理的对象可以是远程对象、创建开销大的对象、需要安全控制的对象。代理有三种形式:静态代理、动态代理(可称JDK代理或接口代理)、Cglib代理(可

2020-08-04 12:04:30 351

原创 设计模式:单例模式

文章目录1. 饿汉式2. 懒汉式3. 静态内部类方式4. 枚举形式5. 总结单例模式(Singleton Pattern),就是只有一个实例。如果一个全局使用的类频繁地创建和销毁,就可以考虑使用单例模式。实例只能由类本身来创建,不能被其他方式创建。单例模式的实现方式有很多种。1. 饿汉式我们常用的只创建一个对象的方法就是使用java的静态变量,类加载到内存后,就实例化一个单例,由JVM来保证线程安全。public class Main1 { private final stati

2020-08-04 11:02:40 151

原创 Java多线程基础

文章目录1. 前言2. 程序,进程,线程3. 创建线程4. 线程的状态5. 线程的停止5.1 stop() 的问题5.2 destroy() 的问题5.3 使用标记来停止线程6. 线程的其他方法6.1 sleep()6.2 yield()6.3 join()6.4 线程名6.5 线程的优先级6.6 守护线程7. 线程同步7.1 引入7.3 同步概念7.3 使用同步7.4 改正例子8 死锁9. Lock锁10. 生产者与消费者11 线程池1. 前言多进程也就是多任务,比如边吃饭边玩手机,看起来好像做了两件

2020-08-04 00:34:54 494

原创 [Leetcode] 141. 环形链表

题目141. 环形链表解题leetcode给出的方法参数只有ListNode,一开始我一直搞不懂这个pos要怎么接收??思路一:使用哈希表,让每一个节点做key,value记录每一个节点出现的次数。如果有一个节点出现两次说明有环。这里使用HashMap或者HasnSet都可以。 /** * 每次把哈希表中没有的结点添加到哈希表中。 * 如果是环,那么在尾结点的下一个结点肯定在哈希表中,此时就可以说明有环。 * 如果不是环,那么在尾结点的下一个结点就是nul

2020-08-03 22:55:02 135

空空如也

空空如也

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

TA关注的人

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