- 博客(221)
- 资源 (1)
- 收藏
- 关注
原创 Java实战之从同步阻塞IO到NIO
IO模型单线程IO最原始的网络编程思路就是服务器用一个while循环,不断监听端口是否有新的套接字连接,如果有,那么就调用一个处理函数处理,类似:while(true){ socket = accept(); handle(socket) } 这种方法的最大问题是无法并发,效率太低。 如果当前的请求没有处理完,那么后面的请求只能被阻塞,服务器的吞吐量太低。...
2018-08-11 16:26:29
2116
原创 Java在内存中将Map打包为tar.gz
背景近期需要将一些数据数据打成tar.gz包,放到ftp上供合作方拉取。在网上查了下Java打包文件的方式, 发现很多例子都是基于文件操作进行了。在实际业务中,并不需要将文件落盘,只需放到ftp即可。为了保证效率, 打包时tag.gz文件不写磁盘, 完全在内存中进行。 下面的例子,简单演示了将Map打包为tar.gz字节流。代码Demoimport org.apache.common...
2018-05-21 20:15:20
916
原创 Java通过Http Post Json数据
package com.demo.utils;import com.alibaba.fastjson.JSONObject;import org.apache.commons.httpclient.HttpStatus;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apa...
2018-04-03 14:13:09
9528
原创 Python yield 迭代访问mongo
mongo中使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。但skip时是一条条遍历过来的,在数据量较大时,skip性能堪忧。慢的根本原因在于:“索引所依赖的b+结构不能用于排名计算”。 在某些需要遍历全表分段取数据的场景,我们可以暂存一个_id,通过yield的方式来访问mongo集合,规避skip的使用。# 迭代方式访问mongodef find_
2018-01-17 20:09:46
832
原创 Python任意字符串转16, 32, 64进制
Python字符串转数字 import binascii s = 'test123456test' str_16 = binascii.b2a_hex(s.encode('utf-8')) # 字符串转16进制 print(str_16) def baseN(num, b): return ((num == 0) and "0") o
2018-01-16 16:25:32
25444
1
原创 MySql事务笔记
事务事务是一组不可被分割执行的SQL语句集合,如果有必要,可以撤销。银行转账是经典的解释事务的例子。用户A给用户B转账5000元主要步骤可以概括为如下两步。 第一,账户A账户减去5000元; 第二,账户B账户增加5000元; 这两步要么成功,要么全不成功,否则都会导致数据不一致。这就可以用到事务来保证,如果是不同银行之间的转账还需要用到分布式事务。事务ACID
2017-12-10 11:17:01
325
原创 MongoDB升级小结
背景最近业务mongo升级,因为需要调整业务代码和线下测试,工作持续了一个月才有了阶段性的成果。业务代码主要是Python,在升级之前,我们已更新到了合适版本的pymongo,并在线下做了测试。为了从2.4升级到3.0,需要先从2.4升级到2.6,然后再从2.6升级到3.0。mongo没有用yum安装,直接拷贝的mongo的bin文件,在机器上运行mongd启动。
2017-12-02 11:29:18
2229
原创 MongoDB主从复制与副本集
MongoDB主从复制与副本集复制是跨多个服务器数据同步的过程。 复制的特点 - 保障数据的安全性 - 数据高可用性 - 灾难恢复 - 无需停机维护(如备份,重建索引,压缩) - 分布式读取数据(提高读取能力) mongodb支持副本集和主从复制,主从复制官方已不再推荐(不支持自动故障切换)。
2017-09-25 19:52:38
2789
1
原创 MongoDB监控梳理
监控内存MongoDB对于CPU的负载很轻(两个CPU的处理能力即可满足每秒10 000次查询)。 如需在内存和CPU间选择一个进行硬件投资,一定要选择内存。
2017-09-23 15:09:46
822
原创 Python 实现RSA SHA-1签名
今天对接业务接口,传递的参数需要用RSA签名,三方只给了java的RAS签名Demo;但后端采用python开发,因此需要用Python来实现RSA签名。
2017-09-19 14:17:51
7339
1
原创 MongoDB索引探究
索引通常能够极大的提高查询的效率。在系统中使用查询时,应该考虑建立相关的索引。在MongoDB中创建索引相对比较容易。MongoDB中的索引在概念上和大多数关系型数据库如MySQL是一样的;需要在MySQL中建立索引的情况, 一般同样适合于MongoDB。
2017-08-18 17:47:37
751
原创 multiprocessing.Pool中initializer的利用
multiprocessing.Pool在初始化一个pool对象时,可以传initializer和initargs两个参数,在task开始进行运行前,进行一些初始化的工作。
2017-07-08 00:05:31
7945
原创 Python浮点计算的坑~
因为Python浮点计算问题,导致在结算商品价格时出现偏差:In [1]: 1999 - int(19.99*100)Out[1]: 1In [2]: int(19.99*100)Out[2]: 1998解决方式:先计算,再取整。
2017-07-05 21:43:56
1292
原创 Python raw_input含中文时CMD下乱码
Python的raw_input语句中如果包含中文,在Windows环境CMD中执行时会显示乱码。由于raw_input语句不支持unicode显示,在中文字符串前加u会报错。解决办法:在语句中进行强制的编码转换c = raw_input (unicode('请输入内容:','utf-8').encode('gbk'))
2017-07-02 14:21:55
3371
原创 Python项目使用memcached缓存
通过缓存数据库查询结果,减少数据库访问次数,可以显著提高动态Web应用的速度和可扩展性。业界常用的有memcached,redis等,今天要讲的就是在python项目中如何使用memcached缓存服务。
2017-05-02 20:10:52
9836
1
原创 Python信号处理
SIGKILL信号是无法在程序内部捕获的,一旦发送SIGKILL信号给进程,Linux就将进程停止在那里。Python自己并不检查SIGKILL,而是直接把底层标准C的运行时错误返回。
2017-04-30 19:35:00
5066
原创 Python操作RabbitMQ
知识准备RabbitMQRabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。MQMQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。
2017-04-30 16:45:43
4547
原创 Python Flask0.1源码剖析
平时都是看别人的剖析代码,今天也来尝试剖析一下Flask的源码,加深对Flask的理解。下面的分析,全部基于Flask-0.1,0.1版本的代码加上注释也仅有不到700行,但麻雀虽小,五脏俱全,也足以缕清Flask的脉络。
2017-04-29 01:37:48
1761
原创 Web server, WSGI和Web framework
WSGI把Web服务器和Web框架结合起来:WSGI server所做的工作仅仅是将从客户端收到的请求传递给WSGI application,然后将WSGI application的返回值作为响应传给客户端。有了这一层抽象,服务器可以在不修改代码的情况下,使用不同的Web框架。
2017-04-25 22:34:01
3522
原创 multiprocessing.Pool报pickling error
multiprocessing.Pool出现pickling error
2017-04-21 18:46:25
14330
4
原创 Python操作HBase
安装HBaseHBase是一个构建在HDFS上的分布式列存储系统,主要用于海量结构化数据存储。这里,我们的目标只是为Python访问HBase提供一个基本的环境,故直接下载二进制包,采用单机安装。下载后解压,修改配置文件,然后可以直接启动HBase了。所用系统版本为ubuntu14.04。下载wget https://mirrors.tuna.tsinghua.edu.cn/a...
2017-03-04 15:44:55
21143
原创 python并发之concurrent.futures
Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码。从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threading和multiprocessing的更高级的抽象,对编写线程池/进程池提供了直接的支...
2017-01-25 10:44:54
24826
原创 python并发之multiprocessing
由于GIL(全局解释锁)的问题,python多线程并不能充分利用多核处理器。如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。multiprocessing可以给每个进程赋予单独的Python解释器,这样就规避了全局解释锁所带来的问题。与threading.Thread类似,可以利用multiprocessing.Process对象来创建一个进程。multiproces...
2017-01-23 17:19:34
22818
1
原创 Python tornado上传文件
在web开发过程中,文件上传是经常用到的功能,比如上传附件,上传照片等。下面我们来介绍一下利用tornado 来实现简单的文件上传功能。
2016-12-30 14:49:05
14937
1
原创 查看进程所占内存/proc/[pid]/statm踩坑记
需求:杀掉内存占用较高的进程。解决方法:读取进程的/proc/[pid]/statm,取第二个值作为进程使用的内存。
2016-04-26 14:44:18
28343
原创 Linux单进程打开文件句柄数上限
ulimit 查看系统的文件相关限制单个进程最多允许打开的文件句柄数(包括socket连接数)是有限制的,当大于这个系统限制时,程序会抛出大量的无法打开文件的报错。
2016-04-26 10:53:31
13432
原创 用lsof统计程序打开的句柄数量
#!/bin/sh #set -x echo "">total_handlerpsid=`ps -ef|grep $1|head -1|awk '{print $2}'`count=0while [ $count -lt 60 ] do lsof -p $psid|wc -l >> total_handler sleep 1 count=`expr $count
2016-04-25 18:52:01
3175
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人