最新 | 最热门 | 最高评价

+0  史上最LOW的PHP连接池解决方案

Tag: Technical | PHP
老王 发于 2017年09月10日 14:39 | 点击: 994 | 展开摘要
大多数 PHP 程序员从来没有使用过连接池,主要原因是按照 PHP 本身的运行机制并不容易实现连接池,于是乎 PHP 程序员一方面不得不承受其它程序员的冷嘲热讽,另一方面还得面对频繁短链接导致的性能低下和 TIME_WAIT 等问题。 说到这,我猜一定会有 PHP 程序员跳出来说可以使用长连接啊,效果是一样一样的。比如以 PHP 中最流行的 Redis 模块 PhpRedis 为例,便有 pconnect 方法可用,通过它可以复用之前创建的连接,效果和使用连接池差不多。可惜

查看全文: http://www.udpwork.com/item/16413.html

+0  实战Guzzle抓取

Tag: Technical | PHP
老王 发于 2017年08月23日 20:30 | 点击: 895 | 展开摘要
虽然早就知道很多人用 Guzzle 爬数据,但是我却从来没有真正实践过,因为在我的潜意识里,抓取是 Python 的地盘。不过前段时间,当我抓汽车之家数据的时候,好心人跟我提起 Goutte 搭配 Guzzle 是最好的爬虫,让我一直记挂在心上,加上最近打算更新一下车型数据,于是我便重写了抓取汽车之家数据的脚本。

因为我是通过接口抓取,而不是网页,所以暂时用不上 Goutte,只用 Guzzle 就可以了,抓取过程中需要注意两点:首先需要注意的是通过并发节省时间,其次需要注

查看全文: http://www.udpwork.com/item/16392.html

+0  SYN和RTO

Tag: Technical | TCP
老王 发于 2017年08月13日 15:21 | 点击: 769 | 展开摘要
前两天,我在微博上推荐了一篇朝花夕拾的文章:The story of one latency spike,文章中介绍了 cloudflare 工程师如何一步一步 debug 网络延迟问题,细细读来受益良多,不过我并不打算详细介绍那篇文章的细枝末节, 本文只摘录一个点:

When debugging network problems the delays of 1s, 30s are very characteristic. They may indicate packet

查看全文: http://www.udpwork.com/item/16382.html

+0  如何快速判断配置文件的路径

Tag: Technical | Linux
老王 发于 2017年07月26日 19:54 | 点击: 874 | 展开摘要
最近使用 pip 的时候感觉速度太慢了,感觉有必要改成豆瓣的豆瓣的镜像,可我记不清 pip 的配置文件路径了,当然可以用搜索引擎查询一下,不过还有更快的方法:strace!

shell> strace -eopen pip 2>&1 | grep pip.conf
open("/etc/xdg/pip/pip.conf", O_RDONLY) = ...
open("/etc/pip.conf", O_RDONLY) = ...
open

查看全文: http://www.udpwork.com/item/16363.html

+0  通过实例入门Golang

Tag: Technical | Golang
老王 发于 2017年06月09日 19:43 | 点击: 689 | 展开摘要
如果想学会一门新语言,不仅要多读文档,还要多看别人写的代码,更要强迫自己用新语言多写代码。我在学习 Golang 之前,读过好几本相关的书籍,不过总感觉没真正学会,于是我决定动手用 Golang 写一个能用的工具试试,因为 Golang 最大的优势就是 goroutine 和 channel,所以我觉得实现一个简版的 ab(Web 压力测试工具)应该是一个不错的选择,用 Golang 磕磕绊绊总算实现了预想的功能,能够计算 Requests per second 和 Time

查看全文: http://www.udpwork.com/item/16297.html

+0  说说压力测试工具

Tag: Technical | Linux
老王 发于 2017年05月31日 16:52 | 点击: 770 | 展开摘要
系统写好了,能不能顺利上线?一般来说我们需要做一些压力测试来判断。比如系统预计每天一百万的接口访问量,并且访问时段主要集中在早八点到晚八点,那么平均下来 RPS 大约是 22 次左右,不过用户的访问量通常不会很平均,假设峰值流量是平均流量的 3 到 5 倍的话,那么我们可以推断出项目要想顺利上线,RPS 至少应该达到 66+ 次,110+ 次更好。由此可见上线前用压力测试工具测试 RPS 是一个很重要的环节。

既然压力测试工具如此重要,那么我们不妨挑几个来说说:

首先说说

查看全文: http://www.udpwork.com/item/16284.html

+0  谈谈推荐排序

Tag: Technical
老王 发于 2017年04月25日 16:37 | 点击: 968 | 展开摘要
本文说的排序并不是指「冒泡」之类的技术概念,而是一个业务相关的问题。

