phpstrom+xdebug 断点调试代码

这几天重新配置开发环境  发现之前的断点调试不能用了。特此记录下配置方式防止以后在重新配置的时候在到处查资料 系统 ubuntu12.04 1安装phpstrom 傻瓜式 执行shell文件即可 2 https://pecl.php.net/package/xdebug  下载xdebug扩展包 3 安装xdebug tar xvf 解压xdebug cd xdebug目录 phpize   如果存在多个版本 则需要自己指定phpize路径 ./configure --with-php-config=php-config  多个php版本php-config也需要自己指定目录 sudo make && makeinstall 4 安装完后配置php.ini [xdebug] zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so" xdebug.remote_enable = On xdebug.remote_handler = dbgp xdebug.remote_host= localhost xdebug.remote_port = 11111 xdebug.idekey = PHPSTORM xdebug.trace_output_dir = /tmp xdebug.collect_vars = 1 xdebug.collect_return = 1 xdebug.collect_params = 4 xdebug.show_mem_delta = 1 xdebug.profiler_enable = 1 5 开始配置phpstorm IDE Key 必须与配置文件里的一样 phpstorm_1 配置xdebug port phpstorm_2 增加项目 phpstrom_3 在需要断点的代码左侧点击鼠标左键出现红点后 保持phpdebug在监听状态(看右上角的电话图标) 点击虫子 会弹出firefox 浏览器并停留在断点处 phpstorm_5 断点的url后会会有一个session_id 以后每次调试 只需要在url后增加这个参数即可

一份不错的PHP面试题

