談談.Net技術面試
1、引子
最近一直在負責.net(B/S方向)技術面試相關的工作,前前后后面試了不少人,但是通過率較低,大概只有20%左右;有頗多感慨。
最近也一直比較困惑,原因究竟是什么?
是我們要求太高,應聘者本身的問題,還是是面試的內容本身的問題?
2、我們的崗位要求
這是之前項目組整理的一個簡單的崗位(.Net中高級職位)要求,貼一下:
必須技能:
-
有2~3年實際的項目經驗(特別說明:工作經驗不一定要進入實際的公司才能積累的)
-
思路比較清晰,有較強的獨立解決問題的能力
-
熟悉b/s開發的各項基本知識(如css、javascript、html、asp.net),不要求全會,但至少能看懂別人寫的東西,另外各項里面必須有一項較為突出;
-
對.net框架比較熟悉,熟悉多層模型,編碼能力較強,編碼規范,打字速度不能太慢(特別說明:這應該屬于最最基本的技能,但是很讓人不解的是面試過程中有不少的應聘者竟然尖著個手指頭在那兒慢慢敲字!!!)
-
數據庫知識比較扎實
優先考慮:
-
對web報表比較熟悉者
-
有過多種數據庫開發經驗,能夠羅列出各種數據庫之間的一些細微差別
-
有過一些c/s開發經驗者
-
前端開發經驗比較豐富者(如實際負責過ExtJS、JQuery、Dojo、YUI、AjaxPro相關工作的)
3、使用的面試問題
面試過程中針對上面的崗位要求主要會涉及到以下幾項內容
1)給10分鐘左右的時間,做一個詳細的自我介紹
2)C#、Asp.Net、前端、數據庫等基礎知識
一般會問到以下一些問題
-
a) 下面三句代碼有沒有錯,以inboxing或者unboxing為例,解釋一下內存是怎么變化的
-
int i=10;
object obj = i;
int j = obj; -
b) 編碼題目, 如限定時間編碼求菲波拉契數列第n項的值,求函數f(n)=1/1!+1/2!+1/3!+...+1/n!的值,求兩個二維矩陣相乘的值等等;
-
c) 談談對委托、事件的理解等等;
-
d) 為什么asp.net控件能夠保持住狀態;asp.net button的客戶端事件是如何映射成服務器端事件的;詳細談一下asp.net的管道模型;
-
e) 下面css中“一段文字”最終在瀏覽器中顯示什么顏色;如果用js原生腳本改變class為“xyz”該如何寫,將“一段文字”替換成“其它文字”如何寫等;
-
.abc{color:red;}
#abc{color:blue;}
<div id="abc" class="abc">一段文字</div> -
f)談談ajax原理的了解程度以及目前業界流行的ajax框架的熟悉程度;
-
g) 表結構:
-
成績表(Grade),包含字段:GradeID(Int,自增), SNO(int, 學號), CNO(int, 課程號), Score(float,分數)
查詢每門課程的平均(最高/最低)分及課程號;
查詢每門課程第1名的學生的學號;
查詢每門課程中超過平均分的所有學生的學號等等。
3) 設計方面的能力
-
a) 給出一些具體的應用場景,如多數據庫支持、工資計算方式多樣的情況,如何來設計;
-
b) 談談對設計的理解;
-
c) 偶爾還會讓畫畫設計類型,寫寫代碼實現常見設計模式(如單例模式等)
4) 解決問題的能力/學習習慣/個人特長等等
主要涉及到以下一些問題
-
讓應聘者自己挑一個自己以往做過的他認為具有代表性的項目,詳細聊一下,主要聊一下他/她在這個項目中的職責,這個項目曾經遇到過哪些問題,如何解決的,他/她在解決這些問題的過程中起到了什么作用等等。
-
給應聘者一個他目前不會的問題,讓其解決一下;
-
課外時間都在干什么,常上的技術網站是什么,最近看的基本書(電子書當然也算)的名字還記得嗎;
-
聊聊自己最擅長的方面;
4、我期望得到的答案
當然上面這些問題不可能一次全部都問到,時間上也不允許,但是四部分的內容我會根據實際情況都會問到一些;時間一般在1個小時左右。
下面談談從項目組以及我個人角度出發希望得到的答案,希望能夠給大家帶來些許啟示:
1) 首先是自我介紹部分
這部分的內容我本人之前被面試的時候也很是郁悶,認為:“我的簡歷都有了,你自己不會看嗎,還讓我再多說一遍,真實吃飽了撐的!”;這種想法真的是非常錯誤的,原因有以下幾點:
-
簡歷是hr篩選的,技術面試官一般都比較忙,雖然hr可能會提前將簡歷發送給技術面試官,但是面試官一般都比較忙,面試之前未必會仔細看簡歷;所以通過自我介紹可以讓面試官更好的了解你;
-
自我介紹可以看出你的語言組織能力、邏輯思維能力;
-
自我介紹可以引導面試官往應聘者自己熟悉方向上去發問,爭取面試的主動權。
所以我所期望從應聘者的自我介紹中得到以下一些信息:
-
有組織、有條理的進行自我介紹;
-
自我介紹的內容包括簡單介紹教育背景、工作經歷、項目經歷、自我評價(優缺點、特長【說明:重要,亮點,如果應聘者自己提到了的話我一般會接著這個話題繼續聊下去】),個人的短/中/長期職業規劃。
2) 基礎方面
這部分的內容不一定要求全部精通,但是至少應該知其然,最好也能知其所以然,比如css的優先級,這里我舉兩個簡單的例子:
a) 編碼題目,這個我一般都會讓應聘者寫一段代碼,編碼是開發人員最基本的功底;針對編碼問題,我期望看到以下的結果:
-
編碼之前先寫思路,比如,第一步怎么怎么做,第二步怎么怎么做,體現出良好的思維習慣及邏輯思維能力,這樣即使最終沒有寫出來也沒有太大的關系;
-
良好的編碼習慣(如命名規范、注釋,在應聘者開始寫之前我也會),這里我多說幾句,常常聽到有人說良好的命名就是最好的注釋,強掉少些注釋啥的;我面試過程中有一個原則,通篇代碼沒有一句注釋的我直接不聊了;
b) 引用類型/值類型,裝箱/拆箱問題。這個問題也比較典型,可能有人會說,這些東西又不會在工作中用到,問這種問題有什么意義! 我要說的是,不是沒用到,只是你沒注意到而已。其它不多說了,我期望應聘者能把下面這張圖畫出來。
總之一句話就是,我希望應聘者能夠對原理性的東西多了解一些。
3) 設計方面
設計知識其實也是作為高級開發職位必須具備的知識。
我期望應聘者能夠對設計模式有比較深入的認識,通過我給出的經典場景能夠立刻聯想到應該使用的設計模式。
4) 解決問題的能力/學習習慣/個人特長等等
a) 解決問題的能力一直是我個人也好,還是項目組也好,比較看重的,給一個不會的問題(寫一個Windows服務小工具來搜集服務器的CPU、內存等信息),我期望得到的答案包含以下信息:
-
首先要制定一個計劃(包含可能需要用到的資源、可能遇到的困難及解決思路,這個問題需要分幾個步驟去做,制定大致的時間進度計劃等等);
-
按照規劃好的步驟去做這些事情,遇到困難通過最快的方式/方法去解決,并及時修正計劃;
-
解決完以后及時總結、匯報等等。
b) 期望應聘者有良好的學習習慣,對新技術、新知識持續不斷的學習;
c) 在知識面上既要有一定的廣度,同時也有自己的專長。
5、總結與建議
1) 總結
通過這段時間的面試,發現面試者主要有以下幾點不能完全讓我滿意:
-
思路不夠清晰,主要表現在:自我介紹的時候沒有條理,比較亂;解決問題的能力有所欠缺;
-
比較浮躁,基礎不扎實。 動不動就寫精通XXX,對基礎的問題(如裝箱、拆箱)稍微聊得深入一點就清楚了;
-
不誠實:經常在簡歷或者自我介紹中提到:做過項目經理、技術經理,但是問到項目經理、技術經理的職責啥的卻說不清楚;
-
知識面比較窄,學習習慣不夠好;
-
職業目標不夠清晰;
2) 建議
結合自己的一些真實感受,這里給出幾點簡單的建議吧:
-
給自己制定一個短/中/長期的職業目標,并為此不懈努力;
-
夯實基礎,項目中用到的知識當然要學習,基礎原理性的東西更要掌握;
-
多總結,把知識沉淀下來;
-
誠實;
-
培養良好的編碼習慣;
============================
希望本文能給各位求職者帶來一些啟發;
如有不當之處,敬請批評指正。