自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 状态模式---实例分析

状态模式的定义与特点状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态模式是一种对象行为型模式,其主要优点如下:结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。状态类职责明确,有利于程序的扩展。通过定义新的子类很容易地增加新的

2021-12-20 19:27:13 1688

原创 中介者模式--实例分析

模式的定义与特点中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。中介者模式是一种对象行为型模式,其主要优点如下:类之间各司其职,符合迪米特法则。降低了对象之间的耦合性,使得对象易于独立地被复用。将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。其主要缺点是:中介者模式将原本多个对象直接的相互依赖变成了中介者和多个同事

2021-12-17 13:42:07 2150 5

原创 观察者模式---实例分析

模式的定义与特点观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。观察者模式是一种对象行为型模式,其主要优点如下:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。目标与观察者之间建立了一套触发机制。它的主要缺点如下:目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。当观察者对象很多时,

2021-12-17 13:32:27 2316 2

原创 组合-命令模式----实例分析

应用场景使用组合命令模式实现多功能开关,让用户进行设置,要么控制教室的所有灯的开和关,要么控制教室所有风扇的开和关,要么控制教室所有空调的开和关,要么控制教室里教学多媒体设备的开和关。模式结构视图代码设计控制器类public class Oyy22Controller { private Oyy22Command lightsOpenCommand, lightsCloseCommand, blowerOpenCommand, blowerCloseCommand, airOpenCom

2021-12-16 21:24:41 1387

原创 RabbitMQ

服务异步通信消息队列在使用过程中,面临着很多实际问题需要思考:1.消息可靠性消息从发送,到消费者接收,会经理多个过程:其中的每一步都可能导致消息丢失,常见的丢失原因包括:发送时丢失:生产者发送的消息未送达exchange消息到达exchange后未到达queueMQ宕机,queue将消息丢失consumer接收到消息后未消费就宕机针对这些问题,RabbitMQ分别给出了解决方案:生产者确认机制mq持久化消费者确认机制失败重试机制1.1.生产者消息确认Rabb

2021-12-11 22:17:29 2259

原创 享元模式--实例分析

应用场景在天猫商城里存在着成天上万的网店,但是天猫所提供的网站模板是一样的,存在许多天猫网店使用同一个网店模板的情况,如果每一个网店都用一个网店对象来表示,因为网店数量巨大,我们需求很多的网店对象来表示,但是,采用同一套网店模板的网店除了里面所展示的内容不一样以外,网店的风格样式几乎一致,除了一些定制化的功能,比如logo等,请使用享元模式来模拟此问题,绘制享元模式类图,并绘制该实例的类图,并编写代码演示结果。享元模式结构类图根据类图设计代码WebShop(抽象享元类)public abstra

2021-12-10 12:53:05 830

原创 组合模式--实例分析

应用场景假如王同学到万达生活用品店购物。用 1 个红色小袋子装了 2 包衡阳特产(单价 25 元)、1 张衡阳地图(单价5.8元);用 1 个白色小袋子装了 2 包祁东黄花菜(单价 48 元)和 2 瓶常宁山茶油(单价 180 元);用 1 个中袋子装了前面的红色小袋子和 1副羽毛球拍(单价 380 元);用 1 个大袋子装了前面的中袋子、白色小袋子和 1 双鸿星尔克运动鞋(单价 198 元)。现在要求编程显示王同学放在大袋子中的所有商品信息并计算要支付的总价。组合模式结构类图根据该类图设计代码A

2021-12-10 11:09:31 671

原创 装饰者模式--实例分析

应用场景这是一个关于相亲的故事。某家有女初长成,七大姑八大姨欲帮忙寻得佳婿,后在各种群、圈、网站,收集了各种男人的资料。这里需要一个应用程序生成收集过来的男人的描述,如:是否有车、是否有房、是否有存款、是否有好品质。然后这个应用了装饰者模式的应用诞生了,动态添加男人的描述,最后得到男人的综述。装饰者结构类图代码实现Man(抽象构件)public interface Oyy22Man { public void getManDesc();}NormalMan(具体构件)publi

2021-12-09 21:25:27 660

原创 桥接模式--实例分析

应用场景电子商务网站常有这样的功能:发送消息通知,比如订货发货通知等,从业务上看,消息分为普通消息、加急消息和特急消息多种不同的消息类型,其业务处理是不一样的,比如加急消息是在消息上添加加急标记,而特急消息是添加了加急标记外,还会做一条催促的记录,多久不完成会继续催促。从发送消息的手段上看,又有系统内消息、手机短信消息、邮件等。代码设计结构类图发送消息的统一接口:public interface Oyy22MessageImplementor { public void send(Str

2021-12-08 13:50:49 416

原创 单例模式--实例分析

网站计算器是web应用程序的一项基本功能,用于统计使用网站的人数,可反应出网站的受欢迎程序,请设计一个简单的web页面,并为该页面设计一个计算器,用来统计当前访问网址的用户数。类图Singletonpublic class Oyy22Singleton { private static Oyy22Singleton instance=null; private int count; private Oyy22Singleton(){ } public stat

2021-12-07 23:32:19 322 1

原创 抽象工厂模式--实例分析

应用场景某手机操作系统可以根据用户不同的喜好在多种主题之间进行切换,随着主题的变化,系统中的字体、app图标、壁纸、锁屏壁纸等元素会随之发生变化。使用抽象工厂模式设计手机主题库创建元素接口//图标public interface Oyy22Icon { public void changeIcon();}//字体public interface Oyy22Typeface { public void changeTypeface();}//壁纸public interf

2021-12-07 13:34:16 1525

原创 剑指 Offer II day 9

剑指 Offer II 027. 回文链表一、反转链表Java/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.v

2021-12-06 19:00:27 316

原创 设计模式--建造者模式

应用场景假设生产计算机只需要CPU、内存、显卡、显示器和光驱,现在要生产3个不同型号的计算机,其中CPU、内存、显卡、显示器是必须的,而光驱在某些计算机型号中可能不需要,请使用建造者模式模拟计算机的生产过程,并生产出三种不同型号的计算机,其中一种型号的计算机没有光驱。画建造者模式类图代码设计Computer类public class Oyy22Computer { private String CPU; private String Memory; private Str

2021-12-06 18:16:29 629

原创 使用简单工厂模式构造四则计算器

前言工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。这篇文章还在四则计算器的基础上添加了指数对数的运算。(类名是因为实验报告的要求,如影响观感还请见谅)设计计算器两个数的加减乘除、指数和对数的运算方法//加法public class Oyy22AddCalculator implements Oyy22Calculator{ @Override public double get

2021-12-06 12:44:28 388

原创 剑指offer 2 day7

学习目标:按照学习计划坚持刷完剑指offer 2学习内容:1、 剑指offer24:反转链表2、 剑指offer25:链表中的两数相加3、 剑指offer26:重排链表学习产出:第一题:难度:简单方法一:迭代首先,理清思路:链表为空,返回头节点定义两个节点pre为null ,cur指向头节点遍历链表时,定义临时节点存放cur的下一结点,同时让cur 指向pre向后遍历,pre向后移到cur的位置,cur移到刚刚定义的临时节点位置(达到链表反转效果) ...(以此循环)最后因c

2021-12-05 15:05:01 360

原创 leetcode本周周赛

1、 找出 3 位偶数给你一个整数数组 digits ,其中每个元素是一个数字(0 - 9)。数组中可能存在重复元素。你需要找出 所有 满足下述条件且 互不相同 的整数:该整数由 digits 中的三个元素按任意顺序依次连接组成。该整数不含前导零该整数是一个偶数例如,给定的 digits 是 [1, 2, 3] ,整数 132 和 312 满足上面列出的全部条件。将找出的所有互不相同的整数按 递增顺序 排列,并以数组形式返回。输入:digits = [2,1,3,0]输出:[102,120,1

2021-12-05 12:42:06 902

原创 剑指offer 2 day5

字符串中的变位词class Solution { public boolean checkInclusion(String s1, String s2) { if(s1.length() > s2.length()){ return false; } int[] a = new int[26]; int[] b = new int[26]; for(int i = 0;i < s1

2021-12-02 14:34:54 404

原创 间隔删除链表结点

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* deleteListNode(ListNode* head) { if(head==nullptr.

2021-10-30 09:22:22 144

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

剑指 Offer 35. 复杂链表的复制拼接 + 拆分考虑构建 原节点 1 -> 新节点 1 -> 原节点 2 -> 新节点 2 -> …… 的拼接链表,如此便可在访问原节点的 random 指向节点的同时找到新对应新节点的 random 指向节点。算法流程:复制各节点,构建拼接链表:设原链表为node1→node2→⋯ ,构建的拼接链表如下所示:node1→node(1 ) →node2→node(2 ) →⋯构建新链表各节点的 random 指向:当访问原节点

2021-10-09 22:01:03 44

原创 剑指 Offer 06. 从尾到头打印链表

剑指 Offer 06. 从尾到头打印链表class Solution { public int[] reversePrint(ListNode head) { ListNode tmp = head; int len = 0; while(tmp!=null){ ++len; tmp = tmp.next; } int[] res = new int[len];

2021-10-08 22:25:32 61

原创 Redis学习(三)--位图、hyperloglog、布隆过滤器

目录前言一、位图1.基本使用2.统计和查找二、HyperLoglog1.使用方法三、布隆过滤器1.布隆过滤器是什么?2.布隆过滤器的基本使用3.注意事项4.布隆过滤器的原理5.布隆过滤器的其它应用前言前面两篇文章Redis学习(一)Redis学习(二)–分布式锁、延时队列一、位图在我们平时开发过程中,会有一些 bool 型数据需要存取,比如用户一年的签到记录,签了是 1,没签是 0,要记录 365 天。如果使用普通的 key/value,每个用户要记录 365 个,当用户上亿的时候,需要的

2021-09-30 15:23:36 174

原创 Redis学习(二)--分布式锁、延时队列

文章目录前言一、什么是分布式锁?1.超时问题2.可重入性二、延时队列1.异步消息队列2.队列空了怎么办?3.队列延迟4.延时队列的实现前言上篇文章我们谈到了一些redis的基础的东西,它如何安装,能做什么,以及它的基本的数据类型。redis学习(一)一、什么是分布式锁?分布式应用进行逻辑处理时经常会遇到并发问题。比如一个操作要修改用户的状态,修改状态需要先读出用户的状态,在内存里进行修改,改完了再存回去。如果这样的操作同时进行了,就会出现并发问题,因为读取和保存状态这两个操作不是原子的。这

2021-09-29 15:46:05 278

原创 redis学习(一)

文章目录前言一、Redis 可以做什么?二、认识redis1.redis的安装2.redis的五大数据类型前言Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, hashes, lists, sets, sorted se.

2021-09-28 19:49:28 96

原创 排序算法高级篇---希尔、归并、快排

前言上一篇文章写了三个简单的排序算法,这篇文章我们来谈一谈其他几个排序算法。排序算法简单篇希尔排序希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。前面学习插入排序的时候,我们会发现一个很不友好的事儿,如果已排序的分组元素为{2,5,7,9,10},未排序的分组元素为{1,8},那么下一个待插入元素为1,我们需要拿着1从后往前,依次和10,9,7,5,2进行交换位置,才能完成真正的插入,每次交换只能和相邻的元素交换位置。那如果我们要提高效率,直观的想法就是一次交

2021-09-27 13:57:33 110

原创 排序算法简单篇

冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。排序原理:比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。import java.util.Arrays;public class Bubble { public static void sort(Comparable[] a) { for (int i = a.

2021-09-26 22:41:21 73

原创 设计模式概述

前言鲁迅先生曾说过:“其实地上本没有路,走的人多了,也便成了路。”设计模式亦是如此,它是人类在工程领域的总结与传承。面向对象设计原则说到设计模式,我们不得不先了解面向对象的七大设计原则。单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。这是它的定义,但是也可以这样理解,即控制粒度大小,将对象解耦,提高内聚性。开闭原则:对扩展开发,对修改关闭。里氏代换原则:所有引用基类的地方必须能透明的使用其子类的对象。也可以这样理解,即继承必须确保超类中的性质在子类中仍然成立。依赖

2021-09-25 17:34:10 81

原创 TCP/IP计算机网络基础

网络协议在计算机诞生后,从单机模式应用发展到将多台计算机连接起来,形成计算机网络,使信息共享、多机协作、大规模计算等成为现实,历经了20多年的时间。计算机网络需要解决的第 个问题是如何无障碍地发送和接收数据。而这个发送和接收数据的过程需要相应的协议来支撑,按互相可以理解的方式进行数据的打包与解包,使不同厂商的设备在不同类型的操作系统上实现顺畅的网络通信。TCP/IP ( Transmission Control Protocol I Internet Protocol )中文译为传输控制协议/因特网互联

2021-09-24 22:34:10 242

原创 微服务学习笔记

认识微服务服务架构演变单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点: 架构简单 部署成本低 缺点: 耦合度高分布式架构分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。 优点: 降低服务耦合 、有利于服务升级拓展服务治理分布式架构的要考虑的问题: 服务拆分粒度如何? 服务集群地址如何维护? 服务之间如何实现远程调用? 服务健康状态如何感知?微服务微服务是一种经过良...

2021-09-23 22:31:04 190

原创 CPU与内存

CPU ( Central Processing Unit )是一块超大规模的集成电路板,是计算机的核心部件,承载着计算机的主要运算和控制功能,是计算机指令的最终解释模块和执行模块。硬件包括基板、核心、针脚,基板用来固定核心和针脚,针脚通过基板上的基座连接电路信号, CPU 核心的工艺极度精密,达到 10 纳米级别。连接电路信号, CPU 核心的工艺极度精密,达到 10 纳米级别。和其他硬件设备相比,在实际代码的运行环境中, CPU 与内存是密切相关的两个硬件设备。开发工程师在实际编程中,对这两个部件有一

2021-09-23 20:07:22 1215

原创 一道算法题

编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件中,a.txt 文件中的单词用回车符分隔,b.txt 文件中用回车或空格进行分隔。package cn.itcast;import java.io.File;import java.io.FileReader;import java.io.FileWriter;public class MainClass{public static void main(String[] args) throws E

2021-09-17 15:07:59 77

原创 进程和线程

进程和线程进程线程进程进程是计算机科学中最重要和最成功的概念之一。进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程, 而每个进程都好像在独占地使用硬件。而并发运行,则是说一个进程的指令和另一个进程的指令 是交错执行的。在大多数系统中,需要运行的进程数是多于可以运行它们的 CPU 个数的。传统 系统在一个时刻只能执行一个程序,而先进的多核处理器同时能够执行多个程序。无论是在单核 还是多核系统中,一个 CPU 看上去都像是在并发地执行多个进程,这是通过处理器在进程间切 换来实

2021-08-22 20:35:51 62

原创 一些对IOC 和 DI的理解

一些对IOC 和 DI的理解什么是IOCIOC能做什么IOC和DIIOC和DI的意义什么是IOCIOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。理解好IOC的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”。谁控制谁,控制什么: 传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖

2021-06-01 23:23:46 51

空空如也

空空如也

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

TA关注的人

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