阿里巴巴2017暑期實習生招聘面經

此篇博客實時更新。。。希望最後能夠順利拿到offer


2017/3/2電話面試第一輪


阿里的效率果然快。。投簡歷第五天,系統開放第二天就打來了面試電話。面試官非常有禮貌給人感覺很好,上來先介紹了一下他們部門,隨後就是我的自我介紹了,先是講了講項目,隨後問了問我本科、研究生學習的課程,問的知識點如下:

1、緩存的實現原理,緩存的效率(有沒有緩存效率變化有多大)

2、局部性原理(這個當時沒答出來)


局部性原理是指CPU訪問存儲器時,無論是存取指令還是存取數據,所訪問的存儲單元都趨於聚集在一個較小的連續區域中。

三種不同類型的局部性:
時間局部性(Temporal Locality):如果一個信息項正在被訪問,那麼在近期它很可能還會被再次訪問。
程序循環、堆棧等是產生時間局部性的原因。
空間局部性(Spatial Locality):在最近的將來將用到的信息很可能與現在正在使用的信息在空間地址上是臨近的。
順序局部性(Order Locality):在典型程序中,除轉移類指令外,大部分指令是順序進行的。順序執行和非順序執行的比例大致是5:1。此外,對大型數組訪問也是順序的。
指令的順序執行、數組的連續存放等是產生順序局部性的原因。

局部性原理(Principle of Locality)是一個由經驗得出的結論:“一個程序90%的時間運行在10%的代碼上”。

計算機程序從時間和空間都表現出“局部性”:

1)時間的局部性(Temporal Locality):最近被訪問的內存內容(指令或數據)很快還會被訪問;

2)空間的局部性(Spatial Locality):靠近當前正在被訪問內存的內存內容很快也會被訪問。

一個典型的例子就是幾乎所有的程序都有循環代碼。比如:

for(int i=0; i < 1000; i++)
  for(int j=0; j < 200; j++)
    a[i][j] = i*j;

這段代碼從時間和空間上都表現出很強的局部性。

而對於存儲器而言,存取速度越快的其成本越高。爲了在成本和性能之間進行平衡,現代計算機體系架構往往選擇:使用少量性能高但成本也高的存儲器作爲速度慢而成本也低的存儲器的緩存。成本越高的存儲器數量越少,但它們被設計爲更靠近CPU,所以它們性能要比次級存儲器高的多。

由於上層存儲器是下層存儲器的緩衝,基於局部性原理,使用這種架構是正確的選擇。因爲下層存儲器中的數據一旦被裝入上層存儲器,就很有可能被多次用到,此時CPU則可以在更靠近它的性能也更高的存儲器內找到其需要的數據,而不需要每次都要到離它更遠,性能也更低的存儲器內去存取它們。

在現代計算機軟硬件體系架構下,不同層次的程序員看到的存儲器層次也是不一樣的。對於Application程序員,看到的只有虛擬內存,而對於系統程序員,比如操作系統程序員看到就是普通內存,而對於系統級Hardware Integration程序員,則看到的是二級cache,對於芯片級別的Hardware程序員,看到的則是一級cache。

但無論你是哪個級別的程序員,如果你能夠了解更低層的存儲器原理,則可能優化你的程序,讓你的程序性能更高。而對於OS程序員而言,瞭解一,二級cache的機制,則可以優化其開發的操作系統。




3、C++多態的實現(重載、虛函數)

4、虛函數的實現原理


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章