一、基础题 1. 写出如下程序的输出结果
<? $str1 = null; $str2 = false; echo $str1==$str2 ? '相等' : '不相等'; $str3 = ''; $str4 = 0; echo $str3==$str4 ? '相等' : '不相等'; $str5 = 0; $str6 = '0'; echo $str5===$str6 ? '相等' : '不相等'; ?>
2. 写出如下程序的输出结果
<? $a1 = null; $a2 = false; $a3 = 0; $a4 = ''; $a5 = '0'; $a6 = 'null'; $a7 = array(); $a8 = array(array()); echo empty($a1) ? 'true' : 'false'; echo empty($a2) ? 'true' : 'false'; echo empty($a3) ? 'true' : 'false'; echo empty($a4) ? 'true' : 'false'; echo empty($a5) ? 'true' : 'false'; echo empty($a6) ? 'true' : 'false'; echo empty($a7) ? 'true' : 'false'; echo empty($a8) ? 'true' : 'false'; ?>
3. 写出如下程序的输出结果
<? $test = 'aaaaaa'; $abc = & $test; unset($test); echo $abc; ?>
4. 写出如下程序的输出结果
<?$count = 5; function get_count(){ static $count = 0; return $count++; } echo $count; ++$count; echo get_count(); echo get_count(); ?>
5. 写出如下程序的输出结果
<? $GLOBALS['var1'] = 5; $var2 = 1; function get_value(){ global $var2; $var1 = 0; return $var2++; } get_value(); echo $var1; echo $var2; ?>
6. 写出如下程序的输出结果
<? function get_arr($arr){ unset($arr[0]); } $arr1 = array(1, 2); $arr2 = array(1, 2); get_arr(&$arr1); get_arr($arr2); echo count($arr1); echo count($arr2); ?>
7. 使用五种以上方式获取一个文件的扩展名 要求:dir/upload.image.jpg,找出 .jpg 或者 jpg , 必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name) 二、算法题 1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组 3. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数 【附答案】(以下答案不一定是最好的,只是一个简单的参考) 一、基础题 1. 相等 相等 不相等 2. true true true true true false true false 3. aaaaaa 4. 5 0 1 5. 5 2 6. 1 2 7. 使用五种以上方式获取一个文件的扩展名
function get_ext1($file_name){ return strrchr($file_name, '.'); } function get_ext2($file_name){ return substr($file_name, strrpos($file_name, '.')); } function get_ext3($file_name){ return array_pop(explode('.', $file_name)); } function get_ext4($file_name){ $p = pathinfo($file_name); return $p['extension']; } function get_ext5($file_name){ return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.'))); }
二、算法题 1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组
//冒泡排序(数组排序) function bubble_sort($array) { $count = count($array); if ($count <= 0) return false; for($i=0; $i<$count; $i++){ for($j=$count-1; $j>$i; $j--){ if ($array[$j] < $array[$j-1]){ $tmp = $array[$j]; $array[$j] = $array[$j-1]; $array[$j-1] = $tmp; } } } return $array; } //快速排序(数组排序) function quick_sort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i<count($array); $i++){ if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr, array($key), $right_arr); }
2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
//二分查找(数组里查找某个元素) #二分查找 function binarySearch(Array $arr, $target) { $low = 0; $high = count($arr) - 1; while($low <= $high) { $mid = floor(($low + $high) / 2); #找到元素 if($arr[$mid] == $target) return $mid; #中元素比目标大,查找左部 if($arr[$mid] > $target) $high = $mid - 1; #重元素比目标小,查找右部 if($arr[$mid] < $target) $low = $mid + 1; } #查找失败 return false; } $arr = array(1, 3, 5, 7, 9, 11); $inx = binarySearch($arr, 1); var_dump($inx); //顺序查找(数组里查找某个元素) function seq_sch($array, $n, $k){ $array[$n] = $k; for($i=0; $i<$n; $i++){ if($array[$i]==$k){ break; } } if ($i<$n){ return $i; }else{ return -1; } }
3. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数
//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order=0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if($order == 0){ asort($keysvalue); }else { arsort($keysvalue); } reset($keysvalue); foreach($keysvalue as $key => $vals) { $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val) { $new_array[$key] = $arr[$val]; } return $new_array; }

Sublime Text 3 install Package Control

相信看到这个帖子的童鞋,一般至少对 Sublime Text 有所了解了,废话不多讲,个人在 ST2 还没用好的时候, Sublime Text 3 又横空出世了,不过现在 ST3 还是 beta 版。   “安装了 Sublime Text 3 的朋友可能还在兴奋好奇之余,突然便发现 ST3 最基础的插件 Package Control 用原来的方法都失效安装不上了。因为 Sublime Text 3 更新的 Python 的函数,说白了就是API不同了,导致基于 Python 开发的插件很多都不能工作。”   网上搜索安装方法,也有看似很新的 2013 年的帖子,不过 ST 一直保持了相当强的活力,而不多的帖子中提到的方法已有过时现象。并且提到的 2 种涉及 Git 的方法,个人依然感觉不是很简单。此处将 wbond.net 网站的 ST3 Package Control 简便安装方法翻译转至此处,方便大家,并且后面方法有所变动之时,还会跟进补发帖以保证质量和实效性。   从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console。将以下 Python 代码粘贴进去并 enter 执行,不出意外即完成安装。以下提供 ST3 和 ST2 的安装代码:   Sublime Text 3: import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())   Sublime Text 2: import urllib2,os; pf='Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler( ))); open( os.path.join( ipp, pf), 'wb' ).write( urllib2.urlopen( 'http://sublime.wbond.net/' +pf.replace( ' ','%20' )).read()); print( 'Please restart Sublime Text to finish installation')

Sublime Text2安装Package Control

一、安装Package Control 使用Sublime Text2首先就要安装Package Control,这样就能使用丰富的插件包了 安装方法有2种: (1)访问Package Control站点按照提示复制一段python命令安装Package Control 也可以直接复制这一段到控制台(Ctrl+~) [python] import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation' [/python] (2)下载Package Control插件包到插件目录 插件目录在菜单中打开Preference--Browse Packages,没有自己新建一个 二、安装插件 Sublime Text2有很多好用的插件,安装好Package Control 后就可以方便的安装插件了 Ctrl+Shift+P(Win) 或 Command+Shift+P(Mac) 调出控制面板, 常用的命令Install Package (安装扩展)、List Packages (列出全部扩展)、Remove Package (移除扩展)、Upgrade Package (升级扩展) 转自http://blog.csdn.net/del1214/article/details/8092266/

window7 install fedora18