举例来说:某个网站,每天都能产生很多数据,需要一个推荐列表页面来展示数据。最初是完全按照时间倒序来排序的,但是这样就产生了一个问题:新鲜的数据不一定是有价值的数据!假设某个时段灌水的数据比较多,那么用户当时在列表页看到的就都是灌水的内容。既然如此,不妨换个思路:给每个数据投票,投票规则可以按业务逻辑自定义,比如:每次评论加一票,每次转发加两票等等。然后按照投票数来倒序是不是就可以了?可惜还有问题:有价值的

查看全文: http://www.udpwork.com/item/16226.html

+0  买不起Alfred和Dash怎么办

Tag: Technical
老王 发于 2017年03月02日 19:37 | 点击: 677 | 展开摘要
对于码畜而言,如果使用 Mac 笔记本的话,那么 Alfred 和 Dash 基本属于必装软件,其中 Alfred 可以免费使用,但是高级的 Powerpack 功能需要付费,而 Dash 则更进一步,不仅要付费购买,连后续升级也要花钱。这点钱对于富人来说或许不算什么,但对我这种工薪阶层来说就不一样了,能省就省,于是我折腾了一个不花钱的替换方案。

说到这里,不得不提到 DevDocs,它集成了很多 API 文档,完全可以替换 Dash。打开系统缺省的浏览器,激活需要的文档,

查看全文: http://www.udpwork.com/item/16154.html

+0  如何抓取汽车之家的车型库

Tag: Technical | Python
老王 发于 2017年02月01日 19:44 | 点击: 1323 | 展开摘要
实际上,关于「如何抓取汽车之家的车型库」,我已经在「使用 Mitmproxy 分析接口」一文中给出了方法,不过那篇文章里讲的是利用 API 接口来抓取数据,一般来说,因为接口不会频繁改动,相对 WEB 页面而言更稳定,所以通常这是数据抓取的最佳选择,不过利用 API 接口来抓取数据有一些缺点,比如有的数据没有 API 接口,亦可能虽然有 API 接口,但是数据使用了加密格式,此时只能通过 WEB 页面来抓取数据。

既然要通过 WEB 页面来抓取数据,那么就不得不提到 Scr

查看全文: http://www.udpwork.com/item/16084.html

+0  使用Mitmproxy分析接口

Tag: Technical
老王 发于 2017年01月22日 16:06 | 点击: 867 | 展开摘要
对于服务端开发者来说,通过抓包分析接口是必备技能之一,常见工具有 Charles 和 Fiddler 等等,不过 Charles 是收费的,Fiddler 虽然是免费的,但是其 Mac 版还不稳定,本文使用另一个工具:Mitmproxy。

Mitmproxy 的安装没什么好说的,按照官方文档来就行了,不过需要注意的是,为了能够抓取 Https 请求,还需要安装证书:首先启动 Mitmproxy,然后在手机 WIFI 里设置好代理,最后在手机里浏览 mitm.it 域名,按照

查看全文: http://www.udpwork.com/item/16070.html

+0  真假百度蜘蛛的甄别

Tag: Technical | Linux
老王 发于 2017年01月19日 12:16 | 点击: 1489 | 展开摘要
虽然百度的口碑并不好,但是不可否认的是,它一直是中文搜索中的霸主,所以对大多数中小型商业公司而言,都对百度蜘蛛的抓取行为予以放行,不过还有很多非法的蜘蛛,它们会通过 User-Agent 把自己伪装成百度蜘蛛,此时如果单纯以 User-Agent 来判断是否是百度蜘蛛就不合适了。虽然网上能找到很多现成的百度蜘蛛 IP 段,但是并不能确认它们的准确性,所以我打算自己收集,进而甄别真假百度蜘蛛。

实际上百度在常见问题解答中给出了甄别的方法:当有 User-Agent 是 Bai

查看全文: http://www.udpwork.com/item/16065.html

+0  Laravel专供:实现Schemaless

Tag: Technical | PHP
老王 发于 2017年01月14日 17:11 | 点击: 799 | 展开摘要
之所以要实现 Schemaless,主要是因为在线 DDL 有很多痛点,关于这一点,我在以前已经写过文章,没看过的不妨看看「史上最LOW的在线DDL解决方案」,不过那篇文章主要以介绍为主,并没有涉及具体的实现,所以我写了一个 Laravel 的例子。

首先创建测试用的 users 表,并且添加虚拟字段 name、address、level:

mysql> CREATE TABLE users (
id INT UNSIGNED NOT NULL

查看全文: http://www.udpwork.com/item/16061.html
|<<<1234567>>>| 一共12页, 139条记录