自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(242)
  • 资源 (5)
  • 收藏
  • 关注

原创 深层模型(Deep Model)

深层模型(Deep Model)——领域专家们最关心的问题以及与这些问题最相关的知识的清晰表示。深层模型不停留在领域的表层和粗浅的理解上。深层模型能够穿过领域表象,清楚地表达出领域专家们的主要关注点以及最相关的知识。深层模型通常含有抽象元素,但在切中问题核心的关键位置也同样会出现具体元素。

2024-08-24 18:28:25 430

原创 重构与领域驱动设计

领域驱动设计面临的真正挑战是找到深层次的模型,这个模型不但能够捕捉到领域专家的微妙的关注点,还可驱动切实可行的设计。我们的最终目的是开发出能够捕捉到领域深层含义的模型。以这种方式设计出来的软件不但更加贴近领域专家的思维方式,而且能更好地满足用户的需求。本部分将会对这个目标加以说明并详细描述其实现过程,同时也会解释某些设计原则和模式。我们应用这些原则和模式来得到满足应用程序以及开发人员自身需求的设计。

2024-08-24 18:27:56 322

原创 模型驱动设计(MODEL-DRIVEN DESIGN)

为了使领域驱动设计过程更灵活,开发人员需要理解一些众所周知的基本设计原理是如何支持MODEL-DRIVEN DESIGN的,这样才能在设计过程中做出一些折中选择,而又不脱离领域驱动设计轨道。 本文将从理论层面,详细介绍下如何实现模型驱动设计。

2024-08-18 22:21:49 267

原创 领域模型(Domain Model)

软件的核心是其为用户解决领域相关的问题的能力。所有其他特性,不管有多么重要,都要服务于这个基本目的。当领域很复杂时,这是一项艰巨的任务,要求高水平技术人员的共同努力。开发人员必须钻研领域以获取业务知识。他们必须磨砺其建模技巧,并精通领域设计。然而,在大多数软件项目中,这些问题并未引起足够的重视。大部分有才能的开发人员对学习与他们的工作领域有关的知识不感兴趣,更不会下力气去扩展自己的领域建模技巧。技术人员喜欢那些能够提高其技能的可量化问题。

2024-08-04 21:07:15 956

原创 产品需求说明书模板

在软件开发过程中,需求说明书是项目启动的关键文档之一,它明确了项目的目标、范围、功能要求以及非功能要求等。它确保了开发团队、利益相关者和最终用户之间对软件功能和性能有共同的理解。

2024-06-30 22:38:57 1029

原创 JVM调参实践总结

本文重点记录下JVM参数使用的最佳实践,注意,这里重点介绍HotSpot VM的调参,其他JVM的调参可以类比,但不可照搬。

2024-05-07 00:52:09 1061 1

原创 JVM调优--理论篇

在对Java应用进行性能优化时,JVM的调优是一个绕不开的话题。本文重点介绍下如何对JVM进行调优,以期提高Java应用的性能、稳定性、响应时间等性能目标。JVM的调优过程符合Java应用的调优过程,主要分为三步:性能监控、性能分析、性能调优。此外,本文讨论的JVM均是指HotSpot VM,对于其他JVM,可以参考相关原理,并不能拿来就用。

2024-05-05 23:16:54 926

原创 HotSpot VM概述

许多技术人员只把JVM当成黑盒,要想改善Java应用的性能和扩展性无疑是一项艰巨的任务。若要提高Java性能调优的能力,就必须对现代JVM有一定的认知。 HotSpot VM是JDK 1.3版本之后默认的虚拟机,目前是使用最广泛的Java虚拟机。本文主要介绍HotSpot VM(即HotSpot Java虚拟机)的架构。HotSpot VM有三个主要组件:VM运行时(Runtime)、JIT编译器(JIT Compiler)以及内存管理器(Memory Manager)。

2024-04-30 17:46:38 913

原创 装饰器模式、代理模式、适配器模式对比

装饰器模式、代理模式和适配器模式都是结构型设计模式,它们的主要目标都是将,使得程序结构更加清晰。这里将装饰器模式、代理模式和适配器模式进行比较,主要是因为三个设计模式的类图结构相似度较高、且功能上存在一定的相似度。

2024-04-28 14:26:27 1761 4

原创 状态模式和策略模式对比

