【北京之旅】--程式設計師應聘技巧之筆試

zhang_xinxiu發表於2014-04-25


       對於如何招聘還不是我們這些程式設計師該考慮的事情,但是對於應聘需要我們好好的進行思考,應聘也是需要很多技巧的,就在昨天筆者也進行了一次應聘,經歷了應聘的全過程,這裡就來談談對於應聘的一些感悟,對於一些應聘的問題進行討論剖析。


一、應聘過程


       對於應聘正如我們所瞭解的可能會分為很多步驟,其中最主要的分為三步,首先是投遞簡歷,其次是筆試,接下來進行面試,當然如果我們被應聘上了最後的一步就是討論薪資和戶口等問題。
       簡歷投遞技巧就不在詳述,網上類似的文章內容會有很多,詳細的技巧請上網查閱吧。應聘過程中需要注意的一些問題這裡也不再詳述,可以去網上下載一本《程式設計師面試寶典》這本書已經出到第四版了,裡面詳細說明了有關應聘的很多問題。


二、說說筆試


       筆試的內容來詳述下,對於開發人員無論是大公司還是小公司,筆試是必不可少的一項內容,就在昨天筆者面試的公司也進行了筆試,但最後去的時候卻忘記了帶上紙和筆,不要說我孤陋寡聞,或者是沽名釣譽,稍稍解釋下在通知進行面試的時候只是提了有可能進行筆試的內容,結果由於一時高興忘記了帶上筆試工具,在此也告誡大家無論是不是進行筆試,在進行面試的時候一定要帶上工具,做好充足的準備。
       談到了筆試那就來說說筆試之前的準備工作,有開發經驗的程式設計師筆試就會相當的簡單,但對於沒有開發經驗的程式設計師那筆試無疑是一場硬仗。雖然是硬仗但也是有獲勝的機會的,其實很簡單那就是充足的準備,接下來就來看看該準備哪些東西。
      在筆試之前充足的準備必不可少,但是需要準備的內容會很多所以需要找些技巧,針對性的進行準備。


      1、針對面試的公司
       此話怎講,難道公司面試也有敲門?這是當然的,從筆試的內容及難度看,每個公司每年的筆試題的難度是類似的,而且筆試的內容可能也會很相似,如果特別想要進入某一公司的話不妨針對性的練習下那個公司往年的筆試題,把握住方向這樣筆試會變的簡單。


      2、針對專案
       這裡所說的專案可能是和外包有關,也可能它們公司所用的技術是固定的,如:.NET或者Java,某一個專案特別需要人手,這時筆試題往往會和它們專案的技術有關,在準備筆試的時候不妨也考慮下它們的專案需求。拿筆者昨天筆試的公司來說,公司開發使用的是.NET的B/S專案,所以在筆試時很多有關Vs的使用及Asp.NET的內容。


      

         對於筆試的內容無非是技術的相關內容,針對昨天面試的內容進行了總結,上圖為技術的大致內容。下面逐個進行說明。


