摘要: 链表是实现了数据之间保持逻辑顺序,但存储空间不连续的数据结构。 相对于单向链表,双向链表多了一个指向前面一个节点的指针域。 链表查询效率较慢,因为查询的时候需要移动指针一个一个找。 双向链表新增和删除元素效率较高,因为链表会记录前一个节点和后一个节点。 class Node: def __init_ 阅读全文
posted @ 2018-09-27 02:44 KeithTt 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 每一个结点有两个域,左边部份叫值域,用于存放用户数据。右边叫指针域,存储着指向后面一个节点的指针。 head节点永远指向第一个节点。 tail节点永远指向最后一个节点。 class Node: def __init__(self, item, next=None): self.item = item 阅读全文
posted @ 2018-09-27 02:38 KeithTt 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 此堆非彼堆,先简单说一下概念和思路。 堆 \ 是一个完全二叉树 \ 每个非叶子结点都大于或等于其左右子结点的值称为大顶堆 \ 每个非叶子结点都小于或等于其左右子结点的值称为小顶堆 \ 根结点一定是大顶堆中的最大值,一定是小顶堆中的最小值 构建完全二叉树 \ 待排序数字为 30,20,80,40,50 阅读全文
posted @ 2018-09-19 21:36 KeithTt 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 在一个有序序列(从小到大)中查找一个元素 每次将元素与序列中间位置的元素进行比较 如果大于中点,则在后半段。如果小于中点,则在前半段。以此类推 时间复杂度为O(logn) 有一个无序序列[37, 99, 73, 48, 47, 40, 40, 25, 99, 51],对其先排序输出新列表。 分别插入 阅读全文
posted @ 2018-09-19 20:10 KeithTt 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 假设你正在爬楼梯,需要n阶你才能到达楼顶,n是正整数 每次你可以爬1或2个台阶,有多少种不同的方法可以爬到楼顶 当n=1时,steps=1 当n=2时,1+1,2 steps=2 当n=3时,1+1+1,1+2,2+1 steps=3 当n=4时,1+1+1+1,1+2+1,1+1+2,2+1+1, 阅读全文
posted @ 2018-09-02 22:22 KeithTt 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 偏函数(partial) 把函数部分的参数固定下来,相当于为部分参数添加了一个固定的默认值,并返回一个新的可调用对象。 使用partial生成的新函数,是对原函数的封装。 基于一个函数创建一个新的可调用对象,把原函数的某些参数固定。 使用这个函数可以把接受一个或多个参数的函数改变成需要回调的API, 阅读全文
posted @ 2018-09-02 21:16 KeithTt 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 柯里化(currying),是指把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下参数而且返回结果的新函数的技术。 柯里化是理解装饰器函数的一个非常重要的知识点。 比如,将加法函数柯里化: 参考: https://zh.wikipedia.org/wiki/柯 阅读全文
posted @ 2018-09-02 20:17 KeithTt 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 通过构建有序序列,对于未排序部分,在已排序序列中从后向前扫描,找到相应的位置并插入。 如果输入序列已经是排好序的话,插入排序出现最佳情况。 如果输入序列是逆序排列的,将出现最坏情况。 如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的次数,即二分查找插入排序。 from rand 阅读全文
posted @ 2018-08-22 14:00 KeithTt 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 选择排序分为升序或降序排列 两两比较大小,找出极值(极大值或极小值),然后放置到最后或最前 减少了交换次数,提高了效率,性能略好于冒泡排序 升序,改变一下判断条件即可 t = [1, 9, 8, 5, 6, 7, 4, 3, 2] for i in range(len(t) 1): minindex 阅读全文
posted @ 2018-08-22 13:51 KeithTt 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序属于交换排序 相邻元素两两比较大小,如果前面比后面大,就交换位置,最后一个元素将是最大的数 时间复杂度为O(n²) 优化点: \ 冒泡法需要一轮一轮进行比较,如果某一趟中,一次都没有交换,那就说明序列已经排好序了,就可以停止循环了 参考: https://zh.wikipedia.org/w 阅读全文
posted @ 2018-08-22 13:34 KeithTt 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 封装 将多个值使用逗号分割,组合在一起 省掉了小括号,返回一个元组 解构 把线性结构的元素解开,并顺序地赋给其它变量 左边接纳的变量数要和右边解开的元素个数一致 变量名 可以接收多个元素返回一个列表,贪婪模式,但不能单独使用 解构可以嵌套,同一层只能有一个 丢弃变量 是一个惯例,一个不成文的约定,不 阅读全文
posted @ 2018-08-14 00:38 KeithTt 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 在python中集合分两种: set: 可变集合 fronzenset: 不可变集合 集合的特点: 无序,非线性结构,不可以索引 不重复,常用于去重 可迭代 元素必须是可hash的,即不可变类型,包括嵌套数据结构中的元素 通过hash table实现,查询速度极快,可以高效地判断元素是否存在于某个集 阅读全文
posted @ 2018-08-12 23:43 KeithTt 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 通过位置参数传参 print('{}, {}'.format('KeithTt', 18)) # KeithTt, 18 位置参数可以通过索引调用 print('{1}, {0}'.format('KeithTt', 18)) # 18, KeithTt 通过关键字参数传参 print('{name 阅读全文
posted @ 2018-08-05 00:27 KeithTt 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 左下角 这种情况最简单,列数 阅读全文
posted @ 2018-08-04 20:46 KeithTt 阅读(1287) 评论(0) 推荐(0) 编辑
摘要: 这里主要是要考虑效率问题,在数据规模较大时,如果不考虑算法优化,效率将会非常差。 import time # 将特殊质数2事先放在列表中 t = [2] t0 = time.time() count = 1 # 去掉所有偶数,从3开始迭代,步进为2 for x in range(3, 100000, 阅读全文
posted @ 2018-08-04 19:55 KeithTt 阅读(1136) 评论(0) 推荐(0) 编辑
摘要: 这里只说一下简单的循环打印,递归之后再说。 求第101项 阅读全文
posted @ 2018-08-04 15:23 KeithTt 阅读(2812) 评论(0) 推荐(0) 编辑
摘要: 菱形 把菱形当做一个坐标系,[ 3, 2, 1, 0, 1, 2, 3] for i in range( 3, 4): 取绝对值 x = i if i 阅读全文
posted @ 2018-08-04 14:42 KeithTt 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 在 python 中,为了优化速度,避免频繁申请和销毁内存空间,python使用小整数池来缓存 range(-5,257) 之间的整数(不包含257),这些小整数在赋值引用时使用的都是同一个对象和内存地址。 print(id(-6), id(-5), id(256), id(257)) # 4395 阅读全文
posted @ 2018-07-31 10:03 KeithTt 阅读(298) 评论(3) 推荐(0) 编辑
摘要: 按位运算就把数字转换为机器语言 二进制的数字来运算的一种运算形式。 只有按位取反运算符是单目运算符,其他都是双目运算符。 计算机中的符号数有三种表示方法,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。 在计算机系统中,数值一律用补码来表示和存储。 参考: http: 阅读全文
posted @ 2018-07-31 02:37 KeithTt 阅读(583) 评论(0) 推荐(0) 编辑
摘要: 构建在 setuptools 之上,替代 easy_install。 1、查找软件 pip search Package 2、安装软件 pip install Package pip install -r requirements.txt 常用选项 -r, --requirement <file> 阅读全文
posted @ 2018-07-30 22:00 KeithTt 阅读(18278) 评论(1) 推荐(1) 编辑
摘要: 1、编写监控脚本。 2、添加command配置。 3、定义监控项service。 4、重载配置。 阅读全文
posted @ 2018-05-09 00:22 KeithTt 阅读(934) 评论(0) 推荐(0) 编辑
摘要: 1、安装zabbix java gateway。我这里直接装在zabbix server上了。 2、修改服务端配置,重启zabbix server。 3、修改tomcat配置,启用JMX远程连接端口。 4、下载catalina jmx remote.jar,放到tomcat的lib目录。 5、修改h 阅读全文
posted @ 2018-03-15 15:48 KeithTt 阅读(1735) 评论(1) 推荐(0) 编辑
摘要: 1、开启nginx的stub_status状态统计(nginx需支持http_stub_status_module模块) 2、下载源码 3、复制监控脚本到指定目录 4、修改脚本中zabbix server的IP(注意这里有两处要修改) 5、添加定时任务 6、修改状态文件权限 7、在web上导入 zb 阅读全文
posted @ 2018-03-12 03:37 KeithTt 阅读(582) 评论(0) 推荐(0) 编辑
摘要: 1、下载源码。 2、复制配置文件和脚本到相应目录。 3、修改py脚本中zabbix server的IP。 4、修改配置文件中的脚本路径,并重启agent。 5、安装redis模块。 6、测试脚本是否可用。 7、在web上导入 zbx_redis_templates.xml 模板。 导入之后,页面上马 阅读全文
posted @ 2018-03-11 04:40 KeithTt 阅读(1216) 评论(0) 推荐(0) 编辑
摘要: 1、添加percona仓库。 2、安装插件。 3、这个项目是php写的,需要安装php和php mysql。(这个在官网有说明) 4、拷贝配置文件到配置目录,并重启zabbix agent。 5、授权监控用户,使其能获取数据。 6、修改程序里面的用户密码,使其能连接到mysql。 7、修改监控脚本。 阅读全文
posted @ 2018-03-11 04:02 KeithTt 阅读(676) 评论(0) 推荐(0) 编辑
摘要: 三台机器 1、安装zabbix server和web管理界面。 2、安装配置数据库并启动zabbix server。 3、httpd会被依赖安装。修改php时区,并启动httpd。 4、设置域名。配置nginx。 在dns上加一条CNAME指向LB即可。 5、访问web界面,完成初始化。 默认用户密 阅读全文
posted @ 2018-03-11 01:47 KeithTt 阅读(926) 评论(0) 推荐(0) 编辑
摘要: 只要有aws cli客户端就可以上传文件到aws的S3存储。可以在任意机器上。这里以centos为例。 1、安装python、pip。 2、安装aws cli。 3、配置s3验证,填入两个相应的key。(其他保持默认直接回车) 4、上传文件,图片和静态文件存放在不同的bucket里面。 A、图片 B 阅读全文
posted @ 2018-03-02 17:44 KeithTt 阅读(8762) 评论(1) 推荐(0) 编辑
摘要: Alpine 是一个小型的 Linux 系统,官方 docker 镜像只有不到5MB,非常适合作为容器镜像。 Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and Busy 阅读全文
posted @ 2018-02-17 23:22 KeithTt 阅读(2839) 评论(0) 推荐(0) 编辑
摘要: ownCloud是一个开源的私有云存储,支持外接存储,具有良好的扩展性。ownCloud是传统的C/S架构,支持目前各大流行平台。服务端客户端实时同步,使用体验非常好。 由于我目前只是个人使用,这里写的只是一个单节点LAMP架构。官方推荐使用apache作为web服务器。 OS version: D 阅读全文
posted @ 2018-02-17 18:27 KeithTt 阅读(2003) 评论(0) 推荐(0) 编辑
摘要: 很早之前写过一篇jenkins集成docker的文章,使用的是 CloudBees Docker Build and Publish plugin 插件。这篇文章是直接使用shell脚本做的,主要是这次有一个需求是检测harbor仓库里面是否已经存在要构建的镜像,如果存在就放弃构建,如果不存在则构建 阅读全文
posted @ 2018-02-11 00:12 KeithTt 阅读(10091) 评论(0) 推荐(0) 编辑
摘要: 这里记录两种部署方式,一种是通过包管理工具直接安装,另一种是用tomcat作为web容器运行jenkins。个人倾向第一种,部署简单,而且维护起来方便很多。 用包管理工具aptitude部署jenkins 1、安装JDK。 2、添加jenkins源。 3、安装jenkins。 4、启动服务。 5、用 阅读全文
posted @ 2018-02-10 14:05 KeithTt 阅读(1892) 评论(0) 推荐(0) 编辑
摘要: 有了swagger,所有 REST API 就一览无余了。 Harbor官方已经准备好了部署脚本,部署起来其实特别简单,这里仅作记录。 1、下载部署脚本和swagger文件到本地harbor目录。 2、将部署脚本里的 和`SERVER_IP`改成harbor的访问协议和地址。 3、给予执行权限。 4 阅读全文
posted @ 2018-02-10 02:16 KeithTt 阅读(797) 评论(0) 推荐(0) 编辑
摘要: 这个项目出自coreos,已经存在很久了,第一次尝试的时候还很简陋,现在完善了很多。 项目提供了一键部署脚本,跑起来并不难,不过个人感觉要真正掌握并灵活使用并不是很容易。 kube version: 1.9.1 OS version: debian stretch 1、从github上把项目拉下来。 阅读全文
posted @ 2018-01-14 17:35 KeithTt 阅读(2462) 评论(0) 推荐(0) 编辑
摘要: 由于之前已经写了两篇部署kubernetes的文章,整个过程基本一致,所以这篇只着重说一下coredns和kube-router的部署。 kube version: 1.9.1 docker version: 17.03.2-ce OS version: debian stretch 依然是三个ma 阅读全文
posted @ 2018-01-12 17:30 KeithTt 阅读(2211) 评论(0) 推荐(0) 编辑
摘要: 现在的版本默认只开启了6443安全端口,需要证书验证才能访问api,实现起来稍微有点麻烦,这里提供一个简单的方法。 先来看看官方说明: Complete API details are documented using Swagger v1.2 and OpenAPI. The Kubernetes 阅读全文
posted @ 2018-01-09 14:39 KeithTt 阅读(5844) 评论(0) 推荐(0) 编辑
摘要: OS version: CentOS7 / Debian9 发现alien这个命令时很惊喜,之前在debian上安装etcd找不到安装包感觉很不科学,有了alien命令事情一下就变简单了。 这里以etcd为例,将etcd从rpm包转换成deb包,然后传送到debian机器上安装。(这个命令也可以把d 阅读全文
posted @ 2018-01-05 11:26 KeithTt 阅读(4500) 评论(0) 推荐(0) 编辑
摘要: Debian系统默认是关闭cgroup memory子系统的。 1、修改grub启动参数 2、更新grub设置 3、查看设置是否更新 4、重启系统才能生效 参考: https://github.com/kubernetes/kubernetes/issues/9837 阅读全文
posted @ 2018-01-02 02:34 KeithTt 阅读(1188) 评论(0) 推荐(0) 编辑
摘要: 在centos上,是可以直接使用yum安装etcd的: 但是,在debian上却没有安装包,所以就只能手动安装了,不过也很简单。 可以找台centos的机器,安装好之后把配置文件拿过来套用一下就好了。 etcd version: 3.2.9 OS version: debian stretch 三个 阅读全文
posted @ 2017-12-29 17:35 KeithTt 阅读(2322) 评论(0) 推荐(0) 编辑
摘要: 原理和架构图参考上一篇,这里只记录操作步骤。由于东西较多,篇幅也会较长。 etcd version: 3.2.11 kube version: 1.8.4 contiv version: 1.1.7 docker version: 17.03.2-ce OS version: debian stre 阅读全文
posted @ 2017-12-28 16:18 KeithTt 阅读(3736) 评论(7) 推荐(0) 编辑
摘要: Kubernetes作为容器应用的管理平台,通过对pod的运行状态进行监控,并且根据主机或容器失效的状态将新的pod调度到其他node上,实现了应用层的高可用。 针对kubernetes集群,高可用性还包含以下两个层面的考虑: etcd存储的高可用 master节点的高可用 在开始之前,先贴一下架构 阅读全文
posted @ 2017-11-25 22:44 KeithTt 阅读(13763) 评论(0) 推荐(2) 编辑