硬盘安装 WIN7硬盘安装Fedora 18 双系统详细过程 所用软件:ext2fsd(读写EXT3分区),easybcd(双系统引导), Acronis Disk Director(分区软件) 老鸟请看: 1.新建5G的EXT3分区,用EXT2FSD加载EXT3分区,拷入Fedora 18 DVD Iso 文件。 2.安装easybcd,选添加新条目,选NeoGrub,选安装,选配置,编辑menu.lst ,在里面加入: title Install Fedora Linux 18 root (hd0,0) kernel /nst/vmlinuz repo=hd:/dev/sda10:/ initrd /nst/initrd.img 从Fedora 18 DVD ISO文件中目录isolinux下提取vmlinuz,initrd.img两个文件放在WIN7系统分区/NST/下。(sda10修改为你自己的5Gext3分区) 3. 创建一个20G的分区,用于安装Fedora系统文件,创建一个交换分区swap。 4.重启安装Fedora,选不安装引导程序。 5. 将menu.lst修改为: title Fedora Linux 18 root (hd0,0) kernel        /nst/vmlinuz root=/dev/sda8 ro initrd        /nst/initrd.img (sda8修改为你自己的Fedora系统分区) 6.重启,WIN7,Fedora,双系统。 菜鸟请看: 1.下载 Fedora 18 DVD,因为DVD大于4G,所以只能放在NTFS分区。 2.用分区软件(我用的是Acronis Disk Director)从空闲的分区中调整新建一个5G大小的EXT3分区用于放Fedora 18 DVD,因为,Fedora引导程序不能认出NTFS。 3.下载ext2fsd(此软件能在windows下读写ext3分区),安装。 运行Ext2 Volume Manager,因为是第一次运行,所以要启用驱动,选工具与设置,选配置文件系统驱动,点启用。 选5G的EXT3分区,右击,选更改装配点盘符,选加载并退出。 这时计算机里出现一个新的盘符,然后将fedora 18 dvd拷贝到这个新加载分区根目录下。 拷贝完ISO文件之后可以将ext2fsd卸载。 4.创建一个20G的分区,用于安装Fedora系统文件,创建一个交换分区swap,这是linux系统必须的。 5.安装easybcd,选添加新条目,选NeoGrub,选安装,选配置,编辑menu.lst ,在里面加入: title Install Fedora Linux 18 root (hd0,0) kernel /nst/vmlinuz repo=hd:/dev/sda10:/ initrd /nst/initrd.img (sda10,是我的硬盘,具体可以用Acronis Disk Director查看,C盘sda1,D盘是sda5(不是sda2),E盘是sda6,以此往后数,将sda10改成放ISO文件的5G分区。) 6.从Fedora 18 DVD ISO文件中目录isolinux下提取vmlinuz,initrd.img两个文件放在WIN7系统分区/NST/下。(可以用虚拟光驱DAEMON Tools Lite加载ISO文件) 7.重启系统,选择NeoGrub引导加载器,选Install Fedora Linux 18开始安装过程 8.安装中选择不安装引导程序,否则,WIN7不能启动。 9.安装之后,将menu.lst修改为 title Fedora Linux 18 root (hd0,0) kernel        /nst/vmlinuz root=/dev/sda8 ro initrd        /nst/initrd.img (sda8是我的Fedora系统分区,同样改成你自己的分区sdaY,Y也是一数字) 10.重启电脑,选择NeoGrub引导加载器,选择Fedora Linux 18,去体验Fedora Linux 18。 也可以选择进入WIN7。 u盘安装
引言:挑选一款适合自己的Linux发行版可是个纠结事。Linux发行版主要有两个系统。一个是Red hat系列,该系列下有名的有Red hat 企业版,fedora 和centos。fedora是红帽赞助的发行版,是红帽在取消Red hat桌面版后的代替屋,同时是Red hat 新技术的试验场,可靠、稳定的功能最终会引用到Red hat 企业版中。另一个发行版系列是debian 系统。该系列当前较好的发行版有Ubuntu 、Linux Mint等。纠结一番之后,我还是选择了fedora,特别是今天是fedora 18 正式版发布的日子。果断下载安装。组建Linux与Windows并存的多操心系统。
1、资源下载链接:
fedora 18: http://fedoraproject.org/zh_CN/get-fedora-options
Live usb creator : https://fedorahosted.org/releases/l/i/liveusb-creator/liveusb-creator-3.11.7-setup.exe
2、安装Live usb creator,制作以U盘安装(这个简单,在windows下按界面操作即可)
3、为安装fedora准备空闲硬盘存储区
注意:fedora 18 采用了全新的安装器。安装过程与fedora 17有很大的区别。fedora 18的安装器能自动地找到硬盘中空闲(尚未划分的分区)来安装。因此,在安装与windows或其他OS共存且不想损坏当前硬盘数据的情况下,我们只需要压缩缩小或删除已有分区,留出空闲的存储区即可。
4、设置主板,设置为U盘启动
5、安装fedora过程中注意事项:
a)安装引导与否。如果选择安装引导,则会安装grub引导程序到硬盘MBR。但是,会自动地保留当前的引导项。(即无需任何设置就可完成多操作系统的引导)。所以,建议选择安装引导。。
b)切不可选择“自动分区”方式,这样会完全覆盖整块硬盘。(损失惨重啊)
c)选择分区方式为“标准分区”,切不可选择“LVM”方式。(当然也可以,试验过。这样安装后整块硬盘的所有分区都为LVM模式了,日后根本无法自行管理自己的硬盘了)
PS:【首次安装fedora 18对硬盘的数据有一定的风险。建议先用虚拟机实践一次。。否则整块硬盘原有数据的损坏会令你崩溃掉。。我在进行真正的安装fedora 18 到硬盘前做的试验为:先用虚拟机安装windows xp ,分区为:一个主活动分区,主活动分区后留一块空闲磁盘;空闲磁盘块后再建立逻辑分区。然后再用u盘引导安装fedora 18。首次安装时选择了自动分区,结果整块虚拟机硬盘当掉fedora <wbr>实践系列之fedora <wbr>18多系统共存安装fedora <wbr>实践系列之fedora <wbr>18多系统共存安装。第二次选择了“LVM”分区方式,结果硬盘数据尚存,原有的windows xp 系统可正常启动。但是,在魔术分区软件的显示下,整块硬盘即只有一个逻辑卷“LVM”。第三次,安装上面讲到的注意事项,才安装成功。最后,我才放心实施到真正的实体安装到硬盘,实现了两个windows 7 与fedora共存的多系统】

