Shell Command: autopep8
IntroductionCategory现有的 python 代码格式化工具(其中: autopep8, pep8ify)可以移除代码中的 lint 错误.其中lint是最著名的 C 语言工具之一, 用于对程序进行更加广泛的错误分析, 是一种更加严密的编译工具, 用于扫描源文件并对符合语法但是错误的特性进行检查.
新的格式化工具, 见 google 开源的yapf
PEP8–Python Enhancement Proposal, 即 python 增强建议书, 官方样式指导, 规定了较好的编码方式.
Install安装 autopep8:
1pip install --upgrade autopep8
详细信息见autopep8.
Command修复问题autopep8 会修复如下问题:
1234567891011121314151617181920212223242526272829303132333435363738394041424344E101 - Reindent all lines.E121 - Fix indentation to be a multiple of f ...
数据库:mongo基本特征
站内链接:
容灾-mongo 高可用
db-mongo 基本使用
db-mongo 基本特征
安装配置mac
mac 上的安装和启动
12345678910111213# installbrew install mongodb# Set mongodb pathecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc# Startbrew services start mongodb# 手动启动mongod# Mongo Clientmongo
mac 上通过 docker 安装
12345# 1. 拉取最新镜像或者指定版本docker pull mongodb# 2. 以nopasswd方式启动mongodb服务docker run -dt --name mongodb_nopasswd -p 27017:27017 -v /data/db/mongodb/data:/data/other mongo:latest
centos注意,安装的 mo ...
编程设计:常用术语和名词
站内链接:
设计(1)-常用术语
设计(2)-分层结构
设计(3)-微服务
设计(4)-设计模式分类
设计(5)-代码重构
内聚和耦合模块独立性: 每一个模块仅仅完成赋予的独立子功能, 并且与其他模块的联系尽可能的少并且简单. 定性的度量标准: 耦合度, 内聚度
Coupling耦合度,描述了两个或多个模块之间的相互依赖程度,软件系统中各个模块相互联系紧密程度的一种度量, 联系越紧密, 耦合度越高, 模块的独立性越差. 耦合度的高低直接取决于:接口的复杂性, 调用的方式, 传递的信息。耦合度分类如下:
无直接耦合: 没有任何关系的两个子模块
数据耦合: 模块之间存在调用关系, 传递的是简单的数据值, 值传递, 并非引用传递.
标记耦合: 模块之间传递的是数据结构, 使用引用传递该指针到另外一个模块, 要求引用模块了解另外一个模块关于本条数据的内部构造.
控制耦合: 调用模块传递控制变量(开关, 标志等)给被调用模块, 用于有选择的执行某一项功能.
公共耦合: 通过一个公共数据环境来对两个逻辑上耦合度很高的模块进行”纽带”, 从而降低模块之间的耦合度, “纽带”可以随时丢弃, ...
vim命令:map映射
站内链接:
vim 笔记(1)-命令-基本命令
vim 笔记(2)-命令-ex 命令
vim 笔记(3)-命令-map 映射
vim 笔记(4)-命令-输入模式
vim 笔记(5)-配置-通用配置和术语
vim 笔记(6)-配置-neovim
vim 笔记(7)-IDE:基础插件
vim 笔记(8)-IDE:开发语言相关插件
vim 笔记(9)-IDE:插件管理
术语和命令键映射用于改变输入键的含义, 最常见的用途是把功能键定义为一系列的命令, 其相关文档: help map-commands.
正常格式: map [arguments] {lhs} {rhs}, 将某些{lhs}映射为{rhs}.
删除映射格式: unmap [arguments] {lhs}
清除映射格式: mapclear [arguments]
其中{rhs}之前存在一些特殊字符表示特定的信息:
123. " 表示不可重映射& " 表示脚本的局部 ...
vim:术语和配置
站内链接:
vim 笔记(1)-命令-基本命令
vim 笔记(2)-命令-ex 命令
vim 笔记(3)-命令-map 映射
vim 笔记(4)-命令-输入模式
vim 笔记(5)-配置-通用配置和术语
vim 笔记(6)-配置-neovim
vim 笔记(7)-IDE:基础插件
vim 笔记(8)-IDE:开发语言相关插件
vim 笔记(9)-IDE:插件管理
What is vim?发展历史vim(vi[Improved]), 一种跨平台的文本文件编辑工具, 继承 UNIX 系统的 vi 编辑器, 在 Linux/Mac/Windows 系统上都支持. 关于 vim 的入门等文章, 网络上有非常之多, 例如: 简明 VIM 练级攻略.
vim 的发展历史脉络大概如下:ed-->ex-->vi-->vim,其发展历史反映了其作为开源项目的持续进化,以及一个活跃社区对它的支持和贡献。
ed: 文本编辑器, 一次仅仅能编辑一行
ex: 文本编辑器, 相比 ed, 增加了一些人性化的设置, 相当于 vim -E 启动
vi: 模式编辑器, v ...
vim命令:输入模式
站内链接:
vim 笔记(1)-命令-基本命令
vim 笔记(2)-命令-ex 命令
vim 笔记(3)-命令-map 映射
vim 笔记(4)-命令-输入模式
vim 笔记(5)-配置-通用配置和术语
vim 笔记(6)-配置-neovim
vim 笔记(7)-IDE:基础插件
vim 笔记(8)-IDE:开发语言相关插件
vim 笔记(9)-IDE:插件管理
Introduction
help vim-modes
基本模式
普通模式(Normal Mode):
这是 Vim 默认的模式,也是进入 Vim 编辑器时所处的模式。在普通模式下,按键被视为命令或者快捷键,用于移动光标、复制、粘贴、删除、查找等操作。在普通模式下,不能直接输入文本,要进入插入模式才能编辑文本内容。
使用 h、j、k、l 分别向左、下、上、右移动光标。
使用 dd 删除当前行。
使用 yy 复制当前行。
使用 p 在光标后粘贴复制的内容。
使用 /keyword 进行搜索。
可视模式(Visual Mode):
在普通模式下按下 v 进入可视模式,也可以使用 V 进入行可视模式或者 Ctrl ...
算法:External Sort
站内链接:
算法(1)-检索-简介
算法(2)-检索-散列检索
算法(3)-检索-顺序检索
算法(4)-检索-树检索
算法(5)-排序-简介
算法(6)-排序-分配排序
算法(7)-排序-插入排序
算法(8)-排序-选择排序
算法(9)-排序-交换排序
算法(10)-排序-外排序
IntroductionIntro外排序: 利用外部文件进行排序的技术, 用以解决内存不足或者数据量过大的问题, 整个外排序过程如下:
对单个文件进行排序, 其中排序算法一般是内排序, 在内存中进行
逐趟对多个有序文件进行归并操作
最终形成一个有序的唯一文件
外排序总耗时统计:
内排序使用时间
磁盘信息的读/写时间
在将数据写入内存并进行归并排序的时间
外排序总耗时优化:
减少初始有序文件的个数(K)
增加归并的有序文件数量, 使用多路归并排序算法
文件管理文件是一种存储在外存上的数据结构, 它由大量性质相同的记录组成.
操作系统文件: 一组连续的字符序列, 无明显的顺序
数据库文件: 有结构的记录集合
单关键码文件/多关键码文件: 定长/不定长文件
文件组织 ...
Tools Web Wkhtmltopdf
IntroductionIntro在日常开发中, 出于某些特殊的需求, 需要在服务器上(centos/ubuntu)上将H5页面转换为其他可读或者可打印的文件, 例如pdf, image, 此时则需要相应的软件进行此类转换工作.类似的应用, 有:htmltoimages, htmltopdf, 此文章主要讲解htmltopdf的安装和使用,其他类似的应用的相关环境配置大体相同.
Glossary
文档对象: PDF文档中的文档对象,共有三种类型的”文档对象”, 他们分别是”页面对象”, “封面对象”和”目录对象”
页面对象: 以页面的形式在PDF文档中呈现的对象, 相对于封面对象和目录对象而言, 一般为PDF中内容
封面对象: 以封面的形式在PDF文档中呈现的对象
目录对象: 以目录的形式在PDF文档中呈现的对象, TOC对象
大纲: 阅读PDF文档时的书签导航
外链: 所有在这个页面中且不指向它自身页面中锚点的超链接
内链: 在这个页面中且指向的目标页面是这个页面本身中的一个锚点的超链接
wkhtmltopdf能够把多个”对象”合并生成一个pdf文档, 通过组装各类对象( ...
算法:Distribute sort
站内链接:
算法(1)-检索-简介
算法(2)-检索-散列检索
算法(3)-检索-顺序检索
算法(4)-检索-树检索
算法(5)-排序-简介
算法(6)-排序-分配排序
算法(7)-排序-插入排序
算法(8)-排序-选择排序
算法(9)-排序-交换排序
算法(10)-排序-外排序
Introduction分配排序基本思想: 排序过程无须比较关键字, 通过用额外的空间来分配和收集来实现排序, 这是一种以空间换时间的排序算法, 一般时间复杂度都是 O(n). 所以, 一般分配排序都是用于小规模或者分类数量极少, 重合度非常之高的数据排序中, 在对时间性能要求非常之高, 对空间要求低的应用场景中.分配排序就是类似分布式的思维, 对数据的分配, 分布, 进行一种归纳整合, 最终在进行下一步的操作, 具体见排序算法. 排序算法分类如下:
桶排序: 将数组分到有限数量的桶子里,然后对每个桶子再分别排序
基数排序: 将整数按位数切割成不同的数字, 然后按每个位数分别比较
索引排序: 根据索引来表示数据的交换, 并非一定在分配排序中使用.
桶排序Analysis本质上,这是一种非比较类-线性时 ...
算法:选择排序
站内链接:
算法(1)-检索-简介
算法(2)-检索-散列检索
算法(3)-检索-顺序检索
算法(4)-检索-树检索
算法(5)-排序-简介
算法(6)-排序-分配排序
算法(7)-排序-插入排序
算法(8)-排序-选择排序
算法(9)-排序-交换排序
算法(10)-排序-外排序
Introduction选择排序, 直接从源中选择一个最大/最小的值, 并在结果序列中进行尾部插入操作.
直接选择排序: 从数组 A[n]中选择最大值, 放在目标尾部
堆排序: 从数组 A[n]中选择最大值, 放入到最大值堆中
归并排序: 从 n 个子序列中, 选择一个最大值放入目标尾部, 递归进行
直接选择排序Anaylysis
首先, 未排序序列中找到最小(大)元素,存放到排序序列的起始位置
然后,从剩余未排序元素中继续寻找最小(大)元素, 放到已排序序列的末尾
以此类推,直到所有元素均排序完毕.
选择排序的最优解: 如果某数位于正确的位置, 那么将不会有移动开销. 选择排序本身并非一个稳定的排序算法, 对于逆序的组合, 极端情况下达到 O(n^2) 复杂度
Example12345 ...