2007年五月月 发布的文章

汉密尔顿,首个分站赛冠军只是时间问题!

昨晚F1欧洲摩洛哥站上演,看过F1的车迷都知道,摩洛哥站之赛道是多么的曲折婉转,超车的可能性很小,这是因为这站赛道是基于城市公路的,除非通过进站来上演超车好戏,否则排位赛的位置就有可能是你的最终排名。

巴林站结束后,汉密尔顿就计划把自己的第一分站赛冠军锁定在摩洛哥站了,因为他对摩洛哥站的赛道太熟悉了,他在之前的多种级别比赛中经常在此赛道竞速。他也深知排位对比赛成绩的影响。就在排位赛最后一轮之前,他依旧手握杆位,但就在最后一轮中由于前面慢车的阻挡让汉密尔顿浪费近0.5秒,阿隆索因此超越夺取杆位。

有人说摩洛哥站是迈凯轮的内战,其实这主要取决于车队的战术,车队是否允许二位车手在取得很大优势之后自由竞争,赛后汉密尔顿对车队的战术提出了质疑,特别是进站的安排上。至于车队是否有偏瘫阿隆索的嫌疑只有他们自己知道。汉密尔顿应该说还是出色的完成了车队交给自己的任务,发车瞬间就拦住马萨的超车企图,之后就再也没给法拉利车队机会了。

汉密尔顿没有如愿拿到分站赛冠军,不过对于这个小将来说目前的成绩已经是让人们瞠目了,相信汉密尔顿的首个F1分站赛冠军只是时间问题了,除了耐心再就是戒骄戒躁,汉迷们会永远支持你的!

开发人员之维护他人项目有感

软件行业人员流动比较频繁,如果你是一个公司的老员工,你常常会有如此经历:一个同事即将离职,领导可能分配你去与之进行工作交接,有时他做过的项目很可能和你做过的有很大差距,没办法领导发话了,你还是要硬着头皮接下来,心中盘算着但愿这个项目的产品在现场运行不要出现什么问题或者用户最好一个新需求都不要提,这样就算是挂个名,也没什么大不了的。

可是事情往往是事与愿违,需求变化速度之快让你猝不及防,这时如果你接手的维护项目和你做的东西是一个套路的,那也许还并不是很头疼,顶多花上一段时间就可以搞定,但是如果你像我一样,接手了一个多年都不接触的,有复杂业务逻辑的项目维护,那简直就是一种折磨呀,如果还是在你自己手头上的活加班都做不完的情况下,则更是让你抓心挠肝了^_^。

这不五一前一个同事离职,按照领导的意志,其项目维护暂由我来接替。恰逢最近忙于系统的结构设计,进度吃紧之关头,这个维护的项目要进行现场软件升级,由于以前版本控制不是很好,导致居然找不到对应的Release版本,无奈之下只能基于其中一个版本修改,采用比较不精密的方式:文件比对,花了若干时间,才勉强拿出一个版本交给现场的实施人员进行升级。运行一段时间过后,现场维护发现出了问题,并反馈回来。无奈之下,开始博览成千上万行的代码,无果。打电话问离职人员,几番交流之后,发现原来改动时基于的版本不对,原因是他在修改一个版本后忘记做记录了,唉,还好,这个版本代码还在,文件比对后,发现改动的地方就两行代码。之前看了若干小时的代码的我本来也想这么改的,呵呵。

我一直在Unix下开发,而这个维护项目是Windows上的使用Visual C++开发的,昨天无奈下装上Visual C++。

把新的Release版本发给远方的维护后,我心里在想:在这种情况下一定要端正态度啊,无论如何这都是你的活,摆正心态解决问题才是正道,否则抱怨只能延缓你解决问题的时间。当然了,谁接到这样的活心里不是别别扭扭的,刚开始都不例外。

数的圆整算式

一般在考虑到内存对齐的程序里面势必要使用数的圆整算式,一般来说在计算机程序里一般都是圆整到2的次幂上,而很多书上也有很多基于'移位'操作的圆整到2的次幂上的算法公式,形式都是很简单的,很实用。

这里要说的是一个圆整到任意正整数(n > 1,圆整到1没有必要^_^)的算式,突然觉得如果说算法有些大了。我们来推导一下,也不是严密推导。就是怎么想的怎么说。

如果有两个正整数a、b,其中a >= 1, b > 1,求a圆整于b后的结果?

这里不妨考虑三种情况:
(1) a = b
毫无疑问结果应该就是b;

(2) a > b
a > b > 1 => a/b >= 1(计算机语言中的a/b) => 圆整结果为(a/b + 1) * b;—(1)

(3) a < b
1 =< a a/b = 0 (计算机语言中的a/b) => 圆整结果为b (0 + 1) * b => (a/b + 1) * b。—(2)

从上面式子可以看出当a b时可以统一成(a/b + 1) * b,但是a = b时 (a/b + 1) *b = 2b显然和正确结果b不符。这时如何统一算式呢?我们从条件考虑:
假设我们现在有一个x = a – 1 > b > 1,从x > b我们可以通过代入上面的公式(1)得出圆整结果:(x/b + 1) * b,这里a有了更严格的限制 a > 2;同样有一个 1 =< x = a – 1 = 2了。

由上面两个结果,可以推出另一个形式的圆整算式: ((a – 1)/b + 1) * b,它对于(a >=2,b > 1成立)
那么当1 =

这样((a – 1)/b + 1) * b对于a >=1,b >1就都成立了,这个算式形式就统一了^_^。

#define ROUNDTO(a, boundary) ((((a) – 1)/(boundary) + 1) * (boundary))

//测试一下
std::cout << ROUNDTO(1, 2) 输出结果:
2
3
21
7




这里是Tony Bai的个人Blog,欢迎访问、订阅和留言!订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:


以太币:


如果您喜欢通过微信App浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:



本站Powered by Digital Ocean VPS。

选择Digital Ocean VPS主机,即可获得10美元现金充值,可免费使用两个月哟!

著名主机提供商Linode 10$优惠码:linode10,在这里注册即可免费获得。

阿里云推荐码:1WFZ0V立享9折!

View Tony Bai's profile on LinkedIn


文章

评论

  • 正在加载...

分类

标签

归档











更多