近兩個月C++實習生面試總結


   從6月份到8月份,這幾個月中,我通過大街網等招聘網站投遞了一系列的程序開發的實習生崗位,原本的想法並不是一定要去實習,但是從某次面試官對於C++的面試提問中,我感受到了許多自己學習過程中的不足。這些不足不是僅僅依靠看書或者自己寫一些小代碼可以得到理解的,而是需要自己從基本功開始重寫塑造自己的編程功底。這次,我把心動娛樂,新思科技,oracle以及Nvidia的面試體會記錄下來,以鞭策自己。其中,主要以nvidia為主,oracle因為業務關系主要是針對數據結構問的。

C++面試中的題目:

     無獨有偶,在進行C++面試的時候,有一個問題是三家公司的面試官都進行了詢問的,那就是C++中的虛函數。虛函數作為C++面向對象性質的基本語句,承載着許多面向對象性質實現的基礎功能。

    主要問題集中在虛函數的語法,虛函數中虛基類和派生類的關系,以及指針操作的異同。其中,包含了成員函數的重載和重寫,虛基類指針調用派生類成員函數的時候會出現的問題。通過虛基類指針實例化派生類對象的一系列問題,比如在銷毀對象的時候析構函數的執行順序,當然,也問道了虛析構函數的必要性。深入問下去的話,還會對虛表V-table進行提問。

   當虛函數問了之后,很自然的就會轉到顯式轉換上的問題,四個cast操作符之間的功能是什么,異同點有哪些。這些都是會被問到的。

   如果cast答得好了,還會有更深入的問題,但是我沒能夠通過這一關。

   除了這些,const操作符,static修飾的成員函數,都是提問的重點。nvidia對於C++的基礎十分重視,除了這些問題,其他的C++問題都有可能被問到。我在做面試前的筆試題目時,會被提問去簡單實現一下STL中的string類。這個無可避免的要求對其拷貝函數有所了解。

   類的拷貝函數是類的基本函數,也就是用同一個類的對象實例化一個對象。其中最重要的就是需要記得申請存儲空間,防止知識簡單的指針賦值。這樣在原先的對象銷毀時,保留的新的對象也會丟失其內容,造成問題。這里很想懷念下OC中的應用計數。

    C++的基礎基本來說主要集中在以上這些。所謂的繼承,多態,封裝,其實都在一個虛函數的概念里都被考到了,而且深入了解了虛函數之后,相信不去背概念,也能知道這三個面向對象的性質是如何的了。

 

除了C++的基礎,下面就是算法和數據結構考的也是比較多的。但應該都算是比較基礎,不過因為公司的不同,也會有差異。比如Oracle就十分重視數據結果,Nvidia也考了較難的數據結果知識。不過其實也是基礎的知識,知識我平時很少用到而疏遠了。

     算法上來說,主要就是會問一些基本的排序的性質,時間復雜度,實現什么的。還會問一些簡單的算法問題。我覺得更應該注意的是數據結構部分

      Oracle的面試中,上來就讓我實現一個多叉樹的數據結構,這下我就直接跪了。因為雖然這也是非常基本非常基本的數據結構,但就連《算法導論》也只是很淺的討論了一種叫做左兄弟孩子的實現方式。然后,在這個二叉樹上完成深度遍歷。

     這道題面試結束后我也自己寫了一下,還是十分簡單的,但是如果基礎不好,就卡在了哪里。

    之后,還問了一下task管理之類的問題,但是我已經無心戀戰。

     Nvidia是在筆試中有對BSP樹有應用的提問。這個也是我已經完全忘記的數據結構,也是本科教學中並沒有着重講到的知識點。所以自然的我沒能夠答出來。

    而其他的問題都比較簡單。對於這些學習也沒學習好,在學校的實踐中也沒有用到的還是很難的。

    再比如Nvidia問到的四元數問題,以及變換矩陣的問題。我雖然學習了,但是也只是淺薄的映像。使用中也多是調用一個現成的API開解決問題,而沒能深入了解實質,是十分讓人覺得遺憾的。

   Nvidia還問了許多線性幾何的知識,這些基礎的知識是做圖形學工作的必備。而我卻還是比較偏向於用空間幾何的方式來解決問題,很顯然是不對的。

 

總結

   作為一個學生,的確需要多實踐。不過,實踐的重點更要走出去。這個走出去指的是走出舒適的環境,走出校園,走出自己的想象。

   校外的公司應用的技術和自己在學校中接觸的已經天差地別,而學校內可以進行的實踐往往也大部分難以脫離教學的限制,指導老師都不追求技術,如何能夠讓你懂得技術的革新。(一開始我的導師只讓我用glbegain畫圖)

    這段時間的面試,給我最大的指導就是我通過與面試官交流的過程中,學習到了許多公司中開發一個工程側重的地方,對我在學校內的實踐起到了非同小可的作用。也讓我開代碼的時候更能夠看得進去,因為有些寫法終於間接或直接明白了好處,並且開始學着用面試官問我問題的那種思維來考慮我的代碼。

   這樣一來,之前數次推倒重來的方式也沒有再發生在我的代碼中。

 

    不過, 錯過如此多的優秀公司讓我覺得十分遺憾。我現在在學習《C++ primer》 《算法導論》,然后將《線性代數》再復習一遍。

   代碼方向,我在nvidia的frank(我的一面面試官)推薦下,開始看開源游戲引擎的數學庫。

   實習面試,雖然沒有結果,但是優秀的前輩給我的指教,已經讓我受益匪淺。我和女友說,每次我都是上了n對1的一堂大課,而且對面是日薪上k的大牛,實在是賺翻了。

     寫下此文以鞭策自己不斷前進!

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM