Hub of Poppet

每一个闻鸡起舞的日子都是我在追赶世界的脚步


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

design pattern

发表于 2022-02-25

Design Pattern

设计模式

image

面向对象设计原则

  • 单一职责: 一个对象应该只包含单一的职责(一个类干一件事)
  • 开闭原则:对扩展开放,对修改关闭(只加不改)
  • 里氏替换原则: 所有引用基类的地方必须能够透明地使用其子类的对象(应传入父类的时候传入子类也可以
  • 依赖倒置原则: 高层模块不应该依赖底层模块,他们都应该依赖抽象(类不应该继承实体类,应该继承实体类的父接口)
  • 接口隔离原则: 客户端不应该依赖那些他不需要的接口
  • 迪米特原则: 只需要保存自己所需要的全部知识。
  • 合成复用原则: 面向组合编程,避免继承

创建型模式

控制和影响一个实例化对象的创建过程

  • 工厂模式和抽象工厂控制实例对象时候的类选择
  • 建造者模式控制多个类以相同的流程实例化
  • 原型模式通过深度复制原型类让类的多个实例化更加的迅速
  • 单例模式让类的实例化对象只存在一个

结构型模式:

处理类间或系统间的关系

  • 适配器模式: 将其他类或系统中的方法封装一个统一接口来调用,从而达到适配各种系统方法的目的。(针对不匹配的接口,再封装一个类,对不匹配接口进行修饰,提供给目标类)
  • 桥接模式: 处理部分(类)与实体(实例化)之间的结构,可以使抽象部分和实例化部分单独变化不干扰。(把多个具体类的抽象作为客户端类的属性,然后执行函数时,传入实例化的具体类)
  • 组合模式: 用于设计一个有层次等级的系统,处理各层次之间的关系。(A对象作为B对象的属性,A和B对象同类型)
  • 装饰模式: 用于扩展一个类或者系统的功能。(对类进行封装,然后对外提供接口不变,内部实现一些补充功能)
  • 外观模式:为子系统中相似功能设计一组统一的界面或接口. (如果几个类有相同的操作,就写个类,把他们的某些操作绑定一下,避免多次操作)大家共享一个类就行了
  • 享元模式:让小粒度高频使用的类被共享,减少实例化过程,减少损耗。(把类里面非共享的属性拿出来通过参数传进去,然后大家共享一个类就行了)
  • 代理模式: 用于控制一个对象的访问,仅允许通过代理访问对象。(不要直接访问某些类,再写个类,把要访问的类作为属性,间接去访问)

行为型模式:

解决不同实体通信的问题

  • 解释器模式: 定义一种解释,根据传入的参数和解释进行匹配,然后执行相应的动作。
  • 模板方法模式: 定义一个模板,模板内的执行流程是固定的,但是每个流程的动作是可变的。(按顺序执行几个动作,但是每个动作里面具体干什么事情可以自定义)
  • 责任链模式: 将多个处理方法连接成一个链条(通过组合),然后按条件决定是否处理请求还是转发。
  • 命令模式: 找个类,专门创建命令,然后丢给接收者,接受者接收命令,然后选择对应的执行者来执行命令。
  • 迭代器模式: 对外提供一个接口,实现顺序访问聚合数据,但是不对外暴露
  • 中介者模式: 将其他对象之间的交互装在中介者对象中,达到松耦合、隐式引用、独立变化。(类太多了,找个中间类,把几个类的操作绑定在一起,实现简洁)
  • 备忘录模式: 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态(创建一个备忘录(类),然后把另外一个类的实例存起来)
  • 观察者模式: 核心抽象对象管理所有依赖他的其他类,并在设计中使其在发生变动时,主动通知并更新其他类。(在类中拥有其他类的实例,当数据变化时,调用相应实例的方法)
  • 状态模式: 当对象的内部状态改变的时候,允许对象执行不同的流程,看起来就像改写了一个对象。(在一个类中,根据某个属性的不同值,来调用不同的其他类实例的方法)
  • 策略模式: 策略模式,让一个类的行为或其算法可以在运行时更改,策略是让实例化对象动态的更改自身的某些方法.(在运行的时候,把方法的属性赋值一个新方法,执行不同的策略)
  • 访问者模式: 将数据结构和作用于结构上的操作解耦。(一个数据类,有很多操作时,封装成具有统一接口的多个访问者(类),提供给客户端调用)

mysql notes

发表于 2022-02-23 | 分类于 技术研究

mysql 基础认识

1: mysql是当下最流行的关系型开源数据库,由于其体积小,速度快,总体拥有成本低,尤其适用于OLTP领域。

mysql 存储引擎

####
mysql有以下存储引擎:
1: InnoDB,Mysql默认的存储引擎,支持事务,mvcc,外键、行级锁和自增列
2:MyISAM: 支持全文索引、压缩、空间函数、表级锁,不支持事务,插入速度快。
3:Memory: 数据都在内存中,数据的处理速度快,但是安全性不高。
4:ARCHIVE: 常用于归档表,占用空间小,数据不能更新删除。

MyISAM和InnoDB的主要区别:
1:InnoDB支持事务,MyISAM不支持事务。
2:InnoDB支持外键,MyISAM不支持
3:InnoDB不支持全文索引,而MyISAM支持。
4:InnoDB是聚蔟索引,MyISAM不是,需要二次查找
5:InnoDB不保存表的具体行数,而MyISAM用一个变量保存了整个表的行数
6:InnoDB最小的锁粒度是行锁,MyISAM最小的锁粒度是表锁。
7:存储结构不同,MyISAM表分为frm MYD MYI三个,InnoDB一般分为frm idb两个。

mysql的逻辑架构

mysql arch

Flask main flow

发表于 2022-02-15

Flask 基本工作流程

image

基于fork和pull request的模型代码管理方式

发表于 2020-07-14 | 分类于 技术研究

1 设计目的

公司目前拥有模型库,产品模型库,项目模型库三级代码存储机制,在目前开始基于主线模型去开发项目模型的场景下,从以下几点出发,想在公司内部推行主流的模型代码分发流程。

  1. 在项目初始的时候,避免建模人员私自采用其他项目的非标准代码,造成偏离主线的情况
  2. 为了推行统一的代码规范和通用模块,模型模块建设方法
  3. 更好的接收项目中的模型特性反馈
  4. 为算法人员接受项目中开发模型提供统一反馈接口
  5. 为诸多准主线模型进入主线模型库提供标准的接入流程
阅读全文 »

设计模式读书笔记

发表于 2020-06-24 | 分类于 读书笔记

面向对象编程原则:
1:针对接口编程,不面向实现编程
2:优先使用对象组合,而不是类继承

当设计模式被用来对系统分层和限制对平台的依赖性时,它们还会使一个应用更具可维护性。

基于Pycharm和Docker的开发环境代码加密

发表于 2020-02-12 | 分类于 技术研究

如何使用Pycharm和Docker实现开发环境自定义

引言

在工作中经常存在这样一种状态,当同时开发多个项目的时候,如果每个项目的环境配置是不一样的,则当需要进行项目切换开发时,是比较痛苦的。

虽说存在各种环境隔离工具,但是仅仅是服务于一种语言的特定开发。项目开发中使用的环境还是蛮多的,有时候还是需要像独立机器那样的环境来进行项目隔离开发。为此以前采用虚拟机方式进行环境隔离。不过使用laptop进行开发,虚拟机解决方案还是不够轻量。

阅读全文 »

怎样做好一个技术leader

发表于 2019-06-18 | 分类于 项目管理

一、 做好项目实施关键路径

什么叫项目的关键路径,归根到底就是一句话,就是做项目的套路。就是项目从头到尾,要做哪些关键事项。

这一点其实是一个靠经验吃饭的地方,做的项目多,套路自然就熟了。拿到项目的关键里程碑,其实就可以做出项目实时关键路径了,但是这个和项目主计划又有所不同,这个关键路径是不带时间属性的。因此,平时应该和别人就这一点仔细交流。

阅读全文 »

在览众,项目居然是这么做的!!!

发表于 2019-05-18 | 分类于 项目管理

在国际滨的物联网街上,有这么一家公司,名字叫览众数据,端的是NB绝顶。

这家公司由创始人带着国外先进的供应链知识回到国内,邀请星巴克,百度,汉得的众多大佬级人物加盟,通过攻克服装,零售,医药流通等行业的头部客户,打造了极具标杆效应的行业案例,一时风头无两,独孤求败。

那么览众到底是如何搞定太平鸟,李宁,拉夏贝尔,九州通,凯蓝这些看起来遥不可及的目标呢?让我们来一探究竟。

阅读全文 »

Python运行环境分析

发表于 2019-05-18 | 分类于 技术研究

Python运行环境分析

  1. 引言

    Python 作为一门非常强悍的语言,目前在多个领域内发展的如火如荼。Python的发展离不开其庞大的第三方库。因为各种原因,我们可能或在多个场景下使用不同的Python及其第三方包。为了实现隔离和权限,Python需要在不同的环境下运行,因此,本文想来分析下Python在各个场景下的运行环境设置。

    阅读全文 »

redpoppet

9 日志
3 分类
7 标签
© 2024 redpoppet
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4