自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ThinkMore

技术总结与分享

  • 博客(153)
  • 资源 (2)
  • 收藏
  • 关注

转载 设计模式专题(八)观察者模式

目录观察者模式的定义:大白话:观察者模式实现举例观察者模式结构图观察者模式的定义:  在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话:  其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。观察者模式实现举例有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。1、定义一个抽象被观察者接口package com.jsta

2020-09-23 15:29:17 303

原创 设计模式专题(七)装饰器模式

目录定义装饰器模式的结构示例代码定义装饰器模式又名包装(Wrapper)模式。装饰器模式以对客户端透明的方式拓展对象的功能,是继承关系的一种替代方案。装饰器模式的结构装饰器模式以对客户透明的方式动态的给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰器模式可以在不是用创造更多子类的情况下,将对象的功能加以拓展。装饰器模式的类图如下:装饰器模式的类图在装饰器模式中的角色有:抽象构件(Component)角色:给出一个抽象接口

2020-09-23 15:29:08 639

转载 设计模式专题(六)适配器模式

目录适配器模式的定义大白话适配器模式结构图适配器模式的实现举例类的适配器模式对象的适配器模式接口的适配器模式适配器模式的定义  将一个类的接口转成客户期望的另外一个接口。适配器模式使得原本由于接口不匹配而不能一起工作的那些类可以一起工作。大白话  适配器模式就像旅行插座转换器(图1)、Type-c转VGA转接口一样。图1.图2.  去过香港迪拜等的同学都知道,那边用的插座跟我们不一样,他们的插座需要如图2第1面所示的插头,而我们常用的插座类..

2020-09-23 15:28:39 274

原创 设计模式专题(五)模板方法模式

模板方法模式的定义定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤模板方法模式的通用类图如下:模板方法模式确实非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式。其中,AbstractClass叫做抽象模板,它的方法分为两类:基本方法:基本方法也叫作基本操作,是由子类实现的方法,并且在模板方法被调用。模板方法:可以是一个或多个,一般是一个具体方法,也就是一个框架,实现对基本方法的调.

2020-08-04 13:50:45 208

原创 设计模式专题(四)策略模式