状态模式和策略模式都是行为型设计模式,它们的主要目标都是将变化的行为封装起来,使得程序更加灵活和可维护。之所以将状态模式和策略模式进行比较,主要是因为两个设计模式的类图相似度较高。但是,从状态模式和策略模式的应用场景来说,两个模式存在显著的差异。

2024-04-24 23:39:48 1093

原创 简单工厂、工厂方法、抽象工厂对比

简单工厂、工厂方法和抽象工厂是三种常见的工厂设计模式,它们在软件设计中各有其独特的应用场景和优缺点。因为三种设计模式都属于工厂模式,在实际应用中可能存在误用的场景,这里对其做下对比,以便更好的理解这三种设计模式。

2024-04-24 21:49:52 853

原创 Kafka架构概述

Kafka是由Apache软件基金会管理的一个开源的分布式数据流处理平台。Kafka具有支持消息的发布/订阅模式、高吞吐量与低延迟、持久化、支持水平扩展、高可用性等特点。可以将Kafka应用于大数据实时处理、高性能数据管道、流分析、数据集成和关键任务应用等场景。

2024-04-02 23:47:04 1785 1

原创 Kafka简介

Kafka是由Apache软件基金会管理的一个开源数据流处理平台。Kafka最初由LinkedIn公司开发,用来作为一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域,之后被捐赠并成为Apache项目的一部分。随着Kafka的不断发展,Kafka现在被更广泛地看作是一个分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。

2024-03-25 14:51:08 1065

原创 Redis与数据库的一致性

在使用Redis作为应用缓存来提高数据的读性能时,经常会遇到Redis与数据库的数据一致性问题。简单来说,就是同一份数据同时存在于Redis和数据库,如何在数据更新的时候,保证两边数据的一致性。首先,如果期望Redis与数据库保持强一致性,则必须额外引入分布式事务组件,通过一致性协议(如2PC、3PC等)来保证缓存和数据库的一致性。这里讨论的一致性是最终一致性,即Redis中的数据将最终和数据库中的数据保持一致。

2024-03-24 13:30:59 1185

原创 Java枚举类型

枚举类型是Java 1.5中新增的类型。Java在类型划分时,将枚举类型作为独立的数据类型,用于表述一组常量。本质上,枚举就是特殊的类,只是域成员均为常量,且构造方法被默认强制为私有。枚举类型使得代码更加清晰和易于维护,因为它限制了变量的取值范围。

2024-03-17 23:19:41 945

原创 深入联合文件系统

Union File System(联合文件系统,UnionFS)是一种轻量级的高性能分层文件系统,它支持将文件系统中的修改信息作为一次提交,并层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,应用看到的是挂载的最终结果。联合文件系统将多个文件系统层以一种有效的方式组合在一起,形成了一个单一的可读写的文件系统。联合文件系统是实现Docker镜像的技术基础。

2024-03-13 10:09:40 1039

原创 平衡二叉树

在关键字排列随机的情况下,二叉排序树的平均查找长度和log n是等数量级的。在某些情况下,尚需在构成二叉排序树的过程中进行“平衡化”处理,使其成为平衡二叉树。

2024-03-10 22:19:17 968

原创 Dockerfile指令大全

Dockerfile文件由一系列指令和参数组成。指令的一般格式为INSTRUCTION arguments。具体来说,包括"配置指令"(配置镜像信息)和"操作指令"(具体执行操作)。每条指令,如FROM,都是大小写不敏感的。但是为了区分指令和参数,强烈建议统一使用大写字母。Dockerfile中的指令会按顺序从上到下执行,所以应根据需要合理安排指令的顺序。一个Dockerfile文件以FROM指令作为构建开始的第一个指令。每条指令都会创建一个新的镜像层并对镜像进行提交。

2024-03-10 21:53:29 970

原创 Dockerfile编写实践篇

Dockerfile是一个文件,它由构建镜像的指令组成,用户可以使用Dockerfile来快速创建自定义的镜像。指令由Docker镜像构建者自上而下排列,能够被用来修改镜像的任何信息。 Dockerfile具有信息表达性,且易于理解,这些都要归功于Dockerfile支持注释的简洁语法。开发者可以使用任何版本控制工具来跟踪Dockerfile文件的变动。维护多个版本的镜像就和管理多个Dockerfile一样简单。

2024-03-10 21:52:43 1560

原创 Docker常见命令使用

Docker命令是使用Docker的基础。这里记录下Docker日常运维过程中经常使用到的一些命令,更全面的命令还请参考Docker官网。

