用形象的比喻學程式設計

2021-05-04 05:31:04 字數 3205 閱讀 5642

為什麼c#指標不安全:

比喻:假設你是乙個殺手,上級要你去槍斃乙個人,c#的引用的方法是:找到人,姓名,位址,性別都對頭後開槍,而c++的指標則是按照身份證號碼,正常情況下,按照身份證號碼的方法很快很方便,可是萬一目標的身份證被別人

拿去了那麼你將殺錯了乙個好人啊!

比喻:我們把windows比做乙個遊樂場,而把在遊樂場裡玩兒的小孩比做乙個乙個程式。小 孩在玩的過程中可能要喝水。我們有兩個辦法讓小傢伙們想喝水的時候就有水喝:1.給每個小傢伙配乙個水壺,小傢伙們喝了的話就喝 自己帶的水;2.給遊樂場配乙個飲水機,誰渴了誰來喝。顯然,第二個方法要好得多,這體現在三個地方。 第一 ,帶著水壺,小傢伙身體不靈活、玩不爽(影響程式的速度),況且這只是帶了乙個水壺,要是再帶上飯盒呢?還有輪滑、頭盔、創可貼 、紗布……ak-47 my god,如果帶全了就趕上美國大兵了。所以遊樂園裡還是有個公用「倉庫」要來的方便,讓大家隨用隨取(動態鏈結)。第二 ,小傢伙們帶了那麼多東西,佔了遊樂場很多地方,讓遊樂場擁擠不堪,別的小朋友就進不來了(程式體積大,影響程式和系統的效能) 。第三,如果某件物品公升級了,比如水壺從一公升的改為二公升的,那麼每個小傢伙就必須go home去換新的(重新編譯程式,由編譯器把新的靜態庫鏈結程序式主體裡),而第二種情況裡,只要遊樂場把自己倉庫裡的水壺換個 型號,那麼所有小傢伙就都在同一時間擁有了大容量的水壺。(悟空!我就一會兒不在,你怎麼就亂丟東西?!打到小朋友多不好~~~ ~~)

悟空已經急了,我就不再嘰嘰歪歪了……呃……win32 api函式是放在windows系統的核心庫檔案中的,這些庫在硬碟裡的儲存形式是.dll檔案。我們常用到的dll檔案是user32.dll和kernel32.dll兩個檔案,還有其它一些dll檔案也非常重要,大家要在實踐中多積累經驗。

為什麼要使用匿名方法:

比喻:有時候程式設計師最頭疼的就是給方法去名字了,就像。。。。。。乙個雞蛋,一生出來馬上就要吃掉,何必再為這個蛋起個名字呢?總的來說,就是一次性使用的物品,例項化以後就只需要用他一次就夠了,在程式裡不會再使用,就用匿名類,使程式簡潔

ref和out的區別:

比喻:rel是有進有出,out是只出不進。經典!這就是他們兩最大的區別,由於ref有進有出所以得有初始值。

控制代碼和指標:

比喻:handle的本意是把柄,把手的意思。是你與作業系統打交道的東東。舉個通俗的例子,比如你考上了大學,入學後,學校(作業系統)會給你乙個學生證號。注意,這個號碼是學校指定的,你無法自選。有了這個號碼(學生證,假設一證多用)享受學校提供的服務:如你就可以去圖書館借書,去食堂吃飯,去教室上課等等。

但你不能到食堂裡買啤酒,因為學校不允許這種服務。而在計算機中系統提供的服務就是api呼叫,你有了handle,就可以理直氣壯地向系統提出呼叫api的服務。而指標的權力就大多了,有了指標你可以到處去喝酒,打架,學校(作業系統)管不著,所以控制代碼和指標的區別在於控制代碼指標呼叫系統提供的服務。而控制代碼雖然是乙個能相互區別的號碼,但與我們普通的id號又有區別,普通的id號是可以由程式設計師自己定義的,而控制代碼不行,它是物件生成是系統指定的,是為了區別系統中存在的各個物件,這個控制代碼不是由程式設計師符給的。 

「指標」與「指標變數"

stringbuffer與 stringbuilder 有什麼區別?

比喻:多個執行緒,同時向乙個物件進行操作時,stringbuffer就是安全的,不會出現內部的混亂,而stringbuilder則不是,可能產生資料混亂。

許多人吃完飯了,去盛一碗湯。

