三月九日,去了一家做SoC Graphics的硬件的公司面試。這家公司是一個朋友Destiny no Cyber介紹的,所以面試完了去和他一起吃飯(當然是別人花錢,嘎嘎),同行的還有另一個朋友Fake German。不過COBET、Mickey和Baby Valkyrie沒去,同時因為時間關系,我也沒能去朝拜一下Mr.Lalrone,這些讓我覺得挺遺憾的。
------------------------我是YD的分割線--------------------------------------------
唔,言歸正傳,簡單討論一下面試的事情。由于他們Corp仍然在招人,所以我也就不好透露具體的面試題目,不過也都是寫基本的問題。只要功底稍微好一點,回答上來應該問題不大。而且很不幸的我屬于那種功底不怎好的人。晚上和Mr.Lalrone聊天的時候,還被恥笑了。我也小小總結了一下其他網上的面試題,就語言本體部分而言,大概就一下這么幾個方面:
1. Macro
對于Macro只需要把握一點,Macro的機制是編譯期的文本替換,而不是運行期的。這是它和函數最大的區別。因此要注意一下Block的使用( 也就是{}和()一定要用 )。如果遇到對Macro行為的解釋的題目,為了慎重起見,一定要先手工展開,再來進行別的方面的計算。
2. 指針/數組
沒啥好說的,最常考的內容之一。主要是傳值/傳引用,sizeof,指針/數組在初始化上的區別。等等等。一個可能會出現的問題,是const的左綁定
3. 結構體/對象
在這一方面,常見的問題包括:內存對齊導致的sizeof和member layout問題,bit field的正確使用,繼承關系下的基類和派生類成員的分布。
4. 類
類方面的問題主要包括以下若干方面:
訪問控制:public,private,protected,friend。對于這些,要有相對深刻的理解。對于硬件公司,這方面關心的不多。但是如果是一個做Application的Corp,出于工程方面的考慮,這些問題就顯得尤為重要。你必須理解,訪問控制僅在編譯期有含義。在編譯期之外,不會生成任何額外的代碼,來保證你的訪問正確性。
構造函數:要理解什么時候編譯器會生成缺省構造函數,以及缺省構造函數的行為。對于一些測試代碼風格的題目,千萬不要忘了對拷貝構造、賦值的特殊處理,以及對單值構造函數的explicit聲明。部分情況下,可能要考慮到成員/基類的構造順序的問題。這個順序是:先基類,后子類。本類中,聲明序。不是按照初始化函數的順序,而是按照聲明的順序。如果記不清,那就請記得把初始化函數的順序和成員聲明的順序一致起來。
析構函數:有兩個地方是重中之重。第一,有虛函數的基類,一定要有一個虛析構函數。第二,不得拋出異常。
虛函數/非虛函數:這個主要可以參見書“Inside C++ Object Model”。虛函數的考點不外乎兩點,底層實現和運行時行為。底層實現大部分的實現都是vptr - vtable的組合。關于調用順序,自然不用贅述了,只要辨明了Object Slice和Reference(包括pointer)的區別,就沒有任何問題了。
靜態/非靜態成員變量/成員函數:這里的考點比較多。他們在行為上的區別,存儲上的區別,初始化的區別,訪問的區別,指針的區別,(函數)調用協議的區別是最常見的考點。幾乎每一個部分都有不少內容可以讓考官爽你一把的。有兩個相對容易陌生的操作符.*和.->萬一考到了,一定需要注意。(多年沒用過,我都忘得差不多了。不過好在我估計出面試題目的,也忘了差不多了。還是functor好。)對于函數而言,const和non-const函數的區別,this的具體含義和行為是很常見的考點。一個罕見的關鍵字mutable的運用,也可能作為考點出現。
5. 類型和聲明系統
主要考點在const和volatile上。const前面已經說過了。對于有著并發需求的公司,面試之前的準備中,千萬不能忘了volatile。volatile一般僅用于編譯器的native type。他是C++這個多線程殘廢唯一還算靠點譜的并發一致性保證的拐杖。然后要特別注意,typedef里面的type modification的行為,可能不像你YY的那個樣子。唯一靠譜的類型修飾,還是來自于STL和TR1的type traits。
6.函數
有關于函數方面的問題,能考的點非常多。相對底層的包括調用協議(參數傳遞方法,入棧順序,堆棧平衡等),應用級別的,主要還是考你棧和堆的區別。在代碼的Robust和Security的問題上,如果是做Kernel的公司,還要好一些。應用系統的,最常見的就是緩沖區溢出的問題。千萬別在這個問題上犯傻了。對于效率而言,strlen,strcpy和memmove是幾項最容易考的實現函數。還有就是關于static member和non static member的區別。這個不難,但是經常會考到。
7. 模板
大部分公司都不怎么用模板,因此考的可能性也不大。
8. 庫
這個就沒什么好說的了。CRT和STL是最常見的考點。要特別注意庫在性能方面、安全性方面、線程安全方面、出錯處理方面的Features。必要的時候還要了解其實現。
————————我是更YD的分割線————————
對于語言方面的考核點,我也就小小的總結一下,希望對大家有所幫助。當然,還有一個方面的問題就是領域相關的,比方說,你做UI,或者做Graphics,或者做Network,都會有各自的問題。這與面試官個人的性格、知識面、deep程度,公司職位對能力的需求都有莫大的關系。因此,這些方面的知識還是多多益善。
后來還見了他們的中國區BOSS(榮幸的很,嘿嘿),當時答應了要替他們公司問一下招聘的人的,所以我也在這里發一下招聘信息:
圖芯芯片技術公司(Vivante Corp)招聘啟事 - HW職位
ASIC Design Engineer(上海)
Responsibilities:
The candidate will be responsible for logic design and implementation in low power graphic and multi-media chip/core.
Micro-architecture definition, RTL design, verification, silicon bring-up, etc.
Qualifications:
- MSEE or above, with 2 years experience
- Proficiency in logic design, simulation, synthesis and test
- Proficiency in Verilog and its simulation environment.
- Experience in graphic, video, and multi-media chip design a big plus.
- Familiar with all aspects of the frontend ASIC design flow including RTL design, verification, synthesis, and timing analysis, DFT, etc.
- Good written and spoken English
- Good communication skills and able to work both independently and in a team
Design Verification Engineer(上海)Responsibilities:
The candidate will be responsible for building up verification environment and completing verification of design and algorithm at both chip and unit levels.The candidate is also responsible for developing verification plan to verify design functionality.
Minimum requirements:
- MSEE or above, minimum 3 years direct experience in verifying complex SoC chips
- Experience with Verilog logic design language.
- Experience with high-level verification languages such as System Verilog, Vera, System C or Specman e language a plus
- Experience with UNIX/Linux simulation tools such as NC-Verilog or VCS.
- Experience with C and C++ and script language like PERL/SED, etc.
- Self-motivated and good team player.
- Strong problem solving and analytical skills
- Good written and spoken English
- Good communication skills and able to work both independently and in a team
.
About VivanteVivante Corporation is a promising, privately held fabless semiconductor company in the design, development,and marketing of graphic and multimedia ICs and related software for the fast growing handheld wireless device market.The company is foundered by successful industry veterans and is well funded.
Our mission is to provide the mass market with the capability of accessing rich graphics and multimedia content anywhere and anytime on their wireless handheld devices. Combining our low power architecture and design with our dynamic power management, our 3D graphics chips will give consumers the same immersive experience they have found on their PC and game consoles but with power consumption level orders of magnitude smaller. All day interactive computing will be tethered no more!
We believe and invest in our people, we promote a culture of creativity, and we created an environment where talents are recognized and teamwork and collaboration is valued and rewarded.
ps,他們也招SW職位的人,主要是User-Model Driver和Application的。有意向,也可以投簡歷。
Corp URL: http://www.vivantecorp.com/