最新 | 最热门 | 最高评价

+0  SQL里是否可以使用JOIN

Tag: Technical | SQL
老王 发于 2016年12月18日 17:34 | 点击: 758 | 展开摘要
很多公司都禁止程序员在 SQL 中使用 JOIN,至于原因则出奇的一致:用 JOIN 慢。不过我从没见过谁来论证为什么用 JOIN 慢,结果这个人云亦云的结论越传越广,让我觉得是时候来讨论一下这个看似正确的结论了。

举个例子:查询最新的十篇帖子和对应的用户信息,用 JOIN 是这样的:

SELECT posts.id, posts.content, users.name, ...
FROM posts
JOIN users on posts.user_id = users

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

+0  手把手教你用Dropwatch诊断问题

Tag: Technical | Linux
老王 发于 2016年12月15日 18:25 | 点击: 1221 | 展开摘要
老实说,Dropwatch 并不是什么新鲜玩意,很多年前霸爷就专门撰文介绍过它,通过它可以大概找出系统为什么会丢包,其原理就是跟踪 kfree_skb 的调用行为。不过虽然很多人知道它的存在,但是却并不知道如何具体使用它,所以我写下了这篇文字。

以 CentOS 为例,动手前需要了解系统的版本,并确保已经安装了对应的包:

shell> uname -r
2.6.32-431.23.3.el6.x86_64

shell> rpm -qa | grep kern

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

+0  如何正确设置CRON定时任务

Tag: Technical | Linux
老王 发于 2016年12月12日 18:29 | 点击: 1272 | 展开摘要
相信很多人看了标题后都会纳闷:设置 CRON 定时任务有什么难的?不过请相信我,正确设置 CRON 真的不是一件简单的事情!各位看官不妨听我慢慢道来。

关于 CRON,出镜率最高的一个问题莫过于:为什么手动执行一切正常,放到 CRON 里就不执行呢?实际上此类问题多半是因为环境变量导致的,答案就在配置文件里:

shell> cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAIL

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

+0  谈谈PHP的Reload操作

Tag: Technical | PHP
老王 发于 2016年12月11日 19:00 | 点击: 776 | 展开摘要
通常修改了 PHP 的配置后,为了让修改生效会执行 reload,而不是 restart,因为有很多前辈告诫过我们,reload 能保证整个过程的平滑性,所谓平滑性指的是在 reload 的过程中,旧的进程在处理完当前请求前不会提前终止。很多年来,我一直坚信这个结论,直到有一天,当我 reload 的时候,出现了 502 错误,让我不得不重新思考。

如何重现问题呢?让我们写一个简单的脚本来模拟:

<?php

sleep(11);
echo "foo";

?>

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

+0  实战ElasticStack

Tag: Technical | Elastic
老王 发于 2016年12月11日 15:22 | 点击: 2115 | 展开摘要
我对 ElasticStack 可以说是既熟悉又陌生,说熟悉是因为很久以前就已经开始使用 ELK 来分析日志了,说陌生是因为以前的 ELK 环境都是同事搭建的,我主要是看看 Kibana 面板而已。随着 V5 的发布,ELK 全面进化为 ElasticStack,该自己动手了。

实际操作前最好大致浏览一下官方文档,以便对 ElasticStack 各个组件的作用有一个基本概念,如果看完文档还没搞清楚,那么至少要看明白下面这张图:

ElasticStack

整个流程相当简

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

+0  谈谈Redis的SETNX

Tag: Technical | Redis
老王 发于 2015年09月14日 22:23 | 点击: 203 | 展开摘要
在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!

比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成雪崩效应,如果有锁机制,那么就可以控制只有一个请求去更新缓存,其它的请求视情况要么等待,要么使用过期的

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

+0  Unicode and UTF-8