2024-03-05 20:03:43 1349

原创 容器化技术

容器化技术并不是由Docker引入,而是有其发展历程。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资惊使用需求。容器可以在核心CPU运行指令,而不需要任何专门的解释机制。容器避免了准虚拟化(para-virtualization)和系统调用替换中的复杂性。

2024-03-05 10:58:38 1040

原创 Docker架构概述

Docker是基于Go语言实现的开源容器项目,能够把开发的应用程序自动部署到容器的开源的应用容器引擎。Docker的构想是要实现"Build, Ship and Run Any App, Anywhere",即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的"一次封装,到处运行"。可以说,Docker首次为应用的开发、运行和部署提供了"一站式"的实用解决方案。

2024-03-03 21:22:01 1054

原创 Docker与虚拟机比较

在对比Docker和虚拟机前,先简单了解下虚拟化,明确Docker和虚拟机分别对应的虚拟化级别,然后对Docker和虚拟机进行比较。需要注意的是,Docker和虚拟机并没有什么可比性,而是Docker使用的容器技术和虚拟机使用的虚拟化技术的比较。

2024-03-01 16:15:45 1277

原创 Docker概述

Docker是基于Go语言实现的开源容器项目,由Docker公司的团队编写,能够把开发的应用程序自动部署到容器的开源的应用容器引擎。使用Docker后,开发人员只需要关心容器中运行的应用程序,而运维人员只关心如何管理容器,Docker的设计目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境的一致性,从而降低那种"开发时一切都正常,肯定是运维的问题"的风险。

2024-03-01 16:15:22 1232

原创 Kubernetes编排概述

Kubernetes是由谷歌开源的面向应用的容器集群部署和管理的系统,为容器化应用提供了资源调度、部署运行、服务发现、扩缩容等一整套功能。Kubernetes最主要的设计思想就是,以统一的方式抽象底层基础设施能力,定义任务编排的各种关系,将这些抽象以声明式API的方式对外暴露,从而允许平台构建者基于这些抽象进一步构建自己的PaaS乃至任何上层平台。Kubernetes的目标旨在消除编排物理/虚拟计算、网络和存储等基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。

2024-02-27 11:40:27 877

原创 Kubernetes 声明式API

声明式API践行了"将简单留给用户,将复杂流程系统"的设计理念。对于用户来说,只需掌握API对象的使用,无需关心内部的实现细节。系统会使用控制器模式将资源对象调谐到API对象指定的"期望状态"。声明式API是Kubernetes最核心的设计理念,正因为实现了对声明式API的支持,才可在基于Kubernetes构建的上层平台使用一致的编程范式和交互编程界面,才使得今天整个云原生生态中诞生了如此多的Kubernetes插件能力和扩展。

2024-02-23 15:45:59 1070

原创 Kubernetes 控制器

在Kubernetes中,所有的控制器都是由Kubernetes Controller Manager统一管理。可以将Kubernetes Controller Manager看成一系列控制器的集合。在Kubernetes中,每一个控制器都以独有的方式负责某种编排功能,并遵循一种通用的编排模式————控制循环(Control Loop,也称控制回路)或调谐循环(Reconcile Loop)或同步循环(Sync Loop)。

2024-02-23 13:22:52 1005

原创 Kubernetes API对象

API对象(也常被称作对象)是Kubernetes中的管理操作单元。Kubernetes系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作。也就是说,API对象可以帮助实现特定功能的管理操作。如Kubernetes最常用的Pod负责一个或多个容器的管理,Deployment负责Pod副本的部署、升级和回滚、扩容和缩容等自动化运维。API对象是一种"意向表达(Record of Intent)"。

2024-02-03 18:52:45 956

原创 Kubernetes Pod使用

Pod是Kubernetes中可以创建、调度和部署的最小,也是最简单的单元。Pod是基于Kubernetes部署和运维应用的基础。本文重点介绍下Pod各字段的含义及Pod的使用。

2024-02-03 18:51:54 1066

原创 Kubernetes Service详解

Service是Kubernetes实现微服务架构的核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求以负载均衡的方式分发到后端的各个容器应用上。

2024-01-30 17:21:17 1120

原创 Kubernetes HPA使用

