Hiro · ZHAO
码龄14年
求更新 关注
提问 私信
  • 博客:71,647
    71,647
    总访问量
  • 51
    原创
  • 7
    粉丝
  • 109
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
加入CSDN时间: 2012-09-15
博客简介:

程序员客栈

博客描述:
技术都是折腾出来的
查看详细资料
个人成就
  • 获得28次点赞
  • 内容获得14次评论
  • 获得102次收藏
  • 代码片获得770次分享
  • 博客总排名1,820,357名
创作历程
  • 1篇
    2022年
  • 37篇
    2020年
  • 8篇
    2019年
  • 5篇
    2018年
成就勋章
TA的专栏
  • 设计模式
    15篇
  • NoSQL
  • Redis
    20篇
  • MongoDB
  • 算法专题
    5篇
  • Spring Boot
    2篇
  • 排序算法
    3篇
  • 图算法
    2篇
  • 个人日志
  • Swagger2
    5篇
  • Elasticsearch
    1篇
  • Redis
    1篇
  • Nginx
    1篇

TA关注的专栏 3

TA关注的收藏夹 0

TA关注的社区 4

TA参与的活动 0

兴趣领域 设置
  • 大数据
    mysqlredis
  • 后端
    架构
  • 搜索
    elasticsearch
  • 服务器
    linux
创作活动更多

「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令

谁说嵌入式只会“Ctrl+C 调包”和“拿电烙铁焊板子”?2026嵌入式全栈技术征锋令正式启幕! 本次活动专为硬核硬件/软件开发者打造,无论你是刚玩转裸机外设的萌新,还是精通RTOS调度、死磕底层驱动的行业老手,亦或是执掌系统架构的大神,这里都是你证明实力的舞台! 拒绝表面功夫,每一行代码,都有撬动硬件的力量!晒出你的硬核工程实战,为嵌入式开发者的全栈硬实力正名!

210人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

优雅实现Spring多次读取InputStream

解决Spring多次读取InputStream的问题
原创
博文更新于 2022.09.21 ·
3197 阅读 ·
6 点赞 ·
2 评论 ·
9 收藏

Spring Boot项目jar包部署及脚本启停(自动获取PID)

Spring Boot项目打成jar包部署时,一般会配合脚本来方便管理服务的启动与关闭,本文总结了在实践过程中用到的脚本,具体内容如下所示:1、创建服务启动脚本xxx-startup.sh,其内容如下所示#!/bin/bashecho "服务启动"# 后台运行jar包任务nohup java -Xms1024m -Xmx1024m -XX:MetaspaceSize=128m -XX:M...
原创
博文更新于 2020.01.09 ·
1512 阅读 ·
2 点赞 ·
0 评论 ·
5 收藏

创建型模式——抽象工厂模式

抽象工厂的定义与特点抽象工厂(AbstractFactory) 模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。产品族:同类产品属于可以被称为同级产品,而不同类型的产品组合起来的可以被称为产品族,这些产品分属不同的产品等级结构中。使用抽象工厂模式一般要满足以下条件:系统中有多个产品族,每个具体工厂创
原创
博文更新于 2020.09.25 ·
344 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

创建型模式——工厂方法模式

在《简单工厂模式》一节我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。优点:用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。缺点:类的个数容易过多,增加复杂度增加了
原创
博文更新于 2020.09.23 ·
443 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

简单工厂模式

简单工厂模式定义工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Fa
原创
博文更新于 2020.09.23 ·
394 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

创建型模式——原型模式

原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。原型模式的优点:Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),
原创
博文更新于 2020.09.23 ·
358 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

创建型模式——单例模式

单例模式的定义与特点单例模式(Singleton)的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。单例模式有 3 个特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点。单例模式的优点和缺点单例模式的优点:单例模式可以保证内存里只有一个实例,减少了内存的开销。可以避免对资源的多重占用。单例模式设置全局访问点,可以优化和共享资源的访问。单例模式的缺点:单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来
原创
博文更新于 2020.09.23 ·
198 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

软件设计七大原则之合成复用原则

合成复用原则的定义合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。合成复用原则的重要性通常类的复用分为继承复用和合成复用两种,继承复用虽然有简单和易实现的优
原创
博文更新于 2020.09.22 ·
614 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

软件设计七大原则之迪米特法则

迪米特法则的定义迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。迪米特法则的定义是:只与你的直接朋
原创
博文更新于 2020.09.22 ·
512 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

软件设计七大原则之接口隔离原则