三、IDE


       首先從IDE說起,IDE是程式開發必不可少的工具,所以有關它的使用也是筆試時常考的內容,就在昨天的面試過程中,同樣也考到了有關IDE使用的技巧,雖然不是很困難,但也沒能拿到滿分。
        這部分可能會考到有關的開發工具的快捷鍵,快捷鍵是高手必備的素質,作為程式開發人員只要是有經驗的開發人員在進行開發時都會用到快捷鍵,靈活的掌握和使用快捷鍵能夠提高程式開發的效率,真正的高手要脫離滑鼠只使用快捷鍵就能夠掌控全域性。快捷鍵的使用需要進行長期的培養,首先是要熟悉常用的快捷鍵,其次是使用,多多積累,當然最主要的是每次在使用新工具時都要有意識的去檢視和使用快捷鍵。

       另外還有就是除錯工具的使用技巧,而且也是筆試的重點,這類題是檢驗是否是高手的利器。在程式開發過程中除錯是必不可少的,即使是高手也免不了對程式進行除錯,那麼如何使用除錯工具快速的找到程式的bug就是高手們需要思考的問題了。想要了解一個開發人員是否是高手只需要問他程式出錯時如何進行除錯即可,是高手還是菜鳥只要通過這個問題一驗便知。通過上面的討論也可以看出想要在面試的時候進入高手的行列,就必須掌握除錯的高階技巧,類似於我們常用的新增斷點、逐句、逐段的除錯方法都是最低階的,在遇到了多層迴圈、死迴圈、幾千次甚至幾萬次迴圈的時候上面的方法就不適用了。
        還有是在迴圈過程中,如何在達到指定的條件時迴圈停止進入除錯的狀態,這個問題有沒有思考過?當遇到執行幾千次設定幾萬次迴圈的時候,我們不能在使用簡單的除錯方法了。真正的高手能夠在迴圈中指定除錯的進入狀態,並能夠靈活的運用IntelliTrace。(下篇部落格將會著重討論除錯的技巧)

        有關IDE的筆試內容還有更多,這裡不再詳述,可以在網上查詢些有關IDE筆試的題目,針對性的練習。


四、物件導向


        物件導向是現在程式設計中最主流的程式設計方法學,所以對物件導向的理解程度也是筆試過程中常會考到的內容。相信只要是程式設計師都採用過物件導向的思想開發過程程式,那問個問題您對物件導向理解多少?只知道類和物件,這是菜鳥級的水平,高手理解的物件導向遠非這些。物件導向是老生常談,程式設計師天天進行物件導向程式設計,有沒有反問過自己對物件導向理解到了什麼程式?物件導向的三大性質封裝、繼承、多型有沒有深刻思考過,尤其對於多型,是物件導向最複雜的內容,有沒有進行思考過?如果沒有,那是時候再好好溫習下物件導向了,這是基礎也是很重要的理論。
       筆者針對昨天面試的內容進行了一些總結,這些內容雖然很基礎很簡單,但真正考起來您還未必能拿高分。下面的內容是基於C#語言的,筆者進行了實測,其它型別的語言需要自測。
      1、虛擬函式:使用virtual標示,沒有限定的使用條件,但是不能夠在介面中出現,因為介面中的方法本身屬於抽象方法;虛方法中能夠有具體的實現;如果父類中包含虛方法的宣告,在子類中可以不重寫。
      2、介面:一個類可以實現多個介面,一個介面可以由多個類來實現;介面之間也可以進行繼承,但是介面不能繼承類;能夠宣告介面,但不能例項化介面,介面只能用來被實現;
      3、抽象類:能夠宣告,不能被例項化;類中的方法能夠具有具體的實現;抽象類能夠繼承其它類,也能夠繼承抽象類,同樣能夠實現介面。
      4、抽象方法:介面中的方法是抽象方法;抽象方法只能出現在抽象類及介面中,如果出現在抽象類中需要使用abstract標示出某一個方法為抽象方法;抽象方法必須在子類中進行重寫;抽象方法沒有具體的實現;
      5、重寫/過載/覆蓋
      6、類之間的關係,依賴、繼承、關聯、聚合、組合
      物件導向的內容還有很多需要我們複習的地方,不再詳述請翻閱其它書籍。


五、資料庫


        談到程式設計就不得不說說資料庫了,它是程式設計中至關重要的一部分,資料庫設計的好壞旺旺決定了程式設計的難易程度,所以資料庫也是筆試必考的內容。