在生产环境中,经常会遇到由于业务发展迅速需要增加某个服务实例数量的场景,也可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。Kubernetes对Pod的扩缩容操作提供了手动和自动两种模式,手动模式通过运行kubectl scale命令或通过修改ReplicaSet中Pod副本数量的方式实现。自动模式则需要用户根据某个性能指标或者自定义业务指标,并指定Pod副本数量的范围,系统将自动在这个范围内根据性能指标的变化进行调整。这里介绍下自动模式,也即Kubernetes HPA的使用。

2024-01-30 17:19:37 1121

原创 Kubernets Deployment详解

Deployment自动化的完成了Pod副本的部署、升级和回滚、扩容和缩容等运维能力。开发者只需在 Deployment声明文件中描述期望状态,然后 Deployment Controller 就会自动将 Pod 从实际状态改变到期望状态。Deployment提供了运行Pod的能力,并且为Pod提供副本管理、升级和回滚、水平扩容和缩容等功能,一般用于运行无状态的应用。

2024-01-25 20:10:47 921

原创 Kubernetes Pod详解

如果说容器是未来云计算系统中的进程,容器镜像是这个系统里的安装包,那么Kubernetes就是云计算系统的操作系统。而Pod就是基于容器技术的操作系统里的"进程组",负责一个或多个容器的管理。Pod 是Kubernetes中可以创建、调度和部署的最小也是最简单的单元。一个Pod里可以封装一个容器或多个容器(多个容器间可能存在拓扑关系–也即依赖关系),Pod里的容器共享存储、网络、容器运行配置等。同一个Pod里的所有容器都被统一安排和调度,所以可将Pod看成是对容器的编排。

2024-01-25 09:30:00 1140

原创 Kubernetes架构概述

Kubernetes 是由谷歌开源的面向应用的容器集群部署和管理的系统,为容器化应用提供了资源调度、部署运行、服务发现、扩缩容等一整套功能。Kubernetes 最初来源于谷歌内部的Borg。Kubernetes 的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。

2024-01-19 10:57:00 923

原创 Kubernetes网络模型概述

Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管这些Pod是否运行在同一个Node中,都要求它们可以直接通过对方的IP进行访问。由于Kubernetes的网络模型假设Pod之间访问时使用的是对方Pod的实际地址,所以一个Pod内部的应用程序看到的自己的IP地址和端口与集群内其他Pod看到的一样。

2024-01-17 17:44:39 1198

原创 kubectl命令行工具用法简介

kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作。本节对kubectl的子命令和用法进行详细说明。

2024-01-05 17:39:34 1145

原创 设计模式常见面试题

简单梳理下二十三种设计模式,在使用设计模式的时候,不仅要对其分类了然于胸,还要了解每个设计模式的应用场景、设计与实现,以及其优缺点。同时,还要能区分功能相近的设计模式,避免出现误用的情况。

2023-11-19 22:24:37 563

原创 Spring Bean循环依赖问题及解决

类与类之间的依赖关系形成了闭环,就会导致循环依赖问题的产生。举例来说,假设存在两个服务类A和服务类B,如果A通过依赖注入的方式引用了B,且B通过依赖注入的方式引用了A,那么A和B之间就存在循环依赖。推广来说,如果涉及多个类,也存在这种依赖关系,那么也是循环依赖问题。循环依赖问题比较严重,有时会影响服务启动,有时会导致死循环调用(如果线上环境出现循环调用,会导致程序进入死循环,然后服务崩溃,进而导致用户请求无法响应,造成生产事故),应引起足够的重视。

2023-11-12 14:04:46 2352

原创 二叉排序树

二叉排序树(Binary Sort Tre)或者是一棵空树,或者是具有如下性质的二叉树:(1) 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2) 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3) 它的左右子树也分别为二叉排序树。简单来说,二叉排序树是指根结点大于左子树,小于右子树的二叉树。根据使用目的,二叉排序树也常被称为二叉查找树二叉搜索树。

2023-10-27 15:00:37 166

原创 图的遍历概述

梳理下图这种数据结构的遍历实现。

2023-10-23 15:20:16 112

Implementing Regular Expressions.pdf

Implementing Regular Expressions

2021-12-19

Representation of Events in Nerve Nets and Finite Automata.pdf

Representation of Events in Nerve Nets and Finite Automata.pdf

2021-12-19

Redis启动过程详解

详细介绍Redis启动流程,重点参考《Redis 设计与实现》一书。

2015-11-11

wireless.h文件,基于linux,v22版本

该wireless.h头文件,是当前(2014年)最新的版本,v22版本,基于linux操作系统。

2015-01-23

空空如也

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

TA关注的人

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