|
我们学校暑假的小学期哦
Lv 一个学期的老师做得还过瘾阿?
http://202.119.32.102/vd387882/b ... amp;file=1122292142
作 者: Lv
标 题: Linux考试试卷评讲
时 间: Mon Jul 25 19:49:02 2005
点 击: 55
考试终于批完了,其中发现很多上课中没有讲过的问题,这里把题目评讲一下:
==========
选择题部分
==========
1.下面十个格子表示本次小学期的十节课,请你在听过课的格子上打上勾。
评讲:本题没什么特别的,因为没有点名,所以如果想知道每个人上课的情况,
就只能通过这个办法了。
2.在课程以外,你至今在Linux下总共花了多少时间?
评讲:目的与上面的题目类似,为了了解各位同学在课外花的时间。
3.你认为本次测验你能拿多少分?
评讲:本题也没什么特别的,让各位自己评价自己的得分,这样偶给分就可以少动点脑筋
了。
前3题是基于信任的基础上的。大家可以看到如果沟通的双方能够互信的话,
事情会变得多么的简单。遗憾的是,现实和理想总是有差距的。下面剩下的所有题目
的目的,都是为了检测前3题的可信度。
4.以下你最欣赏的人是:
A.Richard Stallman B.Linus Tovalds C.Eric S. Raymond D.Bill Gates
评讲:本题用于测试大家是否做了第一课的作业。基本上所有选D的学生都属于那种
没有上第一节课,并且又没有做第一节课作业的人。
5.你认为以下哪些是对Hacker的描述:(多选)
A.入侵系统 B.自由万岁 C.一个问题不应该被问两次 D.世界充满了问题 E.无聊的工
作是罪恶
评讲:本题还是用于测试大家是否做了第一课的作业。这个问题的答案是BCDE,就在《Ho
w To Be A Hacker》文章中。
所有在看过这篇文章后还选A的同学,偶认为以后不适合学Linux。
6.你用过以下哪些发行版:(多选)
A.Redhat/FedoraCore B.Debian C.Gentoo D.SuSE E.Mandrake F.Slackware G.其
他:_________(请填写)
评讲:本题主要做个调查,以从另一个侧面了解大家在课后使用Linux的情况。遗憾的是,
基本上大家都是用的机房已经装好的系统。
7.下面哪些事是emacs能做的?(多选)
A.编辑文件 B.收发email C.浏览网页 D.MSN聊天 E.调试程序
评讲:本题还是调查大家有没有做课后作业。所有看过我推荐的王垠的网页的人,都应该
能够很容易选出答案。本题的答案是ABCDE。
8.下面那个组合键是退出emacs?
A.Ctrl+c Ctrl+f B.Ctrl+x Ctrl+c C.Ctrl+c Ctrl+x D.Ctrl+x Ctrl+q
评讲:本题还是调查大家使用Linux的情况。有的同学在问答题里说他用过了emacs,结果
这题却错掉了。连如何退出都不知道,如何证明曾经用过emacs呢。本题的答案是B。
9.KISS原则中,最后一个S代表什么?
A.Star B.Stop C.Start D.Stupid
评讲:"Keep It Simple, Stupid"几乎是hacker们设计系统的核心原则。想理解Linux世界
各种奇怪的设计,首先就得理解这句话。而且这句话本身也很有hacker的风格。本题的答
案是D。选错的人,肯定是没上第一和最后一节课了。
10.下面哪条指令可以用于命令行下拷贝文件?
A.mv B.ln C.dd D.du
评讲:本题的目的是调查Class.4的作业情况。Class.4的作业是10个一句话问题,其中大
都可以用dd搞定。因此本题做错的同学,基本上可以认为是没来上那一节课,或者没有做
那节课的作业。本题的答案是C。
11.下面那个IP地址属于C类?
A.169.143.195.13 B.225.41.1.1 C.61.127.19.3 D.196.12.3.4
评讲:本题和Linux主题无关,但是在讲iptables的那节课上偶把TCP/IP大概的介绍了一下
,因此这里就出了一个最最简单的题目。本题答案是D。很多同学都错误的选择了B,这里
再说一下B是属于D类网络,用于组播。
12.echo 1 > /proc/sys/net/ipv4/ip_forward表示什么意思?
A.创建一个ip\_forward文件,内容是1 B.查看ip\_forward文件值是否等于1
C.开启ip forward功能\qquad D.关闭ip forward功能
评讲:本题主要调查大家Class.5的作业情况。Class.5要求大家用iptables实现透明代理
。其中我漏讲了这个打开ip转发的过程,并在第8课的时候重新讲了一次。因此做过这个作
业的,或者注意听课的同学应该都能做对。本题的答案是C。
13.CVS是用来做什么的?
A.版本控制系统 B.Bug管理系统 C.进度管理系统 D.内容管理系统
评讲:本题基本上是灌水题,CVS偶费心费力也讲了半个小时以上,如果连CVS是做什么的
都不知道,那只能猜测是没来上课的了。本题答案是A。
14.用哪个参数可以让make并发编译?
A.-k B.-j C.-p D.-P
评讲:本题考的是一个参数。实际上这个参数是可以很容易的查到的。因此本题违背了我
出题的原则。其实我的主要目的是看看大家上我的课是不是喜欢睡觉。因为这个参数我在
几节课上都有专门提到过,只要是听课的同学不可能不留下映像。遗憾的是,似乎大家都
睡的挺死的。本题答案是B。
15.一个进程调用fork系统调用后,会有什么结果?
A.生成一个进程,从main()处开始执行。 B.生成一个线程,从main()开始执行
C.生成一个进程,从fork之后开始执行。 D.生成一个线程,从fork之后开始执行。
评讲:本题用来测试提交Class.7.5课后作业的真实性。所有稍稍做过这个作业的人,哪怕
根本没做对,也应该对fork函数的使用留有印象。本题的答案是C。
16.如果你找到了TeX的第9个Bug, 你会收到多少奖励?
A.\$99.9 B.\$5.12 C.\$5000 D.\$1
评讲:本题主要测试大家对LaTeX的印象。所有来听Class.8的人应该都能做的出来。本题
答案是B。
17.如果你想查询某个信息X,你首先该怎么处理?
A.whatis X B.man X C.在HOW-TO中搜X D.在Google中搜X
评讲:本题是灌水题,四个选项都正确。主要是看看大家遇到问题之后的习惯。
18.你认为/proc目录有什么用处?
A.一个普通的目录 B.一个空的目录
C.一个获取系统信息的地方 D.一个存放临时文件的地方
评讲:proc文件系统偶在第一、第四、第五和最后一节课上提过。而且作为“一切皆文件
”思想的一部分,proc文件系统也是很重要的。本题的答案是C。但是理论上讲,其他选项
也没什么错的。因此选了其他选项的人,要么是高手中的高手,要么就是没听课的。
19.如果你想访问Windows的网上邻居,你应该怎么办?
A.用smbmount B.用smbclient C.用smb4k D.用LinNeighborhood
E.用mount F.以上都可以
评讲:本题作为一个很常见的应用提出,主要目的不是考核,而是让大家记住以上所有选
项都是访问网上邻居的方法。因此答案是F。
20.你觉得本考卷像是用哪个软件排的?
A.LaTeX B.OpenOffice C.Word D.WordPerfect E.abiword F.Emacs
评讲:本题出的不够严密,主要是不应该把Emacs放进去。虽然Emacs是编辑软件,不是排
版软件,但是我的确是用Emacs编辑的。也有人报怨说看不出来,其实看看16题中TeX三个
字,就应该知道这显然是用LaTeX排的。哪怕实在看不出来,凡是上过课的人都应该会毫不
犹豫的选LaTeX。本题答案A。
==========
问答题部分
==========
1.简单的谈谈选择题4中为什么你欣赏这个人。
评讲:本题主要目的是逼迫没上课的人谈Bill Gates了。呵呵。上过课,看过电影的人,
应该会有很多话要说的。
顺便提一下,看样子崇拜Bill的人还是非常的多的,看来大家的思想都很容易被媒体
左右啊,呵呵。崇拜的理由很多,比如他写了DOS啊,他有眼光、有魄力啊,开创了一个新
的时代啊,是个很优秀的程序员啊等等。这里偶还是忍不住要说几句:要佩服一个人,至
少得首先了解他的过人之处吧?偶所知道的Bill唯一写过得有一点点份量的东西,就是在
8周内和他的伙伴(好像叫Alan什么的)一起写了个跑在4K内存下的,支持17条指令的Basic
解释器。这并没什么困难的,偶认识的很多人,包括偶在内都能在2-3周内独立搞定这个东
西。至于DOS,那也不是他写的,而是买来的,而且这个东西充其量也就相当于一个大作业
的量。Windows么也是仿Mac的,Office系列么其前身都是屡屡惨败于Lotus之下的,VC么在
和Borland竞争之中也是一直被压着,直到MS把Borland的60%人挖到手之后才打了翻身仗.
.. ...
而且Bill的眼光也不怎么样,“用户只需要640K内存就够了”就是他说的;他也没有
看到Internet的迅猛发展,让Netscape抢了头筹;也因为他没有看到Java的未来,以至于
现在.net还在和J2EE火拼。说他是好的程序员就更好笑了,现在地球人都知道Bill不懂技
术...至于开创新的时代,这个帽子应该给IBM和Apple。前者开启了PC时代,后者开启了G
UI(通俗的说,就是Windows)时代。所以,Bill的成功,前期基本上靠运气,后期基本上靠
Money。其经历差不多等于一个人买彩票中了头彩,然后把彩票的钱拿去投资房地产赚大了
。总不能因此就说他有眼光,有勇气,有魄力吧?辍学开公司的人年年有,总不能因为他
成功了就说他有勇气,而无视垫在他身后无数的失败者吧。
2.你觉得Linux和Windows相比,是易用还是难用?请说明理由。
评讲:本题主要目的还是给大家灌灌水,免得交白卷,呵呵。结果是基本上99.9999%的人
都认为是Windows易用,Linux难用。
这个问题其实是很有深度的,从大家的回答可以一眼看出大家学习Linux学到什么程度了。
这里再次说明一下,Linux是易用的,但是这个易用的层次是建立在比较高的门槛上的。没
有哪个Hacker大脑有问题,吃饱没事撑的故意整个不让人用的东西出来逗你玩。相反Hack
er们都很珍惜时间,他们相信“轮子不应该被发明两次”,因此他们做的东西都是希望别
人能够舒舒服服的使用的。但是,问题在于Hacker们的层次和普通人差的实在是太远了。
以至于99.9999%的人缺乏足够的知识和智慧去使用这些东西,基本上就好比地球人跑到外
星人的飞碟里面,根本就不知道如何操纵一样。当然这种现象在渐渐改观,但是不要指望
能和Windows做的一样。因为1.Hacker们不削做这种没有挑战性的事情;2.本着“轮子不应
该被发明两次”观点,既然Windows已经做到了让普通人都能用了,为什么Linux还要再做
一次呢?
不过有些同学的回答也过于夸张了,比如说“什么都要通过命令行来实现”,偶上课喜欢
把本质的东西讲给大家,因此讲得都是通过命令行实现的东西。但这并不意味着没有GUI来
实现,总不能让这门课变成Step by Step Linux培训班吧,呵呵。
3.请简单描述一下X的工作机制。
评讲:这个问题在第一课讲Architecture的时候说过,不过可能没说清楚,因此在倒数第
二节课上又讲了一次,结果似乎是大部分的人还是不怎么懂,这里就不再多说了,直接看
这个吧:http://www.cnfreeos.org/Document ... 001315450/x.html。
4.现在告诉你sed s/abc/def/可以把标准输入中``abc''替换成``def''并输出到标准输出
,find . -name "*" -exec cat "{}" \;,会显示当前目录及子目录下所有文件内容。
请写一个脚本,把当前目录及子目录下*.txt的文件中的abc替换成def。(提示,cat a.tx
t | sed s/abc/def/ >a.txt并不会如你预期的起作用。因为在读取a.txt文件之前,a.tx
t的内容已经被清空了)
评讲:Unix/Linux体系下非常强调各个工具的配合,本题就是考察大家打组合拳的能力,
遗憾的是只有2个人做对,而且用的还不是我期望的方法,看样子大家离领悟Linux思想的
精髓还差的很远很远。
find . -name "*" -exec cat "{}" \;
这句话非常的简单,就是从当前路径(.)寻找(find)所有文件(-name "*"),并在每个文件
上执行(-exec)cat操作(cat "{}"\;)。
而题目的要求是寻找当前路径下所有文件,把每个文件的内容进行关键字替换。因此,首
先写一个脚本来完成这个关键字替换的任务:
replace.sh:
cat $1 | sed s/abc/def/ > $1.tmp
mv -f $1.tmp $1
replace.sh这个脚本接收一个参数,并把他用sed替换后写成另一个文件,然后把它覆盖回
原来的文件名。
接下来就是find . -name "*" -exec ./replace.sh "{}" \;。
5.请你谈一下什么是make,它是如何工作的。
评讲:很多同学都说make使用来编译程序的,这就没说到点子上。make用于处理具有树型
依赖特征的任何事情,编译项目程序仅仅是具备这个特征的应用之一。例如有人就用make
加速Linux的启动速度,因为Linux启动需要运行一大堆的配置脚本,而这些脚本之间都有
相互依赖的关系。
6.请谈一下你所了解的开源项目中常用的License。
评讲:License的问题也许在学校并不突出,但是一旦进入公司工作,尤其是在外企,就必
须小心了。这方面在第九课我做了简单的介绍,主要是GPL,LGPL,BSD License,Public
Domain等License的区别与共同点,此外还有当几个License出现冲突是会怎么样等等。
7.你认为这堂课对你有何帮助?
评讲:本题还是灌水题,并且我也很想了解大家对本课的认识情况,并从大家的评价中了
解学习的程度。大部分人的评价都是没有学到具体的东西。我在第一节课一开始就说过,
大学的任务是让你认识到世界之大,而不是像中学那样按照书本一点点的学知识点,而且
10天的时间也不允许我讲具体的东西。因此本课主要目的是,给不想学Linux的人送学分,
让不了解Linux的人引发学习的兴趣,让想学习Linux的人树立正确的哲学观,对有一定基
础的人树立整体框架结构,而对真正想在某个方面深入的人提供课后与我交流的途径。
==========
附加题部分
==========
1.请用lambda函数给出car, cdr, cons的定义。(本题100分)
评讲:本题对于大二大三的同学来说颇有深度,本题的主要目的是考察是否有理论方面的
高手出现。结果还算不错,大部分人给出的都是我复习课上讲得例子,而不是定义。极少
数人给出了基于Lambda的定义,虽然那也是从讲义上抄来的,只能够说准备的很充分而已
,但也相当不容易了。不过最让我惊讶的是有人用python的lambda函数给出了定义。虽然
实际上这样做更为简单一点,不过考虑到我根本就没讲python的lambda函数,而且对pyth
on也不做要求,在这种情况下能够给出这个结果,可见这位同学具有相当强的独立学习能
力。本题答案:
(define car
(lambda (x)
(x (lambda (x y) x))))
(define cdr
(lambda (x)
(x (lambda (x y) y))))
(define cons
(lambda (x y)
(lambda (t)
(t x y))))
2.请解释著名的阴阳迷题:(本题100分)
(let* ((yin ((lambda (foo) (newline) foo)
(call/cc (lambda (bar) bar))))
(yang ((lambda (foo) (write-char #\*) foo)
(call/cc (lambda (bar) bar)))))
(yin yang))
评讲:有同学很气愤的说“这个老师自己都不懂,还来考我们”,呵呵。本题的主要目的
还是考察是否有理论方面的高手出现,因此不会做的同学就当作我没出这题好了。想了解
为什么的同学请看http://www.2umm.com/xxlr1.asp?ID=19581。
3.请给出把Linux安装在USB硬盘上,使之能从USB硬盘启动的简要步骤。(本题60分)
评讲:本题已经是老生常谈啦,我也不想在这里再说n+1遍了。本题的意义在于,如果弄懂
了这个过程,也就基本上了解了Linux系统的结构。
4.请编写程序,产生100个进程,构成如下的星形结构。让它们模拟基于星形结构工作的以
太网通讯方式。即:位于中心的进程1模拟HUB的功能,它会把任何一端发送的数据转发给
其他所有进程。这样,进程2-100这99个进程任何一个进程发送的数据,其他进程都能接收
到。在此基础上,实现1+2+3+\ldots+99的分布式计算。(本题60分)
提示:进程1和其他进程之间是双向通讯,可以用两条管道分别传递发送和接收两个方向的
流。也可以用socketpair直接实现双向流的传递,本题目不要求数据流通过标准输入输出
实现。
附:socketpair和pipe使用范例:
int fd[2], pipefd[2];
socketpair(AF_UNIX, SOCKET_STREAM, 0, fd);
pipe(pipefd);
其中,用pipe创建的pipefd[0]用于读,pipefd[1]用于写;而socketfd创建的fd[0], fd[
1]读写都可以。
评讲:本题比Class.7.5的课后习题出的还要简单。毕竟考试时在纸上写程序和平时在电脑
上敲程序是完全不同的。虽然本题要简单一点,但是基本上没有做过Class.7.5课后作业的
同学是不可能写出正确的程序的。这也从另一个侧面了解Class.7.5课后作业的完成情况,
并且了解到原来有这么多同学做了Class.7.5的作业,却因为没有做好而不敢提交这一事实
。
下面还要澄清几个错误的观点:
1.什么是Linux
很多同学至今连Linux是什么都不清楚。Linux这个概念有两意性。狭义的讲,Linux是指那
个300M源代码,编译后50M左右的内核(内核这个词也有两意性,这里指的是广义的内核,
也就是狭义的内核+模块)。由于一个Linux内核不能做任何事情,需要很多用户态的程序的
帮助,例如需要bash来提供shell,需要各种各样的命令来操作习题(ls,cd,mkdir,rm...)
,需要XF86/XOrg提供图像界面,需要KDE/Gnome提供窗口管理器...因此,就有各种各样的
发行版的出现,把特定版本的Linux内核和特定版本的各种工具/软件/脚本结合在一起,组
成一个发行版,这个发行版就是广义的Linux。通常为了区分,对于狭义的Linux,一般称
之为GNU/Linux,以强调Linux也是GNU的一部分。
2.Continuation不是递归。
在解释阴阳迷题的时候,很多同学都认为两个函数是互相递归调用的关系,这就根本没有
理解Continuation了。Continuation是持续性,和递归没有半点关系。而Continuation到
底是什么呢?这是个让初学者最难理解,也是最让程序员心动的特征。这方面偶是初学者
,所以请大家直接看别人的文章... ...
3.对待Windows的态度
很多同学,像小学生表决心一样说Windows如何如何的烂,如何的不安全,Windows是毒药
... ...,不要以为这样就可以迎合偶拿到高分,偶可没这么狭隘。事实上无论是Windows
还是Linux,都仅仅是一个工具,工具用的顺手就行了,否则就是自寻烦恼。更何况Windo
ws很烂虽然是个事实,不过这也是过去的事情了,现在在与Linux的竞争中,Windows也在
逐步变得更为稳定和更为安全。
因此,学习Linux之前,先考虑清楚自己的目的。比如偶的目的就很简单:控制自己玩游戏
的欲望,并顺便驾驭最强力量。对于不准备在计算机领域发展的同学,偶强烈不推荐学习
Linux,反之亦反。
4.Linux很难学
这个观点么无外乎说自己已经用了多少多少年Windows了,已经习惯了,不能指望普通用户
也懂这么多技术细节等等。这里偶必须说明,为了教学,偶展示的都是Linux最底层和最核
心的东西,相对与你们学习Linux的时间,当然觉得困难了。即使是Windows,如果你以前
没碰过电脑,恐怕也不是这么简单就能在10天内搞定一切吧。当初偶初学Linux,整整痛苦
了2周,这2周里面除了郁闷还是郁闷,基本上什么事情都搞不定,而且也没地方问人。不
过挺过来后就好多了,偶到现在用Linux也就3-4年的历史,比很多同学用Windows的历史都
要短,甚至只有某些同学用Windows历史的一半。可是偶现在在Linux下面能做的事情,无
论是数量还是效率都比大部分人在Windows下面做要高很多,这就是学习Linux的回报。而
且还不止于此,学习Linux最大的回报并不在于你掌握Linux这一强力工具本身,而在于你
从此具备了很强的自学能力,从此可以无视环境的限制而学习任何自己想学的东西。
5."我的目标就是赚钱"
本来这个和Linux课程无关,不过也顺带说说吧。这个观点是毫无疑问的,没有哪个人会对
这个问题有疑义。不过所谓“有心栽花花不开,无心插柳柳成荫”,即使是Bill Gates,
他的目标也根本不是赚钱,他成为世界首富也是无心插柳而已。所以,劝所有抱着这样念
头的同学,不要心比天高,好好踏踏实实的做好你作为学生的本职工作吧。想赚钱,先想
想自己的核心竞争力再说。
6.Richard Stallman VS Linus Tovalds
这两个人的观点是有分歧的。Richard Stallman是个典型的理想主义者,他认为基于微内
核的设计从技术上讲是最为完美的,也是未来的趋势,而Linux这种单内核的东西仅仅是一
个过渡,因此Richard才不遗余力的做Hurd内核。而Linus是很现实的,他喜欢先有东西再
完善,而且他和Minix的作者有多次关于微内核好还是单内核好的争吵。所以听说以前Ric
hard和Linus的关系并不好,不过现在似乎不错,而且Linux也终于套上了GNU/Linux的头衔
。不过我敢说,这两个人心里肯定都对GNU/Linux这个名字有某种程度的不屑,当然两个人
不不屑的是由“/”分割的不同的单词,呵呵。
7.X Server和Linux
有人把X体系说成是Linux的优越性的体现,真是大汗...
X体系比Linux要早的多,而且在Linux还没有诞生的时候就是工业标准。Linux更改了自己
使得他能够适应X体系,因此有人评论Linux是“一夜之间就有了图形界面”。 |
|