08 2021 档案
摘要:1、简介 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。 不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。 2、模板方法结构 模板方法模式是所有模式中最为常
阅读全文
摘要:1、简介 观察者模式是对象的行为模式,又叫发布-订阅模式,它定义了一对多的依赖关系,让多个观察者同时监听一个主题对象,这个主题对象在发生变化时,会通知所有的观察者,使他们能自己更新自己 2、观察者模式类图 3、观察者模式涉及的角色 从上图可以看出,观察者模式涉及到以下四个角色 3.1、抽象主题角色:
阅读全文
摘要:1、简介 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 2、访问者模式的使用场景 访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操
阅读全文
摘要:1、简介 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 2、策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通
阅读全文
摘要:1、简介 迭代器模式又叫游标模式,是对象的行为模式,迭代器模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象 2、迭代器模式的类图 3、迭代器模式涉及到的角色 从上图可以看出,迭代器模式涉及到以下几个角色 3.1、抽象迭代器角色:它定义了遍历元素所需要的接口 3.2、具体迭代器角色:实现抽象
阅读全文
摘要:1、简介 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 状态模式允许一个对象在其内部状态改变时改变其行为,这个对象看上去就像改变了他的类一样 2、状态模式类图 3、状态模式涉及到的角色 从上图可以看出 状态模式涉及到以下几个角色 3.1、抽
阅读全文
摘要:1、简介 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 2、访问者模式的使用场景 访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操
阅读全文
摘要:1、简介 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来, 从而可以在将来合适的时候把这个
阅读全文
摘要:1、简介 解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。 它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。
阅读全文
摘要:1、简介 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模式。 命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 2、命令模式类图 3、命令模式涉及
阅读全文
摘要:1、简介 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模式。 命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 2、命令模式类图 3、命令模式涉及
阅读全文
摘要:1、简介 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 2、合成模式 合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合
阅读全文
摘要:1、简介 装饰者模式又叫包装模式(wrapper),装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一种替代方案。 装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为。 UML类图 2、装饰者模式的各个角色 2.1、抽象构件角色 :在下面例子中为Human抽象接口,目的是为了
阅读全文
摘要:1、简介 通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理/添加新的功能。(也就是AO的P微实现) 代理在原有代码乃至原业务流程都不修改的情况下,直接在业务流程中切入新代码,增加新功能,这也和Spring的(面向切面编程)很相似 2、代理模式的分类 2.1、按照目的分类:远程代
阅读全文
摘要:1、简介 享元模式是对象的结构模式,以共享的方式高效的支持大量的细粒度对象,也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。 享元对象做到共享的关键是区分内蕴状态和外蕴状态 1.1、内蕴状态:内蕴状态是存储在享元对象内部的,不会随环境改变而发生改变的。
阅读全文
摘要:1、简介 外观模式通过提供一个可以访问所有接口的一个接口,从而达到隐藏系统复杂性的目的 2、简单的示意图 3、涉及的角色 3.1、门面角色:这个角色知晓所有相关的子系统的功能和责任 3.2、子系统角色:如上图的模块A、B、C 子系统可以被客户端直接调用,也可以被门面角色调用。子系统不知道门面的存在
阅读全文
摘要:1、简介 桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦。 1.1、抽象化 :存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些信息,从而把不同的
阅读全文
摘要:1. 介绍 1.1 模式说明 定义一个包装类,用于包装不兼容接口的对象 包装类 = 适配器Adapter; 被包装对象 = 适配者Adaptee = 被适配的类 1.2 主要作用 把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。 适配器模式的形
阅读全文
摘要:定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机
阅读全文
摘要:1、什么是建造者模式 建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方式进行创建。 工厂类模式是提供的是创建单个类的产品 而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品 建造者模式通常包括下面几个角色: uilder:给出一个抽象接口,以规
阅读全文
摘要:1.什么是工厂模式 它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式2.工厂模式好处 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替
阅读全文
摘要:1.什么是单例 保证一个类只有一个实例,并且提供一个访问该全局访问点 2.哪些地方用到了单例模式 网站的计数器,一般也是采用单例模式实现,否则难以同步。 应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。 多线程的线程池的设计一般也是采用单例模式,因为线程池要方
阅读全文
摘要:什么是设计模式 设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 为什么要学习设计模式 看懂源代码:如果你不懂设计模式去看Jdk、Spring、SpringMVC、IO等等等等的源码,你
阅读全文
摘要:本章涵盖了 检查pod状态 使用存活探针(liveness probes)保持容器健康 使用生命周期钩子在容器启动和关闭时执行操作 了解pod及其容器的完整生命周期 在阅读了前一章之后,您应该能够部署、检查包含一个或多个容器的POD并与之通信。在这一章,将深入了解POD及其容器操作。 请注意 可以在
阅读全文
摘要:本章涵盖了 理解如何以及何时对容器进行分组 通过从YAML文件创建Pod对象来运行应用程序 与应用程序通信,查看它的日志,探索它的环境 添加一个sidecar容器来扩展pod的主容器 通过在pod启动时运行初始化容器命令来初始化pods 让我用一个图表来刷新您的记忆,它显示了您在第3章中创建的用于在
阅读全文
摘要:本章涵盖了 通过API管理Kubernetes集群和它托管的应用程序 理解Kubernetes API对象的结构 检索和理解对象的YAML或JSON清单 通过Node对象检查集群节点的状态 通过Event对象检查集群事件 前一章介绍了组成一个部署应用程序的三个基本对象。您创建了一个Deploymen
阅读全文
摘要:本章包括 在笔记本电脑上运行单节点Kubernetes集群 在谷歌Kubernetes引擎上设置Kubernetes集群 设置和使用kubectl命令行工具 在Kubernetes中部署应用程序,并使其在全球范围内可用 水平扩展应用程序 本章的目标是向您展示如何运行一个用于开发的本地单节点Kuber
阅读全文
摘要:本章包括: 理解什么是容器 容器和虚拟机之间的区别 创建、运行并与Docker共享容器镜像 linux内核特性与容器 Kubernetes主要管理在容器中运行的应用程序——因此在开始研究Kubernetes之前,您需要对容器有一个很好的理解。本章解释了一个Kubernetes用户需要知道的Linux
阅读全文
摘要:关注公众号:登峰大数据,阅读Kubernetes实战(第二版)(完整中文版),系统学习Kubernetes! 本章涵盖了 Kubernetes简介和起源 为什么Kubernetes被如此广泛地采用 Kubernetes如何改变数据中心 Kubernetes体系结构和操作概述 如何以及是否应该将Kub
阅读全文
摘要:第3章 配置 本章涵盖了用于配置Pod的高级概念。本章将通过一个具体的用例讨论所有相关的Kubernetes原语及其用途。 如前一章所示,使用环境变量控制运行时行为是常见的做法。通过为各个容器定义环境变量,导致必须处理一系列环境变量,这很快就会变得单调乏味,特别是当您希望在一组Pods中重用其中一些
阅读全文
摘要:第2章 核心概念 “核心概念”,CKAD课程是指Kubernetes的基本概念、它的API和在Kubernetes上操作应用程序的命令。在本章中,我们将讨论Kubernetes原语的基本结构以及与它们交互的主要入口点:基于命令行的客户端kubectl。 Pod是Kubernetes原语,用于在容器中
阅读全文
摘要:第1章 考试详情和资源 在这个介绍性的章节中,我想解决计划准备并成功通过认证Kubernetes应用程序开发人员(CKAD)考试的考生经常问的最棘手的问题。我们将不讨论实际的Kubernetes概念或如何应用它们,而是在高层次上讨论认证和必要的技能。 考试目标 越来越多的应用程序开发人员发现自己的项
阅读全文
摘要:这是一个漫长的旅程,你已经走到这本书的结尾了! 但是你的Flink之旅才刚刚开始,本章将为你指出可能的路径。我们将向您简要介绍这本书中没有包含的其他Flink功能,并提供一些更多Flink资源。在Flink周围有一个充满活力的社区,我们鼓励您与其他用户联系,开始做出贡献,或者了解哪些公司正在使用Fl
阅读全文
摘要:流处理应用程序是长时间运行的,它们的工作负载通常是不可预测的。连续运行数月的流作业并不少见,因此其操作需求与短期批处理作业的操作需求非常不同。考虑这样一个场景:您在部署的应用程序中检测到一个bug。如果您的应用程序是批处理作业,那么您可以轻松地在脱机状态下修复错误,然后在当前作业实例完成后重新部署新
阅读全文
摘要:数据可以存储在许多不同的系统中,比如文件系统、对象存储、关系数据库系统、键值存储、搜索索引、事件日志、消息队列等等。每一类系统都是为特定的访问模式设计的,并且擅长于服务于特定的目的。因此,今天的数据基础设施通常由许多不同的存储系统组成。在向架构中添加新组件之前,应该问一个合乎逻辑的问题:“它与架构中
阅读全文
摘要:有状态操作符和用户函数是流处理应用程序的常见构件。实际上,大多数重要的操作都需要记住数据记录或部分结果,因为数据是流动的,并且随着时间的推移到达。Flink的许多内置DataStream操作符、sources和sinks都是有状态的,可以缓冲记录或维护部分结果或元数据。例如,窗口操作符使用Proce
阅读全文
摘要:在本章中,我们将介绍用于时间处理和基于时间的操作符(如windows)的DataStream API方法。正如您在“时间语义”中学到的,Flink基于时间的操作符可以应用于不同的时间概念。 首先,我们将学习如何定义时间特征、时间戳和水印。然后,我们将介绍流程功能、提供对时间戳和水印的访问并可以注册定
阅读全文
摘要:本章介绍了Flink的DataStream API的基础知识。我们展示了一个典型的Flink流应用程序的结构和组件,讨论了Flink的类型系统和支持的数据类型,并给出了数据和分区转换。下一章将讨论窗口操作符、基于时间的转换、有状态操作符和连接器。阅读本章之后,您将了解如何实现具有基本功能的流处理应用
阅读全文
摘要:前一章讨论了分布式流处理的重要概念,比如并行化、时间和状态。在本章中,我们将介绍Flink的体系结构,并描述Flink如何处理我们之前讨论过的流处理方面的问题。特别地,我们解释了Flink的流程架构及其网络堆栈的设计。我们将展示Flink如何处理流应用程序中的时间和状态,并讨论其容错机制。本章提供了
阅读全文
摘要:到目前为止,您已经了解了流处理如何解决传统批处理的限制,以及它如何支持新的应用程序和体系结构。您已经熟悉了开源流处理技术的演变,并对Flink流处理程序有了一个简单的了解。在这一章中,你将进入流处理世界,学习流处理基础知识,为本书的其余部分的学习打下基础。 这一章仍然与Flink无关。它的目标是介绍
阅读全文
摘要:Apache Flink是一个分布式流处理引擎,提供了直观而富有表现力的api,以此来实现有状态的流处理应用程序。它以一种容错的方式有效地在大规模集群上运行这样的应用程序。2014年4月,Flink加入了Apache软件基金会作为孵化项目,2015年1月,成为顶级项目。从一开始,Flink就拥有一个
阅读全文
摘要:本章探讨了您和您的团队运行Spark应用程序所需的基础设施: 集群部署的选项 Spark的不同集群管理器 部署考虑事项和配置部署 在大多数情况下,Spark应该与所有受支持的集群管理器配合工作; 然而,自定义设置意味着需要理解每个集群管理系统的复杂性。最难的部分是如何选择集群管理器。尽管我们很乐意包
阅读全文
摘要:在第15章中,您了解了Spark如何在集群上运行代码。现在,我们将向您展示开发一个独立的Spark应用程序并将其部署到集群上是多么容易。我们将使用一个简单的模板来实现这一点,该模板分享了一些关于如何构建应用程序的简单技巧,包括设置构建工具和单元测试。这个模板可以在本书的代码存储库中找到。这个模板实际
阅读全文
摘要:到目前为止,在本书中,我们主要关注Spark作为编程接口的特性。我们已经讨论了结构化api如何接受逻辑操作,将其分解为逻辑计划,并将其转换为物理计划,该物理计划实际上由跨机器集群执行的弹性分布式数据集(RDD)操作组成。本章主要讨论Spark执行代码时会发生什么。我们以一种与实现无关的方式讨论这个问
阅读全文
摘要:第12章探讨了单一RDD操作的基础。您学习了如何创建RDDs以及为什么要使用它们。此外,我们还讨论了map、filter、reduce以及如何创建函数来转换单个RDD数据。本章将介绍高级的RDD操作,并关注键值RDDs,这是一种用于操作数据的强大抽象。我们还讨论了一些更高级的主题,比如自定义分区,这
阅读全文
摘要:除了弹性分布式数据集(RDD)接口之外,Spark中的第二类底层API是两种类型的“分布式共享变量”:广播变量和累加器。这些变量可以在用户定义的函数中使用(例如,在RDD或DataFrame上的map函数中),这些函数在集群上运行时具有特殊属性。具体来说,accumulators让将所有task中的
阅读全文
摘要:本书的前一部分介绍了Spark的结构化api。在几乎所有的计算场景中,您都应该优先使用这些api。话虽如此,有时只使用Higher-Level API无法解决你的问题。对于这些情况,您可能需要使用Spark的底层api,特别是弹性分布式数据集(RDD)、SparkContext,以及分布式共享变量,
阅读全文
摘要:Datasets是结构化api的基本类型。我们已经使用过DataFrames,它是Row类型的Datasets,可以跨Spark的不同语言使用。Datasets是一种严格意义上的Java虚拟机(JVM)语言特性,仅适用于Scala和Java。使用Datasets,您可以定义数据集中每行包含的对象。在
阅读全文
摘要:Spark The Definitive Guide(Spark权威指南) 中文版。本书详细介绍了Spark2.x版本的各个模块,目前市面上最好的Spark2.x学习书籍!!! 10.5. 如何运行Spark SQL查询 Spark提供了几个接口来执行SQL查询。 10.5.1. Spark SQL
阅读全文
摘要:本章正式介绍Spark可以使用的开箱即用的各种其他数据源,以及由更大的社区构建的无数其他数据源。Spark有6个“核心”数据源和数百个由社区编写的外部数据源。能够从所有不同类型的数据源进行读写,这可以说是Spark最大的优势之一。以下是Spark的核心数据源: CSV JSON Parquet OR
阅读全文
摘要:第7章讨论了聚合单个数据集,这很有帮助,但通常情况下,您的Spark应用程序将汇集大量不同的数据集。因此,连接几乎是所有Spark工作负载的重要组成部分。Spark能够与不同的数据进行对话,这意味着您能够访问公司内的各种数据源。本章不仅介绍了Spark中存在哪些连接以及如何使用它们,还介绍了一些基本
阅读全文
摘要:Spark The Definitive Guide(Spark权威指南) 中文版。本书详细介绍了Spark2.x版本的各个模块,目前市面上最好的Spark2.x学习书籍!!! 扫码关注公众号:登峰大数据,阅读中文Spark权威指南(完整版),系统学习Spark大数据框架! 如果您觉得作者翻译的内容
阅读全文
摘要:Spark The Definitive Guide(Spark权威指南) 中文版。本书详细介绍了Spark2.x版本的各个模块,目前市面上最好的Spark2.x学习书籍!!! 扫码关注公众号:登峰大数据,阅读中文Spark权威指南(完整版),系统学习Spark大数据框架! 6.1. 在哪里查看AP
阅读全文
摘要:Spark The Definitive Guide(Spark权威指南) 中文版。本书详细介绍了Spark2.x版本的各个模块,目前市面上最好的Spark2.x学习书籍!!! 扫码关注公众号:登峰大数据,阅读中文Spark权威指南(完整版),系统学习Spark大数据框架! 在第4章中,我们介绍了结
阅读全文
摘要:Spark The Definitive Guide(Spark权威指南) 中文版。本书详细介绍了Spark2.x版本的各个模块,目前市面上最好的Spark2.x学习书籍!!! 扫码关注公众号:登峰大数据,阅读中文Spark权威指南(完整版),系统学习Spark大数据框架! 上一张我们学习了Apac
阅读全文
摘要:Spark The Definitive Guide(Spark权威指南) 中文版。本书详细介绍了Spark2.x版本的各个模块,目前市面上最好的Spark2.x学习书籍!!! 扫码关注公众号:登峰大数据,阅读中文Spark权威指南(完整版),系统学习Spark大数据框架! 本书的这一部分将深入探讨
阅读全文
摘要:Spark The Definitive Guide Spark权威指南 中文版。关注公众号,阅读中文版的Spark权威指南,系统学习Spark大数据框架! Apache Spark是一个统一的分布式内存计算引擎,包括一组用于在计算机集群上进行并行数据处理的函数库。截止目前,Spark已经成为大数据
阅读全文
摘要:为什么需要读写锁? 与传统锁不同的是读写锁的规则是可以共享读,但只能一个写,总结起来为:读读不互斥,读写互斥,写写互斥,而一般的独占锁是:读读互斥,读写互斥,写写互斥,而场景中往往读远远大于写,读写锁就是为了这种优化而创建出来的一种机制。注意是读远远大于写,一般情况下独占锁的效率低来源于高并发下对临
阅读全文
摘要:阅读目录 Array转ArrayList 判断一个数组是否包含某个值 在循环内部删除List中的一个元素 HashTable与HashMap 使用集合原始类型(raw type) 访问级别 ArrayList和LinkedList 可变与不可变 父类和子类的构造方法 “”还是构造方法 未来工作 这个
阅读全文
摘要:在Spring中, IOC是一个容器, 主要负责对托管至Spring的Bean进行创建及保存. Spring IOC创建Bean可分为单例和原型两种. 由于篇幅所限, 本篇中的简易版IOC只实现对单例Bean的管理. 计思路 定位Bean 项目中的代码成千上万, Spring并不能准确的知道哪些Be
阅读全文
摘要:为什么需要消息队列 周末无聊刷着手机,某宝网APP突然蹦出来一条消息“为了回馈老客户,女朋友买一送一,活动仅限今天!”。买一送一还有这种好事,那我可不能错过!忍不住立马点了去。于是选了两个最新款,下单、支付一气呵成!满足的躺在床上,想着马上有女朋友了,竟然幸福的失眠了…… 第二天正常上着班,突然接到
阅读全文
摘要:Java中的锁有很多种,经常会听到“锁”这个词。 犹如每天出门时,🔑就是一种“锁”,拿不到🔑,就进不去了。 Java那么多种类的锁,都是按不同标准来分类的。就像商店里的各种商品,可以按式样,也可以按颜色或者尺寸。 其实它们都是一种思想。 为什么会有锁? 一个进程可以包含多个线程,那么多个线程就会
阅读全文
摘要:在程序界有一个梗是这样子的: 程序员最熟悉,最熟练,最常用的两个快捷键是哪两个? ctrl+c 和 ctrl+v ,俗名为:复制和粘贴。 1、对于许多程序员来说,复制和粘贴就是他创造伟大产品的左膀和右臂。 程序员们也常常这样调侃自己:天下代码不过一个“抄”字,我们的工作就是复制黏贴。 当然,可能对于
阅读全文
摘要:关于责任链模式,其有两种形式,一种是通过外部调用的方式对链的各个节点调用进行控制,从而进行链的各个节点之间的切换;另一种是链的每个节点自由控制是否继续往下传递链的进度,这种比较典型的使用方式就是Netty中的责任链模式。本文主要讲解我们如何在Spring中使用这两种责任链模式。 1. 外部控制模式
阅读全文
摘要:Http存在的问题 上过网的朋友都知道,网络是非常不安全的。尤其是公共场所很多免费的wifi,或许只是攻击者的一个诱饵。还有大家平时喜欢用的万能钥匙,等等。那我们平时上网可能会存在哪些风险呢? 1. 泄密,个人隐私、账户密码等信息可能会被盗取。 2. 篡改,收到的数据可能被第三方修改过,或被植入广告
阅读全文
摘要:我想ThreadLocal这东西,大家或多或少都了解过一点,我在接触ThreadLocal的时候,觉得这东西很神奇,在网上看了很多博客,也看了一些书,总觉得有一个坎跨不过去,所以对ThreadLocal一直是一知半解的,好在这东西在实际开发中毕竟用的不多,所以也就得过且过了。当然我说的“用的不多”,
阅读全文
摘要:概念 Redis作为一个开源的用C编写的非关系型数据库,基于优秀的CRUD效率,常用于软件系统的缓存,其本身提供了以下五种数据格式: string:字符串 list:列表 hash:散列表 set:无序集合 zset:有序集合 接下来我们就要针对这五种数据结构,来分析其底层的结构 这里选用的版本是r
阅读全文
摘要:一、序列化的含义、意义及使用场景 序列化:将对象写入到IO流中 反序列化:从IO流中恢复对象 意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。 使用场景:所有可在网
阅读全文
摘要:一. 项目需求 在之前我做项目的时候,数据量比较大,单表千万级别的,需要分库分表,于是在网上搜索这方面的开源框架,最常见的就是mycat,sharding-sphere,最终我选择后者,用它来做分库分表比较容易上手。 二. 简介sharding-sphere 官网地址: https://shardi
阅读全文
摘要:Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locato
阅读全文
摘要:程序员的迷茫不仅仅是面对技术繁杂的无力感,更重要的是因为长期埋没于软件 世界的浩大的分工体系中,无法看清从业务到软件架构的价值链条,无法清楚定位自 己在分工体系的位置,处理不好自身与技术、业务的关系所致。 很多程序员打心底不喜欢业务,这一点我曾经也经历过,我更宁愿从事框架工 具、技术组件研究的相关事
阅读全文
摘要:本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明。 键值设计 命令使用 客户端使用 相关工具 通过本文的介绍可以减少使用Redis过程带来的问题。 一、键值设计 1、key名设计 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id
阅读全文
摘要:每当我做一场设计相关的培训分享过后,总会有同学来问我:如何才能快速提升自己的设计能力?觉得这个问题非常有代表性,代表了一大波程序猿在艰辛修炼路上的心声。现将我对这个问题的思考、心得体会分享出来,供大家参考,也欢迎提出不同的意见与看法,共同探讨。 1. 编码历练 代码行经验是个非常重要的东西,当你还没
阅读全文
摘要:由于作者面试过程中高度紧张,本文中只列出了自己还记得的部分题目。 经历了漫长一个月的等待,终于在前几天通过面试官获悉已被蚂蚁金服录取,这期间的焦虑、痛苦自不必说,知道被录取的那一刻,一整年的阴霾都一扫而空了。 笔者面的是阿里的Java研发工程师岗,面试流程是3轮技术面+1轮hr面。 1 意外的一面
阅读全文
摘要:说起MySQL的查询优化,相信大家积累一堆技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些
阅读全文
摘要:之前几段工作经历都与搜索有关,现在也有业务在用搜索,对搜索引擎做一个原理性的分享,包括搜索的一系列核心数据结构和算法,尽量覆盖搜索引擎的核心原理,但不涉及数据挖掘、NLP等。 一、搜索引擎引题 搜索引擎是什么? 这里有个概念需要提一下。信息检索 (Information Retrieval 简称 I
阅读全文
摘要:使用java编写代码,十之八九都是在写java类,从而构建java对象。lombok之前也说了不少,但使用了这么多年,感觉还是有很多技巧可以使用的。 毫无疑问,使用lombok,编写的java代码很优雅,而使用起来和普通的java编码方式创建的类毫无二致。 不过,这样就满足了吗?实际上lombok很
阅读全文
摘要:性能定义 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标。 延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收集所引起的停顿,避免应用运行时发生抖动。 内存占用 - 垃圾收集器流畅运行所需要的内存数量。 调优原则 GC 优化的两个
阅读全文
摘要:一、简介 Spring MVC框架在工作中经常用到,配置简单,使用起来也很方便,很多书籍和博客都有介绍其处理流程,但是,对于其原理,总是似懂非懂的样子。我们做技术,需要做到知其然,还要知其所以然。今天我们结合源码来深入了解一下Spring MVC的处理流程。 以上流程图是Spring MVC的处理流
阅读全文
摘要:前言 本文记录一些Spring相关的知识,也算是我学习Spring的学习笔记吧,这一篇先看一下Spring Bean的生命周期。 一、生命周期流程图 Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点。 二、各种接口方法分类
阅读全文
摘要:一、单系统登录机制 1、http无状态协议 web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系。 但这也同时意味着,任何用户都能通过浏览器
阅读全文
摘要:Java中存在四种引用,StrongReference(强引用) 、SoftReferenc(软引用) 、WeakReferenc(弱引用)、PhantomReference(虚引用).虽然不常用,但是对于理解Java的回收等级还是很有帮助的,一句话来说这些引用只是不同回收等级的一种表现形式. St
阅读全文
摘要:公司的登录模块也从Session切换到JWT挺长一段时间了,抽时间来总结一下遇到的问题以及解决方案. 为什么用JWT? 在JWT之前,公司是利用传统的Session来实现登录状态的保持,分布式下则利用Redis实现Session共享集中管理,共享集中管理会带来登录强依赖Redis,然而公司的Redi
阅读全文
摘要:为什么需要读写锁? 与传统锁不同的是读写锁的规则是可以共享读,但只能一个写,总结起来为:读读不互斥,读写互斥,写写互斥,而一般的独占锁是:读读互斥,读写互斥,写写互斥,而场景中往往读远远大于写,读写锁就是为了这种优化而创建出来的一种机制。注意是读远远大于写,一般情况下独占锁的效率低来源于高并发下对临
阅读全文
摘要:1. 原始Ractor模式 相关组件的解释 Handle(句柄或是描述符):本质上表示一种资源,是操作系统提供的;该资源用于表示一个个事件,比如文件描述符,或者是针对于网络编程中的Socket描述符。事件既可以来自于外部,也可以来自内部;外部事件比如说客户端的连接请求,客户端发送过来数据等;内部事件
阅读全文
摘要:1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中
阅读全文
摘要:近段时间,996成为了技术社区的热门话题。工作压力大、作息不规律,甚至脱发、秃头,是码农经常要面临的问题,甚至已经变成常态。那么面临持续高压的工作,码农应该如何自我减压呢?一位软件工程师给出了自己的建议。 开发者的世界总是忙碌的。无论你是个完全的新手还是经验丰富的专家,总有事情在找你,你仿佛永远都忙
阅读全文
摘要:我认为,代码优化的最重要的作用应该是:避免未知的错误。在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是一个非常小的原因。 然而为了解决这个错误,我们需要先自验证、再打包出待替换的class文件、暂停业务并重启,对于一个成熟的项目而言,
阅读全文
摘要:ThreadPoolExecutor顾名思义,是一个线程池管理工具类,该类主要提供了任务管理,线程的调度和相关的hook方法来控制线程池的状态。 1.方法说明 任务管理主要方法如下: public void execute(Runnable command);public <T> Future<T>
阅读全文
摘要:密码学是一门难以理解的学科,因为它充满了数学定理。但是除非你要实际开发出一套加密算法系统,否则你是没必要强制理解那些深奥的数学定理的。 如果你阅读本文的目的是想设计下一套 HTTPS 协议,那我只能抱歉的说本文的知识还远远不够;如果不是的话,那么就煮杯咖啡,轻松愉悦的阅读本文吧。 爱丽丝、鲍伯和 .
阅读全文
摘要:初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList,是在研究JDBC的时候,每一个数据库的Driver都是维护在一个CopyOnWriteArrayList中的,为了证明这一点,贴两段代码,第一段在com.mysql.jdbc.Driver下,也就是我们
阅读全文
摘要:关于RabbitMQ 出身:诞生于金融行业的消息队列 语言:Erlang 协议:AMQP(Advanced Message Queuing Protocol 高级消息队列协议) 关键词:内存队列,高可用 一条消息 队列结构 Producer/Consumer:生产者消费者 Exchange:交换器,
阅读全文
摘要:前言 分布式事务的产生是由于需要同时对多个数据源进行事务操作(资源层),资源层的分布式事务常用的方案有JTA、spring事务等。随着微服务的盛行,服务层的分布式事务也日益重要,本文就着重讨论一种服务层分布式事务的实现原理:TCC。 钢性事务与柔性事务 一般而言,满足ACID的事务的为钢性事务,满足
阅读全文
摘要:要知道为什么使用索引,要知道如何去使用好索引,使自己的查询达到最优性能,需要先了解索引的数据结构和磁盘的存取原理 1. 不使用顺序查找,因为顺序查找比较慢,通过特定数据结构的特点来提升查询速度,这种数据结构就是可以理解成索引。 2. 索引一般以文件形式存储在磁盘上,索引检索需要磁盘I/O操作,为了尽
阅读全文
摘要:本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概览Redis提供的高级能力,并在部署、维护、性能调优等多个方面进行更深入的介绍和指导。 本文适合使用Redis的普通开发人员,以及对Redis进行选型、架构设计和性能调优的架构设计人员。
阅读全文
摘要:最近被问得最多就是想进入BAT等一线互联网公司,应该怎么办? 我先从BAT等这样的公司看看他们的招聘需求谈起,再结合这样的公司需要对技术的要求是什么,最后结合我的建议,谈谈是否一定要去BAT。 百度 百度的技术级别 百度有4万人,每年招聘应届生技术产品人员1000人左右,技术岗位级别和阿里类似,分为
阅读全文
摘要:本文的目的是理解容器开发在目标环境中部署的端到端流程,并列出这些操作所需的 Docker 命令。 1. 介绍 整个流程包括使用代码、依赖软件和配置来开发容器映像,在开发环境中运行和测试容器,将容器映像发布到 Docker Hub,以及最后的部署和在目标环境中运行容器。 本文假设您已经在开发和目标环境
阅读全文
摘要:Spring简介 Spring 是一个开源框架,是一个分层的 JavaEE 一站式框架。 所谓一站式框架是指 Spring 有 JavaEE 开发的每一层解决方案。 WEB层:SpringMVC Service层:Spring的Bean管理,声明式事务 DAO层:Spring的JDBC模板,ORM模
阅读全文
摘要:dubbo一共支持四种负载均衡策略,RoundRobinLoadBalance(轮询)、RandomLoadBalance(随机)、LeastActiveLoadBalance(最少活跃)、ConsistentHashLoadBalance(一致性哈希)。默认为随机策略,我门在分析consumer调
阅读全文
摘要:1. 简介 Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。在 Dubbo 中,SPI 是一个非常重要的模块。基于 SPI,我们可以很容易的对 Dubbo 进行拓展。 2. 源码分析 Dubbo SPI 的相关逻辑被封装在了 ExtensionLoa
阅读全文
摘要:1. spi 是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编
阅读全文
摘要:我们这份面试题,包含的内容了十九了模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeepe
阅读全文
摘要:异步 AsyncAppender log4j2突出于其他日志的优势,异步日志实现。我们先从日志打印看进去。找到Logger,随便找一个log日志的方法。 public void debug(final Marker marker, final Message msg) { logIfEnabled(
阅读全文
摘要:前言 log4j2是apache在log4j的基础上,参考logback架构实现的一套新的日志系统(我感觉是apache害怕logback了)。log4j2的官方文档上写着一些它的优点: 在拥有全部logback特性的情况下,还修复了一些隐藏问题 API 分离:现在log4j2也是门面模式使用日志,
阅读全文
摘要:Spring中用到了哪些设计模式? 谈谈Spring中都用到了哪些设计模式? JDK 中用到了那些设计模式?Spring 中用到了那些设计模式?这两个问题,在面试中比较常见。我在网上搜索了一下关于 Spring 中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远。所以,花了几天时间自己总结了一下
阅读全文