【经典问题】现代操作系统经典问题回顾(哲学家就餐问题C#实现)

 在1971年,著名的计算机科学家艾兹格·迪科斯彻提出了一个同步问题,即假设有五台计算机都试图访问五份共享的磁带驱动器。稍后,这个问题被托尼·霍尔重新表述为哲学家就餐问题。这个问题可以用来解释死锁和资源耗尽。

哲学家就餐问题描述:五个哲学家围坐在一张圆桌周围,每个哲学家面前都有一盘通心粉。由于通心粉很光滑,所以需要两把叉子才能夹住,相邻两个盘子之间放有一把叉子。哲学家的生活中有两种交替活动时段:即吃饭和思考(一种抽象而已)。当一个哲学家觉得饿了时,他就试图分两次去取其左边和右边的叉子,每次拿到一把,但不分次序。如果成功地得到了两把叉子,就开始吃饭,吃完后放下叉子继续思考。问题是为哲学家写一段描述其行为的程序,且决不会死锁。

源码:

哲学家就餐问题
// ************************************************************
// 在1971年,著名的计算机科学家艾兹格·迪科斯彻提出了一个同步问题,
// 即假设有五台计算机都试图访问五份共享的磁带驱动器。稍后,这个问
// 题被托尼·霍尔重新表述为哲学家就餐问题。这个问题可以用来解释死
// 锁和资源耗尽。
// 
// 哲学家就餐问题描述:五个哲学家围坐在一张圆桌周围,每个哲学家面
// 前都有一盘通心粉。由于通心粉很光滑,所以需要两把叉子才能夹住,
// 相邻两个盘子之间放有一把叉子。哲学家的生活中有两种交替活动时段:
// 即吃饭和思考(一种抽象而已)。当一个哲学家觉得饿了时,他就试图
// 分两次去取其左边和右边的叉子,每次拿到一把,但不分次序。如果成功
// 地得到了两把叉子,就开始吃饭,吃完后放下叉子继续思考。问题是为
// 哲学家写一段描述其行为的程序,且决不会死锁。
// 
// ************************************************************

using System;
using System.Collections.Generic;
using
更多...

10个既绚又实用的jQuery特效教程

导读:作者Aamir Baigdesignersdare.com分享了一篇文章《10 Must See jQuery Latest Tutorials-Beginners and Advance Level》,文中对初学者和资深学者分别提供了不同级别的教程,使用JQuery做出的既炫丽又实用的效果,现将本文摘译,以下是文章内容:

此篇文章是JQuery高级教程,但对初学者学习JQuery也有一定的帮助。

首先让我们先对初学者谈谈如何开始学习JQuery。对于初学者学习JQuery来说是一个很不错的简短教程。

初学者教程:

让我们开始为初学者讲解JQuery的初步知识。在本教程中,您将学到如何下载JQuery库、添加项目、开发简单的程序、加载页面警告消息弹出窗口。

第一步:下载JQuery库

首先点击链接http://code.jquery.com/jquery-1.4.2.min.js下载JQuery库,保存在本地文件中。

第二步:在网页中添加JQuery库

在页面中添加Query库代码,代码如下:

  1. 		<script type=”text/javascript” src=”jquery-1.4.2.min.js”></script>
更多...

jQuery移动版Beta 1发布:更快 更兼容 可扩展

在2010年10月21日,CSDN发文《jQuery移动版发布:支持iOS,黑莓和Android平台》,对jQuery移动版有比较全面的介绍。时隔近12周,jQuery移动移动版Beta 1终于在2011年6月20日发布了!Beta 1比原始版本更快,更强的可扩展性能更好的支持动态JS驱动的网站,兼容性更好,增加更广泛的设备支持(例如智能手机、平板电脑等)。

jQuery 用户界面兼jQuery移动版用户界面总设计师Todd Parker称,jQuery 移动版的Beta 2版本差不多在下个月发布。

要注意的一点就是jQuery Mobile 1.0要求装备jQuery core 1.6,未来将会支持两个最新版本的core。

原文链接:http://jquerymobile.com/blog/2011/06/20/jquery-mobile-beta-1-released/更多...

10款jQuery幻灯插件推荐

今天分享的是10款简单易用,十分顺手的10款jquery 幻灯插件,其中大部分都有教程和演示。

具体列表如下:

Creating Your Own Slider Plugin

View Demo

Easy Slider

jquery slide show plugin

View Demo

Slick Accessible Slideshow

slick accessible slidshow plugin

View Demo

Sliding Boxes and Captions with jQuery Tutorial

View Demo

Horinaja Slide Show Plugin For jQuery

View Demo

Supersized

View Demo

Blog 更多...

WEB UI篇——以结构化的方式写CSS

我的职业是码农,以前有人称这职业叫程序员或软件工程师,不过这些不重要,重要的是我这次写的东西和码农几乎不相干,我接触CSS的时间不长,2年多一点,并且只有在极端的情况下我才会自己动手写CSS,例如:需要挣些钱来养活自己,或者需要将外包出去的难看的前台重写。下面我将要向大家描述如何以层次-结构化的方式来写CSS。


众所周知,一个好的WEB UI工程师注重结构化的HTML+CSS代码,而不仅仅是还原之前的图片设计,这其中区别很大,前者能为代码美观及维护带来非常大的帮助,而后者,除了完成“任务”,几乎就是一团糟。
html代码经常以嵌套的方式出现,例如<body>中可能嵌套了<div>,<div>中又嵌套了<ul>,之后又嵌套了<li>,而li中可能再嵌套label,em,p,i,input,dl,dt,dd,….等等.总之我们将尽可能的组合这些html元素,以便思维更加清晰地展现页面各部分。

假设我们要设计一个注册用户的表单,效果如下:

我可能会有如下的HTML(HTML5):
第一种方式:

<div id=”reg”>
    <div class=”line”>
        <label class=”lbl”>用户名:</label>
        <input class=”txt” id=”tbxUserName” />
        <em 
更多...

分享12款优秀的在线文件格式转换工具

在线的文件转换工具有很多,但是要找到一款好用的却不容易,所以今天这篇文章收集了12款优秀的在线文件格式转换工具,看看有没有适合您的需要的工具。

iWebPrint

打印网页为PDF文件,可以定制打印尺寸、方向和模式,可作为Chrome和Firefox插件使用。

i2OCR

从图片((TIF, JPEG, PNG, BMP, GIF, PBM, PGM, PPM))中提取文本,支持中文等33种语言。

PDF to Flash Page Flip

这款在线工具可以帮助你把PDF转换成类似电子杂志的Flash文件,读起来更加互动和有趣。

FontConverter

使用这款在线字体格式转换工具,你可以转换各种常用的字体文件。

Free Online OCR

这款免费工具可以帮助你轻松的把传真、截图和照片中的文字准换成可编辑和可检索的文本。

Free online file converter

这款免费的在线转换工具可以让你把音频、视频、图片等多媒体文件从一种格式轻松的转换成另一种格式。

Picasion

Picasion 是一款在线生成GIF动画图片的工具,可以从本地上传图片,也可以填写网址。

Brickify

Brickify 是一款很好的工具,可以帮你把图片转换成特别的砖砌模式。

RoboVoice

RoboVoice 是一个文本阅读服务,帮助你听网页,竟然支持中文,太不可以思议了。

CMYK Converter

CMYK … 更多...

创业公司如何招聘优秀工程师

创业公司面对的现实问题是难以招到优秀的工程师。和大公司相比,创业公司的待遇低、压力大、稳定性差,而且既符合职位条件又有创业意愿的人很难寻觅,还需要时机合适,我就遇见过几次候选人因为家事而放弃机会的情况。

现在我每天花1/3的时间在开发工作,1/3的时间在团队事务和沟通,1/3的时间在招揽各种优秀的人才上。

如何找到优质的候选人

在自己的同事和朋友中找。我们团队一位工程师曾经获得招聘达人称号,他本人分享的获胜秘诀是:每天温习通讯录,给新朋旧友推荐机会,平均每天电话量达300个。他号称是专职的猎头、兼职的工程师!

利用在业界的影响力。如果你在业界有一定的影响力和号召力,要好好利用。专业的权威性是最为牢固的领导力。或者试着做一款优秀的应用,进入开发者圈子,你会在里面找到很多合适的候选人。

多认识业界的朋友,让他们帮忙推荐。利用聚会或者人脉认识业界的朋友,让他们帮忙推荐合适的人选。并且经常向他们询问朋友里是否有合适的人选,遇到好的人选是需要时机的,如果你不主动询问他们,重要的信息就可能会错过。参加一些技术沙龙也是很好的选择,多和周围的人交流,他们可能就是你的潜在候选者。

利用新型互联网应用。考虑微博、类似LinkedIn的商务社交网络、类似Quora的SNS问答社区等应用。它们都具有媒体或者社交网络属性,能达到精准和自传播的效果。

如何说服候选人

作为创业团队的领导者,说服力非常重要,这是需要时间和经历来磨炼的。创业能为创业者提供锻炼的机会,能提供大公司所不具备的独特经历,能更大地实现自身价值,能提供更积极向上的工作环境。如果再加上成型的产品、稳定的核心团队、靠谱的商业模式以及对人才的重视态度,是很有可能成功说服对方的。

在说服候选人的过程中,可能会遇到的主要困难包括以下几个方面。

薪酬待遇低。为优秀人才提供适当股权激励是比较合适的手段,另外可以让他们负责重要的产品或业务,许多人很重视这样独当一面的机会。

创业决心不坚决。很多时候候选人的创业决心可能并不坚决。因为我在创业公司和大公司都有过工作经历,所以对各自的优劣和环境都有了解,面对不同的候选人,我可以根据实际情况有针对性地来说服他们。

周围环境影响。候选人可能会遇到一些周围环境的阻力。我在招聘一个优秀工程师加入团队时,正巧遇上他的妻子怀孕,他需要每天早点回家照顾。我立即提出他可以每天提早回家,照顾好妻子后在家工作。

机会众多。优秀的候选人可能同时面临很多机会,所以一定要快速跟进。我曾经在了解一位候选人的背景后,立即联系见面,沟通了解,达成共识,直到最后敲定,所用时间没有超过12小时。

如何留住优秀人才

团队气氛。创业团队的工作很辛苦,要保持快乐的工作状态,团队气氛就一定要积极、平等、开放、向上,不能很压抑。

感情维系。大公司靠文化、中型公司靠制度、小公司靠感情。创业团队必须要靠感情来维系,所以我们经常组织团队活动和拓展来加强成员之间的沟通和了解。

持续激励。一定要给予团队里重要的和做出贡献的人以激励,股权也需要按照多劳多得的原则来进行分配。

统一的理想。我们现在有来自腾讯、微软、百度等大公司的优秀人才,团队非常稳定。因为我们有成熟的产品、众多用户的肯定以及统一的理想,所以大家都愿意齐心协力,一起将共同的事业进行下去。

甄别和吸引优秀人才的加入,这是每个创业团队的领导者永远需要关注的重点话题。

(本文选自《程序员》杂志11年06期,更多精彩内容敬请关注06期杂志)更多...

URL的设计

导读:URL的设计是一个很复杂的问题,不能说有什么“正确”的解决方案——其挺类似于其他方面的设计的,有好的URL设计,有糟糕的URL设计,在这两者之间的情况也不同——它是主观的。不过这并不意味着不存在用于创建出非常好的URL的最佳做法。原文作者kneath总结了这些年来学到的一些URL设计的最佳做法,希望能够给你留下深刻的印象。

以下是文章内容:

你应该花一些时间来设计一下你的URL地址结构。在读完本文之后,如果有一件事情是我希望你记住的话,那就是花一些时间来设计你的URL地址的结构。不要把它留给你的框架来决定,不要听天由命,依赖运气。要仔细地考虑,认真摸索出一种经验。

URL的设计是一个很复杂的问题,我不能说有什么“正确”的解决方案——其挺类似于其他方面的设计的,有好的URL设计,有糟糕的URL设计,在这两者之间的情况也个个不同——它是主观的。

不过这并不意味着不存在用于创建出非常好的URL的最佳做法。我希望我这些年来学到的一些URL设计的最佳做法能够给你留下深刻的印象,并且我会解释为什么我认为使用新的HTML5 javascript的history API来工作是一件很令人兴奋的事情。

为什么需要对你的URL进行一番设计

URL栏已经成为了现代浏览器的一个主要吸引人的地方了,且它再也不仅是一个URL栏那么简单——你可以输入部分的URL,然后浏览器就像是会使用黑魔法似的召唤出了你正要查找的确切的完整地址。当我在我的URL栏中输入了resque issues时,得到的第一个结果是https://github.com/defunkt/resque/issues。

URL是全球统一的,它们可用在Chrome、Safari、Internet Explorer、cURL、wget、你的iPhone、Android上,甚至会被写在便签上。它们就是web网络的一种全球通用的语法。但是不要把这看成是理所当然的。

任何一个定期访问你的网站的半技术化的用户都应该能够基于内存中的URL结构来浏览你的应用的90%部分。为了能够实现这一点,你的URL必需是要注重实用性的,就几乎仿佛它们就是数学方程式一样——许多简单的规则组合成一种策略性的方式,以此来获得他们想要的页面。

顶层的部分是最为重要的

URL最有价值的方面在于其顶层的部分。在我看来,在想法形成了之后,这就是接下来的任何启动都应该最先要讨论的事情,要远在任何的技术讨论之前,要远在任何的代码编写之前。这一顶层部分将会改变形成你的网站功能的基础。

我是不是有些夸张了?看起来可能会是这样——但是以后会有1,000,000 个用户,想想它会带来多大的影响。想一下Facebook推出用户名是多么重大的一件事。可用的URL就像是不动产,而顶层的部分就是体现在外面的最好的资产。

另一个快速提示——每当你构建一个新的站点时,考虑一下这一组不实用的URL的黑名单列表(或许可从Quora的URL中了解到一点糟糕的URL设计)

命名空间是一种很棒的扩展URL的工具

命名空间可以作为一种很棒的建立实用的URL结构的方式,这种结构在后续的使用中很容易被记住。我在这里说的命名空间指的是什么?我的意思是,URL中指明了不同内容的那部分。一个例子:

https://github.com/defunkt/resque/issues

在上面的URL中,defunkt/resque 就是命名空间。为什么这会有用?这是因为在这一个URL之后的任何部分都突然变成了一个新的顶层部分,因此你可以去到任何的一个《user》/《repo》 , 然后加上/issues或者可能是/wiki,取得相同的页面,但是是在不同的命名空间下。

保持命名空间的清晰,不要一开始就把一些内容放在/feature/《user》/《repo》下,一些放在/《user》/《repo》/feature下。对于命名空间来说,要发挥效用就必须是统一的。

查询串是很棒的过滤和排序的手段

关于查询串web有着一个混乱的过去,我见过各式各样的事情,从每个网页都使用同一个URL加上不同的查询参数的网站,到一个查询串参数都不用的网站,各种情况都有。

我喜欢把查询串想象成URL的旋钮——其调整你的当前视图,把它按照你的喜好来进行微调,这就是为什么它们用在排序和过滤这些行为上会如此之棒。坚持一种统一的模式(比如说sort=alpha&dir=desc ),你就会把通过URL栏进行的排序和过滤变得简单易记。

关于查询串还有最后一件事情:在没有附加查询串的情况下,页面应该是有效的,其可能给出的是一个不同的页面,但没有查询串的URL应该是要呈现出页面的。

英文网站的非ASCII 更多...

为你的网站介绍10个非常有用的jQuery插件

本文介绍的插件涉及图像、paypal支付、分页、导航等方面的内容。

1.AJAX-ZOOM

图像缩放 & Pan Gallery, 360° 对象旋转 (Spin), 全屏视图. 在线演示 here.

2.(mb) verticalSlider

显示长列表的绝佳方式,在线演示 here.

3.More plugin

该插件主要用于评论,当然也可以用于其他,在线演示 here.

4.HTML5 drag & drop image file uploader

实现图像的拖拽上传,在线演示:here.

5.jpaging

jQuery … 更多...

在Web上运行Linux

一个叫Fabrice Bellard的程序员写了一段Javascript在Web浏览器中启动Linux(原网页,我把这个网页iframe在了下面),目前,你只能使用Firefox 4和Chrome 11运行这个Linux。这不是什么假的模仿Linux的东西,这是实实在在的运行一个Linux。这一举动还引起了很多很牛人的关注,包括Javascript的创建者Brendan Eich

 

 

随后,Fabrice Bellard发布了相关的技术说明:http://bellard.org/jslinux/tech.html,从这份文档中我们可以看到:

  • 这个模似器完全由Javascript写成
  • CPU仿真器使用的是QEMU(接近于原古的486),为了装上Linux,其做了一些改动。
  • Javascript的终端本来可以使用termlib,但他还是自己写了一个,因为OS的按键和Web浏览器不一样(here
  • Linux  使用了2.6.20内核,编译配置在这里,并做了一些小改动
  • 磁盘用的是Ram Disk,在启动的时候装载。其文件系统由Buildroot 和BusyBox产生。
  • 在Home目录下有一个hello.c的程序,你可以使用TinyCC编译(tcc,参看酷壳的这篇文章
更多...