歡迎您光臨本站 註冊首頁

Linux考試試卷評講

←手機掃碼閱讀     火星人 @ 2014-03-23 , reply:0

考試終於批完了,其中發現很多上課中沒有講過的問題,這裡把題目評講一下:

==========
選擇題部分
==========

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/%C...315450/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是「一夜之間就有了圖形界面」。

[火星人 ] Linux考試試卷評講已經有967次圍觀

http://coctec.com/docs/linux/show-post-122340.html