策略模式使用场景策略模式:根据用户的需求处理数据时候需要对算法做出选择,固定的一些算法(不再发生变化的算法),扩展客户本身他不知道采用什么算法去计算一些常用的使用场景:比较器 旅行路线 固定算法 买东西结算支付策略模式实现我们先做一个订单状态类:public class PayState { private int code; private Object data; private String msg; public PayState(i...

2020-08-04 13:50:33 204

原创 设计模式专题(三)代理模式

代理模式引入作用:aop实现 拦截器 解耦 专人做专事,自己不想做但是又不得不做的事概念: 代理角色、被代理的角色(目标对象),由被代理角色来做最终的决定代理角色通常来说会持有被代理角色对象引用(以便于代理角色完成工作之前或者之后能够找到被代理对象,能够通知被代理对象)代理模式分类静态代理 动态代理静态代理实现静态代理的类比较固定,必须业务已知才行,这也是静态代理最大的弊端。首先做一个接口:public interface Person { publi..

2020-08-04 13:50:16 123

原创 设计模式专题(二)单例模式

单例模式单例模式(一个类模板,在整个系统执行过程中,只允许产生一个实例)应用广泛,主要应用在:配置文件 Ioc容器 日历 工厂本身单例模式:解决一个并发访问的时候线程安全问题,保证单例的技术方案有很多种饿汉式单例在实例使用之前,不管你用不用,我都先new出来再说,避免了线程安全问题饿汉式单例:public class Hungry { //私有构造方法,防止外部new private Hungry(){} private static final Hu...

2020-07-06 08:31:07 1399

原创 设计模式专题(一)工厂模式

目录工厂模式简单工厂模式工厂方法模式抽象工厂模式工厂模式为了便于理解,这里做一个小案例:1、首先制造一个牛奶类:public interface Milk { /** * 获取一个标准产品 * @return */ public String getName();}2、然后制造很多的具体牛奶类,实现这个接口:蒙牛类:public class Mengniu implements Milk { pub...

2020-07-06 08:30:39 164

原创 DevOps专题(一)Docker架构及其知识脑图

Docker 的总体架构Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,模块各司其职。下图是它的总体架构图:用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。 Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。 Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在

2020-07-06 08:30:16 479

原创 性能优化专题(三)MySQL数据库

MySQL逻辑架构如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。MySQL逻辑架构,来自:高性能MySQLMySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)。所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等。

2020-06-15 16:50:15 455

转载 性能优化专题(二)JVM虚拟机

Java内存区域说一下 JVM 的主要组成部分及其作用?JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area。 Execution e

2020-06-15 16:50:07 234

原创 性能优化专题(一)Linux性能维度排查

目录1. 性能优化是什么?2. 性能的个唯度3. 术语4. CPU占用过高排查现象重现定位方法5.Memory内存查看6. IO读写查看7.Network网络1. 性能优化是什么?性能优化就是发挥机器本来的性能2. 性能的个唯度CPU Memory IO network 网络3. 术语吞吐量:对单位时间内完成的工作量的度量 平均响应时间:提交请求和返回该请求的响应之间使用的时间 TPS: Transactions per Second(..

2020-05-19 18:29:18 232

转载 分布式专题(十八)分布式事务

根据微服务架构的鼻祖 Martin Fowler 的忠告,微服务架构中应当尽量避免分布式事务。分布式事务的讨论主要聚焦于强一致性和最终一致性的解决方案。一致性理论分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的 ACID 是无法奢望的。另外,业界著名的 CAP 理论也告诉我们,对分布式系统,需要将数据一致性和系统可用...

2020-05-11 11:22:20 321

原创 分布式专题(十七)MyCat数据库中间件

一、数据库性能瓶颈及其解决方案性能瓶颈数据库连接数达到机器性能的瓶颈 表数据量过大,有些查询命中不了索引从而导致全表扫描 硬件资源本身的QPS(每秒的查询请求个数)和TPS(每秒的事务请求个数)的瓶颈解决方案sql优化(避免多次查询,利用好索引) 缓存(redis,es) 建好索引(根据查询实际需求来建立索引) 读写分离 区别读、写多数据源方式进行数据的...

2020-05-11 11:10:17 536

原创 分布式专题(十六)Nginx高可用

一、Nginx进程模型Nginx采用的是多进程+多路复用的模型首先正常启动Nginx,我们发现操作系统有如下进程:实际上Nginx启动,会产生两种进程:master进程(管理worker子进程) worker进程(基于master进程fork出来的,可以有多个worker进程)当Nginx收到请求后,会向发送一个信号,通过worker进程处理 如果有多个worker进程,...

2020-05-11 10:46:38 197

原创 分布式专题(十五)Nginx主要配置及其应用场景

一、Nginx的主要配置1. Nginx虚拟主机配置server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; ...

2020-05-11 10:40:53 324 1

原创 分布式专题(十四)Redis高可用

集群先来简单了解下redis中提供的集群策略, 虽然redis有持久化功能能够保障redis服务器宕机也能恢复并且只有少量 的数据损失,但是由于所有数据在一台服务器上,如果这台服务器出现硬盘故障,那就算是有备份也仍然不可避免 数据丢失的问题。在实际生产环境中,我们不可能只使用一台redis服务器作为我们的缓存服务器,必须要多台实现集群,避免出现 单点故障;主从复制复制的作用是把red...

2020-04-24 14:40:09 150

原创 分布式专题(十三)Redis热点问题

一、说说过期删除的原理在Redis中提供了Expire命令设置一个键的过期时间,到期以后Redis会自动删除它,这个在实际使用过程中用的非常多。EXPIRE命令的使用方法为EXPIRE key secondsRedis中的主键失效是如何实现的,即失效的主键是如何删除的?实际上,Redis删除失效主键的方法主要有两种:消极方法(passive way)在主键被访问时如果发现它...

2020-04-24 14:40:03 475

原创 分布式专题(十二)Redis数据结构

缓存大致可以分为两类,一种是应用内缓存,比如Map(简单的数据结构),以及EH Cache(Java第三方库),另一种 就是缓存组件,比如Memached,Redis;Redis(remote dictionary server)是一个基于KEY-VALUE的高性能的 存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求存储结构大家一定对字典类型的数据结构非常熟悉,比如...

2020-04-24 14:39:56 160

原创 分布式专题(十一)消息中间件RabbitMQⅡ

1. 可靠性投递分析 在某些业务实时一致性要求较高的场景,需要确保消息投递的可靠性,可以从RabbitMQ的工作模型的4个主要流程来做处理;并且效率和可靠性不可能同时兼顾,如果要保证每个环节都成功,对消息的收发效率肯定会有影响。  1. 生产者将消息投递至交换机  2. 交换机根据消息的路由关键字和队列的绑定关键字匹配,将消息路由到匹配的队列  3. 队列将消息存储在内存或者磁盘当中...

2020-04-22 13:58:50 359

原创 分布式专题(十)消息中间件RabbitMQⅠ

1. 典型应用场景 异步,解耦,削峰;  跨系统的异步通信;  系统内的同步变为异步;  基于pub/sub模型的广播订阅;  分布式事物的最终一致性解决方案;2. 基本介绍2.1 AMQP协议 AMQP协议,跨语言,跨系统,跨平台的协议,Advanced Message Queuing Protocol 一种高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设...

2020-04-22 13:58:42 262

原创 分布式专题(九)消息中间件KafkaⅢ

目录消息的文件存储机制LogSegment查看 segment 文件命名规则segment中index和log的对应关系在 partition 中如何通过 offset 查找 messageLog 文件的消息内容分析日志的清除策略以及压缩策略日志清除策略日志压缩策略​partition的高可用副本机制副本分配算法kafka 副本机制中的几个概念副...

2020-04-20 16:44:58 141

原创 分布式专题(八)消息中间件KafkaⅡ

本文目标Topic&Partition 消息分发策略 消息消费原理 消息的存储策略 Partition 副本机制1 关于 Topic 和 Partition1.1 Topic在 kafka 中,topic 是一个存储消息的逻辑概念,可以认为是一个消息集合。每条发送到 kafka 集群的消息都有一个类别。物理上来说,不同 topic 的消息是分开存储的,每个 topi...

2020-04-20 16:44:49 186

原创 分布式专题(七)消息中间件KafkaⅠ

Kafka 的简介什么是 KafkaKafka 是一款分布式消息发布和订阅系统,具有高性能、高吞吐量的特点而被广泛应用与大数据传输场景。它是由 LinkedIn 公司开发,使用 Scala 语言编写,之后成为 Apache 基金会的一个顶级项目。kafka 提供了类似 JMS 的特性,但是在设计和实现上是完全不同的,而且他也不是 JMS 规范的实现。kafka 产生的背景kafka...

2020-04-20 16:44:37 244

转载 分布式专题(六)Zookeeper实现分布式锁

参考博客:https://www.jianshu.com/p/a974eec257e6 https://www.jianshu.com/p/91976b27a188在许多场景中,数据一致性是一个比较重要的话题,在单机环境中,我们可以通过Java提供的并发API来解决;而在分布式环境(会遇到网络故障、消息重复、消息丢失等各种问题)下要复杂得多,常见的解决方案是...

2020-04-09 14:58:54 227

原创 分布式专题(五)Zookeeper实现原理

一、Zookeeper 的由来 从上面的案例可以看出,分布式系统的很多难题,都是由于缺少协调机制造成的。在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper。Google Chubby 是一个分布式锁服务,通过 Google Chubby 来解决分布式协作、Master 选举等与分布式锁服务相关的问题。...

2020-04-09 14:58:40 286

转载 分布式专题(四)RPC实现原理

分布式RPC框架实现现在大部分的互联网公司都会采用微服务架构,但具体实现微服务架构的方式有所不同,主流上分为两种,一种是基于Http协议的远程调用,另外一种是基于RPC方式的调用。两种方式都有自己的代表框架,前者是著名的Spring Cloud,后者则是有阿里巴巴开源的Dubbo,二者都被广泛的采用。今天这篇文章,我们就一起来了解一下RPC,并且和大家一起动手实现一个简单的RPC框架的Demo...

2020-03-18 17:54:04 231

转载 分布式专题(三)HTTPS协议

HTTP协议HTTP协议的组成大家可以通过抓包工具,Fillder 或者其他去抓去一个请求,然后可以看到如下的请求数据和响应数据。分为两部分,一个是客户端的请求信息,一个是服务端的响应信息。抓去到的信息如下requestresponseHTTP/1.1 200 OK协议版本号 响应状态码 状态码对应的原因Server: openrestyDate: Sun, 27 ...

2020-03-16 18:29:21 200

转载 分布式专题(二)TCP/IP协议

一个 http 请求,在整个网络中的请求过程当应用程序用 TCP 传送数据时,数据被送入协议栈中, 然后逐个通过每一层直到被当作一串比特流送入网络。其 中每一层对收到的数据都要增加一些首部信息当目的主机收到一个以太网数据帧时,数据就开始从协议 栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收 数据的上层协议。这个过程称作分用为...

2020-03-16 18:29:14 289

转载 分布式专题(一)漫谈分布式架构

一,计算机发展史概述 1946 年情人节(2.14) , 世界上第一台电子数字计算机诞生在美国宾夕法尼亚大学大学,它的名字是:ENIAC; 这台计算机占地170平米、重达30吨,每秒可进行5000次加法运算。第一台电子计算机诞生以后,意味着一个日新月异的IT时代的到来。一方面单台计算机的性能每年都在提升:从最早的 8位 CPU 到现在的64位CPU;从早期的MB级内存到现在的GB级...

2020-03-16 17:40:16 344

翻译 源码专题(四)Mybatis的缓存机制

Mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解:①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。②、二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的s...

2020-03-12 13:54:01 97

翻译 源码专题(三)Spring事务@Transactional的使用及原理

在Spring开发中,经常会用到这个注解,但它是怎么起到开启事务的作用的,还一知半解,今天就来分析一波它的用法和原理。编程式事务和声明式事务 Spring 支持两种事务管理方式:编程式和声明式,编程式是在程序中显式地使用TransactionTemplate来控制事务的开启和提交。​ 声明式事务是使用@Transactional注解,在类或方法上使用这个注解,就可以起到开启...

2020-03-03 10:17:32 366

转载 源码专题(二)手写实现SpringMVC

1. AnnotationUVAutowired:/** @author uv* @date 2018/9/29 10:00* 注入*/import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retenti...

2020-03-03 10:17:23 119

转载 源码专题(一)手写实现Spring的IOC

首先,我们先来介绍一下Spring的三个阶段,配置阶段、初始化阶段和运行阶段(如图):配置阶段:主要是完成application.xml配置和Annotation配置。初始化阶段:主要是加载并解析配置信息,然后,初始化IOC容器,完成容器的DI操作,已经完成HandlerMapping的初始化。运行阶段:主要是完成Spring容器启动以后,完成用户请求的内部调度,并返回响应结果。...

2020-03-03 10:17:14 192

转载 并发专题(七)线程池实现原理

一、为什么要用线程池 降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控二、ThreadPoolExecutor线程池类参数详解参数 说...

2020-02-17 17:29:22 177

转载 并发专题(六)HashMap与ConcurrentHashMap

1、List接口:ArrayList 和 Vector  ArrayList不是线程安全的,Vector是线程安全的,Vector有一个子类,可实现后进先出(LIFO)的对象堆栈(LinkedList 也是List接口的实现类)。2、Set接口:HashSet 和 TreeSet  Set接口最常见的实现类是HashSet,HashSet默认是以无序的方式组织元素的,而LinkedHa...

2020-02-16 20:53:21 145

转载 并发专题(五)CAS与AQS

一、CAS(Compare And Swap)什么是CASCAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,无锁的原子操作,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在CAS指令之前...

2020-02-11 18:23:21 172

转载 并发专题(四)单例模式

目录分类饿汉式懒汉式Synchronized实现DCL非线程安全的实现DCL线程安全实现--volatile实现基于ClassLoader的实现基于枚举的实现分类懒汉式:懒汉式是指应用启动时并不会初始化相应的实例,而是在第一次使用时加载,也就是所谓的延时加载吧,关于延时加载还有很多话聊,笔者就不一一谈了。 饿汉式:饿汉式是指应用启动时就初始化相应的实例,可...

2020-01-17 17:40:57 107

转载 并发专题(三)Volatile

Java语言规范第三版中对volatile的定义如下: java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Volatile的定义和原理Volatile是轻量级的Synchronized,比之执行成本更低,因为它不会引起线程的上下文切换,它在多处理器开发中保证了共享变量的“可见性”,“可见性”的意思是当一个线程修改一个变量...

2020-01-17 10:19:25 192

转载 并发专题(二)Synchronized

如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized就是实现线程同步的关键字,可以说在并发控制中是必不可少的部分,今天就来看一下synchronized的使用和底层原理。目录一、synchronized的特性1.1 原子性1.2 可见性1.3 有序性1.4 可重入性二、synchronized的用法...

2020-01-15 17:43:58 143

bootstrap开发的工具包

亲测可用,内含引入资源文件的前后说明文档,可避免不必要的错误,要的拿走!

2017-11-13

FScapture中文绿色版本

亲测好用的UI开发工具类,除了颜色提取器之外还包含很多实用性的功能,值得下载!

2017-11-13

空空如也

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

TA关注的人

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