Tag: Technical | PHP
老王 发于 2015年10月13日 21:12 | 点击: 190 | 展开摘要
绝大多数程序员都听说过 Unicode 和 UTF-8,但是清楚它们之间关系的人就不多了,关于这个问题,与其苍白的陈述它们的概念,不如举例子说明来得自然。

我前些天碰到一个需求:随机生成几个汉字。原本我便对编码之类的问题发怵,所以完全搞不清楚状况,无奈之下我便上网搜索了一个 PHP 版本的实现:

<?php

$zh = '';

for($i = 0; $i < 3; $i++) {
$zh .= '&#'. rand(19968, 4086

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

+0  手把手教你用Strace诊断问题

Tag: Technical | Linux | Strace
老王 发于 2015年10月16日 14:22 | 点击: 203 | 展开摘要
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然。本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。

如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果:

top

技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以

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

+0  聊聊代码的割裂感

Tag: Technical | PHP
老王 发于 2015年11月05日 20:01 | 点击: 184 | 展开摘要
早些年,我特别喜欢下围棋,每天都会下几盘。那时候日本围棋不仅高手林立,而且风格迥异,比如:小林光一的地铁流,武宫正树的宇宙流等等,不过我最喜欢的棋手当属大竹英雄,他下棋时追求美感,如果棋形不漂亮,那么他宁可认输也绝不玷污棋盘。后来,我成为了一名程序员,每天都要写不少代码,可惜写了不少丑陋的代码,本文筛选了几个例子,希望大家看过之后都能写出更具美感的代码来。

在聊之前,我们不妨想想割裂到底是什么意思。其实所谓割裂,说白了就是指把原本应该在一起的东西分开了,比如两地分居的夫妻,

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

+0  Dependency Injection 和 Service Locator

Tag: Technical | PHP
老王 发于 2015年11月11日 17:16 | 点击: 207 | 展开摘要
如果说学院派的 Java 程序员骨子里都浸淫着学究范儿的话,那么游击队出身的 PHP 程序员则从头到脚洋溢着乡土气息。通常他们不太在意理论,一切以实现为先,虽然这样的做法在项目早期能获得不错的收益,但是随着项目的推进,复杂度的提升,缺乏理论基础的弊端终将显现。好在 PHP 社区没有裹足不前,比如说十几年前 Java 社区中流行的 IoC 概念,最近一两年终于被 PHP 社区所接纳。

说起 IoC,其实是 Inversion of Control 的缩写,翻译成中文叫控制反转

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

+0  PgBouncer in action

Tag: Technical | PostgreSQL
老王 发于 2015年12月29日 17:05 | 点击: 180 | 展开摘要
原本我是 MySQL 的忠实粉丝,后来命运使然,接手了一个 PostgreSQL 项目,一边用一边学,遇到了不少问题,本文说说其中的连接池问题。

有人曾经问我「为什么 PostgreSQL 没有 MySQL 流行呢?」,我说是因为 PostgreSQL 没有服侍好 PHP。当然话有戏谑的成分在,不过仔细想想也不无道理,开发那些简单的增删改查程序,PHP 和 MySQL 是绝配,而 PHP 和 PostgreSQL 则明显不搭,其中最重要的一点是:PostgreSQL 连接是

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

+0  浅谈CLOSE_WAIT

Tag: Technical | Linux | TCP
老王 发于 2016年01月19日 20:19 | 点击: 239 | 展开摘要
TCP 有很多连接状态,每一个都够聊十块钱儿的,比如我们以前讨论过 TIME_WAIT 和 FIN_WAIT1,最近时不时听人提起 CLOSE_WAIT,感觉有必要梳理一下。

所谓 CLOSE_WAIT,借用某位大牛的话来说应该倒过来叫做 WAIT_CLOSE,也就是说「等待关闭」,如果你还不理解其含义,可以看看 TCP 关闭连接时的图例:

TCP Close

不要被图中的 client 和 server 所迷惑,你只要记住:主动关闭的一方发出 FIN 包,被动关闭的一

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