自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿牧路泽

To life, like today is the end.

  • 博客(272)
  • 收藏
  • 关注

原创 9、 Mac 实用软件清单

Mac 实用软件推荐

2021-01-19 20:17:17 354 1

原创 8、 Mac iTerm2 优化

Mac iTerm2 优化一、悬浮窗口首先我们来解决第一个问题:如何在任何界面呼入呼出 iTerm2 的窗口,并且悬浮在界面的顶部?相信每个人都会有这样的使用场景:你正在全屏浏览器浏览网页,或者正在全屏编辑器写代码写文章之类的,突然想到了什么,或发现了什么,想快速打开终端,执行一两条命令(诸如打开文件、启动服务等),然后关闭。对于这种情况,我们的愿景是可以通过快捷键迅速打开终端,然后用同样的快捷键迅速隐藏它,直到我需要时再次来到我面前。至于实现方式,虽繁琐但并不复杂,下面跟着我的步骤走:1、创建新

2021-01-19 20:15:22 1601

原创 7、Mac iTerm2 + Zsh 打造舒适终端

iTerm2 + Zsh 打造舒适终端最终效果图:一、准备工作gitxcode本文默认各位同学已经安装了git环境和xcode(command line tools),遇到提示找不到git命令或需要安装command line tool的地方,文中不再赘述了。二、安装1、安装 iTerm2可以直接去官网下载:https://www.iterm2.com/。安装完成后,在/bin目录下会多出一个zsh的文件。Mac系统默认使用dash作为终端,可以使用命令修改默认使用zsh:$ chs

2021-01-19 20:12:38 660

原创 Typora PicGo Gitee打造舒适 Markdown 写作环境

一、 Typora直接在typora官网选择Download下载相应的版本安装即可。二、 PicGo1、下载安装 PicGo在PicGo官方的github地址下载即可,建议选择2.2.0以上版本,支持PicGo-Server配置自定义端口。我们这里选择2.3.0 beta3 版本。2、Gitee 插件安装在插件设置中查找gitee(搜索栏区分大小写),安装gitee-uploader 插件。安装完毕重新启动,左侧图床设置中将会加入Gitee图床三、Gitee 准备1、申请 gitee

2021-01-19 19:52:31 156

原创 geopy

一、geopy 简介及安装可以使用geopy库来查询地址,国家,城市,地标,geopy使用的是第三方的geo解析器(包括谷歌地图,必应地图,Nominatim等)和一些数据源来获取地理信息。安装 geopy:pip3 install geopy二、geopy 使用1、从地址字符串获取 Location 对象也就是将字符串转换为地理位置。# coding=utf-8from geo...

2019-12-31 11:40:13 2203

原创 shedule 和 apscheduler

