3到6年的.NETer应该掌握哪些知识
? ? ?我們組的開發(fā)人力一直比較緊張,今年春節(jié)后,高層終于給了幾個(gè)headcount,我們可以開始招人了。從三月初我們就開始找簡歷,渠道有拉鉤,內(nèi)推,我司自己的招聘網(wǎng)站和智聯(lián)等。簡歷篩了很多,也打了很多電話,叫過來面試了很多人,可是到目前為止,已經(jīng)三個(gè)月了,我們只招到了兩個(gè)人,這兩個(gè)人都是內(nèi)推來的。
???? 我負(fù)責(zé)第一次電話面試,如果電話面試覺得可以,我們會叫過來 做一份筆試題,然后我會針對筆試題再進(jìn)行提問。我們想要招聘的,是一批中級.net開發(fā)工程師,工作經(jīng)驗(yàn)最好在3到6年,在這三個(gè)月的面試過程中,這些候選者鮮有我覺得滿意的。所以我就想,作為工作了3到6年的.NETer,到底應(yīng)該掌握哪些知識。
???? 我負(fù)責(zé)的電話面試和筆試,著重考察.NET基本概念和基礎(chǔ)知識,不涉及任何項(xiàng)目經(jīng)驗(yàn)。在電話面試時(shí),我問的第一個(gè)問題就是介紹一下.NET的類型系統(tǒng),不過很遺憾的是,很多候選者在聽到“類型系統(tǒng)”這個(gè)詞后,完全不知道我的發(fā)問點(diǎn)在哪里,他們并不知道“類型系統(tǒng)”指的到底是什么,所以我不得不換個(gè)提問方式,轉(zhuǎn)而問“什么是引用類型什么是值類型,有什么區(qū)別“,后者的問法,只是前者的一個(gè)子集而已。從.NET類型系統(tǒng),可以發(fā)問.NET如何實(shí)現(xiàn)跨語言開發(fā),所有類型的共同父類是什么,為什么要分引用類型和值類型,堆和棧的區(qū)別,裝箱拆箱等等一系列問題,遺憾的是到目前為止還沒有人能夠說出我想要的答案。關(guān)于引用類型和值類型,候選人的回答也是五花八門的,有些人根本沒聽所過這兩個(gè)術(shù)語,有些人聽過,但是搞不清楚棧和堆的區(qū)別。而大部分的人,則完全不清楚拆箱和裝箱的概念。讓我感到吃驚的是,很多人認(rèn)為拆箱裝箱就是父類型和子類型之間的類型轉(zhuǎn)換。最近面試的一個(gè)有10年經(jīng)驗(yàn)的.net開發(fā)者,竟然認(rèn)為裝箱拆箱與反射有關(guān)。
????? 除去考察類型系統(tǒng),我電話里還會問到泛型,委托,linq,多線程編程,異步。遺憾的是大部分候選者對于這些在.NET編程中經(jīng)常用到的技術(shù)掌握的也并不好,這幾個(gè)發(fā)問點(diǎn)里,可能多線程和異步編程的問題會有點(diǎn)難度,不過我認(rèn)為作為一個(gè)有五年左右工作經(jīng)驗(yàn)的人,理應(yīng)掌握一些多線程和異步編程的技能。當(dāng)我問道大部分候選者關(guān)于多線程和異步編程的問題時(shí),他們都會回答工作中沒有用到過所以不清楚,在我看來這根本不是理由。而前三個(gè)發(fā)問點(diǎn):泛型,委托,linq,則是非常基本的.NET編程技能,但是很多人僅限于用過,但是卻從未進(jìn)行過一丁點(diǎn)的思考過,為什么.NET要引入泛型,委托和linq,引入它們是為了解決什么樣的問題,關(guān)于它們的實(shí)現(xiàn)原理大致是什么樣子的。
????? 在筆試題中,我們會考察進(jìn)程線程的基本概念,ado.net的使用,閉包,簡單的設(shè)計(jì)模式。遺憾的是,很多人并不能描述清楚進(jìn)程的概念。在orm大行其道的今天,很多.NETer已經(jīng)不知道如何使用原始的ADO.NET來訪問數(shù)據(jù)庫了,有些工作了五年的候選者從未聽說過閉包,有些人無法畫出經(jīng)典設(shè)計(jì)模式的uml類圖。在面試了眾多候選者之后我很驚訝,關(guān)于這些軟件開發(fā)的基本技能,竟然有這么多人已經(jīng)無法掌握。
????? 我面試的這些候選者,有相當(dāng)一部分人都有在大公司的工作經(jīng)歷,包括微軟的,攜程的。簡歷上的title也有不少寫的是開發(fā)組長,技術(shù)經(jīng)理,架構(gòu)師之類。簡歷上的項(xiàng)目經(jīng)驗(yàn)列出來有好幾頁,多的我都看不過來。然而他對于基本技能的掌握情況實(shí)在令人堪憂。有相當(dāng)一部分人,滿足于做了一個(gè)又一個(gè)的項(xiàng)目,沾沾自喜。
????? 我在我上一家公司時(shí),我的直屬leader對我說“我們是軟件工程師,不是碼農(nóng),不要滿足于做成了多少個(gè)項(xiàng)目,這些項(xiàng)目都大同小異,能做一個(gè)就能做一百個(gè)。”這個(gè)leader對我的影響非常的大,他教會了我思考問題的方式。任何技術(shù)的出現(xiàn),都是為了解決一類實(shí)際問題,并且有個(gè)逐步完善的過程。當(dāng)我們在進(jìn)行軟件開發(fā)用到了某種技術(shù)手段時(shí),有多少人會去思考一下為什么我要采用這種技術(shù),這種技術(shù)解決了什么問題,如果不用會有哪些不便,在這種技術(shù)出現(xiàn)之前,是如何解決這類問題的。反過來,能不能自己嘗試造個(gè)輪子,簡單實(shí)現(xiàn)一下這個(gè)技術(shù)手段的功能。論語中說“學(xué)而不思則罔思而不學(xué)則殆”,學(xué)與思結(jié)合,收獲會有很多。
????? 最后回到題目中來,3到6年的.NETer到底該掌握哪些知識。我認(rèn)為答案就在clr via c#中。其實(shí)我面試時(shí)問到的所有問題都可以從這本書中找到答案。c#的經(jīng)典書籍并不多,如果只看一本的話這一本就夠了,而且要反復(fù)看,常常看,每次看可能都有新收獲。
????? 我們?nèi)诉€沒有招滿,如果你覺得自己對.NET的掌握非常好,可以發(fā)簡歷到我的郵箱里lukexywang@qq.com。如果你還會c++的話,就更好了。工作地點(diǎn)在深圳南山區(qū)。
相關(guān)文章:?
C#讀書雷達(dá) | TW洞見
原文地址:http://www.cnblogs.com/onepiece_wang/p/5558341.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的3到6年的.NETer应该掌握哪些知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EntityFramework的多种记录
- 下一篇: 通过Jexus 部署 dotnetcor