又一個有趣的面試題
大家還記得前些天的那個火柴棍式的面試題嗎?很有趣吧。下面是我今天在StackExchange上看到的一個有趣的面試題。大家不妨一起來思考一下。問題如下——
有兩個相同功能程式碼如下,請在在A,B,C是什麼的情況下,請給出三個原因case 1比case 2快,還有三個原因case 2會比case 1要執行的快。(不考慮編譯器優化)
1
2
3
4
5
|
for (i=0; i<N; ++i){ A; B; C; } |
1
2
3
4
5
6
7
8
9
|
for (i=0; i<N; ++i){ A; } for (i=0; i<N; ++i){ B; } for (i=0; i<N; ++i){ C; } |
我的第一個反應是——
- case1 要快一些,因為只有一個i++的i<N的操作,而case 2卻有三個,這在點上,case 1就比case 2要快。
- case2如果要快的話,有一個原因是,A, B, C其中一個需要去先獲得一個資源(比如一個鎖),在case1下,每次都要去拿這個資源,而case2下,只需要拿一次然後。但這個可能是不對的,因為我無法想出一個相同的語句塊放在case 1中會和放在case 2中有差別。(不過可能比較接近了)
繼續思考:這個題有點像是“同步和非同步”的問題,case 1是同步,case 2是非同步,所以,非同步快於同步,也許可以從這個方向出發,寫出A, B, C的語句塊。
不過,其要三個原因啊。各位,你們有想法嗎?
—-更新 1—-
剛才在twitter上與人討論,發現又有一種情況,case 2要比case 1要快。比如,A, B, C分別訪問是不同的記憶體塊(陣列),那麼case 1就得在不同的記憶體塊上來回切換定址,而case2則可以連續地訪問記憶體塊。訪問連續的記憶體效率要高。尤其是三塊大記憶體。
—-更新 2—
正如本貼評論中所說的,CPU的cache也是其中一個因素。大家對底層知識瞭解的都很不錯啊。贊一個。
相關文章
- 有趣的DBA面試題面試題
- 5個有趣的演算法、邏輯面試題演算法面試題
- 12個有趣的C語言面試題及答案C語言面試題
- 我遇到的有趣面試題:破解程式面試題
- 一些有趣的程式設計師智力面試題程式設計師面試題
- 一個有趣的sqlSQL
- 有趣的面試——產品經理的格局面試
- Go記憶體架構,一個有趣的問題Go記憶體架構
- MySQL的又一神器-鎖,MySQL面試必備MySql面試
- Hive的一個面試題Hive面試題
- 關於php解構函式的一個有趣問題PHP函式
- PHP引用的一個面試題PHP面試題
- 五個典型的JavaScript面試題JavaScript面試題
- 5個典型的JavaScript面試題JavaScript面試題
- TypeScript:又一個終將逝去的青春TypeScript
- 又一個Rails的實現 GitHubAIGithub
- 有趣的8個IT冷知識
- 6個有趣的Linux命令Linux
- 一個Promise面試題Promise面試題
- 關於 Promise 的 9 個面試題Promise面試題
- 10 個常問的 JS 面試題JS面試題
- 5 個很好的 Python 面試題Python面試題
- 20個必會的JavaScript面試題JavaScript面試題
- 5個典型的JavaScript面試題(上)JavaScript面試題
- 20個關於Postfix的面試題面試題
- 陳皓:一個 fork 的面試題面試題
- 一個有趣的問題: 如何用HashSet來儲存重複的字串?字串
- 又一個輪子,我的小框架框架
- 面試Python機器學習時,常見的十個面試題Python機器學習面試題
- 邦芒面試:面試中常見的4個致命問題面試
- CSS幾個有趣的屬性分享CSS
- Drawable一個有趣的屬性 tileMode
- 15 個有趣的 JavaScript 與 CSS 庫JavaScriptCSS
- linux下有趣的幾個命令Linux
- 記一個面試題引發的思考面試題
- 一個 Handler 面試題引發的血案!!!面試題
- 7 個開放式的 CSS 面試題CSS面試題
- 關於Integer面試的一個問題面試