自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(200)
  • 收藏
  • 关注

原创 康威定律对于系统架构很重要吗?

> **organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations. — M. Conway*> 设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构 ......

2022-07-31 17:44:15 485 1

原创 分布式系统架构-----异地多活架构

分布式系统架构-----异地多活架构背景最近公司在搞异地多活,特来写篇文章来学习和回顾一下。异地多活看字面意思 :不通的地方部署服务。前段时间发生的B站挂掉的事情,网上众说纷纭,有的说是有机房着火了,导致服务宕机。那对于这种突发的情况,我们应该如何应对呢?包括说有些地方地震了导致机房宕机等等。这些自然灾害我们是不可避免的所以我们得从架构层面解决这种突发问题。异地多活架构1. 什么是异地多活架构?异地:不同的地理位置,多活:不同的地理位置的服务都能独立提供服务。异地多活的目的也就是容灾,容灾

2022-04-05 19:16:27 4315

原创 分布式系统-----BASE理论

分布式系统-----BASE理论CAP理论是分布式系统的基石, 那么base理论就是分布式系统的台阶了,在基石上凿的台阶。BASE 是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),核心思想是即使无法做到强一致性(CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性。BASE理论基本观点1. 基本可用(Basically Available)分布式系统,在出现故障的时候,允许损失部分

2022-04-04 23:54:58 708

原创 redis集群-----切片集群(cluster)

背景上篇文章聊到了redis的哨兵机制,哨兵的作用是保证主从节点宕机或者故障的时候可以可以进行自愈,选举合适的master并且告知client。这个机制也就保证了redis集群的可用性。但是这次我们又遇到了新问题,那就是主从复制架构的情况下redis 的内存不够用了该怎么办。有人说那就不断的阔各个机器的内存,按照常理我们都知道一个人的力量是有限的。当一个节点的内存过大,那么我们在进行同步的时候会通过RDB文件进行同步,而生成rdb文件是通过fork一个子进程进行的(下篇文章我们仔细聊下这个过程),在进行

2022-03-21 00:20:57 1445

原创 redis集群——哨兵机制(sentinel)

redis集群——哨兵机制(sentinel)redis集群——哨兵机制(sentinel)上一篇文章有讲到redis的主从复制《https://blog.csdn.net/weixin_40413961/article/details/123463661?spm=1001.2014.3001.5501》,读写分离的集群架构方式. 我们也聊到了一些缺点,主节点挂了怎么办呢?接下来我们就详细聊一下什么是哨兵机制?既然解决的问题是主节点挂掉了该怎么办,服务该给那个节点写呢?不写就数据不一致了,服务就

2022-03-17 22:00:21 1055

原创 Redis集群架构----主从复制

上次我们看了CAP定理,以及CP,AP架构的原则,这篇文章主要聊下redis的几种集群架构方式。以及对应的架构原则。主从理解对于任何一个服务我们都在讲高可用,如果对于一个单机服务如果挂掉了那岂不是就GG了。那我们为了让服务available那就进行多起几个服务进行数据冗余,达到挂掉一个还有一个顶着。但是在保存的数据的时候会有很多的麻烦事,写数据的一致性问题,当给每台机器都进行写数据的时候且各个节点之间的数据是互相同步的,这个时候就遇到了并发安全问题,通过各种加锁同步操作会对整个服务的性能严重下降,这也就

2022-03-13 18:34:23 4110

原创 深入浅出CAP定理

架构

2022-03-13 13:16:21 687

原创 区块链技术必杀技之——智能合约

智能合约介绍1.1 什么是智能合约虽然在法律范畴上来说,智能合约是否是一个真正意义上的合约还有待研究确认,但在计算机科学领域,智能合约是指一种计算机协议,这类协议一旦制定和部署就能实现自我执行(self-executing)和自我验证(self-verifying),而且不再需要人为的干预。从技术角度来说,智能合约可以被看作一种计算机程序,这种程序可以自主地执行全部或部分和合约相关的操作,并产生相应的可以被验证的证据,来说明执行合约操作的有效性。在部署智能合约之前,与合约相关的所有条款的逻辑流程就已

2022-01-22 16:44:23 20551

原创 不可不知的P2P(Peer-To-Peer)

1.1 Peer-To-Peer 介绍目前,在学术界、工业界对于P2P没有一个统一的定义,下面列举几个常用的定义供参考:定义:1、Peer-to-peer is a type of Internet network allowing a group of computer users with the same networking program to connect with each other for the purposes of directly accessing files from o

2022-01-22 12:36:40 2541

原创 JDK8使用G1 垃圾回收器能解决大问题吗?

本文想突出两个问题:解决问题的思路:从最原始的角度去思考,问题的本身是因为缓存数据导致的GC,那我们就应该去思考缓存数据是否合理,而不是去思考JVM的参数是否合理学习G1的知识,其关键的概念,关键参数,回收机制,已经相对CMS解决的两个问题:1.浮动垃圾 2.可预期的停顿时间1. 背景最近项目有两个问题加了内存缓存,防止穿透到redis的missCache,导致大量的GC。项目在每次发布的时候GC时间很长达到2s,导致大量的超时。就针对这两个问题进行了分析和优化。2. 问题分析首先

2022-01-16 17:15:00 4629 1

原创 Java新特性-JDK16中的Record类(怎么精简地表达不可变数据?)

Java新特性-JDK16中的Record类1. 背景从18年开始了解到java就用的就是jdk8,经历了两家公司,也都是JDK8的项目,这是故步自封还是稳中求胜呢,对于商业项目来讲需要考虑到的地方太多了,更新的价值点和风险点 ,最终的结果导向还是价值,升级后对于我们现在到底能带来多少送价值。但是对于我个人来讲我不去学习新的东西,那必然是故步自封了。给你一个保守、粗暴的估计,你如果从 JDK 8 迁移到 JDK 17,并且能够恰当使用 JDK 8 以后的新特性的话,产品的代码量可以减少 20%,代码错

2021-11-20 16:39:36 1147 1

原创 正经人谁写博客啊!下贱!

有一段时间没有写文章了,具体为什么呢?变懒了,由于安于现状,所以没有持续的去学习和输出,三天打鱼两天晒网,另一个原因,就是自己输出东西质量太低(全是借口)。之前看了同事发的朋友圈:“积累一定比输出慢, 所谓无限持续输出有2个可能.一个核心不断换角度输出抄袭或者自己也不知所云读别人的东西用户要求自媒体持续输出就像老板要求员工持续输出”说的很有道理,同事的这句话让我陷入了沉思之中,甚至要对号入座,对自己写技术文章做以下反思:现在想一下之前输出的大部分文章是自己在工作中遇到的问题或者学习新知识

2021-10-10 23:15:53 94

原创 JedisPool资源池优化

JedisPool资源池优化合理的JedisPool资源池参数设置能够有效地提升Redis性能。本文档将对JedisPool的使用和资源池的参数进行详细说明,并提供优化配置的建议。使用方法以Jedis 2.9.0为例,其Maven依赖如下:<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version&g

2021-09-23 23:15:30 261

原创 大数据必经之路-认识Spark

大数据之——认识spark什么是spark?wiki:Apache Spark是一个开源集群运算框架,最初是由加州大学柏克莱分校AMPLab所开发。相对于Hadoop的MapReduce会在运行完工作后将中介资料存放到磁盘中,Spark使用了存储器内运算技术,能在资料尚未写入硬盘时即在存储器内分析运算。Spark在存储器内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍,即便是运行程序于硬盘时,Spark也能快上10倍速度。[1]Spark允许用户将资料加载至集群存储

2021-09-02 23:45:51 938

原创 ClickHouse学习-建表和索引的优化点(一)

ClickHouse 优化点clickhouse 相对于mysql,除了在mysql在SQL和索引的优化空间比较大外,而其他的clickhouse的优化空间还是很大的,对于clickhouse他的服务端配置参数对于任务的影响还是很大的。现在我们来看看clickhouse都有哪些常规的优化点,今天主要学习一下创建表的时候需要注意的点建表优化1. 数据类型1.1 null值尽量避免关于NULL存储的问题,尽量不要制定为nullable 这样会影响列的查询性能,因为如果有null值对于clickh

2021-08-29 01:36:35 4082

原创 clickhouse表引擎megerTree

clickhouse 表引擎官方文档:https://clickhouse.tech/docs/zh/engines/table-engines/mergetree-family/mergetree/#choosing-a-primary-key-that-differs-from-the-sorting-keyclickhouse是一个列式存储的应用于OLAP场景的数据库管理系统。数据库管理系统分为:客户端底层存储的表引擎。包括我们所熟悉的MYSQL。表引擎的不一样,其数据库的特性区别也很大。对于列式

2021-08-26 00:40:04 352

原创 细品事务机制(三)-分布式事务

背景文章:大篇幅来自于:《周志明-凤凰架构》建议移步原文阅读 ,本篇为本人的学习笔记。分布式事务,分布式事务指的是服务层面的事务控制方式, 多个服务多个数据源。不像我们之前讨论的全局事务,这里有必要再强调一次“数据源”与“数据库”的区别:数据源是指提供数据的逻辑设备,不必与物理设备一一对应。多个服务,多个数据源,也就是我们常说的微服务,一个大的交易系统 ,可以由订单服务,物流服务,时效服务,用户服务各个服务最终达成一个 电商服务。用户买到一个衣服从下单到发货。也就是一个打的事务,这个事务需要各个电商

2021-08-08 17:12:56 160

原创 读书笔记-《异类》

读书笔记-《异类》背景为什么要读这本书呢?因为看了罗老师的《我的青铜时代》,包括之前他的一些演讲,给我印象最多的是因为读书引起了很多好的变化。所以我就好奇他都读了哪些书,其中一本就是我现在读的《异类》。因为我也想罗老师一样厉害,所以我要读读罗老师的书单,虽然成功不可以复制,但是可以少走弯路。机遇马太效应”凡是有的,还要加给他,叫他有余。没有的,连他所有的,也要夺过来“,这就是马太效应,通过棒球队的列子通过有力的数据证明了这一点。这让我也想到了我们国家目前采取的一些措施,小学生不要进行排名。包括对于

2021-07-26 00:25:34 102

原创 细品事物机制(二)

细品事物机制(二)上一节讲了本地事物,我们先回顾一下,本地事物的事物是依靠底层数据库的支持实现,列如我们项目中的jdbc中统一封装的rollBack()方法以及结合AOP切面和事务的传播特性实现整个项目的事物机制。 今天我们主要聊的是全局事务。什么是全局事务?与本地事务相对的是全局事务,在上一节中,事务的区分可以根据数据源和是否单机进行区分。全局事务被限定为一种适用于单个服务使用多个数据源的事务解决方案。但是理论上的全局事务是没有单个服务的限制的,它本来就是 DTP(Distributed Trans

2021-07-25 16:06:02 131 1

原创 浅入浅出Caffeine cache

背景公司项目中有用到caffeine cache 所以来了解一下。本地缓存也就是我们适用内存缓存一些热点数据,使应用程序的程序处理的更加的快。以及保护我们的一些有IO操作的函数/方法,以达到提高我们应用程序吞吐的目的。对于java技术栈来讲我们通常使用到的本地缓存都有 一些原有的容器HashMap,google的guava cache等等。今天了解一下caffine缓存。简介Caffeine 是基于Java 8 开发的、提供了近乎最佳命中率的高性能本地缓存组件,Spring5 开始不再支持 Gua

2021-07-24 22:01:30 792 3

原创 细品事务机制(一)

细品事务机制(一)什么是事务?事务在每个系统中都会涉及,它存在的意义就时符合预期的期望。且相互关联的数据之间不会产生矛盾,也就是数据状态的一致性。数据库的经典理论需要达成一致性这个目标,需要三方面共同来努力保证:原子性:在同一项业务处理过程中事务保证了各业务正在读,写的数据同时成功,要么同时被撤销。通俗就时 要么完全完成某一件事,要么就要回到这件事情最初状态,就算你做了一般你也要进行“回滚”到最初的状态隔离性:在不同的业务中,事务保证了各业务正在读,写的数据相互独立,不被彼此影响。也许你在此想到了

2021-07-18 18:30:08 98 1

原创 优秀的程序员都应该拥有产品思维

优秀的程序员都应该拥有产品思维我刚毕业的时候在一家创业公司,leader讲的对多的话是:要想做好且成为一名优秀的程序员,你得具备产品思维。不要产品给你什么需求你都去接,你得判断是否合理,是否在已有的功能上的重复,是否有其他更加合理的方案可以解决问题,还有产生的价值有多少,是否开发后会没有人用的情况等等(又出现了过这种情况)。这不是针对谁,只是提防那些不专业的产品经理,我们的产品经理可以不专业,但是我们不能不专业。当时我经常被我的leader问到语塞,我接了某个需求后,review的时候,他不停的问我问什

2021-06-27 16:13:16 369

原创 工程师必须知道的几个原则

DRY 原则逻辑重复校验密码和校验账号的两个函数有重复的逻辑。也就是有重复的逻辑,但是也不是重复的代码功能语义重复什么是功能语义,语句表达的意义。 实现一个检验IP合法性的。一个使用的是正则进行校验的,一个是通过hard code进行校验。这就是代码逻辑不同,但是语义是相同的代码执行重复执行了多次语义相同的逻辑代码。比如我们在在校验用户的登录信息是否正确的时候,先校验他的基本信息是否存在,再校验是否正确。但是我们在校验是否正确的时候已经 校验了是否存在了。所以不用重复了。代码的可复用性当有

2021-06-25 09:24:48 223

原创 细品mysql的事务隔离机制

细品mysql的事务隔离机制背景之前也有记录过mysql事务这块,温故而知新。既然聊的是Mysql事务的隔离机制,那在这里我们就默认mysql使用的是InnoDB引擎。事务这两个词也还算抽象,在这里我就把大家当做大黄鸭,都细细的聊一边。为什么MYSQL数据库需要事务在回答这个问题之前,先分析一下问题,数据库:也可以称为数据管理系统,存储数据的一个系统,将我们所需要的数据进行持久化存储,再着就是事务:这本就是一个抽象的概念,我在这里把他描述为一个过程,一个事件的成功,必然会经过一个过程,这个过程

2021-06-20 17:05:08 83

原创 从零开始学架构-day05

从零开始学架构-day06高性能缓存架构当服务使用关系型数据库已经达到性能瓶颈的时候我们应该怎么办,数据库已经分片了,也分库分表了,索引什么也都极致了(一般不可能)但是还是扛不住高流量。有点经验的同学都会说:“加缓存,上redis or 直接应用内存(缓存)“。什么时候用高性能缓存架构?需要经过复杂运算后得出的数据,存储系统无能为力当我们是一个用户中心的系统,需求是提供在线用户的人数,那我们肯定不能去select count(*) 数据库去统计吧,一般读多写少的数据,存储系统有心无力

2021-06-14 17:25:41 1120 3

原创 压测引发的思考——高并发用同步还是异步好?

高并发用同步好还是异步好?背景最近616大促,公司的服务需要进行压力测试,使用了公司自己的压测平台。对生产机器进行了摘流量压测。由于服务都是查询的接口,也算是很好压测的。这篇文章大概描述压测过程过程,主要是压测出的问题的解决以及对ForkJoinPool学习和了解。(标题党???????)为什么要进行压测电商促销 ,这个肯定要对现有服务的流量预估,峰值可以抗到多少QPS 。是否需要在促销前加机器,是否需要加机器内存等。是否当有高并发的时候会有明显的性能bug问题,在促销前进行性能优化,不在物理

2021-06-05 19:38:21 446 2

原创 大数据之认识MapReduce

认识MapReduce什么是MapReduce?MapReduce 既是一个编程模型,又是一个计算框架。模型是对事物共性的抽象,编程模型就是对编程的共性的抽象, 最重要的共性就是:程序设计时,代码的抽象方式、组织方式或复用方式。大概是了解了 可以理解为MapReduce 就是一套抽象好的两个函数,一个是Map ,一个是Reduce。我们可以再这两个函数里面填充计算的业务逻辑。将MapReduce分为Map和Reduce,Map就是将数据进行切分,Reduce就是将数据进行归类。MapReduce计

2021-05-25 23:39:33 170 5

原创 数据同步神器Canel-day01

背景关于数据同步的方式有很多种,现在有一个场景需要将mysql数据库的数据主动同步到我们的工程中,并且能再mysql数据库客户端更改某一行的数据也能将数据同步到另一个数据库或者工程中,对于这种场景的使用我们应该怎么去实现呢?我们从问题点去分析,同步mysql数据库数据到工程中,这个很简单,那就是工程直接连接数据库直接读取。这不是主动是被动,这样的话那就肯定得数据库主动去触发了。那这肯定要改动mysql的底层源码,或者mysql又提供接口,既然说到了这里,想想mysql的主从同步机制呢?mas

2021-05-22 23:45:23 3496 3

原创 从零开始学架构-day04

不得不说我是三天打渔两天晒网,烂泥巴糊不上墙。烂泥巴开始打渔。上节跟着大佬学习了,架构的复杂度来源,现在回顾下,确实想不起来了。重新开一遍。回顾影响架构复杂度的几大因素,追求高性能,高可用,高拓展既然已经知道了复杂度的来源于这些方面,那我们有什么原则可以直接将这些复杂度化难为简呢? 那这这节课,我们就看下架构的三大原则:合适原则,简单原则,演化原则。架构的三大原则合适原则合适原则,合适的意思就是合适呗,选择一个中间件,或者一些框架,或者物理机等,都得合适我们所要设计的系统。还有就是合适原则

2021-05-03 22:06:38 2158 6

原创 从零开始学架构-day03

架构设计的目的之一是为了解决项目的复杂度。复杂度的来源,追求高性能,高可用,并且拓展。先从高性能来看。1. 高性能1.什么是高性能?我们平时开发的时候曾经无数次有提到过追求高性能,那么到底什么是高性能,能抗很高的QPS和TPS,能有很快的响应时间等等。而我们所做的架构,是基于原始计算机的硬件设施达到最大的支撑能力,通俗的讲,就是将计算机充分利用,如CPU,内存等。别人设计的架构一台计算几能抗1WQPS,而我们设计的架构的软件再计算机上跑能抗2W QPS (相同的业务需求,相同的计算机)这就是牛逼。

2021-04-19 23:01:52 1751 9

原创 Java函数式编程神器 VAVR(vavr - turns java™ upside down)

什么是函数式编程基本概念:他是一种编程范式,对于函数式编程来说,它只关心定义输入数据和输出数据相关的关系,数学表达式里面其实是在做一种映射(mapping),输入的数据和输出的数据关系是什么样的,是用函数来定义的。特征:stateless:函数不维护任何状态。函数式编程的核心精神是 stateless,简而言之就是它不能存在状态,打个比方,你给我数据我处理完扔出来。里面的数据是不变的。immutable:输入数据是不能动的,动了输入数据就有危险,所以要返回新的数据集。(不可变的)Jav.

2021-04-17 22:28:14 1051 9

原创 从零开始学架构-day02

回顾在上一节篇中主要是学习了架构和框架的的区别,包含系统和子系统的概念,以及在不同的维度去区分一个系统的架构是个什么样子。今天我们开看一下架构这个概念是为什么出现,为什么我们每开发一个系统都要进行架构设计。1. 架构的发展历史一切事物都有自己产生的原因,那么架构的出现是为什么呢?也许你有听说过因为一行代码导致了火箭发布失败,也许你也听说第一次软件危机和第二次软件和面向对象的开发和面向对象语言的产生。包含《人月神话》这本书出现。还有就是我们的语言从 机器语言-> 汇编语言-> 高级

2021-04-13 22:56:43 244 4

原创 从零开始学架构-day01

架构是什么?1. 架构和框架是什么关系?有什么区别?1.1 系统与子系统泛指一群有关联的个体组成的,根据某种规则运作,能完成单个组件不能单独完成的工作的群体。他的意思是总体,整体,或联盟。其中重点概念就是:关联,一群有关联的个体规则,通过某种规则进行分工,和工作能力,系统成员都有自己的能力通过系统的概念是不是也能联想到我们现实的team,我们也可以比作一个系统(但是也有可能不是,因为有些人各自为政,不按套路,没有规矩出牌)。那我们再关注一下现实中真实的系统,linux操作系统,微信

2021-04-12 23:35:33 2867 6

原创 机器学习:什么是无监督学习(Unsupervised Learning)?

概念上一片文章我们了解了监督学习,监督学习是一种目的明确的训练方式,通过已知因素和已知的结果,通过机器训练,是机器能学会通过已知因素得到未知的结果。而无监督学习是通过给未知的数据,进行分类,也许你就会问了,我都不知道有什么规律,我怎么区分类呢?这就是用到算法模型了。wiki:无监督学习(英语:unsupervised learning)是机器学习的一种方法,没有给定事先标记过的训练示例,自动对输入的资料进行分类或分群。无监督学习的主要运用包含:聚类分析(cluster analysis)、关系规则(a

2021-03-08 23:29:34 7120

原创 机器学习:什么是监督学习(Supervised learning)?

概念wiki:监督学习是机器学习的一种方法,可以由训练资料中学到或建立一个模式(函数/learning model),并且依次模式推测出新的实例。训练资料:由输入物件和预期输出组成,函数的输出可以是一个连续的值(回归分析),或是预测一个分类标签(分类)通俗讲:我本不知道X 和 Y 能得倒一个什么样的关系,但是通过很多个X和Y且已知XY的关系的数据得知,他们存在一种函数式关系f(x,y)。并且在后续可以通过f(x,y)得到一个符合实际规律(相对准确)的结果。其中在得出规律的这一个过程就叫做监督学习。

2021-03-06 20:40:03 8876

原创 随笔

今天我在思考什么?还是什么都没有思考,浑浑噩噩的一天又完了。心里总是想着只有不断的思考和反思才可以进步,也许这也是一个习惯,我没有这样的好习惯,以至于我不能习惯性的去思考,像一个行尸走肉一样,在走路,也不知道在想什么,在坐地铁,也不知道在想什么,在上班,单纯的写代码,在玩手机,被牛逼的大数据引领者看一些完全不用思考的视频。像傻逼一样感到开心。就这样庸庸碌碌。但是偶尔会感到焦虑,公司不够好,环境不够好,钱不够多,自己不够优秀。现在在思考,写下来,慢慢的思考,用文字引导自己。让自己思考起来,然后得到结论.

2021-01-31 23:07:27 194 3

原创 获取不连续数字中缺的数字

背景最近项目需求需要做一个档案管理系统,其中一个功能就是判断凭证是否断号。且将断号的号码找出来。需求分析凭证的短号规则,也就是这个凭证是通过怎么一个规则来判断短号的。最后和产品了解每个公司都有自己的规则。不一定是纯数字,也有可能标记有横杠特殊字符等。砍需求,由于我们在年底进行开发的版本是POC版本,并且时间非常的紧急(以至于我们每天都要搞到11点)。所以说不用很复杂的业务需求,所以最后讨论下来先做为写死的纯数字校验。所以有了今天这篇文章。CODOING其实有很多同学看到这个一串数字断号校

2021-01-30 22:56:35 349

原创 细品分布式事务

背景我们平时的单机事物的使用,一步操作,要么全部执行完成,要么全部不执行,也就是ALL or Nothing。但是如果我们使用了分布式,一件事情分为多个分别在多个在不同的机器(进程)上执行。那对于这种的事物我们应该如何控制呢?事物ACID属性Atomicity :原子性,原子是人类目前发现最小单元,他是不能再分的,也就是事物也具有这个属性。Consistency:一致性,事物在执行前后,具有完整性约束。也就是保证该事物的各个步骤下来是是正确的Isolation:隔离性,也许你立马想到了mysq

2021-01-30 16:27:12 1147 5

原创 设计模式之美笔记(一)

基于接口编程函数的命名不能暴露任何实现细节封装具体的实现细节。为实现类定义抽象的接口简单来说,也就是通过调用接口来实现方法的调用,怎么通过接口来实现方法的调用呢,那就是真实的方法继承接口实现接口的方法。这也是模版模式的一种形式吧编程意识1.“基于接口而非实现编程”,这条原则的另一个表述方式,是“基于抽象而非实现编程”。后者的表述方式其实更能体现这条原则的设计初衷。我们在做软件开发的时候,一定要有抽象意识、封装意识、接口意识。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性、扩展

2021-01-17 16:18:56 242

原创 如何使用MySQL关系型数据库存储树结构

背景需求存储一个组织结构或者档案仓库,看到这个需求我们的第一个反应肯定就是树状结构,并且是一个多层多节点无限级树状机构。我们目前使用的是mysql关系型数据库。那我们应该如何来实现这个结构关系呢?有3种存储的方式:到目前为止我在实战中曾使用过三种方式来实现这种hierarchical-data:Adjacency list (邻接表)Closure table (闭包表)Path enumeration (路径枚举)基于个人需要这里主要了解闭包表。Closure table

2020-12-13 18:37:27 595

空空如也

空空如也

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

TA关注的人

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