盛湯有幾個步驟

1 把碗放在桌子上

2 拿起湯勺盛湯

3 把湯倒倒入碗裡

最典型的衝突就是

1 你拿了乙個小碗(屬性值比較較小,比如size=3)

2 你去盛湯

3 另乙個也拿了乙個大碗(比如size=8),因為乙個類只有乙個屬性,所以你的碗被人替換掉了

4 你盛的湯倒入的,已經不再是你期望的那個碗了,當然倒入碗裡後的結果也是不對的(不滿或者溢位了)

區分"面向連線服務"和"無連線服務"的概念

比喻:區分特別簡單、形象的例子是:打**和寫信。兩個人如果要通**,必須先建立連線--撥號,等待應答後才能相互傳遞資訊,最後還要釋放連線--掛

**。寫信就沒有那麼複雜了,位址姓名填好以後直接往郵筒一扔,收信人就能收到。tcp/ip協議在網路層是無連線的(資料報只管往網上發,如何傳輸和到達以及是否到達由網路裝置來管理)。而"埠",是傳輸層的內容,是面向連線的。協議裡面低於1024的埠都有確切的定義,它們對應著網際網路上常見的一些服務

執行緒和程序:

比喻:程序好比乙個工作小組,執行緒好比乙個人; 程序剛建立時,只有乙個人工作; 如果乙個人夠了,那就不需要加人了;

如果乙個人不夠,就再加乙個人,就是說有兩個執行緒了; 這兩個人同時在做不同的事情; 如果人手還不夠,還可以加人; 如果其中乙個人把他自己的工作做好了,那他就退出了; 就是說乙個執行緒結束了,但是還有其他執行緒工作;

當最後乙個人做好了,這時整個程序就結束了。

api:應用程式介面、 sdk:軟體開發包 、dll:動態連線庫三者關係

比喻:你想吃飯,可以自己做飯吃,也可以去kfc、麥記或其他快餐店...因為你知道這些快餐店吃東西最方便...它們就是dll...提供某種功能實現並且不需要你了解細節...你只管大爺一樣走進去給錢點餐吃飽抹嘴走人...

但現在你想開一家快餐店...你就必須了解開快餐店要做什麼...工商稅務衛生裝修廚師等等...需要滿足一系列標準才能開店...這些標準就是api...由管理部門制訂...你要提供某種功能實現必須遵守的...

最後你決定開一家kfc...那你就要按照kfc的規定流程加盟...交錢、選址、籤合約、裝修、培訓員工...這一套流程就是kfc的sdk...它幫助你快速實現你要做的事...

硬碟、記憶體、cpu的關係:比喻:硬碟——就好比家裡的冰箱,用來儲存肉的,當然,冰箱越大,放的肉就會越多。

記憶體——相當於砧板,要想切肉得把肉從冰箱裡拿出來,放在砧板上才能切

cpu——刀,切肉要用什麼呢?用刀啊

硬碟、記憶體、cpu之間的關係呢,就是冰箱、砧板、刀的關係,冰箱(硬碟)越大,儲存的肉(資料)就越多,有砧板(記憶體)和刀(cpu)才能切肉(處理資料)。如果砧板(記憶體)不夠大,刀(cpu)的功能再強也沒有用武之地,反過來是同樣的道理,砧板(記憶體)再大,刀(cpu)的處理能力差也是不行的。。。

待續。。。。。

BIO NIO AIO的形象比喻

bio blocking i o 同步阻塞i o模式。nio new i o 同步非阻塞模式。aio asynchronous i o 非同步非阻塞i o模型。先看阻塞和非阻塞的區別,以燒水為例 阻塞vs非阻塞 人是否坐在水壺前面一直等。同步vs非同步 水壺是不是在水燒開之後主動通知人。再加上同步 ...

各種流行演算法的形象比喻

對於一些名字聽起來比較玄幻的演算法,我在乙個qq群裡看到如下解釋,覺得挺形象的,貼出來分享一下 這些演算法都有什麼含義?首先給出個區域性搜尋,模擬退火,遺傳演算法,禁忌搜尋的形象比喻 為了找出地球上最高的山,一群有志氣的兔子們開始想辦法。1 兔子朝著比現在高的地方跳去。他們找到了不遠處的最高山峰。但...

程序和執行緒的形象比喻

程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂。1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就...