一、schedule 模块schedule 是 Python 中一个轻量级的定时任务调度库,它可以完成每分钟、每小时、每天、每周几等特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。Schedule 是 Python3 的一个第三方模块,安装方式如下:pip3 install schedule示例:import scheduleimport time def job(...

2019-12-31 11:39:06 837

原创 11、树状数组(binary_indexed_tree)

1、简介所谓的Binary Indexed Tree,首先需要明确它其实并不是一棵树。Binary Indexed Tree事实上是将根据数字的二进制表示来对数组中的元素进行逻辑上的分层存储。树状数组的核心思想:每个元素是原数组中一个或多个连续元素的和在进行连续求和操作 a[1]+...a[n] 时,只需求树状数组中某几个元素的和即可,时间复杂度为 O(logn)在进行修改某个元素 a...

2019-12-31 11:18:45 166

原创 10、线段树(segment_tree)

1、简介线段树算法是一种快速查询一段区间内的信息的算法,由于其实现简单,所以广泛应用于程序设计竞赛中。线段树是一棵完美二叉树,即所有的叶子节点的深度均相同, 并且所有的非叶子节点都有两个子节点。每个节点维护一个区间,这个区间为父节点二分后的子区间,根节点维护整个区间,叶子节点维护单个元素,当元素个数为n时,对区间的操作都可以在O(log n)的时间内完成,因为此时树的深度为log2 n + 1...

2019-12-31 11:17:24 182

原创 9、并查集(disjoint_set)

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用中以森林来表示。并查集有三种基本操作:获得根节点判断两节点是否连通将两不连通的节点相连(相当于将两节点各自的集合合并)用UnionFind类来表示一个并查集,在构造函数中,初始化一个数组parent,parent[i]表示的含义为:索引为i的节点,它的直接父节点为parent[i]。初始化时各个节点都不相连...

2019-12-31 11:16:31 176

原创 8、哈希表(hashtable)

HashTable 是一种非常常见且用途十分广泛的数据结构,使用 HashTable 可以大大的提高数据的检索速度,是一种非常优秀的结构。1.Hash 算法散列(哈希)是一种对资料的处理方法,通过某种特定的函数/算法(称为散列函数/算法)将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,生成一种便于搜索的数据结构(称为散列表)。一个典型的 Hash 算法是将整数除以一个常量并且取...

2019-12-31 11:15:37 212

原创 7、AVL 树

1、AVL 树AVL树的名字来源于它的发明作者 G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。定义:它或者是一颗空树,或者具有以下性质的二叉查找树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。...

2019-12-27 16:05:04 221

原创 6、二叉搜索树(Binary search tree)

1、二叉树二叉树是指每个节点最多有两个子节点的树结构。注意事项:树的根节点是树的第 1 层。二叉树的性质:二叉树的第 i 层上的节点数最多为 2*(i- 1) (i > 1)深度为 k 的二叉树至多有 2*k - 1 个节点包含 n 个节点的二叉树的高度至少为 log2(n+1)在任意一颗二叉树中,若终端节点的个数为 n0, 度为 2 的节点数为 n2,则 n0 = n...

2019-12-26 13:53:54 410

原创 5、链表(linked list)

1、单链表(Linked List)list是最常用的数据结构,但是list在中间增减元素的时候效率会很低,这时候linked list会更适合。链表的特点:非线性,非连续存储的数据存储在节点("Node")中,节点包含:数据 + 下一个节点的指针操作的时间复杂度:增删改查的时间复杂度都是 O(n),单在链表头的操作时间复杂度是O(1)带虚拟头结点的单链表的 Python 实...

2019-12-26 13:52:50 1171

原创 4、循环队列(circle queue)

1、简介普通队列的出队操作的时间复杂度为O(n)(因为要整体移动元素),而循环队列就可以完美解决这个问题,使得出队与入队操作均为O(1)的时间复杂度。两个关键索引:head:队首的索引tail:队尾的索引出队维护 head,入队维护 tail。两个关键状态:空队列:head == tail,因为 head 是闭区间,tail 是开区间,即[head, tail),当 head...

2019-12-24 17:45:55 677

原创 3、队列(queue)

1、简介特点:队列也是一种线性数据结构队列只能从一端(队尾)添加元素,从另一端(队首)取出元素队列是一种先进先出(First In First Out)的数据结构队列的操作:enqueue:入队dequeue:出队get_front:查看队首元素的值get_size:获取队列长度is_empty:判断队列是否为空2、实现(1)使用 Python list 实现 qu...

2019-12-24 14:51:32 146

原创 2、栈(stack)

1、简介栈(stack)和动态数组一样,是一种线性数据结果。特点:只能从一端添加元素,也只能从这一端取出元素。这一端称为栈顶。是一种先进后出(LIFO:Last In First Out)的数据结构。栈的操作:push:向栈中添加一个元素pop:删除栈顶元素peak:获取栈顶元素的值size:获取当前栈的大小is_empty:判断栈是否为空2、实现(1)使用 Pytho...

2019-12-24 14:37:36 169

原创 1、动态数组(array)

1、数组(array vs list)array: 定长,操作有限,但是节省内存,可以用import array直接导入list: 会预先分配内存,操作丰富,但是耗费内存。list.append: 如果之前没有分配够内存,会重新开辟新区域,然后复制之前的数据,复杂度退化list.insert: 会移动被插入区域后所有元素,O(n)list.pop: pop不同位置需要的复杂度不同pop...

2019-12-24 14:27:59 520

原创 23、状态模式

一、状态模式状态模式的定义如下:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。电梯控制器示例:电梯在我们周边随处可见,电梯的控制逻辑中心是由电梯控制器实现的。电梯的控制逻辑,即使简单点设计,把状态分成开门状态,停止状态和运行状态,操作分成开门、关门、运行、停止,那流程也是很复杂的。首先,开门状态不能开门、运行、停止;停止状态不能关门,停止;运行状态不能开门、关门、运行。...

2019-11-25 10:49:24 132

原创 22、备忘录模式

一、备忘录模式备忘录模式定义如下:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来保存的状态。在备忘录模式中,如果要保存的状态多,可以创造一个备忘录管理者角色来管理备忘录。游戏进度保存:打过游戏的朋友一定知道,大多数游戏都有保存进度的功能,如果一局游戏下来,忘保存了进度,那么下次只能从上次进度点开始重新打了。一般情况下,保存进度是要...

2019-11-19 10:56:34 143

原创 21、解释器模式

一、解释器模式解释器模式定义如下:给定一种语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。典型的解释器模式中会有终结符和非终结符之说,语法也根据两种终结符,决定语句最终含义。模拟吉他示例:要开发一个自动识别谱子的吉他模拟器,达到录入谱即可按照谱发声的效果。除了发声设备外(假设已完成),最重要的就是读谱和译谱能力了。分析其需求,整个过程大致上分可以分为两部分:根...

2019-11-19 10:55:40 138

原创 20、观察者模式

一、观察者模式观察者模式也叫发布-订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得当该对象状态改变时,所有依赖于它的对象都会得到通知,并被自动更新。观察者模式的通知方式可以通过直接调用等同步方式实现(如函数调用,HTTP接口调用等),也可以通过消息队列异步调用(同步调用指被观察者发布消息后,必须等所有观察者响应结束后才可以进行接下来的操作;异步调用指被观察者发布消息后,即可进行接下来...

2019-11-19 10:54:44 140

原创 19、访问者模式

一、访问者模式访问者模式的定义如下:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义于作用于这些元素的新操作。提到访问者模式,就不得不提一下双分派。分派分为静态分派和动态分派。首先解释下静态分派,静态分派即根据请求者的名称和接收到的参数,决定多态时处理的操作。比如在Java或者C++中,定义名称相同但参数不同的函数时,会根据最终输入的参数来决定调用哪个函数。药房...

2019-11-19 10:53:34 139

原创 18、迭代器模式

一、迭代器模式迭代器模式的定义如下:它提供一种方法,访问一个容器对象中各个元素,而又不需要暴露对象的内部细节。在python中,迭代器并不用举太多的例子,因为python中的迭代器应用实在太多了(不管是python还是其它很多的编程语言中,实际上迭代器都已经纳入到了常用的库或者包中)。而且在当前,也几乎没有人专门去开发一个迭代器,而是直接去使用list、string、set、dict等pyth...

2019-11-19 10:51:59 112

原创 17、模板模式

一、模板模式模板模式定义如下:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。子类实现的具体方法叫作基本方法,实现对基本方法高度的框架方法,叫作模板方法。股票查询客户端示例:根据股票代码来查询股价分为如下几个步骤:登录、设置股票代码、查询、展示。构造如下的虚拟股票查询器:class StockQueryDevice(...

2019-11-19 10:50:14 128

原创 16、中介者模式

一、中介者模式中介者模式的定义为:用一个中介对象封装一系列的对象交互。中介者使各对象不需要显式地互相作用,从而使其耦合松散,并可以独立地改变它们之间的交互。仓储管理系统:有一个手机仓储管理系统,使用者有三方:销售、仓库管理员、采购。需求是:销售一旦达成订单,销售人员会通过系统的销售子系统部分通知仓储子系统,仓储子系统会将可出仓手机数量减少,同时通知采购管理子系统当前销售订单;仓储子系统的库存...

2019-11-19 10:49:00 110

原创 15、命令模式

一、命令模式命令模式的定义为:将一个请求封装成一个对象,从而可以使用不同的请求将客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式中通常涉及三类对象的抽象:Receiver,Command,Invoker。饭店点餐系统示例:可以将该系统设计成前台服务员系统和后台系统,后台系统进一步细分成主食子系统,凉菜子系统,热菜子系统。后台三个子系统设计如下:class b...

2019-11-19 10:46:59 119

原创 14、责任链模式

一、责任链模式责任链模式的定义如下:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。需要说明的是,责任链模式中的应该只有一个处理者。请假系统示例:假设有这么一个请假系统:员工若想要请3天以内(包括3天的假),只需要直属经理批准就可以了;如果想请3-7天,不仅需要直属经理批准,部门经理需要最终批准;如...

2019-11-19 10:45:59 124

原创 13、策略模式

一、策略模式策略模式定义如下:定义一组算法,将每个算法都封装起来,并使他们之间可互换。上一节中我们介绍了桥接模式,二者结构的高度同构,也只能让我们从使用意图上去区分两种模式:桥接模式解决抽象角色和实现角色都可以扩展的问题;而策略模式解决算法切换和扩展的问题。客户消息通知示例:假设某司维护着一些客户资料,需要在该司有新产品上市或者举行新活动时通知客户。现通知客户的方式有两种:短信通知、邮件通...

2019-11-19 10:44:46 106

原创 12、桥梁模式

一、桥梁模式桥梁模式又叫桥接模式,定义如下:将抽象与实现解耦(注意此处的抽象和实现,并非抽象类和实现类的那种关系,而是一种角色的关系,这里需要好好区分一下),可以使其独立变化。通过下面实例,让我们来看一下这里的抽象与实现的具体含义:在一个画图程序中,常会见到这样的情况:有一些预设的图形,如矩形、圆形等,还有一个对象-画笔,调节画笔的类型(如画笔还是画刷,还是毛笔效果等)并设定参数(如颜色、线宽...

2019-11-16 22:17:20 204

原创 11、享元模式

一、享元模式享元设计模式通过为相似对象引入数据共享来最小化内存使用,提升性能。享元模式定义如下:使用共享对象支持大量细粒度对象。大量细粒度的对象的支持共享,可能会涉及这些对象的两类信息:内部状态信息和外部状态信息。内部状态信息就是可共享出来的信息,它们存储在享元对象内部,不会随着特定环境的改变而改变;外部状态信息就不可共享的信息了。享元模式中只包含内部状态信息,而不应该包含外部状态信息。这点在...

2019-11-16 22:16:46 110

原创 10、组合模式

一、组合模式组合模式也叫作部分-整体模式,其定义如下:将对象组合成树形结构以表示“部分”和“整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。公司组织结构示例:每一个公司都有自己的组织结构,越是大型的企业,其组织结构就会越复杂。大多数情况下,公司喜欢用“树形”结构来组织复杂的公司人事关系和公司间的结构关系。一般情况下,根结点代表公司的最高行政权利单位,分支节点表示一个个部门,而...

2019-11-16 22:16:17 110

原创 9、门面(外观)模式

一、门面模式门面模式也叫外观模式,定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重“统一的对象”,也就是提供一个访问子系统的接口。示例:假设有一组火警报警系统,由三个子元件构成:一个警报器,一个喷水器,一个自动拨打电话的装置。其抽象如下:class AlarmSensor: def run(sel...

2019-11-16 22:15:33 99

原创 8、适配器模式

一、适配器模式适配器模式可以帮我们实现两个(或更多)不兼容接口之间的兼容。先看一个简单的示例,实现两家公司获取员工信息接口的兼容:class ACpnStaff: name="" id="" phone="" def __init__(self,id): self.id=id def getName(self): pri...

2019-11-16 22:13:31 121

原创 23、Linux 查看端口占用情况

Linux 查看端口占用情况可以使用 lsof 和 netstat 命令。1、lsoflsof(list open files)是一个列出当前系统打开文件的工具。语法格式如下:lsof -i:端口号实例查看服务器 8000 端口的占用情况。# lsof -i:8000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAM...

2019-11-15 17:27:29 841

原创 22、Linux 用户管理

CentOS 7.2 中用户管理一、用户管理1、用户的类型在 Linux 系统中,有三种用户。超级用户用户名为 root,用户 ID 为 0。有着至高无上的权限,可执行所有任务,可访问所有文件,可管理所有用户。在服务器配置工作完毕后,为了安全,不应该直接使用超级用户。普通用户用户 ID 默认从 1000 开始。供普通用户使用。系统服务用户用户 ID 默认为 1-499。仅供系统...

2019-11-15 16:31:42 122

原创 4、Nginx 负载均衡

负载均衡1、负载均衡的简单示例假设这样一个应用场景:将应用部署在 192.168.1.11:80、192.168.1.12:80、192.168.1.13:80 三台 linux 环境的服务器上。网站域名叫 www.helloworld.com,公网 IP 为 192.168.1.11。在公网 IP 所在的服务器上部署 Nginx,对所有请求做负载均衡处理(下面例子中使用的是加权轮询策略)。...

2019-11-15 16:28:55 183

原创 3、Nginx http 反向代理

http 反向代理仅仅是实现一个 http 反向代理# 运行用户及其用户分组user www www;# 启动进程,通常设置成和 cpu 的数量相同worker_processes 2;# 全局错误日志(指定错误日志的存放位置及日志等级)error_log logs/error.log;#error_log logs/error.log notice;#error_...

2019-11-15 16:26:41 109

原创 2、Nginx 配置详解

Nginx 配置详解Nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)和 location(URL匹配特定位置后的设置),每部分包含若干个指令。main部分设置的指令将影响其它所有部分的设置;server部分的指令主要用于指定虚拟主机域名、IP和端口;upstream的指令用于设置一系列的...

2019-11-15 16:23:37 109

原创 1、Nginx 安装

Nginx 安装系统平台:CentOS release 7.2 64位。一、安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel二、首先要安装 PCREPCRE 作用是让 Nginx 支持 Rewrite 功能。1、下载 PCRE 安装包下载地址: http://do...

2019-11-14 18:55:31 94

原创 7、装饰器模式

一、装饰器模式装饰器模式定义如下:动态地给一个对象添加一些额外的职责。在增加功能方面,装饰器模式比生成子类更为灵活。修饰器(Decorator)模式能够以透明的方式(不会影响其他对象)动态地将功能添加到一个对象中。从实现的角度来说,Python修饰器是一个可调用对象(函数、方法、类),接受一个函数对象fin作为输入,并返回另一个函数对象fout。这意味着可以将任何具有这些属性的可调用对象当作一...

2019-11-08 18:11:26 130

空空如也

空空如也

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

TA关注的人

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