UTF-8编码中BOM的检测与删除

所谓BOM,全称是Byte Order Mark,它是一个Unicode字符,通常出现在文本的开头,用来标识字节序(Big/Little Endian),除此以外还可以标识编码(UTF-8/16/32),如果出现在文本中间,则解释为zero width no-break space。 注:Unicode相关知识的详细介绍请参考UTF-8, UTF-16, UTF-32 & BOM。 对于UTF-8/16/32而言,它们名字中的8/16/32指的是编码单位是多少位的,也就是说,它们的编码单位分别是8/16/32位,换算成字节就 是1/2/4字节,如果是多字节,就要牵扯到字节序,UTF-8以单字节为编码单位,所以不存在字节序。 UTF-8主要的优点是可以兼容ASCII,但如果使用BOM的话,这个好处就荡然无存了,除此以外,BOM的存在还可能引发一些问题,比如下面错误便都 有可能是BOM导致的:
  • Shell: No such file or directory
  • PHP: Warning: Cannot modify header information – headers already sent
在详细讨论UTF-8编码中BOM的检测与删除问题前,不妨先通过一个例子热热身:
shell> curl -s http://phone.10086.cn/ | head -1 | sed -n l
\357\273\277<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional\
//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r$
如上所示,前三个字节分别是357、273、277,这就是八进制的BOM。
shell> curl -s http://phone.10086.cn/ | head -1 | hexdump -C
00000000  ef bb bf 3c 21 44 4f 43  54 59 50 45 20 68 74 6d  |...<!DOCTYPE htm|
00000010  6c 20 50 55 42 4c 49 43  20 22 2d 2f 2f 57 33 43  |l PUBLIC "-//W3C|
00000020  2f 2f 44 54 44 20 58 48  54 4d 4c 20 31 2e 30 20  |//DTD XHTML 1.0 |
00000030  54 72 61 6e 73 69 74 69  6f 6e 61 6c 2f 2f 45 4e  |Transitional//EN|
00000040  22 20 22 68 74 74 70 3a  2f 2f 77 77 77 2e 77 33  |" "http://www.w3|
00000050  2e 6f 72 67 2f 54 52 2f  78 68 74 6d 6c 31 2f 44  |.org/TR/xhtml1/D|
00000060  54 44 2f 78 68 74 6d 6c  31 2d 74 72 61 6e 73 69  |TD/xhtml1-transi|
00000070  74 69 6f 6e 61 6c 2e 64  74 64 22 3e 0d 0a        |tional.dtd">..|
如上所示,前三个字节分别是EF、BB、BF,这就是十六进制的BOM。 注:用到了第三方网站的页面,不能保证例子始终可用。 实际做项目开发时,可能会面对成百上千个文本文件,如果有几个文件混入了BOM,那么很难察觉,如果没有带BOM的UTF-8文本文件,可以用vi杜撰几 个,相关命令如下: 设置UTF-8编码:
:set fileencoding=utf-8
添加BOM:
:set bomb
删除BOM:
:set nobomb
查询BOM:
:set bomb?
如何检测UTF-8编码中的BOM呢?
shell> grep -r -I -l $'^\xEF\xBB\xBF' /path
如何删除UTF-8编码中的BOM呢?
shell> grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'
推荐:如果你使用SVN的话,可以在pre-commit钩子里加上相关代码用以杜绝BOM。
#!/bin/bash

