- 博客(70)
- 收藏
- 关注

原创 客户/服务器程序设计范式
unix 网络编程第30章读书笔记, 这里只记录大致实现方式, 具体代码实现还请阅读此书TCP 迭代服务器完全同步方式, 完全处理某个客户的请求之后才专向下一个客户,优点是代码简单,并且没有进程控制所需的时间TCP 并发服务器程序, 每个客户一个子进程传统上并发服务器调用fork 派生一个子进程来处理每个客户。 这使得服务器能够同时为多个客户服务, 每个进程一个客户TCP 预先派生子...
2019-04-07 12:42:22
248
原创 shell 变量替换问题
今天遇到了一个sed替换的问题,背景是,我需要替换某一个yaml 文件的某一个key值为一个变量。采用以下的代码substring="s/source:.*/source: ${data}/g"targetfile=xxx.yamlsed -i ${substring} ${targetfile}这个时候会报 sed: -e expression #1, char 34: unknown option to `s'这个问题。当我debug时,将substring 复制下来在本地运行时却没有了这个
2020-05-09 23:38:06
931
原创 如何用golang编写单元测试用例
最近帮忙给一个项目补充单元测试,有一些单测比较不好写, 到网上查了一下,发现有很多有意思的写法,特此总结一下net.dial 方法的单测如果我们代码里面使用了net.Dial()去访问外部的tcp or udp 端口,然后使用返回的Conn对象去处理里面的数据,我们该如何对这个Conn对象进行mock呢?最好想的办法是自己实现一个server端,使用net.Listen()本地的一个端口,...
2020-04-25 11:25:07
4334
原创 如何让一个linux进程打满 cpu
cat /dev/zero > /dev/nulsha256sum /dev/zeroyum install stress; ./stress --cpu 3前两个的基本原理都是利用了/dev/zero可以无限输出空字符串的能力,第三个则是一个二进制的程序可以跑满指定的cpu,功能更加强大...
2020-04-17 23:53:41
1938
原创 pgsql 迁移到mysql所遇到的坑
最近由于工作的原因,需要将一个开源项目的数据库从pgsql迁移到mysql, 特此记录下所要注意的点, 后续不断更新MySQL timestamp 类型没有with time zonepgsql 创建索引的时候没有索引名称,使用下述命令 create index xxxxMySQL并不支持创建 type Enum create type xxx Enum('', '', '')pgsql...
2020-04-03 00:13:13
862
原创 pyparsing 无法卸载
Cannot uninstall 'pyparsing'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.安装pyparsing 报错, 可以通过指...
2019-09-25 11:00:54
521
1
原创 raft 简介
分布式一致性算法(Distributed Consensus)首先我们有一个单点系统你可以认为这个系统是一个database server 并且只存储一个value我们有一个client 可以send value to this server对于一个节点,达成协议 or 保证一致性是很容易的但是如果我们有多个节点,那么应该如何达成一致性? 这就是分布性一致性算法...
2019-06-05 12:34:02
1199
翻译 数据推送方式- polling vs Websocket vs SSE
我们可以使用以下三种方式来创建一个实时的web应用程序Long polling or short polling(client pull)WebSocket(server push)Server-Sent Events(server push)client pull: 客户端以一定的间隔来请求server来获取更新数据server push:服务器主动向客户端推送更新long p...
2019-04-11 00:19:11
2396
原创 tcp要点总结之链接篇
TCP 三次握手sequenceDiagramclient->>server: SYN Jserver->>client: SYN k, ack J+1client->>server: ACK k+1(may have data)每一个SYN可以含有多个TCP选项,下面是常用的TCP选项MSS 发送 SYN 的TCP一端使用本选项通告对端它的...
2019-03-10 22:29:31
180
转载 代码编写原则
避免重复原则(DRY – Don’t repeat yourself) 编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就会很容易形成一个抽象体。抽象原则(Abstraction Principle ) 与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。简单原则(Keep It Sim...
2018-12-20 16:51:50
2393
翻译 modern python dictionaries
本文是pycon 2017上的演讲, 主要涉及python 字典的实现,以及如何实现一个更加高效的字典, 主要改进的地方就是讲key的hash值进行保存,当rehash的时候不用重新计算所有的key值,可以大大提高效率视频地址: YouTubeimport arrayimport collectionsimport itertoolsFREE = -1DUMMY =...
2018-08-23 11:52:03
195
翻译 避免使用 Python 的 hasattr()
不要使用 python 中的 hasattr() 除非你只在python3环境中使用它并且知道它的内部原理总的来说,不要以如下方式使用if hasattr(x, "y"): print x.yelse: print "no y!"我们可以使用如下方式进行代替try: print x.yexcept AttributeError: prin...
2018-07-16 20:23:02
767
原创 tornado ioloop
初步解析 socket 流import socketEOL = b'\n\n'response = b'HTTP/1.0 200 OK\r\nDate: Mon, 1 Jan 1996 01:01:01 GMT\r\n'response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n'response +...
2018-07-09 21:06:45
641
原创 python OrderedDict 详解
OrderedDict 是 collections 提供的一种数据结构, 它提供了有序的dict结构。先把源代码贴一下class OrderedDict(dict): '记住插入顺序的字典' # 一个继承自dict的键值对字典 # 继承的字典提供 __getitem__, __len__, __contains__, get 方法 # 所有方法的O() ...
2018-07-06 14:18:22
41871
3
原创 计算机基本组成原件— 加法器, 振荡器,触发器
基本元件加法器origin: + 0 1 0 00 01 1 01 10add: + 0 1 0 0 1 1 1 0这个是由一个或门与与非门组成的异或门carry: + 0 1 0 0 0 1...
2018-06-05 14:57:42
6408
翻译 关于生成器在类中作用域混乱的问题
第一种方式: python 2:class A(object): x = 4 gen = (x for _ in range(5))a = A()print(list(a.gen))result:Traceback (most recent call last): File "Untitled 8.py", line 10, in <...
2018-06-05 14:54:14
192
翻译 A Curious Course on Coroutines and Concurrency 翻译
这是David Beazley 在 Pycon 2009 做的讲座,下文是初步的翻译总体概述协程是什么?我们可以用协程做什么?我们应该在意协程吗?使用协程是否是一个好主意?图片概述头部爆炸指数图表, 随着本文的持续推进, 难度逐渐上升纵轴分别是 起点, 引起头疼, 开玩笑(基本不可能) 在继续往下阅读时必须对生成器和生成器表达式非常熟悉, ...
2018-04-28 10:58:26
395
翻译 why numbering should start at zero 部分翻译
去表示一个由自然数组成的序列2, 3, …12, 有以下四种表达方式a) 2 <= i < 13b) 1 < i < 12c) 2 <= i <= 12d) 1 < i < 13有理由证明选择一种表达方式比其他方式更好吗?, 是的, 通过观察我们知道 a & b方式有一个优点,就是边界之差等于序列的长度,所以观察的结果说明...
2018-02-27 19:37:31
353
翻译 深入理解Global Interpreter Lock
本文是David Beazley 在chipy上演讲的ppt, 深入的介绍了GIL的相关表现及原理, 此文是在简单翻译的基础上加上了一些其他地方查看的资料组合而成先让我们做一个实验如下是一个CPU-bound的方法def countdown(n): while n > 0: n -= 1COUNT = 100000000countdo...
2018-01-26 20:50:43
684
原创 编码相关整理
基本名词 编码 是信息从一种形式或格式转换成另一种形式的过程。 解码 是编码的逆过程以上是维基百科上对编码与解码的解释,可以说这是一个通俗的解释,但是这个地方要是放在计算机编码上可以说是有些歧义。 编码(Encoding)专门是指从字符转变成字节(位元组),解码(Decoding)则是从字节(位元组)转换成字符(此句话存疑,因为Base64是字符到字符的编码,但是Base64...
2017-09-14 21:09:40
924
原创 securecrt 远程映射端口
使用securecrt 做远程端口映射,使得本地应用程序可以远程访问服务器的服务拿robomongo为例,如果身在内网环境还好说,直接填写ip即可连接mongol数据库。但是如果不在内网环境,又或者无法直接通过ip来链接远程数据库,这时候就可以使用securecrt 的本地端口转发功能。 他可以通过某个ssh 请求将无法直接请求的远程端口间接映射到本地端口,然后本地应用程序可以直接访问本地端口
2017-01-17 00:21:05
2065
原创 mac下Ctrl 系快捷键
最近入手了hhkb,深感其键位设置精妙,目前已经离不开了。 Ctrl+p shell中上一个命令,或者文本中移动到上一行 Ctrl+n shell中下一个命令,或者 文本中移动到下一行 Ctrl+r 往后搜索历史命令 Ctrl+s 往前搜索历史命令 Ctrl+f 光标前移 Ctrl+b 光标后退 Ctrl+a 到行首
2016-12-22 20:43:06
5514
原创 python中静态方法和类方法
方法是作为类属性保存的函数def get_size(self): pass在python2, 3中的不同点。 2: Pizza.get_size(), 会报一个未绑定的函数的错误 3: Pizza.get_size(), 会报一个缺少参数的错误, 即,python3可以动态的传入方法所属于的类的任意一个实例静态方法: 静态方法是属于类的方法,但是实际上
2016-09-30 15:02:06
415
原创 python 中set为何不是hashable
>>> set([set()])traceback(most recent call last): File "<stdin>", line 1, in <module>TypeError: unhashable type: 'set'set 是可变的,如果你想讲set变为不可变的话,用frozenset 代替,总的来说,在python中,只有不可变对象是可以hashable的,fro
2016-09-30 14:32:19
1139
原创 pythonic dict
存在性 不推荐 dict.has_key() 推荐 key in dict不推荐 not key in dict 推荐 key not in dict默认值 dict.get(key, 0)有时你的字典都是经常修改的对象,你需要初始化一些数据到这个字典,也需要修改其中的一些值,比如说你再维护这样一个dict, 它的值都是链表dic = {}for (key, value) in
2016-08-29 19:34:16
387
原创 书单
这个目录列出了正式开始工作到现在所读过的书,作为记录python 基础教程MongoDB权威指南python进阶 https://eastlakeside.gitbooks.io/interpy-zh/content/tornado http://www.tornadoweb.org/en/stable/vim 实用技巧重构 改善既有代码的设计算法 第四版 (...
2016-07-22 19:15:02
410
原创 osx 安装pillow时出现的问题
为新的mac安装Python开发环境,出现了无法找到zlib的情况,无论是 brew install zlib 还是其他状况都不好使,参考如下链接解决:http://stackoverflow.com/questions/23749530/brew-install-zlib-devel-on-mac-os-x-mavericksxcode-select –install 运行如上命令即可解决
2016-06-27 11:29:45
401
原创 python 生成器总结
最近因为看见公司一位大神将yield用的出神入化,极为赞叹,遂研究了一下他的代码,总结出以下yield使用方法,希望大家加以指正。都知道yield是python生成器,他可以将数据一个一个的“生”出来而不是将所有数据存储到内存中,从而造成大量内存的占用,这个是yield使用最常见的一种方式,这种方式大概是使用for循环中嵌套yield语句来实现的。 如下:for i in range(x):
2016-06-10 09:18:02
380
原创 关于mongodb '$in' 查询无序问题
本文用python和pyMongo来实现该问题解决方法‘$in’是我们经常用到去解决循环db访问的一个有效方法,但是’$in’查询会伴随着一个问题,就是查询出的结果与被当作参数传入的list的顺序不一致。解决方法: 排序:将传入的list进行编号,然后将查询出的结果集根据编号进行sort排序。items = db.items.find('_id': {'$in': item_ids})
2016-05-16 11:44:45
3676
原创 python catch exception and continue try block
python不支持如下方式try: do_sth1() do_sth2()except: #when catch except,continue run do_sth2()但是我们可以用如下方式来实现:funcs = do_sth1, do_sth2for func in funcs: try: func() except Exception
2016-04-12 10:09:26
1153
原创 python map
function with many argsmap函数,采用偏函数方式来为函数来添加多个参数map(functools.partial(self.english_recursive, branches=branches, index=index), next_level_knowledge_tags)input a list of function!话不多说,上代码def multiply(x)
2016-04-06 20:31:17
379
转载 一行python实现树形结构
定义使用内置的defaultdict 我们可以很容易的定义一个树形数据结构def tree(): return defaultdict(tree)example:json风格users = tree()users['harold']['username'] = 'bell'users['handler']['username'] = 'master'我们可以使用print(json.dumps(
2016-04-04 13:29:35
12895
原创 如何修改java String
众所周知,String 类是不可变对象,那么是否有方法改变它呢?String的成员变量都是private final的,即为初始化之后不可改变,但是其中value比较特殊,因为它是一个引用变量,value是final修饰的,也就是说final不能再指向其他数组对象,既然改变value指针的指向不可能,那么能否改变value指向的数组元素吗?比如改变数组中的s,使其变成n,由于String中的所有成员
2016-03-07 19:39:31
1076
转载 PEP 8 代码规范
代码排版缩进每层缩进使用四个空格续行要么与圆括号、中括号、花括号这样的被包裹元素保持垂直对齐,要么放在 Python 的隐线(注:应该是相对于def的内部块)内部,或者使用悬挂缩进5。使用悬挂缩进的注意事项:第一行不能有参数,用进一步的缩进来把其他行区分开。# Aligned with opening delimiter.foo = long_function_name(var_one, var_
2016-02-21 16:08:33
1327
转载 使用apt-get下载oracle-java-8代码
【3】INSTALL ORACLE JAVA 8 IN UBUNTU VIA PPA REPOSITORY [JDK8](http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html)【4】How To Install Java on Ubuntu with Apt-Get(https://www.digita
2016-02-19 20:28:14
483
转载 Pycharm 5.0 and Pycharm 2016 的破解
在安装之后,调整时间到2xxx年,然后申请三十天试用,之后退出pyCharm,然后将时间调成回来在注册的时侯选择 License server ,填 http://idea.lanyus.com ,然后点击 OK(5.0)在注册的时侯选择 License server ,填 http://idea.qinxi1992.cn,然后点击 OK(2016.1)http://jetbrains.t...
2016-02-16 11:36:16
18393
1
原创 python list和dict的遍历
其实在python中有很多种遍历的方法,但是想要获取下标却是不那么容易,主要有以下两种方法方法一:for i in xrange(len(list)): print(i, a[i])方法二:for i el in enumerate(list): print(i, el)其中方法二如果只写一个值的时候,这个值会直接打印出key-value键值对的元组解决方法:for _, el in
2016-02-02 19:36:28
6673
原创 mysql 解压版配置编码
my-default.ini 配置失效安装版不必多说,因为在安装向导中有编码设置这个问题,但是解压版的就需要自己进行配置,在网上搜索到了my-default.ini 的配置,但是在配置之后重启服务之后完全没有生效,直到将my-default.ini名称改成my.ini之后才首次生效
2016-01-21 10:56:28
319
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人