接口隔离原则的定义接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。2002 年罗伯特·C.马丁给“接口隔离原则”的定义是:客户端不应该被迫依赖于它不使用的方法(Clients should not be forced to depend on methods they do not use)。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上(The depe
原创
博文更新于 2020.09.22 ·
462 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

软件设计七大原则之单一职责原则

单一职责原则的定义单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。该原则提出对象不应该承担太多职责,如果一个对象承
原创
博文更新于 2020.09.22 ·
467 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

软件设计七大原则之依赖倒置原则

依赖倒置原则的定义依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:
原创
博文更新于 2020.09.22 ·
267 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

软件设计七大原则之里氏替换原则

里氏替换原则的定义里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。里氏替换原是继承复用的基础,它反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范。里氏替换原则的作用里氏替换原则的主要作用如下。里氏替换原则是实现开闭原则的重要方式之一。它克服了继承中重写父类造成的可复用性变差的缺点。它是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。加强程序的健壮性,同时变更时可以
原创
博文更新于 2020.09.22 ·
372 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

软件设计七大原则之开闭原则

开闭原则的定义开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。这里的软件实体包括以下几个部分:
原创
博文更新于 2020.09.22 ·
734 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

UML图中的类图及类图之间的关系

UML简介UML(Unified Modeling Language,UML)统一建模语言,是用来设计软件蓝图的可视化建模语言,它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。类图类图在UML中用于表示类以及类与类之间的静态关系的信息,也是我们在学习设计模式时最重要的一种模型,通过UML类图,我们可以更加清晰明了的理解设计模式的工作原理,在后续章节中会频繁使用到。类图中的关系表示符在使用UML进行面向对象设计时,为了清晰的表述类与类之间的关系,UML提供了一系列的关系标识符,如下所
原创
博文更新于 2020.09.22 ·
674 阅读 ·
2 点赞 ·
0 评论 ·
2 收藏

GoF 的 23 种设计模式的分类和功能

1. 根据目的划分根据模式的目的来划分可以分为:创建型模式、结构型模式和行为型模式 3 种。创建型模式:用于描述 “怎样创建对象” ,它的主要特点是 “将对象的创建与使用分离” 。GoF 中提供了:单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式等5种创建型模式;结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF中提供了:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式等7种结构型模式;行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象无
原创
博文更新于 2020.09.22 ·
562 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

软件设计模式概述

软件设计模式的产生背景“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1979 年他的另一部
原创
博文更新于 2020.09.22 ·
269 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis学习手册19—集群

Redis集群Redis集群是从Redis 3.0版本开始正式引入的功能,它给用户带来了在线扩展Redis系统读写性能的能力,而Redis 5.0更是在集群原有功能的基础上,进一步添加了更多新功能,并且对原有功能做了相当多的优化,使得整个集群系统更简单、易用和高效。基本特性Redis集群提供了非常丰富的特性供用户使用,下面逐个介绍。复制与高可用Redis集群与单机版的Redis服务器一样,也提供了主从复制功能。在Redis集群中,各个Redis服务器成为节点(node),其中主节点(master
原创
博文更新于 2020.06.18 ·
1497 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Redis学习手册18—Sentinel

故障转移因为Redis支持主从复制,并且主从服务器的数据完全一致。因此,当主服务器因故障下线时,将它的其中一台从服务器转换为主服务器,并使用新的主服务器继续处理命令请求,这样整个系统就可以继续运行,不比仅因为主服务器下线而停机。这种使用正常服务器替换下线服务器以维持系统正常运转的操作,一般被称为故障转移(failover)。手动故障转移因为Redis支持主从复制特性,所以我们同样可以对下线的Redis主服务器实施故障转移,假设现在有一个主服务器 127.0.0.1:6379(简称 6379),它有两个
原创
博文更新于 2020.06.16 ·
1434 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis学习手册17—主从复制

复制复制功能是Redis提供的多机功能中最基础的一个,这个功能是通过主从复制(master-slave replication)模式实现的,它允许用户为存储着目标数据库的服务器创建出多个拥有相同数据库副本的服务器,其中存储目标数据库的服务器被称为主服务器(master server),而存储数据库副本的服务器则被称为从服务器(slave server)。如下图所示:对于Redis来说,一个主服务器可以拥有任意多个从服务器,而从服务器本身也可以用作其他服务器的主服务器,并以此构建出一个树状的服务器结构。
原创
博文更新于 2020.06.16 ·
1386 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏
加载更多