REPOS="$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook

for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS" | awk '/^[AU]/ {print $NF}'); do
    if $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | grep -q $'^\xEF\xBB\xBF'; then
        echo "Byte Order Mark be found in $FILE" 1>&2
        exit 1
    fi
done
本文用到了很多shell命令,篇幅所限,恕不详述,如果有不明白的就请自己搜索吧。 原文地址http://huoding.com/2011/05/14/78

关于正则表达式的“\b” 转

今天刚刚开始看正则表达式就遇到一个十分头疼的问题,原文是这样的: “不幸的是,很多单词里包含hi这两个连续的字符,比如him,history,high等等。用hi来查找的话,这里边的hi也会被找出来。如果要精确地查找hi这个单词的话,我们应该使用\bhi\b。 \b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置” 问题来了,什么叫只匹配一个位置????   要知道是一个单词的开头,这个\b是去匹配开头的分隔符还是匹配开头的第一个字母??   从网上找到了这样一句话:“如果需要更精确的说法,\b匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w(匹配字母或数字或下划线或汉字)”   这句话很隐晦的说出了是去匹配第一个字母,而不是去匹配分割符(我这说的匹配分隔符和上边说的不去匹配任何一个分隔符并不矛盾,因为我经过实验已经进本猜出了一个单词两边只要没有数字、字母、汉字、下划线就可以认为是独立单词,我说的匹配分隔符是去判断单词前一个字符是不是在这四个之外,是的话就认为是单词开头)   再加上下边的两个例子就可以很清晰的理解这句很隐晦的话。 引用Microsoft   VBScript   Regular   Expression   Dim myReg As RegExp Set myReg = New RegExp   myReg.Pattern = "a\b.*h.*" Print myReg.Test("a,chia") 输出的结果为Ture 说明是匹配的a,而不是, Dim myReg As RegExp Set myReg = New RegExp   myReg.Pattern = "a.* \b h.*" Print myReg.Test("a,chia") 输出的结果为flash 说明匹配的是h,而不是c   这两个例子非常有助于理解\b的真实含义,希望对大家有帮助!   接下来就是我保证目前网络中没有的内容了!!!!还有两点需要说明: 1、\b只能匹配字母、数字、汉字、下划线 2、\b就近匹配,比如\bAB 匹配A,AB\b 匹配B;但如果只写一个\b或者在两个字母、数字、汉字、下划线之间有\b时就在所有字符或者两个字母、数字、汉字、下划线之间所有字符去逐个匹配 相信如果你能看懂我上面所写的东西,对于\b的使用算是没有任何问题了!对正则表达式的学习有一个好的开始和基础!   原文地址

redis 添加访问密码

