又一個有趣的面試題
大家還記得前些天的那個火柴棍式的面試題嗎?很有趣吧。下面是我今天在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也是其中一個因素。大家對底層知識瞭解的都很不錯啊。贊一個。
相關文章
- 一些有趣的程式設計師智力面試題程式設計師面試題
- 一個有趣的鎖問題
- 一個有趣的this指向問題
- Hive的一個面試題Hive面試題
- 記一個有趣的數學題
- PHP引用的一個面試題PHP面試題
- MySQL的又一神器-鎖,MySQL面試必備MySql面試
- 一個Promise面試題Promise面試題
- 邦芒面試:面試中常見的4個致命問題面試
- 10 個常問的 JS 面試題JS面試題
- 關於 Promise 的 9 個面試題Promise面試題
- 分享幾個重要的Android面試題Android面試題
- 2019年,Python工程師必考的6個面試題,Python面試題No5Python工程師面試題
- 有趣的html頁面HTML
- 邦芒面試:面試時要問清楚的幾個問題面試
- SQL崗位30個面試題,SQL面試問題及答案SQL面試題
- 昨天去面試,這5個Python面試題都被考到了,Python面試題No6Python面試題
- 面試Python機器學習時,常見的十個面試題Python機器學習面試題
- 四個常見的Linux面試問題Linux面試
- 蒐集到10個最難的面試題面試題
- 26個精選的JavaScript面試問題JavaScript面試
- 關於Integer面試的一個問題面試
- 一個 Handler 面試題引發的血案!!!面試題
- 記一個面試題引發的思考面試題
- 7 個開放式的 CSS 面試題CSS面試題
- Python面試最常問的10個問題Python面試
- 面試小冊:面試官經常問的十個棘手的 JavaScript 問題面試JavaScript
- HTML最新面試題(筆試面試題)HTML面試題筆試
- 31 個 DevOps 常見面試題dev面試題
- 7個Java Stream API面試題JavaAPI面試題
- 幾個常見的Python面試題,幫助大家更加從容面試!Python面試題
- 面試常問的20個資料庫高頻面試題詳解!資料庫面試題
- Mysql中的筆試和麵試---20個經典面試題MySql筆試面試題
- 面試題:面試經面試題
- 面試開掛!208 個最常見 Java 面試題全解析Java面試題
- 10個艱難的Java面試題與答案Java面試題
- 必須要會的 50 個 React 面試題React面試題
- 一個面試題引起的SpringBoot啟動解析面試題Spring Boot
- 面試官常問的Nginx的幾個問題面試Nginx