自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 迪米特法则_6

迪米特法则1.一个对象应该对其他对象保持最少的了解2.类与类关系越密切,耦合度越大3.迪米特法则又叫做最少知道原则,即一个类对自己依赖的类知道的越少越好,也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息4.迪米特法则还有个更简单的定义:只与直接的朋友通信5.直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖组合,关联,聚合等。其中,我们称出现成员变量,方

2021-11-03 11:21:03 202

原创 开闭原则_5

开闭原则基本介绍1)开闭原则是编程中最基础,最重要的设计原则2)一个软件实体类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节3)当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化4)编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则实现一个绘图的功能代码如下public class Ocp { public static void main(String[] args) {

2021-10-28 22:44:32 143

原创 里氏替换_4

里氏替换OO中的继承性的思考和说明1)继承包含这样一层意义,父类中凡是已经实现好的方法,实际上是设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏2)继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到的子类的功能都有可能产生故障。3)问题提出,在编程中,如何正确

2021-10-27 22:59:57 133

原创 依赖倒转_3

依赖倒转原则基本介绍1)高层模块不应该依赖底层模块,二者都应该依赖其抽象2)抽象不应该依赖细节,细节应该依赖抽象3)依赖倒转(倒置)核心思想是面向接口编程应用实例编程完成Person接受消息的功能方式1分析1.简单,比较容易想到2.如果我们获取的对象是微信,短信等,则新增类,同时Person也要新增相应的接受方法3.解决思路:引入一个抽象的接口IReceiver 表示接受者,这样Person类与接口IReceiver发生依赖,因为Emial,微信 等属于接受的范围, 他们各自实现IRe

2021-10-26 22:49:25 112

原创 接口隔离_2

