- 博客(41)
- 收藏
- 关注
原创 GO标准库学习笔记-字符串转换(strconv)
概述strconv包中包含了一系列辅助函数,用于字符串类型变量和其他类型变量之间的转换。Atoi & Itoa其中最常用的就是字符串和整型变量的相互转换。Atoi(string to int),Itoa(int to string)分别是字符串转整型和整型转字符串(注意:这个两个函数中的整型变量都是十进制整数)。函数声明如下:func Atoi(s string) (int, er...
2018-10-22 10:25:40
956
1
原创 GO标准库学习笔记-错误(errors)
概述在go中没有异常捕获机制,而是通过一个单独的函数返回值来表示错误信息。Error错误类型的接口定义如下:type error interface { Error() string}这个接口只有一个方法Error,这个方法返回一个字符串,描述错误的详情。在使用中,通常会通过直接实现Error方法来自定义错误类型,同时也可以传递不同的参数对错误状态进行...
2018-07-15 12:20:55
518
原创 Go标准库学习笔记-命令行工具(flag)
概述在运行命令行程序时,通常通过命令行参数对程序运行进行配置。在go程序中使用flag包,可以快速构建命令行程序,对于程序使用者只需要声明所需命令行参数。使用示例创建命令行程序可以分为两步:声明命令行参数运行flag.Parse,对参数进行解析然后就可以读取命令行参数了。例如如下程序可以创建一个命令行程序demo --foo hello --bar world...
2018-07-07 21:36:08
487
原创 Go标准库学习笔记-跨平台文件路径(filepath)
概述filepath包的功能和path包类似,但是对于不同操作系统提供了更好的支持。filepath包能够自动的根据不同的操作系统文件路径进行转换,所以如果你有跨平台的需求,你需要使用filepath。与path包相同的函数filepath包中的函数和path包很类似,其中对应函数的功能相同,只是一个可以跨平台,一个不能,所以这里不详细展开,可以从 path 中获取这些函数的详细说...
2018-06-29 11:35:28
1990
原创 Go标准库学习笔记-文件路径(path)
概述path包提供了许多辅助函数来处理UNIX系统文件路径。辅助函数一个unix文件路径有如下格式<DirName>/<BaseName>分别对应于目录路径和基础路径,当这个路径表示一个文件时,BaseName就对应于文件名。其中Base函数获取一个路径的BaseName,Dir函数获取一个路径的DirName;具体函数声明如下:func Bas...
2018-06-25 22:06:33
2476
原创 Go标准库学习笔记-字符串处理(strings)
概述字符串是一个十分常用的基础类型,strings包提供了很多函数对string类型变量的操作。这些函数的调用方式大多类似,通过传入一个字符串为参数,在字符串上进行相应的处理。这些函数主要可以分为下面几类:字符串搜索和匹配字符串拆分字符串修改其他独立的函数字符串搜索与匹配strings.Contains可以检测字符串是否包含某个子串;strings.ContainsR...
2018-06-19 18:57:13
4116
原创 Go标准库学习笔记-带缓冲的IO(bufio)
概述bufio模块通过对io模块的封装,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销。实际上在bufio各个组件内部都维护了一个缓冲区,数据读写操作都直接通过缓存区进行。当发起一次读写操作时,会首先尝试从缓冲区获取数据;只有当缓冲区没有数据时,才会从数据源获取数据更新缓冲。Reader可以通过NewReader函数创建bufio.Reader对象,函数接收一个io...
2018-06-11 17:50:13
9567
原创 GO标准库学习笔记-前缀数组(index/suffixarray)
概述suffixarray模块提供了基于前缀数组的子串检索功能,能够在byte数组中检索指定子串,并获得其索引下标。创建前缀数组可用通过New方法创建一个前缀数组,方法声明如下:func New(data []byte) *Index此外可以通过其Bytes方法,获取原始byte数组,方法声明如下:func (x *Index) Bytes() []byte...
2018-06-06 18:53:03
1550
1
原创 GO标准库学习笔记-HTTP客户端与服务器(net/http)
概述net/http可以用来处理HTTP协议,包括HTTP服务器和HTTP客户端,http包主要由五个部分组成: - Request,HTTP请求对象 - Response,HTTP响应对象 - Client,HTTP客户端 - Server,HTTP服务端最简单的使用http包提供了对应于每个HTTP动词的函数来发送HTTP请求,当你不需要对请求进行详细的定制时可以直接使...
2018-06-01 15:38:13
1007
原创 GO标准库学习笔记-IO工具(ioutil)
概述前面的io包提供了对输入输出设备最基本的抽象,而ioutil在io包的基础上提供了一系列的函数来应对具体的场景。数据读取ioutil一共提供了三个数据读取的函数,分别是: - ReadAll,从一个io.Reader读取所有数据,并返回一个字节数组 - ReadllDir,从一个目录读取数据,并得到这个目录里的文件对象列表 - ReadFile,读取指定文件的内容,并返回...
2018-05-29 19:09:46
2122
原创 GO标准库学习笔记-IO(io)
概述IO是操作系统的基础概念,是对输入输出设备的抽象。Go语言的io库对这些功能进行了抽象,通过统一的接口对输入输出设备进行操作。ReaderReader对象是对输入设备的抽象,一个Reader可以绑定到一个输入对象,并在这个输入设备上读取数据,其声明如下:type Reader interface { Read(p []byte) (n int, err erro...
2018-05-27 20:01:10
1096
原创 Go标准库学习笔记-日志(log)
概述log 模块用于在程序中输出日志,它的使用十分简单,类似于fmt中的Print,一个最简单的示例如下:package mainimport "log"func main() { log.Print("Hello World")}上面的程序会在命令行打印一条日志:>>> 2018/05/16 16:48:06 Hello World...
2018-05-16 17:36:01
637
原创 Go标准库学习笔记-上下文 (context)
概述context也是并发环境的一个常用标准库,它用于在并发环境下在协程之间安全的传递某些上下文信息。一个经典的应用场景是服务器模型,当服务器处理接收到的请求时,通常需要并发的运行多个子任务,例如访问服务器,请求授权等。而这些任务都会以子协程的方式运行,也就是说一个请求绑定了多个协程,这些协程需要共享或传递某些请求相关的数据;此外当请求被撤销时,也需要有一种机制保证每个子协程能够安全的退出...
2018-05-08 17:38:06
1321
原创 Go标准库学习笔记-原子操作 (sync/atomic)
概述为了保证并发安全,除了使用临界区之外,还可以使用原子操作。顾名思义这类操作满足原子性,其执行过程不能被中断,这也就保证了同一时刻一个线程的执行不会被其他线程中断,也保证了多线程下数据操作的一致性。在atomic包中对几种基础类型提供了原子操作,包括int32,int64,uint32,uint64,uintptr,unsafe.Pointer。对于每一种类型,提供了五类原子操作分别是...
2018-05-04 10:53:33
8361
原创 Go标准库学习笔记-并发与同步 (sync)
概述sync包对并发和同步机制进行了实现,但显然并发编程这样一个话题过于庞大,无法在一篇博客里面详细展开,所以本文的重点放在sync包的使用。不过这里首先对并发的背景进行简单的介绍,在单线程的程序中,同一个时刻只存在一个线程对数据进行访问,访问永远是线性的,不需要额外的机制保障;但是当同时存在多个线程可能同时访问一个数据时,由于线程调度的特性,会带来难以预料的结果。试想如下代码会输出什么结...
2018-05-02 19:21:12
311
原创 Go标准库学习笔记-排序 (sort)
概述sort包实现了对列表的排序以及在有序列表上的二分查找等操作通用排序函数接口实现要使用sort包的各个函数,需要实现sort.Interface,定义如下:type Interface interface { Len() int // 返回当前元素个数 Less(i, j int) bool. // 判断第i...
2018-04-27 17:23:44
3101
1
原创 Go标准库学习笔记-循环链表 (container/ring)
概述Ring是一种循环链表结构,没有头尾,从任意一个节点出发都可以遍历整个链。其定义如下,Value表示当前节点的值:type Ring struct { Value interface{} }类型方法NewRing.New用于创建一个新的Ring,接收一个整形参数,用于初始化Ring的长度,其方法定义如下:func New(n int) ...
2018-04-26 15:23:27
1557
原创 Go标准库学习笔记-双向链表 (container/list)
概述container/list包实现了基本的双向链表功能,包括元素的插入、删除、移动功能链表元素链表中元素定义如下:type Element struct { Value interface{}}func (e *Element) Next() *Elementfunc (e *Element) Prev() *Element通过Value属性来获取...
2018-04-23 20:45:18
6610
2
原创 Go标准库学习笔记-堆 (container/heap)
概述container/heap包对通用堆进行了定义并实现了标准堆操作函数,以此为基础可以很容易对各类堆和优先队列进行实现。类型接口heap包中最核心的就是heap.Interface接口,堆的基础存储是一个树形结构,可以用数组或是链表实现。通过heap的函数,可以建立堆并在堆上进行操作;要使用heap包的函数,你的类需要实现heap.Interface接口,定义如下://...
2018-04-23 18:33:00
2689
1
原创 Kubernetes 入门 01
Kubernetes 入门 01这个系列文章计划从零开始对Kubernetes的学习,从系统功能层面到实现层面,本文会对Kubernetes的架构进行一个整体的介绍。Kubernetes是什么?学习一个东西的第一步就是知道它是什么,有什么作用,为什么要使用它。下面对这些问题依次进行解答。简单的来说,Kubernetes是一个容器编排系统(关于什么是容器,看这里)。相对于原有的在硬件...
2018-04-04 19:07:45
328
原创 使用Sphinx为你的python模块自动生成文档
Sphinx是一个可以用于Python的自动文档生成工具,可以自动的把docstring转换为文档,并支持多种输出格式包括html,latex,pdf等。安装 pip install sphinx
2017-06-23 15:04:10
21770
原创 用Python从零开始实现一个Bloomfilter
简介如果你不知道什么是 Bloomfilter,可以在这里找到详尽的描述Bloomfilter 介绍。简单来说Bloomfilter是一个概率数据结构,功能上类似于集合的一个子集,可以向里面添加一个元素,或者判断一个元素是否在其中。不过你只能准确判断一个数据不在其中,对于那些Bloomfilter判定在其中的元素,只能保证它有非常大的概率在其中(这个概率一般高达99.9%+)。
2017-06-09 23:10:38
6200
翻译 Bloom Filter 介绍(Bloom Filters by Example)
Bloom filter 是一个数据结构,它可以用来判断某个元素是否在集合内,具有运行快速,内存占用小的特点。而高效插入和查询的代价就是 Bloom Filter 是一个概率数据结构:它可以告诉我们一个元素绝对不在集合内或者可能在集合内。
2017-05-29 21:56:39
1788
原创 Python 协程 - 1
在协程之前我们有什么?协程实际上不是一个新概念,作为一个并发模型,在很早以前就能看到协程的身影。只是最近才开始变得火热起来,因为它可以很好的处理IO密集型任务,而这符合互联网行业的业务需求。
2017-05-10 22:03:47
384
原创 Python 2.x 字符编码问题
ASCII,Unicode,UTF-8 和 UTF-16ASCII是一种我们最为熟悉的编码方式,从大一入学学C语言的时候就学过。那么到底什么是编码呢?我们知道数据实际上是以二进制的形式存储的,而我们人类可读的却是特定形式的字符(如’a’,’b’,’c’),而编码就是这样一种映射关系,它把每一个字符映射为一个二进制数,使得我们可以将数据存到内存或磁盘里。
2017-04-15 20:03:08
600
原创 使用 Python 标准库进行性能测试
Profile 和 cProfile在 Python 标准库里面有两个模块可以用来做性能测试。 1. 一个是 Profile,它是一个纯 Python 的实现,所以会慢一些,如果你需要对模块进行拓展,那么这个模块比较合适。 2. 第二个是 cProfile,从名字就可以看出这是一个 C 语言的实现版,官方推荐在大多数情况下使用。
2017-03-26 15:11:26
2026
原创 LeetCode 第50题 Pow(x, n) [log(n)]
问题描述:计算 pow(x, n),也就是计算 x 的 n次方。算法思路:首先来考虑 n 的二进制表示,比如,n 的二进制形式为 ‘10001011’,那么 x^n=x^(1+2+8+128)=x^1*x^2*x^8*x^128,也就是说 x^n 可以拆成几个数的乘积。
2017-03-06 20:41:55
362
原创 Python 爬虫教程 4 - 网页的构成
网页如何呈现到用户面前?在我们浏览各种网站的时候,浏览器呈现的都是图文并茂的页面,其中不少还有动态的动画效果。 那么一个网页是如何从服务器端传输到客户端并展现在你的电脑上的呢?大致有如下几步:
2017-02-25 20:54:27
378
转载 数字证书的原理
加密和解密先说加密。 明文P,加上密码W一混淆之后,变成密文M 如果不知道W,则无法从M反推回P。也就是无法进行解密。 类似这种加密方式,称为对称加密。也就是加密、解密使用的密码是一样的。 实际上加解密并不是直接使用密码,而是经由密码生成的密钥。 这种算法有很多,比如AES。另外还有一种神奇的加解密算法,叫做非对称加密。比如RSA。
2017-02-25 19:46:17
10848
原创 Python 爬虫教程 3 - 使用 requests
什么是 requests简单的来讲 requests 是一个简单易用的 HTTP 客户端程序,由 Python 社区大牛 Kenneth 发起。所以 requests 到底是干什么的呢?
2017-02-10 11:42:29
655
原创 Python 爬虫教程 2 - HTTP协议
什么是 HTTPHTTP是一种应用层协议,是一种在网络中进行数据传输时,收发双方提前达成的某些共同约定,HTTP 协议涵盖的内容极广,而这里我们主要关注 HTTP 在报文格式上的约定。首先会对如何对 HTTP 中资源进行定位,然后介绍下 HTTP 报文结构,接下来介绍下 HTTP 的请求和响应,最后给出一个示例。
2017-02-09 16:56:52
657
原创 Python 爬虫教程 1 - 前言
互联网每天都会产生大量的数据,但是互联网产生的数据大都是非结构化的数据,无法直接用于分析产生价值,所以需要对这样一些网页里的数据进行抓取,得到有价值的结构化数据。而网络爬虫就是这样一种用于抓取网页的程序。实际上我们常用的百度,谷歌等搜索引擎就是功能强大的爬虫。
2017-01-17 20:41:14
477
原创 Celery 学习笔记(4)- Workflow
Signature 对象前面介绍了可以通过 delay 和 apply_async 来执行一个任务,多数情况下这已经足够使用,但是有时候你希望能够将任务及其参数传递给其它函数时,现有的方法就不够用了。 在 Celery 中,提供了 signature 方法将函数和参数打包起来成为一个 signature 对象,在这个对象中可以保存函数的参数以及任务执行的参数。
2017-01-10 13:37:36
11495
2
原创 Celery 学习笔记(3)- 任务和任务执行
任务任务是 Celery 里不可缺少的一部分,它可以是任何可调用对象。每一个任务通过一个唯一的名称进行标识, worker 通过这个名称对任务进行检索。任务可以通过 app.task 装饰器进行注册,需要注意的一点是,当函数有多个装饰器时,为了保证 Celery 的正常运行,app.task 装饰器需要在最外层。
2017-01-09 14:45:10
14393
原创 Celery 学习笔记(1)简介
简介Celery 是一个用 Python 编写的异步的任务调度模块,它有着简明的 API,并且有丰富的扩展性,适合用于构建分布式的 Web 服务。Celery 的工作流程很简单,你可以给Celery提交一个任务,然后 Celery 会将任务放入消息队列 broker 中,后台启动的多 个 worker 并行的对任务进行执行,最后可以选择将执行结果写入 store 中。
2017-01-05 15:08:31
1776
原创 python属性查找顺序
引言以前对这一部分的理解比较混乱,查找了一些资料,自我整理一下。作用域对于变量的搜索是按照一定顺序进行的,同名变量将会存在互相屏蔽的问题,所以需要弄清楚python里的作用域信息。 在python中作用域一共有四个,按照顺序被搜索:1. (Local)局部作用域,每当调用一个函数的时候就创建了一个局部作用域,它最先被搜索。2. (Enclosing)嵌套的父级函数的局部作用域
2016-12-26 19:59:41
3701
原创 RESTful Web Service最佳实践
001 设计RESTful Service的一般步骤1. 规划数据集2. 把数据集划分为资源3. 用URI为该资源命名4. 暴露一个统一接口的子集5. 设计来自客户端的表示6. 设计发送给客户端的表示7. 用超链接和表单把该资源和已有资源联系起来8. 考虑可能出现的错误情况002
2016-12-03 19:30:03
357
原创 在Python中使用mock模块进行单元测试
在进行单元测试时,有些模块对别的模块有依赖关系,但是这个模块在我们的控制之外,比如你要发一个HTTP请求,在这种情况下需 要用Mock对象来进行模拟。在Python当中,mock库提供了这个功能。
2016-11-21 17:47:11
9607
原创 RESTful Web Services 笔记
000 什么是Web ServiceWeb Service是一种基于HTTP协议的服务,用户通过发送HTTP请求服务器上的资源,服务器也会把资源信息放在HTTP响应中返回给请求者。它实际上是一种调用关系,只是被调用主体从本地函数变成了远端某个服务器上的服务。
2016-11-18 13:10:45
553
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人