1. 更改redis.conf配置 # requirepass foobared 去掉注释,foobared改为 自己的password , 我测试的时候用的是默认的 foobared 2.启动redis /usr/local/redis/src/redis-server -p 6371 3.测试 /usr/local/redis/src/redis-cli -p 6371 -a foobared redis>set a b (error) ERR operation not permitted      (-a 设置这个时候没起作用 ) redis>auth foobared OK redis>set a b OK redis>quit 这时,再 /usr/local/bin/redis-cli -a foobared redis > set a b OK

MACBOOK PRO连接不到摄像头解决方法

方法如下:第一个操作:重新启动电脑,当听到咚的声音马上同时按住四个键:command+option+p+r,一直按住,一直到听到三声咚的声音就放手 ??第二个操作:关机,拔掉电源线,隔使秒钟把电源线插上去,同时按住四个键:command+option+shift+点源键,一直按住15秒钟放手

程序员与妓女

程序员与妓女基本一样,以下为证: 1、都是靠出卖为生。 2、吃青春饭,人老珠黄肯定混不下去。 3、越高级收入越高,当然中间人的抽头会更高。 4、生活没有规律,以夜生活为主,如果需要,凌晨也要加班。 5、名声越大,越容易受到青睐。 6、必须尽最大可能满足客户各种各样变态的需求。 7、鼓励创新精神。 8、喜欢扎堆。程序员集中的地方称为软件园,妓女集中的地方叫红灯区。 9、流动性较大,正常情况下没有工会。 10、如果怀孕了,既不能做程序员,也不能做妓女。 11、都为防病毒的问题而烦恼。 12、当然,个中高手还专门以制毒传毒为乐。 13、一个是Microsoft,一个是Plug 14、工作状态相同。工作时精神高度集中,最怕外界干扰,工作完毕身心放松,体会到一种不可替代的工作快乐。 15、女孩子最好还是不要做这两个职业,但还是有很多女孩子做。 16、除非在转行以后,否则都不愿意结婚,没空儿啊。 17、程序员怕查户口的。妓女怕查房的。 18、妓女工作的地方(床)是程序员最向往的地方。 19、程序界的高手通常很讨厌微软,妓女界的高手嗯。。。这个。。。恐怕也如此。 20、都是吃青春饭,不过到人老珠黄后,凭着混个脸熟,程序员可以混个管理~员,妓女也行,不过俗称老鸨。 21、妓女靠的本钱是三围,程序员靠的可是四围(思维)。 22、程序员为了拉客,通常会在交易前提供一个DEMO,妓女提供的那叫PHOTO。 23、程序员现在出的活时兴叫吃霸(词霸)、结霸(解霸),妓女大姐一律叫波霸。 24、心不在焉的妓女可以一边工作一边do{beep(1); 心不在焉的程序员也可以一边工作一边navigate到成人网站上去。 25、程序员手册:一套好的人机操作接口要求,对于新手,能够一步一步的引) 导他进入功能,相反对于熟客,能够直奔主题;妓女同样要遵守程序员手册对人鸡接口的规定。 26、妓女在工作中最怕的是临检,程序员最怕的是停电。 27、新上手的程序员叫菜鸟,刚入行的妓女叫雏鸡,都是好可怜的小动物。 28、程序界现在流行OO的方法,虽然在XXXX年前妓女已在床上掌握了~~~的技术。 29、程序员为了拉客,无奈之时,也可以先让客人试玩,妓女当然有时也会先给你甜头。 不过总之程序员比妓女还惨,补充如下: 1、妓女每个月总有几天可以理直气壮的说不,程序员如果老板不发话,可要一年干到黑。 2、女人做程序那叫奇女、才女,男人要是做妓,那就叫鸭了。 3、妓女不干了人家那叫从良,程序员如果不干了,估计是下了岗。 4、程序员有千年虫问题,妓女好象没听说有。 5、妓女的工作隐蔽性很强,程序员的工作只怕亲戚朋友都知道,所以更加没脸皮。 6、程序员做的越好,要做的程序越多,妓女做的好,就可以挑三拣四。 7、程序员现在流行FREE、OPEN什么的,说白了就是自己玩自己,妓女界好象还没这样恶性竞争