时间过的好快,可怕的春节就在眼前了,不知道如何是好。
莫把重载当多态
偶一次,和一两个同事一起面试一个MM,鉴于MM几乎没有工作经验,但是至少是计算机专业的,我只想了解一下她的基础知识掌握的如何,我问了一下面向对象的三个基本特征;她回答道: 封装、继承和多态。
其实,封装、继承基本没什么不好理解的,但是多态却经常有人不理解。而且我也没想提问这个。我的一个同事A却提了个问题:PHP支持多态吗?PHP中的多态如何实现?
MM没能回答上来,我想,如果不是特别清楚的话,现在一定是要回答不上来的,因为面试官已经开始错了。同事A接着便自信地说:其实PHP不支持多态,但是实现起来却也很简单。我知道同事A错了,但是我对这个概念也有一些模糊了,便不想揭穿他,自己就默不作声,任由他们讨论。令我羞愧的是,另一同事B也和他们一起说起默认参数和几个参数的问题了,我彻底无语。不怕你不懂,就怕你错了还不知道自己错了。
多态不是重载,重载也不是覆盖;面向对象中,如果不能区分多态、重载、覆盖这几个概念,那么面向对象就是没有学好。
我们说:
- 我有一个函数move(animal),有一个参数是”动物“;如果你给的参数是老鹰,那么该函数表现出来的形态就是fly;如果你给的参数是小鸡,那么该函数表现出来的形态就是run; 这个叫多态(Polymorphism)。多态在C++中是通过虚函数来实现的,如果你是学C++的,你不了解虚函数,那么你一定不了解多态。
- 有多个可以接受不同个数、或类型的参数的同名函数,那么这个叫重载( overload)。可以说,重载不属于面向对象领域(特有)的概念
- 如果子类定义了和父类完全相同的方法,那么这个叫覆盖
- 重载不是面向对象领域的概念
但愿我说明白了,参考文档:
- http://baike.baidu.com/view/126521.htm
- http://baike.baidu.com/view/126530.htm
繁华落尽,寂寞成殇
摘自: http://www.lookmw.cn/yc/2820.html
时光荏苒,岁月如梭。素什锦年,稍纵即逝,半载青春年华,似沙漏般,弹指间,流在昨天。苦涩与喜悦,都不再去回忆,依然埋在时光的烟尘里。只知青丝变白发,冥冥之中,注定青春与那寂寞有染。
春去秋来,潮起潮落。往日里,天庭空旷,时光静谧;闲看云雾,静听风 雨;可谓悠闲自得,其乐无穷。转眼,又至寂寞时节,秋风抚叶,泛成黄色,落了一地的沧桑;鸟落廊前,轻声一吟,留下几世的凄凉。如花美眷,敌不过似水流 年。一切美好,都会悄然褪色,暗自凋零,最后落入尘埃。化作孤独,上了心头。
繁华落尽,乱世成殇。人生似 列车,几经周转,穿行了多少过往。世人都是过客,到了青春驿站,转身何去何从。亲人,已挥手离去;朋友,也渐行渐远。风无定人无常,聚散两茫茫,留下寂寞 的你我,来来往往。看遍了人间繁华,城市的余辉,再美也终将落幕。远方飘来忧伤的夜曲,难得此生相逢,怎料寂寞如歌。待到繁华落尽,在这乱世,成殇。
寂寞流年,染泪红颜。 灯火阑珊,最难将息。下玄月,西风凉,此夜何人眠;别时易,见时难,相思系红颜。弱水三千,只取一瓢;梦有万千,只梦一朝。衣带渐宽,为得伊人憔悴;千年等待,只求揽你入怀。泪如烈酒,灼人心肺,谁知相思,已成灾。
往事成烟,宿命依旧。青春染指流年,流年染指红颜。画地为牢,锁我几春秋,染予寂寞。无奈拾起青春的记忆,等一阵清风扑面,挥挥衣袖,又是潇洒一片。
注:
非哲人,写不出满富哲理的文章;
非诗人,道不出流芳几世的佳句。
只是简单平凡的我,肺腑之言,句句真切。
谨以此文,
祭奠即逝的青春,
为自己的青春,
添上一段墓志铭
信手拈来
- 但求繁华落尽日,亦是得道成仙时.
- 楼中山外山,飞鸟各成单.万般皆下品,唯求常心安.
- 荒唐人间行, 处处透不平。不沾三分情,但求一身轻。
- 一宿黄梁梦,夜夜莫名痛.纵使千般好,万万不心动.
- 移山填海英雄气,难得世间女儿心.
- 命里有时终须有 命里无时莫强求。
- 三世交心。四世同寐。百年同船。千年共枕。
- 醉意易显风光,酒香莫说悲伤
- ""前世的寄托,今生的陪伴.
- 月过梢,摇曳的花影, 空有一世情、
- 鱼沈雁杳天涯路,始信人间别离苦。
- 红颜远,相思苦,几番意,难相付。
- 疏影横斜水清浅、暗香浮动月黄昏。
- 当心中装满梦想 眼睛自然被打扫干净 前途无限大 因此别害怕 信念是一把火 燃烧起不灭的希望
- 嘚卟菿の詠逺恠騷動 被偏噯の嘟冇恃兂恐
- 风声萧瑟 余音渺渺 落叶怎知故人情忆往昔 虽不是峥嵘岁月 却还是忧愁
- こ明月照出相思苦,诗词签名空余春风吹不归`
- 等闲变却故人心 却道故人心易变 –
- 谁啲眼泪触动了谁啲睸、谁啲笑容呧嘚了谁啲泪、谁啲訫载嘚下谁啲轮囬、谁啲掌纹赎嘚了谁啲嶵、
- 花 开 后 花 又 落,轮 回 也 没 结 果。
- 水因有性山难转,你若无心我便休
- 锦瑟年华,一曲拨断弦。惜流年,可曾相约天涯路踏遍
- 几度烟花落,繁华三千尽没
- 夕辞:谱夕辞,诉离伤,莫道容颜依旧,只是情思改。
- 等闲变却故人心,却道故人心易变。
- 梦中楼上月下 站着眉目依旧的你啊。
- 当时缠过红线千匝 一念之差为人作嫁。
- い , 拔剑泪斩丝红尘,破而后立定皇图。
- 说的是一辈子,差一年,一个月,一天,一个时辰都不算一辈子…..
- 一片混乱之中,唯有蝶衣,独自与黑暗之中,传单之下,继续着未尽的绝美的舞步,丝毫未曾停滞…
TokyoTrant同步问题
1. 同样在一组磁盘上的两个TT端口,其读写操作是根据均匀的hash方式来分配的,但是,其中一个3001端口同步数据就很慢,而3002端口同步数据就很快,重启3001端口依然很慢; 把3002端口停掉之后,3001端口依然很慢。
2. 通过tcpdump抓包发现:
3001端口的master 2001端口,数据流表现为:
2001 ——–很多数据给—–》 3001
3001 ——–因为吃不消,所以act 一个win(0) 给 —-》 2001
2001 ——–不断询问 ———-》3001
2001 ——–不断询问 ———-》3001
2001 ——–不断询问 ———-》3001
3001 ——–响应,说在给点儿吧 ——-》 2001
2001 ——–很多数据给 ———…..
使用netstat也可以发现,对于3001的同步连接中的接受队列总是会阻塞很多数据,看来是执行的太慢
3. 观察 3001端口的执行情况,下面是使用strace跟踪的这个繁忙的ttserver进程的系统调用情况:
为什么futex耗费的时间如此惊人?
关于TokyoTrant的热备份
1. TokyoTrant(后面简称TT)在备份的时候不能提供写服务也不能提供读服务2. 备份的速度取决于磁盘的好坏
下面有一个TT备份的参考:
date; tcrmgr copy -port 3004 10.xx.x.xx @/data1/tokyotyrant/bin/ttbackup.sh; date
Thu Dec 22 23:22:59 CST 2011
Thu Dec 22 23:25:30 CST 2011
这里备份了12G的数据,用了2.5分钟;
磁盘性能:
5块 146G的磁盘做了逻辑卷的, 备份到同一个目录下, 如果按照300MB/s 的写速度, 300MB/s 的读速度,则每秒钟复制150MB的数据,则大约100s可以复制15G的数据;
而这里12G的数据复制了2.5分钟,看来我的计算是有些偏差的
另外一台机器的备份情况,备份数据量: 9.4G
关于复制时的一点注意事项:
当我们将复制好的从库启动之后,可能会发现延迟越来越大,可能是因为,数据都在磁盘上,虽然配置了很大的内存,现在还没能用上,磁盘的随机读写操作可能比较严重,过一段时间之后,随着磁盘数据越来越多地载入内存,这时候的读写操作都会很快了,延迟自然就越来越小了。
磁盘IO情况
1 |
io性质的应用: |
1 |
随机读写比较厉害 |
1 |
1 |
|
1 |
avg-cpu: %user %nice %system %iowait %steal %idle<br /> 1.88 0.00 2.30 32.38 0.00 63.44 |
1 |
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn<br />sda 1224.80 0.94 4.65 4 23 |
1 |
avg-cpu: %user %nice %system %iowait %steal %idle<br /> 0.58 0.00 1.30 41.09 0.00 57.03 |
1 |
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn<br />sda 1056.80 0.55 4.00 2 20 |
1 |
avg-cpu: %user %nice %system %iowait %steal %idle<br /> 0.57 0.00 1.47 46.34 0.00 51.61 |
1 |
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn<br />sda 1406.00 0.73 5.33 3 26 |
1 |
avg-cpu: %user %nice %system %iowait %steal %idle<br /> 0.65 0.00 1.53 28.99 0.00 68.83 |
1 |
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn<br />sda 1027.40 0.70 3.93 3 19 |
1 |
avg-cpu: %user %nice %system %iowait %steal %idle<br /> 0.63 0.00 1.53 26.93 0.00 70.92 |
1 |
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn<br />sda 1183.80 0.68 4.52 3 22 |
QQ关于浏览器上“检测到您已登录QQ帐号”的实现
关于讲课
今天扮演了一下内部认证讲师评审的学员,我几乎没有关心讲课的内容,只是在观察一些讲课的技巧和注意事项。每次讲完,评委都会给出一些意见和建议,对我来讲也是一次难得的学习机会,在观察别人的授课的过程中,我也深深地发现自己授课的水平简直就是烂到家了,以后要多学习,多锻炼。
这次听课使我有幸看到了传说中的邹立巍老师的讲课的风范,他的授课水平我很是赞叹;这次授课,他没有将太多深奥的东西,但就一点点linux的权限的知识便非常好地体现出了他讲课的水平。回头想想我当时将的东西,虽然比他讲的内容有深度,也更实用,但是我讲的就缺点多多,问题多多;所以说,像这样的内部讲师评审不需要讲太NB的东西,重要的是你对授课技巧的掌握。
下面简要地列几点注意事项:
- 不要总是随意地走动(也不要一动不动)
- 要面带微笑
- 要会使用道具
- 衣着要整洁
- 要让听众知道所讲的东西对他们有用
- 不要总是说这个东西对自己多么的有用,自己总是怎么做的(在你没有被公认之前,这些属于自大)
- 语调要根据内容的需要做到抑扬顿挫,如果一堂课下来都是一个音调,学生会睡觉的
windows通过netsh设置防火墙
netsh advfirewall firewall>add rule
提供的许多参数无效。请查看帮助获取正确语法。
用法: add rule name=<string>
dir=in|out
action=allow|block|bypass
[program=<program path>]
[service=<service short name>|any]
[description=<string>]
[enable=yes|no (default=yes)]
[profile=public|private|domain|any[,…]]
[localip=any|<IPv4 address>|<IPv6 address>|<subnet>|<range>|<list>]
[remoteip=any|localsubnet|dns|dhcp|wins|defaultgateway|
<IPv4 address>|<IPv6 address>|<subnet>|<range>|<list>]
[localport=0-65535|<port range>[,…]|RPC|RPC-EPMap|IPHTTPS|any (default=any)]
[remoteport=0-65535|<port range>[,…]|any (default=any)]
[protocol=0-255|icmpv4|icmpv6|icmpv4:type,code|icmpv6:type,code|
tcp|udp|any (default=any)]
[interfacetype=wireless|lan|ras|any]
[rmtcomputergrp=<SDDL string>]
[rmtusrgrp=<SDDL string>]
[edge=yes|deferapp|deferuser|no (default=no)]
[security=authenticate|authenc|authdynenc|authnoencap|notrequired
(default=notrequired)]
备注:
– 将新的入站或出站规则添加到防火墙策略。
– 规则名称应该是唯一的,且不能为 "all"。
– 如果已指定远程计算机或用户组,则 security 必须为
authenticate、authenc、authdynenc 或 authnoencap。
– 为 authdynenc 设置安全性可允许系统动态协商为匹配
给定 Windows 防火墙规则的通信使用加密。
根据现有连接安全规则属性协商加密。
选择此选项后,只要入站 IPSec 连接已设置安全保护,
但未使用 IPSec 进行加密,计算机就能够接收该入站连接的第一个 TCP 或
UDP 包。
一旦处理了第一个数据包,服务器将重新协商连接并对其进行升级,以便所
有后续通信都完全加密。
– 如果 action=bypass,则 dir=in 时必须指定远程计算机组。
– 如果 service=any,则规则仅应用到服务。
– ICMP 类型或代码可以为 "any"。
– Edge 只能为入站规则指定。
– AuthEnc 和 authnoencap 不能同时使用。
– Authdynenc 仅当 dir=in 时有效。
– 设置 authnoencap 后,security=authenticate 选项就变成可选参数。
示例:
为不具有封装的 messenger.exe 添加入站规则:
netsh advfirewall firewall add rule name="allow messenger"
dir=in program="c:\programfiles\messenger\msmsgs.exe"
security=authnoencap action=allow
为端口 80 添加出站规则:
netsh advfirewall firewall add rule name="allow80"
protocol=TCP dir=out localport=80 action=block
为 TCP 端口 80 通信添加需要安全和加密的入站规则:
netsh advfirewall firewall add rule
name="Require Encryption for Inbound TCP/80"
protocol=TCP dir=in localport=80 security=authdynenc
action=allow
为 messenger.exe 添加需要安全的入站规则:
netsh advfirewall firewall add rule name="allow messenger"
dir=in program="c:\program files\messenger\msmsgs.exe"
security=authenticate action=allow
为 SDDL 字符串标识的组 acmedomain\scanners 添加
经过身份验证的防火墙跳过规则:
netsh advfirewall firewall add rule name="allow scanners"
dir=in rmtcomputergrp=<SDDL string> action=bypass
security=authenticate
为 udp- 的本地端口 5000-5010 添加出站允许规则
Add rule name="Allow port range" dir=out protocol=udp localport=5000-5010 action=allow
netsh advfirewall firewall>
更多参考资料: http://technet.microsoft.com/zh-cn/library/cc776229%28WS.10%29.aspx