从前, 键盘工程师新创造了一个叫”Fn”的人造人, 想把它加入到键盘按键的队伍里. 工程师想, 它是一个革命性的产品, 因为, 它功能强大, 这从它的名字就能看出它的工程师老母对它的期望. 它可以帮忙打开键盘灯, 这样, 在黑暗中你也可以使用笔记本电脑. 它还可以帮忙调整屏幕亮度, 调整音量, 真是一个强大贴心的助手. 所以, 工程师决定把它放到了原来一个叫”CTRL”的人的位置, 把CTRL排挤到了一边. 那是键盘上最左下角的地方, 也是手指流量最密集的地方.
但是, Fn并不受欢迎, 因为没有人经常需要, 没有人天天不停地打开和关闭键盘灯, 即使好几年下来有一天遇到了, 先开灯或者在进入黑暗之前打开键盘灯也很正常.
相反, 人们怀念CTRL, 因为人们每天要把手指放在CTRL上面上千遍:
CTRL + C: 复制
CTRL + V: 粘贴
CTRL + S: 保存
CTRL + A: 全选
CTRL + X: 剪切
CTRL + W: 关闭窗口
CTRL + T: 打开浏览器标签
CTRL + 空格: 切换输入法
对比Fn, Fn用不了一两回. 因为那些自以为是很内裤的功能, 其实都是和硬件有关, 根本就不常用到. 比如谁会没事按Fn让自己的键盘灯一亮一灭的, 或者没完没了地调整屏幕亮度和音量, 他有病啊!
大部分的电脑厂商都明白了这个道理, 绝情地把Fn赶走了, 重新迎回CTRL. 但是, 有一个叫IBM的巨人和它的买主还是坚持迂腐, 感情上不愿意把CTRL接回来, 最终决定帮人在BIOS里偷偷给Fn和CTRL换了衣服.
Fn垂头丧气, 成了不受欢迎的失败产品. 现在, 它在寻找一个最不起眼的角落, 想静地躺在那里, 不要像以前那么招摇.
Written by ideawu
at 2011-08-05 22:55:50
常常有这样的功能需求: 每次从一批候选项中随机选取其中一项, 要求每一项的出现都有一定的概率. 比如说, 有如下候选项和对应的概率: A:10%, B:5%, C:25%, D:60%.
现在, 把每一项的概率用一个正整数(概率值)来表示, 不使用百分率, 整数的总和不一定等于100, 可以是任意大小,
实际概率 = 概率值/总和 * 100%
概率选取的算法如下:
- 依次(顺序可随机)将各项按概率值从原点开始放在一维坐标上首尾相连, 这样, 每一项对应一个取值区间
- 在总区间范围内随机选取一个点, 落在哪一项对应的区间就选中哪一项
用伪码表示:
total_p = sum(p1 + p2 + p3 + ...)
rand = random(1, total_p) // [1, total_p]
foreach(items as item){
rand -= item.p
if(rand <= 0){
// 选中了
}
}
Written by ideawu
at 2011-08-03 09:02:49
这是我给部门同事做的技术分享.
当今绝大部分的软件系统都用到了关系数据库, 所以, 作为软件开发工程师, 必须掌握关系数据库应用设计能力.
Written by ideawu
at 2011-06-24 18:02:57 | tags: MySQL

