- 博客(72)
- 收藏
- 关注
原创 设计模式--模板方法模式
背景需求编写制作豆浆的程序制作豆浆的流程 选材-->添加配料-->浸泡-->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于每种口味的豆浆都是一样的基本介绍模板方法模式(Template Method Pattern),又叫模板模式,在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行 简单说,模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得
2022-05-04 16:33:41
663
原创 Docker部署ElasticSearch(7.6.2)
部署ElasticSearch1.创建 elasticsearch目录mkdir elasticsearch2.在elasticsearch目录下批量创建data,config,log,plugins目录mkdir -p /data/elasticsearch/{data,config,log,plugins}3.创建elasticsearch.yml文件cd /data/elasticsearch/configvim elasticsearch.yml4.添加以下配置
2022-05-04 15:14:44
1789
原创 Docker部署Seata(1.3.0)
1.目录文件结构图2.mysql-connector-java-8.0.21.jar下载路径Central Repository: mysql/mysql-connector-java/8.0.213.docker-compose-seata.yaml文件version: "3"services: seata-server: image: seataio/seata-server:1.3.0 container_name: seata-server ho
2022-05-03 22:19:23
2752
原创 设计模式--组合模式
背景需求编写一段程序展示一个学校院系结构:要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。基本介绍组合模式,又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示"整体--部分"的层次关系 组合模式依据树形结构来组合对象,用来表示部分以及整体层次 这种类型的设计模式属于结构型模式 组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象组合模式解决的问题当我们要处理的对象可以生成一颗树形结构,
2022-05-03 14:36:05
168
原创 设计模式--装饰者模式
背景需求星巴克咖啡订单项目咖啡种类:意大利浓咖啡(Espresso),美式咖啡(LongBlack),无因咖啡(Decaf) 调料:Milk、Soy、Chocolate 要求在拓展新的咖啡种类时,具有良好的拓展性,改动方便,维护方便 计算不同种类咖啡的费用:客户可以单品咖啡,也可以单品咖啡+调料组合定义装饰者模式:动态的将新功能附加到对象上。在对象功能拓展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)。代码示例package com.zjb.design.deco
2022-05-02 16:28:10
285
原创 设计模式--桥接模式
基本介绍桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变 是一种结构型设计模式 桥接模式基于类的最小设计原则,通过使用封装,聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及对应他们的功能拓展背景需求代码示例package com.zjb.design.bridge;/** * @Author Kim * @Date 2022/5/2 14:35 * @Desc.
2022-05-02 15:11:16
212
原创 设计模式--建造者模式
背景需求需要建房子,这一过程为打桩、砌墙、封顶 房子有各种各样的,比如普通房,高楼,别墅。各种房子的过程虽然都是一样的,但是要求是不相同的基本介绍建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式四个角色Product(产品角色):
2022-04-30 17:09:07
281
原创 Sentinel(1.8.1)制作Docker镜像
准备工作sentinel-dashboard.jarjdk-8u11-linux-x64.tar.gz1.创建jar文件夹mkdir jar2.在jar文件夹下创建1.8.1文件夹mkdir 1.8.13.将sentinel-dashboard.jar放到1.8.1文件夹下4.将jdk-8u11-linux-x64.tar.gz放在与jar文件夹同级的目录下5.编写Dockerfile文件vim Dockerfile6.Dockerfile...
2022-04-30 01:45:35
2029
原创 设计模式--原型模式
克隆羊思路:Java中Object类是所有类的根类,Object类提供了一个clone()方法,该方法可以将一个Java对象复制一份,但是需要实现clone的Java类必须要实现一个接口Cloneable,该接口表示该类能够复制且具有复制的能力==>原型模式。基本介绍原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节 工作原理:通过将一个原
2022-04-23 21:00:11
750
1
原创 设计模式--工厂模式
简单工厂模式需求做一个披萨的项目:要便于披萨种类的拓展,要便于维护披萨的种类很多 披萨的制作有prepare,bake,cut,box 完成披萨店订购功能基本介绍简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实施。简单工厂模式是工厂模式家族中最简单实用的模式。 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码) 在软件开发中,当我们会用到大量的创建某种、某类或某批对象时,就会使用到工厂模式代码示例
2022-04-23 15:18:07
569
原创 设计模式--单例模式
目录介绍单例模式的八种方式饿汉式(静态常量)步骤如下代码实现优缺点说明饿汉式(静态代码块)步骤如下代码实现优缺点说明懒汉式(线程不安全)代码实现优缺点说明懒汉式(线程安全,同步方法)代码实现优缺点说明懒汉式(线程不安全,同步代码块)代码实现优缺点说明双重检查代码实现优缺点说明静态内部类代码实现优缺点说明枚举代码实现优缺点说明单例模式JDK源码分析单例模式的注意事项及细节使用场景介绍
2022-04-17 20:31:49
136
原创 设计模式介绍
目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可拓展性,重用性,灵活性等多方面的挑战,设计模式就是为了让程序具有更好的代码重用性(即:相同功能的代码,不用多次编写) 可读性(即:编码规范性,便于其他程序员的阅读和理解) 可拓展性(即:当需要增加新的功能时,非常方便,称为可维护性) 可靠性(即:当我们增加新的功能时,对原来的功能没有影响) 使程序呈现高内聚,低耦合的特性七大原则单一职责原则 接口隔离原则 依赖倒转原则 里氏替换原则 开闭原则 迪米特法则 合成
2022-04-16 18:09:58
317
原创 RabbitMQ详解
一、概念1.什么是MQMQ(message queue),从字面意思看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游"逻辑解耦+物理解耦"的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。2.为什么要用MQ流量削峰举个例子,如果订单系统最多能处理一万订单,这个处理能力应付正常时段的下单是卓卓有余的,正常时段我们下单一秒后就能返回结果,但是在高
2022-04-10 18:07:33
2368
原创 ElasticSearch
目录概述安装可视化界面ELK安装KibanaES核心概念关系型数据库和elasticsearch的对比文档类型索引物理设计:节点和分片如何工作倒排索引elasticsearch的索引和lucene索引对比IK分词器安装自定义分词Rest风格说明创建一个索引基本类型指定字段类型扩展修改索引删除索引复杂操作搜索布尔值查询精确查询高亮自定义高亮集成SpringBoot...
2022-04-05 16:52:43
1848
原创 SpringCloud Stream (消息驱动)
消息中间件的几大应用场景应用解耦假设公司有几个不同的系统,各系统在某些业务有联动关系,比如A系统完成了某些操作,需要触发B系统及C系统,但是各个系统之间产生了耦合。针对这种场景,用消息中间件就可以完成解耦,当A系统完成操作时将数据放进消息队列,B和C系统去订阅消息就可以了,这样各系统只要约定好消息的格式就可以了。异步处理比如用户在电商网站下单,下单完成后会给用户推送短信或邮件,发短信和邮件的过程就可以异步完成。因为下单付款才是核心业务,发邮件和短信并不属于核心功能,且可能耗时较长,所以针对这
2022-03-20 15:11:42
2561
1
原创 Linux
系统目录结构查看根目录下目录ls /会看到如下图所示目录解释/bin : bin是Binary的缩写,这个目录存放着最经常使用的命令 /boot:这里存放的是启动linux时使用的一些核心文件,包括一些连接文件以及镜像文件 /dev:dev是Device(设备)的缩写。存放的是linux的外部设备,在linux中访问设备的方式和访问文件的方式是相同的。 /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录 /home:用户的主目录,在linux中,每个用户都有.
2022-03-01 19:04:08
631
原创 多线程进阶
线程、进程说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。 而进程则是执行程序的一次执行过程,他是一个动态的概念。是系统资源分配的单位 通常在一个进程中可以包含若干个线程,当然一个进程至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位java默认有两个线程:main、gc通过查看源代码可知,java不能开启线程,java是通过调用本地方法开启的线程。代码如下: public synchronized void start
2022-02-08 19:55:42
162
原创 链路追踪:SkyWalking
目录一、前言二、SkyWalking是什么三、链路追踪框架对比四、主要功能特性五、服务端搭建六、SkyWalking接入微服务七、SkyWalking跨多个微服务跟踪八、持久化基于mysql持久化九、自定义链路追踪十、性能剖析十一、SkyWalking集成日志框架SkyWalking通过grpc上报日志(需要v.8.4.0+)十二、告警告警规则Webhook(网络钩子)邮件告警功能实践十三、SkyWalking高可用一、前言..
2022-01-30 16:24:42
11156
原创 SpringCloud:网关Gateway
一、前言所谓API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,比如:认证、鉴权、监控、路由转发等。利用API网关可以解决以下问题:全局性流控 日志统计 防止sql注入 防止web攻击 屏蔽工具扫描 黑白ip名单 证书/加解密处理 服务级别流控 服务降级与熔断 路由与负载均衡、灰度策略 服务过滤、聚合与发现 权限验证与用户等级策略 业务规则与参数检验 多级缓存策略二、Gateway介绍
2022-01-29 19:48:10
2744
原创 多线程学习
1.线程简介1.1 进程和线程说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。 而进程则是执行程序的一次执行过程,他是一个动态的概念。是系统资源分配的单位 通常在一个进程中可以包含若干个线程,当然一个进程至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位 注意:很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,cpu只能执行一个代码,因为切换的很快,所以...
2022-01-25 21:20:04
587
原创 Java注解和反射
一、注解1、注解入门1.1、什么是注解Annotation是从JDK5.0开始引入的新技术Annotation的作用不是程序本身,可以对程序作出解释 可以被其他程序读取 Annotation的格式 注解是以"@注释名"在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")Annotation在哪里使用 可以附加在package,class,method,field等上面,相当于给他们添加了额...
2022-01-25 21:17:41
490
原创 Java基础语法
1.注释1.1 java注释有三种:单行注释 多行注释 文档注释注释是不会被执行的,只是给我们看的。书写注释是一个非常好的习惯。1.1.1 单行注释语法: 双斜杠 //1.1.2 多行注释语法: /* 注释内容 */1.1.3 文档注释语法:/** */文档注释和多行注释的区别:文档注释会有一些参数,例如:@Description 描述 @Author 作者 等,而多行注释是不具备的。2.标识符和关键字...
2022-01-25 21:13:22
87
原创 Redis详解
一、Redis概述1. Redis是什么Redis(Remote Dictionary Server),远程字典服务。是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。2.Redis可以干什么1.内存存储,持久化,内存中断点即失,所以说持久化很重要。持久化的方式:RDB...
2022-01-24 23:52:51
3081
原创 SpringCloudAlibaba:OpenFeign
什么是FeignFeign是Netflix开发的声明式,模板化的http客户端,可以帮助我们更加便捷、优雅的调用HTTP API。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等SpringCloud OpenFeign对Feign进行了增强,使其支持SpringMvc注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便。优势:Feign可以做到使用Http请求远程服务时就像调本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是.
2021-12-19 18:06:39
940
原创 SpringCloudAlibaba:负载均衡器Ribbon
什么是ribbon目前主流的负载方案分为以下两种:集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(如:F5),也有软件的(如:nginx) 客户端根据自己的请求情况做负载均衡,Ribbon就属于客户端自己做负载均衡SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列完善的配置,如超时、重试等。通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规..
2021-12-19 16:13:49
920
原创 SpringCloudAlibaba
SpringCloudAlibaba介绍SpringCloudAlibaba致力于提供微服务开发的一站式解决方案。包含开发微服务架构的必需组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开发微服务架构。依托SpringCloudAlibaba,只需添加一些注解和少量配置,就可以将SpringCloud应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统基础环境搭建1.创建基于SpringBoot的父maven项目这里什么都不选,点...
2021-12-18 17:04:11
939
转载 SpringBoot:Zookeeper和Dubbo集成
分布式理论1、什么是分布式系统在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”;分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。分布式系统(distributed system)是建立在网络之上的软件系统。首先需要明确的是,只有当单个节点的处理能力无法..
2021-12-12 13:48:12
189
翻译 SpringBoot:国际化
有的时候,我们的网站会去涉及中英文甚至多语言的切换,这时候我们就需要学习国际化了!准备工作先在IDEA中统一设置properties的编码问题!编写国际化配置文件,抽取页面需要显示的国际化页面消息。我们可以去登录页面查看一下,哪些内容我们需要编写国际化的配置!配置文件编写1、我们在resources资源文件下新建一个i18n目录,存放国际化配置文件2、建立一个login.properties文件,还有一个login_zh_CN.properties;发现IDEA自动识别了我们要.
2021-12-11 17:46:12
301
翻译 SpringBoot:自定义Starter
说明启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库;命名归约:官方命名: 前缀:spring-boot-starter-xxx 比如:spring-boot-starter-web.... 自定义命名: xxx-spring-boot-starter 比如:mybatis-spring-boot-starter 编写启动器1、在IDEA中新建一个空项目 spring-boot-starter-di.
2021-12-11 17:26:18
168
原创 SpringBoot:任务
异步任务1. 在方法上添加@Asyncpackage com.zjb.service;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Service;@Servicepublic class AsyncService { /** * @Async:表示这个方法是异步执行的 */ @Async pub.
2021-12-11 16:41:45
317
翻译 SpringBoot:集成Swagger
学习目标: 了解Swagger的概念及作用 掌握在项目中集成Swagger自动生成API文档 Swagger简介Swagger 号称世界上最流行的API框架 Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新 直接运行,在线测试API 支持多种语言 (如:Java,PHP等) 官网:https://swagger.io/ SpringBoot集成SwaggerSpringBoot集
2021-12-05 19:44:11
181
原创 SpringBoot:集成Shiro
简介什么是ShiroApache shiro 是一个Java的安全(权限)框架 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境 Shiro可以完成认证、授权、加密、会话管理、Web集成、缓存等。 官网地址:https://shiro.apache.org/环境搭建1.导入依赖<!-- shiro和Spring的整合包:shiro-spring --> <dependency> ...
2021-12-05 17:16:54
252
翻译 SpringBoot:集成SpringSecurity
在 Web 开发中,安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题,就可能陷入一个两难的境地:一方面,应用存在严重的安全漏洞,无法满足用户的要求,并可能造成用户的隐私数据被攻击者窃取;另一方面,应用的基本架构已经确定,要修复安全漏洞,可能需要对系统的架构做出比较重大的调整,因而需要更多的开发时间,影响应用的发布进程。因此,从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中。Spring Sec
2021-12-04 22:18:07
1555
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人