自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(213)
  • 资源 (3)
  • 论坛 (1)
  • 收藏
  • 关注

原创 SpringCloud实战与原理分析--第二章:SpringCloud介绍

我准备向他提出一个他不可能拒绝的条件。——《教父》1、引言首先,我们来看看一般的微服务架构需要的功能或使用场景:(1)我们把整个系统根据业务拆分成几个子系统。(2)每个子系统可以部署多个应用,多个应用之间使用负载均衡。(3)需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。(4)所有的客户端都通过同一个网关地址访问后台的服务...

2018-12-17 19:40:51 1050

原创 SpringCloud实战与原理分析--第一章:微服务架构

伟大的人不是生下来就伟大的,而是在成长过程中显示其伟大的。 ——马里奥·普佐《教父》1、技术架构的演化1.1 单体架构1.1.1 简单单体模式简单单体模式是最简单的架构风格,所有的代码全都在一个项目中。优点(1)项目的开发人员都可以随时修改任意的一段代码,或者增加一些新的代码。开发人员在个人电脑上就可以进行开发、调试、测试整个系统的功能。(2)项目不需要额外的一些依赖条件...

2018-12-10 20:39:25 3655

原创 Android中的MVP架构分解和实现

1、概述传统的Android开发架构一般是MVC模式,Model:业务逻辑和实体模型View:对应于布局文件Controllor:对应于Activity单独从逻辑看起来非常好,与我们做Web开发时,开发模式类似,但在实际开发中,View对应于布局文件,实际上关于该布局文件中的数据绑定的操作,事件处理的代码都在Activity中,Activity既像View又像Controller(MVVP架

2017-02-07 17:23:31 2179 5

原创 Tensorflow实现卷积神经网络

1.概述定义: 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。它包括卷积层(alternating convolutional layer)和池层(pooling layer)。卷积层(convolutional layer): 对输入数据应用若干过滤器,一个

2016-12-03 16:47:49 1767

原创 业务架构

本文是阅读《极客时间-架构实战案例解析》的读书笔记作为开发人员,平常讨论比较多的是技术层面的东西,比如 Spring 框架、Redis 缓存、MySQL 数据库等等,我们喜欢讨论这些,是因为纯技术的东西比较通用,和业务相关性不大,沟通起来比较方便。但一个项目能否成功落地,首先需要的是把业务分析做到位,至于选用什么技术架构来实现,这是我们第二位才去考虑的因素。从架构角度看,业务架构是源头,然后才是技术架构。所以,就从业务架构开始说起。在软件开发的过程中,你肯定知道需求分析是怎么回事,但不一定知道业务.

2021-01-22 16:02:44 90 1

原创 Kafka 的实现原理

1、消息中间件能做什么?1.1 异步处理消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各种平台以及协议之间的特性,实现应用程序之间的协同。举个非常简单的例子,就拿一个电商平台的注册功能来简单分析下,用户注册这一个服务,不单单只是 insert 一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面的每一个操作,都需要消耗 1s,那么整个注册过程就需要耗时 4s 才能响应给用户。但是我们从注册这个服务可以看到,每一个子操作都是相

2021-01-19 14:56:46 243

原创 kafka 的基本应用

1、kafka 概述学过并发编程的同学应该知道,我们可以使用阻塞队列+线程池来实现生产者消费者模式。比如说在一个应用中,A方法调用B方法去执行一些任务处理。我们可以同步调用。但是如果这个时候请求比较多的情况下,同步调用比较耗时会导致请求阻塞。我们会使用阻塞队列加线程池来实现异步任务的处理。那么,问题来了,如果是在分布式系统中,两个服务之间需要通过这种异步队列的方式来处理任务,那单进程级别的队列就无法解决这个问题了。因此,引入了消息中间件,也就是把消息处理交给第三方的服务,这个服务能够实现数据的存储以及

2021-01-19 10:49:12 90

原创 架构的本质

本文是阅读《极客时间-架构实战案例解析》的读书笔记1、架构的本质物理学中有个很著名的“熵增定律”:一个封闭系统,都是从有序到无序,也就是它的熵(即混乱程度)会不断地增加,最终系统会彻底变得无序。这个理论放在软件系统的演化上,也是非常适用的。一方面,随着业务需求的增加,我们会往系统里不停地添加业务功能;另一方面,随着访问量的不断增加,我们会不断通过技术手段来加强系统非业务性功能。如果事先不做良好的设计,随着时间的推进,整个系统野蛮生长,就会逐渐碎片化,越来越无序,最终被推倒重来。不过.

2021-01-18 20:06:15 3332 6

原创 zookeeper 源码 之 watcher 原理分析

1、Watcher 的基本流程ZooKeeper 的 Watcher 机制,总的来说可以分为三个过程:(1)客户端注册 Watcher;(2)服务器处理 Watcher;(3)客户端回调 Watcher。客户端注册 watcher 有 3 种方式,getData、exists、getChildren;以如下代码为例来分析整个触发机制的原理。2、基于 zkclient 客户端发起一个数据操作maven 依赖<dependency> <groupId>com

2021-01-05 21:21:46 105

原创 深入分析Zookeeper的Leader选举原理

1、Zookeeper 的一致性1.1 Zookeeper 的来源对于 zookeeper 的一致性问题,先从来源层面梳理一遍一致性的问题。zookeeper 的来源,是来自于 google chubby。为了解决在分布式环境下,如何从多个 server 中选举出 master server。那么这多个 server 就需要涉及到一致性问题,这个一致性体现的是多个 server 就 master 这个投票在分布式环境下达成一致性。简单来说就是最终听谁的。但是在网络环境中由于网络的不可靠性,会存在消息

2020-12-14 21:21:22 1037

原创 深入分析 zookeeper 核心原理

1、分布式锁1.1 分布式锁的基本场景如果在多线程并行情况下去访问某一个共享资源,比如说共享变量,那么势必会造成线程安全问题。那么我们可以用很多种方法来解决,比如 synchronized、 比如 Lock 之类的锁操作来解决线程安全问题,那么在分布式架构下,涉及到多个进程访问某一个共享资源的情况,比如说在电商平台中商品库存问题,在库存只有 10 个的情况下进来 100 个用户,如何能够避免超卖呢?所以这个时候我们需要一些互斥手段来防止彼此之间的干扰。然后在分布式情况下,synchronized 或者

2020-12-12 14:01:27 498

原创 分布式协调服务zookeeper应用实战

1、zookeeper 的名词1.1 集群角色1.2 数据模型zookeeper 的视图结构和标准的文件系统非常类似,每一个节点称之为 ZNode,是 zookeeper 的最小单元。每个 znode 上都可以保存数据以及挂载子节点。构成一个层次化的树形结构。持久节点(PERSISTENT)创建后会一直存在 zookeeper 服务器上,直到主动删除持久有序节点(PERSISTENT_SEQUENTIAL)每个节点都会为它的一级子节点维护一个顺序临时节点(EPHEMERAL)

2020-12-12 13:19:46 167

原创 微服务下注册中心的实现

1、单体架构到微服务架构的带来的变化单体架构分布式架构假设一个电商的下单场景,完成一笔订单入库,需要做几个操作:创建订单卡券抵扣库存扣减那么在分布式架构下的调用链,可能是下面这种情况。那么服务和服务之间势必会存在远程通信。如上图,一个下单流程就包括,订单服务创建订单,然后通过调用卡券服务进行卡券抵扣,再库存服务进行库存扣减。微服务之间都存在着远程通信。远程通信主要有两种方式,Http 和 RPC。Http 和 RPC 框架的区别虽然现在服务间的调用越来越多地使用了 RP

2020-12-03 21:22:07 112

原创 Zookeeper 介绍

1、Zookeeper 的产生来源Apache ZooKeeper 是一个高可靠的分布式协调中间件。它是 Google Chubby 的一个开源 实现,那么它主要是解决什么问题的呢?那就得先了解 Google Chubby,Google Chubby 是谷歌的一个用来解决分布式一致性问题的组件,同时,也是粗粒度的分布式锁服务。1.1 分布式一致性问题什么是分布式一致性问题呢?简单来说,就是在一个分布式系统中,有多个节点,每个节点都会提出一个请求,但是在所有节点中只能确定一个请求被通过。而这个通

2020-08-19 22:28:10 172

原创 分布式系统基础

1、分布式架构的演进过程1.1 分布式架构的发展历史1946 年情人节(2.14) , 世界上第一台电子数字计算机诞生在美 国宾夕法尼亚大学大学,它的名字是:ENIAC; 这台计算机占地 170 平米、重达 30 吨,每秒可进行 5000 次加法运算。ENIAC 之后,电子计算机便进入了 IBM 主导的大型机时代,IBM 大 型机之父吉恩.阿姆达尔被认为是有史以来最伟大的计算机设计师 之一。1964 年 4 月 7 日,在阿姆达尔的带领下,历时三年,耗费 50 亿美元,第一台 IBM 大型机 SYS

2020-08-06 17:25:10 214

原创 SynchronousQueue 同步队列
原力计划

1、概述第一次接触SynchronousQueue,是在java提供的四种线程池中,缓存线程池的源码实现中看到(缓存线程池允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM,不建议使用):public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE,

2020-05-25 21:12:44 171

原创 BlockingQueue 阻塞队列 和 LinkedBlockingQueue 分析
原力计划

1、概述阻塞队列(BlockingQueue)被广泛使用在“生产者-消费者”问题中,其原因是 BlockingQueue 提供了可阻塞的插入和移除的方法。当队列容器已满,生产者线程会被阻塞,直到队列未满;当队列容器为空时,消费者线程会被阻塞,直至队列非空时为止。BlockingQueue 是一个接口,继承自 Queue ,所以其实现类也可以作为 Queue 的实现来使用,而 Queue 又继承自 Collection 接口。下面是 BlockingQueue 依赖关系图:下面是 BlockingQu

2020-05-25 21:09:38 116

原创 DDD—上下文映射图

一个项目的上下文映射图(Context Map)可以用两种方式表示,(1)比较容易的一种是画一个简单的框图来表示两个或多个限界上下文之间的映射关系。该框图表示了不同的限界上下文在解决方案空间中是如何通过集成相互关联的。(2)另一种更详细的方式通过限界上下文集成的源代码实现来表示。1、上下文映射图为什么重要在开始采用DDD时,首先应该为你当前的项目绘制一个上下文映射图,其中应该包含你项目中当...

2019-11-17 16:40:06 1294

原创 DDD案例说明

1、案例说明整个专栏的案例来源于一个虚构的公司,公司里有一个虚构的团队,他们真实的业务章程,并且有一个真实的软件系统需要部署开发部署,而他们所面临的DDD挑战和问题也是真实存在的。这个公司叫做SaaSOvation。正如名字所示,该公司旨在开发一系列SaaS产品,该产品作为一种服务被用户使用。公司计划先后开发两套产品。1、旗舰产品名为CollabOvation,这是一套企业协作(Collab...

2019-11-03 17:58:16 968

原创 领域、子域和限界上下文概述

1、概述1.1 领域广义领域:领域(Domain)即是一个组织所做的事情以及其中所包含的一切。每个组织都有它自己的业务范围和做事方式。这个业务范围以及在其中所进行的活动都有它自己的业务范围和做事方式。这个业务范围以及在其中所进行的活动便是领域。当你组织开发软件时,你所面对的便是这个组织的领域。领域既可以表示整合业务系统,也可以表示其中的某个核心域或者支撑域。在DDD中,一个领域被分成若干子域...

2019-11-03 17:54:50 981

原创 DDD入门

0、概述本文主要从宏观角度,介绍下领域驱动模型。领域驱动设计(DDD)作为一种软件开发方法,它可以帮助我们设计高质量的软件模型。DDD同时提供了战略上的和战术上的建模工具来帮助我们设计高质量的软件模型。DDD并不是关于技术的,而是关于讨论、聆听、理解、发现和业务价值的,而这些都是为了将知识集中起来。如果你了解公司的业务,那么你至少可以为DDD的通用语言(Ubiquitous Languag...

2019-10-14 08:37:29 490

转载 让程序员崩溃的瞬间

转自:https://zhuanlan.zhihu.com/p/470665211. 公司实习生找 Bug2.在调试时,将断点设置在错误的位置3.当我有一个很棒的调试想法时4.偶然间看到自己多年前写的代码5.当我第一次启动我的单元测试时6.数据库的 Delete 语句忘了使用限定词 w...

2019-09-30 13:50:00 424

原创 Java设计模式——模版方法模式

1、简介Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.TemplateMethod lets subclasses redefine certain steps of an algorithm without changing the algorithm’s str...

2019-09-05 20:04:09 207

原创 java8—Optional优雅的处理 null

1、概述Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。2、举例说明2.1 ofNullablep...

2019-08-31 17:04:45 665

原创 mysql中的锁机制(行锁、表锁和全局锁)

文章目录1、概述2、行级锁2.1 共享锁和排他锁2.2 意向共享锁和意向排他锁2.3 间隙锁(Next-Key锁)2.4 举例2.5 死锁和死锁检测3、表级锁3.1 表锁3.2 元数据锁(meta data lock,MDL)4、全局锁5、面试题5.1 全局锁相关5.2 行锁相关1、概述相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyI...

2019-08-27 21:58:45 1922 1

原创 Java设计模式——代理模式

1、简介代理模式( Proxy Pattern) 是一个使用率非常高的模式, 其定义如下:Provide a surrogate or placeholder for another object to control access to it.( 为其他对象提供一种代理以控制对这个对象的访问。)举打游戏的例子来说明:定义一个接口IGamePlayer,是所有喜爱网络游戏的玩家,然...

2019-08-22 09:16:57 581

原创 mysql索引

一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本 500 页的书,如果想快速找到其中的某一个知识点,在不借助目录的情况下,那估计得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。1、索引的常见模型索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,所以这里也就引入了索引模型的概念。可以用于提高读写效率的数据结构很多,这里我先给你介绍三种...

2019-08-18 10:33:10 2433

原创 Java设计模式——工厂方法模式

文章目录1、简介2、推荐实现案例3、优缺点3.1 优点4、应用场景5、注意事项6、拓展6.1 缩小为简单工厂模式6.2 升级为多个工厂类6.3 替代单例模式6.4 延迟初始化7、最佳实践1、简介Define an interface for creating an object,but let subclasses decide which class to instantiate.Fac...

2019-07-15 22:26:11 509

原创 dubbo介绍与基础架构

1、背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将...

2019-07-11 21:14:53 451

原创 mysql事务隔离级别

1、概述数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:(1)为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。(2)当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,...

2019-07-11 19:53:46 241

原创 Java设计模式—单例模式

1、简介Ensure a class has only one instance, and provide a global point of access to it.( 确保某一个类只有一个实例, 而且自行实例化并向整个系统提供这个实例。 )单例模式通用类图如图所示:Singleton类称为单例类, 通过使用private的构造函数确保了在一个应用中只产生一个实例, 并且是自行实例...

2019-07-10 20:27:31 203

原创 一条SQL更新语句是如何执行的?(redo log 和 binlog)

1、一条SQL更新语句是如何执行你可能听说过,MySQL 可以恢复到半个月内任意一秒的状态。那是怎样做到的呢?我们从一条更新语句来说明这个问题:下面是这个表的创建语句,这个表有一个主键 ID 和一 个整型字段 c:create table T(ID int primary key, c int);如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写:update T set ...

2019-07-08 20:22:41 479

原创 Elasticsearch 地理位置查询

本文参考自Elacticsearch的中文版翻译:https://es.xiaoleilu.com/并对基于Es 6.6.0版本进行API的更正。地理位置我们拿着纸质地图漫步城市的日子一去不返了。得益于智能手机,我们现在总是可以知道自己所处的准确位置,也预料到网站会使用这些信息。我想知道从当前位置步行 5 分钟内可到的那些餐馆,对伦敦更大范围内的其他餐馆并不感兴趣。但地理位置功能仅仅是 E...

2019-06-26 19:44:18 1595

原创 Elasticsearch索引原理

Elasticsearch索引原理Elasticsearch最关键的就是提供强大的索引能力了。Elasticsearch索引的精髓:一切设计都是为了提高搜索的性能。另一层意思:为了提高搜索的性能,难免会牺牲某些其他方面,比如插入/更新,否则其他数据库不用混了。PUT /megacorp/employee/1 { "name" : "John", "sex" : ...

2019-06-25 18:56:38 419

原创 ElasticSearch基础架构

1、概述ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官网:https://www.elastic.co/cn/p...

2019-06-25 14:24:09 302

原创 Java设计模式——六大设计原则

1、概述设计原则则是设计模式所遵循的规则,设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。2、六大设计原则2.1 单一职责原则(Single Responsibility Principle - SRP)单一职责原则(SRP:Single responsibility principle)又称单一功能原则,它规定一个类应该只有一个发生变化的原因。所谓职责是指类变化的原...

2019-06-24 20:30:11 576

原创 mysql基础架构

我明天回塔拉再去想吧。那时我就经受得住一切了。明天,我会想出一个办法把他弄回来。毕竟,明天又是崭新的一天了!——《飘》0、概述MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Managem...

2019-06-19 01:07:21 301

原创 ElasticSearch分页查询四种解决方案与原理

当你拼命想完成一件事的时候,你就不再是别人的对手,或者说得更确切一些,别人就不再是你的对手了,不管是谁,只要下了这个决心,他就会立刻觉得增添了无穷的力量,而他的视野也随之开阔了。——《基督山伯爵》1、from + size 浅分页常用的分页查询根据from+size语句如下:GET /my_index/my_type/_search{ "query": { "match_all...

2019-06-10 22:41:33 7864 3

原创 BeanDefinitionRegistryPostProcessor——动态注册Bean到Spring容器

我宁愿靠自己的力量,打开我的前途,而不愿求有力者垂青。——《悲惨世界》1、理论一般如果想将类注册到spring容器,让spring来完成实例化,常用方式如下:xml中通过bean节点来配置;使用@Service、@Controller、@Conponent等注解。最近在研究通过Spring初始化时扫描自定义注解,查到了通过实现BeanDefinitionRegistryPostP...

2019-06-04 21:57:59 13846

原创 Elasticsearch简介与安装

读书应具有学习和求知的欲望,也就是说,要用人类的天才积累的知识财富充实自己的头脑和心灵。 ——《书话》1、简介ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达...

2019-02-23 19:32:52 309

解析Android软件的Xml文件

Android反编译利器 如何使用请查看我的CSDN博客

2013-04-25

CSDN_Example

RecyclerView+swipeRefreshLayout+ViewPager实现上拉加载更多下拉刷新,并添加头部广告栏

2016-11-07

显示gif图片的框架

ShowGif,GIF显示框架,重写了View类,用户使用时直接在XML文件中调用就好了

2015-12-06

chun_soft的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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