2 接口隔离原则客户端不应该依赖它不需要的接口,即一个类对应另一个类的以来应该建立在最小的接口上类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。2.1应用实例类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,public class Segregation1 { /** * A类通过接口Inteface

2021-10-26 22:33:49 66

原创 单一职责_1

1、单一职责对类来说,即一个类应该只负责一项职责,如果类A负责两个不同职责:职责1,职责2,当职责1需求变更改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A21.1应用实例方式1public class SingleResponsibility1 { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.run("摩托车");

2021-10-26 22:31:36 77

原创 ES6_let声明变量以及声明特性01

基础入门1.let声明变量以及声明特性1.1 let声明变量<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>let声明以及生命特性</title></hea

2021-10-26 16:07:26 95

原创 NodeJS_package和NPM_3

一、包(package)CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具CommonJS的包规范有包结构和包描述文件两个部分组成1.1包结构用于组织包中的各种文件包实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件-package :描述文件-bin:可执行二进制文件-lib:js代码-doc:文档-test:单元测试1.2包描述文件包描述的相关信息,以供外部读取分析包描述文件用于表达非代码相关的信息,它是一个 JSON格式

2021-10-26 10:28:42 107

原创 NodeJS_文件系统_4

一、Buffer缓冲区/** * Buffer(缓冲区) * -Buffer的结构和数组很像,操作的方法也和数组类似 * - 数组中不能存储二进制的文件,而buffer就是专门存储二进制数 * - 在buffer中存储的都是二进制数据,但是在显示时都是以16进制的形式显示 * buffer中每一个元素的范围是从00-ff 0-255 * 00000000 - ffffffff * * 计算机 一个0 或一

2021-10-26 10:28:15 96

原创 NodeJS_exports和module.exports_2

exports和module.exports示例代码定义一个helloModule模块exports={ name:"猪八戒", age:28, sayName:function () { console.log("我是猪八戒"); }},再定义一个另外一个js文件,引用helloModule中的变量和函数看结果var hello = require("./helloModule");console.log(hello.name);conso

2021-10-19 10:20:06 89

原创 NodeJS_入门学习_1

一、Node.js简介1.Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。2.Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。3.Node大部分基本模块都用JavaScript编写。在Node出现之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常在用户的浏览器上运行。4.Node主要用于编写像Web服务器一样的网络应用,这和PHP和Python

2021-10-18 10:40:39 163

原创 NIO介绍

一、JAVA NIO 与IO区别IO NIO面向流 面向缓冲区阻塞IO 非阻塞IO无 选择器 Selector二、通道和缓冲区Java NIO系统的核心在于:通道(Channnel)

2021-07-23 17:04:56 105

原创 1. 两数之和

两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], tar.

2021-07-22 18:07:13 517

原创 八、Lambda时间与日期API

一、使用LocalDate、LocalTime、LocalDateTimeLocalDate、LocalTime、LocalDateTime类的实例时不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间,他们提供了简单的日期或时间,并不包含当前时间信息,也不包含与时区相关的信息public class TestLambda{ public void test(){ LocalDate ldt = LocalDateTime.now(); System.out.prin

2021-07-14 16:12:59 536

原创 七、Lambda 容器类Optional

一、Optional 类Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在 原来用null表示一个值不存在,现在Optional可以更好的表达这个概念,并且可以避免空指针异常public class TestLambda{ /** * Optional 类常用方法 * Optional.of(T t) 创建一个Optional实例 * Optional.empty() 创建一个空Optional实例 * Optional.foNullable(T

2021-07-13 15:37:12 93

原创 六、Lambda Stream归约与收集

Stream归约与收集public class TestLambda{ List<Employee> emps = Arrays.asList( new Employee(101,"张三",18, Employee.Status.VOCATION), new Employee(102,"李四",28, Employee.Status.VOCATION), new Employee(103,"王五",38, Emplo

2021-07-12 17:58:40 124

原创 五、Lambda Stream查找与匹配

Lambda Stream查找与匹配public class TestLambda{ /** * 终止操作 * 查找与匹配 * allMatch -- 检查是否匹配所有元素 * anyMatch -- 检查是否至少匹配一个元素 * noneMacth -- 检查是否美哟匹配所有元素 * findFirst -- 返回第一个元素 * findAny -- 返回当前流中的任意元素 * count -- 返回流中的元素的总个数 * max -- 返回流中最大值 * min -- 返回流

2021-07-12 16:51:30 258

原创 四、Lambda 流Stream

一、流到底时什么是数据通道,用于操作数据源(集合、数组等)所生成的元素序列“集合讲的是数据,流讲的是计算”注意:① Stream不会存储元素② Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream③ Stram操作是延迟执行的。这意味着他们会等到需要结果的时候才执行/*** 一、Stream 的三个操作* 1.创建stream* 2.中间操作* 3.终止操作(终端操作)**/public class TestStream{ List<

2021-07-12 15:12:42 144

原创 三、Lambda 方法引用与构造器引用

Lambda 方法引用与构造器引用public class TestMethodRef{ /** * 一、方法引用:若Lambda 体中的内容有方法已经实现,我们可以使用“方法引用” * (可以理解为方法引用是lambda表达式的另一种表现形式) * 主要三种语法格式: * ① 对象::实现方法名 * ② 类::静态方法名 * ③ 类::实例方法名 * 注意: * ① lambda 体中调用方法的参数列表与返回值类型

2021-07-09 16:31:16 248

原创 二、Lambda 四大内置核心函数式接口

Lambda 四大内置核心函数式接口直接上代码public class TestLambda{ /**1.Consuner<T> 消费型接口 * void accept(T t); 接收一个参数 ,无返回值 **/ @Test public void test1(){ happy(1000,(m)->System.out.println("每次消费"+ m + "元")); } public void happy(double

2021-07-09 15:05:45 103

原创 一、Lambda 表达式基础语法

一、Lambda基础语法只为开起来方便自己做些笔记,若有不准确的地方还望各位大佬指正JAVA 8 中引入了一个新的操作符 “->” 该操作符称为 “箭头操作符” 或lambda 操作符,箭头操作符将lambda表达式拆分成两部分左侧:lambda表达式的参数列表右侧:lambda表达式中所需要执行的功能,即lambda体在这里插入代码片public class TestLambda{ /**①无参数,无返回值 *()-> System.out.println("Hel

2021-07-08 16:34:02 185

转载 00并发编程_线程基础和线程之间的共享和协作

本文转载自:https://www.jianshu.com/p/959cf355b574一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么,也就是说并发编程具有哪些缺点?以及在进行并发编程时应该了解和掌握的概念是什么?这篇文章主要以这三个问题来谈一谈。1. 为什么要用到并发一直以来,硬件的发展极其迅速,也有一个很著名的"摩尔定律",可能会奇怪明明讨论的是并发编程

2020-08-26 15:30:19 97

原创 03并发编程_工具类

Semaphore(信号量)信号量模型还是很简单的,可以简单概括为:一个计数器,一个等待队列,三个方法。在信号量模型里,计数器和等待队列对外是透明的,所以只能通过信号量模型提供的三个方法来访问它们,这三个方法分别是:init()、down() 和 up()。你可以结合下图来形象化地理解。这三个方法详细的语义具体如下所示。init():设置计数器的初始值down():计数器的值减 1;如果此时计数器的值小于 0,则当前线程将被阻塞,否则当前线程可以继续执行。up():计数器的值加 1;

2020-08-19 14:45:35 119

原创 07并发编程_AQS

什么是AQS? AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架。AQS使用方式和其中的设计模式继承、模板方法设计模式了解其用法模板方法独占式获取锁 acquire acquireInterruptily tryAcquireNanos共享式获取锁 acquireShared ...

2020-08-18 10:43:43 112

原创 06并发编程_显示锁

显示锁Lock接口和核心方法lock() 加锁操作unlock() 解锁操作tryLock()加锁就需要解锁,写代码一定要在finally中记得解锁public class LockDemo { private Lock lock = new ReentrantLock(); private int count ; public void increntCountByLock(){ lock.lock(); try{ .

2020-08-18 10:28:21 110

原创 05并发编程_CAS

什么是CASCAS (compareAndSwap),中文叫比较交换,一种无锁原子算法。过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。CAS 操作时抱着乐观的态度进行的,它总是认为自己可以成功完成操作。CAS的全称为Compare And Swap,直译就是比较交换。是一条CPU的原子指令,其作

2020-08-18 09:57:56 134

原创 04并发编程_DCL

单例模式模式是脱离语言的。问题的由来:为什么?多个线程操作不同实例对象。多个线程要操作同一对象,要保证对象的唯一性解决的问题:实例化过程中只实例化一次解决的思路有一个实例化的过程(只有一次),产生实例化对象 new 提供返回实例对象的方法 getInstace()单例模式的分类1.饿汉式线程安全:在类加载时候已经被实例化一次,所以只有这一次,线程安全懒加载:没有延迟加载,如果好长时间不使用,影响性能public class HungerySi...

2020-08-13 09:04:31 112

原创 01并发编程_JMM模型

Java内存模型1基本概念:程序:代码,完成某一件任务,代码序列(静态的概念)进程:程序在某些数据上的一次运行(动态的概念)线程:一个进程可能包含一个或多个线程(占有资源的独立单元)2 JVM与线程JVM什么时候启动?类被调用 JVM线程---》其他的线程执行(main)线程在JVM中3 JVM内存区域方法区:类信息、常量、static 、JIT(及时编译)(信息共享)Java堆区:实例对象 GC (信息共享) (OOM内存溢出)VM...

2020-08-03 21:47:01 180

原创 dubbo原理_4

1、RPC原理一次完整的RPC调用流程(同步调用,异步另说)如下:1)服务消费方(client)调用以本地调用方式调用服务; 2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体; 3)client stub找到服务地址,并将消息发送到服务端; 4)server stub收到消息后进行解码; 5)server stub根据解码结果调用本地的服务; 6)本地服务执行并将结果返回给server stub; 7)server stub将返回结果

2020-07-15 15:54:21 215

原创 Dubbo高可用_3

1、zookeeper宕机与dubbo直连现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务。原因:健壮性监控中心宕掉不影响使用,只是丢失部分采样数据数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务注册中心对等集群,任意一台宕掉后,将自动切换到另一台注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯服务提供者无状态,任意一台宕掉后,不影响使用服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

2020-07-15 14:45:33 144

原创 Dubbo配置_2

配置的官方网址http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html1、配置原则1 .properties加载顺序1-1dubbo.properties 加载顺序 优先1,其次2 ,最后3上面图中的顺序对应下面的3中情况1.JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。2.XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的.

2020-07-14 16:26:25 310

原创 Dubbo基础知识与SpringBoot整合项目_1-3

一、创建公用的部分提出到一个公共的项目中gmail-interface还是应用上一篇文章的gmail-interface这个公用的项目 代码不变二、服务提供者boot-user-service-provider项目结构如下pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati

2020-07-13 11:48:37 193

原创 Dubbo基础知识与Spring整合项目_1-2

一、创建公用的部分提出到一个公共的项目中gmail-interface项目结构如图pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0

2020-07-10 10:56:53 209

原创 Dubbo基础知识_1

1、分布式基础理论1.1)、什么是分布式系统?《分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”分布式系统(distributed system)是建立在网络之上的软件系统。随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。1.2)、发展演变单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部

2020-07-10 09:46:52 170

转载 ActiveMQ高级特性总结_17

一、高级特性之异步投递ctiveMQ官网对异步投递的描述:http://activemq.apache.org/async-sendsActiveMQ支持同步投递和异步投递两种模式将消息发送到broker,模式的选择对发送的延时有巨大的影响。生产者能达到的产出率主要受发送延时的影响,使用异步发送可以显著提高发送的性能。ActiveMQ默认采用异步发送的模式,除非明确指定使用同步发送方式,或者在未使用事务的前提下发送持久化消息,这两种情况都是同步发送的。如果没有使用事务且发送的是持久化的消息,

2020-07-03 14:41:19 300

转载 ActiveMQ多节点集群_16

一、Zookeeper与Replicated LevelDB集群原理面试题:引入消息队列后,如何保证高可用性?基于Zookeeper和LevelDB搭建的ActiveMQ集群,集群提供主备方式的高可用集群功能,避免单点故障。ActiveMQ官网主从介绍:http://activemq.apache.org/masterslave.html可以看到,这里支持3种方式:共享文件系统主从、JDBC主从、可复制的LevelDB存储。LevelDB是ActiveMQ 5.6版本之后推出的持久化引擎

2020-07-02 17:06:25 347 1

转载 ActiveMQ消息持久化与存储_15

一、ActiveMQ消息持久化理论简介前面我们保留了备份,现在先将文件恢复回来,并重启ActiveMQ。MQ高可用的4个条件:事务,持久,签收,可持久化。其中持久是指的DeliveryMode.PERSISTENT,可持久化是指将消息存储在磁盘中。事务,持久,签收,这三个都是MQ自带实现的功能。对于可持久化,需要借助外力,比如数据库等。ActiveMQ官网持久化介绍:http://activemq.apache.org/persistence。在ActiveMQ 5.9中,引入了复制

2020-07-02 10:40:32 435 1

转载 ActiveMQ传输协议简介_14

一、ActiveMQ传输协议简介ActiveMQ支持的client-broker通信协议有:TCP、 NIO、 UDP 、SSL、 Http(s)、 VM,其中配置Transport Connector的文件在activeMQ安装目录的conf/activemq.xml中的<transportConnectors>标签内<transportConnectors> <!-- DOS protection, limit concurrent connection.

2020-07-01 10:04:02 334

转载 ActiveMQ与SpringBoot整合_13

新建maven工程,我的工程名叫SpringBootActiveMQProducer。根据需要,在pom.xml中加入jar包的坐标,方便复制,我贴出来。一、SpringBoot整合ActiveMQ 生产者<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLS

2020-06-30 21:21:09 173

转载 ActiveMQ与Spring整合_12

一、队列的生产和消费者pom.xml添加Spring相关的坐标,完整内容如下所示。还是保持linux系统的mq服务开始<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h

2020-06-30 10:19:33 127

空空如也

空空如也

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

TA关注的人

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