注: 只要你会做了这道题目, 你的能力已经可以进入百度了! 如果别的部门不要你, 请你给我发邮件, 我一定尽我所能强烈推荐你! 如果你不想加入百度, 而别的公司又不要你, 只能说明那家公司瞎眼了.
题目: 见图片, 该图是某网页的一个区域的截图, 用于显示商品或者其它信息的分类. 该分类的每一项可以折叠和收起(展开和收缩, 如果有子分类的话). 分类的级数不固定. 现有一个PHP变量:
$cats = array(
array(
'id' => 1,
'name' => '学术和教育',
'children' => array(
array(
'id' => 2,
'name' => '自然科学',
'children' => null,
),
// ...
),
),
// ...
);
请写一段PHP代码, 将该数组所包含的分类数据生成一段能实现如图片所示功能的HTML/JavaScript代码, 可不考虑CSS样式.
———-
注解: 这道题目考察的范围非常广, 包括PHP, HTML, JavaScript, CSS, 递归, 只有真正掌握了如上几种全部技能, 才能实现完整的功能, 否则必须依赖分工. 应聘者所能实现的程度越大, 得分就越高.
如果应聘者的应聘职位不包括HTML/JS/CSS, 那么题目可改为: 把上面的PHP数据用缩进换行文本的形式保存到文件, 并读取文件生成一个同样的PHP数组.(自定义格式的序列化和反序列化)
看到这篇日志的读者, 如果已经做了出来, 并且个人想加入百度, 请在评论中回复URL并说明你的意愿, 我会主动联系你. 或者你可以把程序打包发给我.
Continue reading »
Written by ideawu
at 2011-03-31 16:57:24 | tags: 程序员
来自: Wikipedia
Heapsort primarily competes with quicksort, another very efficient general purpose nearly-in-place comparison-based sort algorithm.
Quicksort is typically somewhat faster, due to better cache behavior and other factors, but the worst-case running time for quicksort is O(n2), which is unacceptable for large data sets and can be deliberately triggered given enough knowledge of the implementation, creating a security risk. See quicksort for a detailed discussion of this problem, and possible solutions.
Thus, because of the O(n log n) upper bound on heapsort’s running time and constant upper bound on its auxiliary storage, embedded systems with real-time constraints or systems concerned with security often use heapsort.
Heapsort also competes with merge sort, which has the same time bounds, but requires Ω(n) auxiliary space, whereas heapsort requires only a constant amount. Heapsort also typically runs more quickly in practice on machines with small or slow data caches. On the other hand, merge sort has several advantages over heapsort:
- Like quicksort, merge sort on arrays has considerably better data cache performance, often outperforming heapsort on a modern desktop PC, because it accesses the elements in order.
- Merge sort is a stable sort.
- Merge sort parallelizes better; the most trivial way of parallelizing merge sort achieves close to linear speedup, while there is no obvious way to parallelize heapsort at all.
- Merge sort can be easily adapted to operate on linked lists (with O(1) extra space[7]) and very large lists stored on slow-to-access media such as disk storage or network attached storage. Heapsort relies strongly on random access, and its poor locality of reference makes it very slow on media with long access times. (Note: Heapsort can also be applied to doubly linked lists with only O(1) extra space overhead)
Introsort is an interesting alternative to heapsort that combines quicksort and heapsort to retain advantages of both: worst case speed of heapsort and average speed of quicksort.
Written by ideawu
at 2011-02-17 16:57:21
以浏览器为核心的客户端软件具有开发快速, 并且能使用浏览器的各种特性(如js脚本, flash插件等), 所以越来越多的客户端软件开始应用浏览器作为软件的界面渲染引擎.
但是, 浏览器也是安全问题最多的软件之一. 因其应用广泛, 导致攻击方法层出不穷. 前段时间, QQ客户端的某个版本就遇到了这个问题. 这个版本的QQ使用IE作为聊天记录的界面引擎, 似乎由于疏忽的原因, 没有对聊天信息中的HTML标签进行过滤, 导致用户可以通过在聊天信息中包含JavaScript脚本, 从而在对方机器上执行.
例如:
<script type="text/javascript">alert('hahaha');</script>
用户打开聊天历史记录时, 便会弹出一个窗口, 显示”hahaha”. 还有嵌入iframe的:
<iframe src="http://some" width="100%" height="400"></iframe>
这样, 用户在打开聊天历史记录时, 却看到了一个网页, 而这个网页可能是挂马的.
所以, 使用浏览器为核心的客户端软件, 必须重视安全问题, 要对发给浏览器渲染的所有字符进行过滤. 最好的方法是使用一种模板语言, 简单的如ubb, 而不是直接使用HTML.
Written by ideawu
at 2010-09-22 11:19:39
|
|
Recent Comments