從昨天的筆試內容和麵試的問題來看,資料庫主要從三個方面來考察。1.表設計,2、查詢語句,3、Linq。

   1、表設計

        資料庫表的設計至關重要,在筆試的時候可能會涉及到表的主外來鍵的考察,確定表的主鍵,這裡一定要注意陷阱,有經驗的開發人員在設計表結構的時候會讓主鍵唯一,而且選擇欄位最少的候選鍵,如果一張表的主鍵包含的欄位超過一個那建議將這張表進行拆分,建立關係表。
       如題:有一個關係,員工(員工號,姓名,性別,愛好),員工號能唯一確定一條記錄,但是一個員工有多個愛好,請問在設計表時主鍵應為()
                  A、員工號+愛好    B、姓名    C、員工號

       這道題應該選C,只能是員工號,在建表的時候至少需要建立兩張表,因為如果一張表的話資料會冗餘。

  2、SQL語句

       SQL語句在程式設計中相當重要,好的SQL語句能夠大大提高程式執行效率,很大程度上減少程式程式碼的編寫,SQL語句的優化也是高手的體現。不要以為能寫幾個連線查詢、分組查詢、用幾個資料庫函式就很牛了,SQL還有很多你不知道的內容。另外還有就是函式的使用,使用SQL函式能簡化查詢語句,所以要多掌握些SQL函式。在筆試的時候可能會問到一些查詢問題,如查詢一張表中從20行到30行的內容,資料庫的行轉列問題等等。

   3、Linq

        這個名詞不是很新了,很早以前就接觸過,當時沒有對它進行深入的瞭解,昨天面試的時候考察了這個問題,那來看看它是什麼意思。Linq是Language-Intergate Query,語言整合查詢,它是從vs2008後開始有的強大的查詢語句,能夠在C#和Vb.net上使用,能夠對 Sql和XML等進行操作。(有關更多Linq的內容將會在下篇部落格中討論)


六、Asp.net


       Asp.net的頁面生命週期是面試.NET的B/S開發的時候經常會問的問題,菜鳥級的開發人員只知道使用Load、DataBinding事件,真正的高手要熟悉整個頁面的生命週期。筆者昨天面試的公司同樣也問到了這個問題,捫心自問下我們對頁面生命週期知道多少?亡羊補牢為時未晚,筆者對頁面生命週期的事件進行了一些整理,下面詳述下。

PreInit

在啟動階段完成之後、初始化階段開始之前引發。

注意如果請求是回發請求,則控制元件的值尚未從檢視狀態還原。如果在此階段設定控制元件屬性,則其值可能會在下一事件中被覆蓋。

Init

在所有控制元件都已初始化且已應用所有外觀設定後引發。 各個控制元件的Init事件在頁的Init事件之前發生。使用該事件來讀取或初始化控制元件屬性。

InitComplete

在頁的初始化階段結束時引發。使用此事件對要在下一個回發後務必保留的檢視狀態進行更改。

PreLoad

在頁為自身和所有控制元件載入檢視狀態之後以及處理Request例項包括的回發資料之後引發。

Load

Page物件對Page物件呼叫OnLoad方法,然後以遞迴方式對每個子控制元件執行相同操作,直到載入完本頁和所有控制元件為止。 各個控制元件的Load事件在頁的Load事件之後發生。

控制元件事件

使用這些事件來處理特定控制元件事件,如Button控制元件的Click事件或TextBox控制元件的TextChanged事件。

LoadComplete

在事件處理階段結束時引發。對需要載入頁上的所有其他控制元件的任務使用該事件。

PreRender

Page物件建立呈現頁所需的所有控制元件(包括組合控制元件的子控制元件)之後引發。

在呈現階段開始之前,使用該事件對頁或其控制元件的內容進行最後更改。

PreRenderComplete

在設定了 DataSourceID 屬性的每個資料繫結控制元件呼叫其 DataBind 方法之後引發。

SaveStateComplete

在為頁和所有控制元件儲存檢視狀態和控制元件狀態之後發生。

Unload

首先針對每個控制元件引發,繼而針對該頁引發。

 

    有關更多頁面生命週期的內容請翻閱:http://msdn.microsoft.com/zh-cn/library/ms178472.aspx


結語


        筆試部分的內容還有很多,本文主要是針對面試的主要問題進行了一些整理,希望能幫助面試.NET開發的程式設計師,在筆試時注意上面的一些問題,拿到期望的offer還是相當容易的,最重要的是準備,即使是很有經驗的程式設計師參加筆試也不一定能夠拿到高分,相反的經過準備的外行人可能在筆試的時候脫穎而出,所以需要針對性的去準備。


相關文章