1. 程式人生 > >從面試官角度告訴大家如何準備專案方面的描述

從面試官角度告訴大家如何準備專案方面的描述

之前寫了篇博文,你的簡歷能幫你爭取到面試機會嗎,反響不錯,也承蒙管理員擡愛,放在首頁,為了答謝大家,在這篇博文裡,我來分享些如何準備和敘述專案經驗的技巧。

本文的內容是根據java web輕量級開發面試教程改編的。

1 缺乏相關專案經驗的補救措施
在之前的你的簡歷能幫你爭取到面試機會嗎博文裡,已經給出過增加專案匹配度的技巧。其實大家在跳槽換時,遇到的最大問題可能不是技術方面的問題,而是缺乏足夠的技能經驗。

大家一定遇到過如下的情況,比如投了很多簡歷,但得到的面試機會寥寥無幾,有些初級的程式設計師甚至再投簡歷也得不到面試機會。很大程度上,這問題出在“工作年限”和“專案匹配度上”。

工作年限方面,大家尚可寫上在校實習經驗,但如果你在簡歷上的專案描述(尤其是最近一個專案)和目標公司的職位介紹不一致,那麼你得到面試的機會很難,如果你再是非211,985學校,那麼就更難了。抱歉我這裡不是對這些學校有偏見,事實上不少一般學校裡畢業出來的學生能力也很強,但我這裡只是描述一下業內的情況。

比如某公司在招聘時,寫明瞭要有2年Spring MVC相關經驗,小李雖然也工作2年了,但做的主要是Java Core方面的,而小趙在做了C#.NET專案兩年後想轉到Java方向,他們在應聘這個崗位時,同樣都會遇到“沒有足夠的實際專案經驗”的困難。

大家在遇到類似情況時,強烈不建議大家弄虛作假地改寫簡歷,比如把2年Java Core經驗改寫成Spring MVC方面的。雖然這種修改未必能在背景調查時被發現,甚至某人如果能在面試時讓面試官感到他在Spring MVC方面達到了2年工作經驗的水準,這種修改未必能被發現,但在職場上畢竟要以誠信為主,這種虛假簡歷一旦被發現,後果甚至比缺乏經驗還嚴重。

遇到這樣的問題,大家可以做的是,挖掘之前專案和所應聘職位相匹配的技術要點,而不是偽造簡歷。

挖掘點一,比如某專案的一些模組是用C#做的,而一些和客戶互動的功能用到了Spring MVC,小張主要做的是C#模組,在簡歷上他也以此描述為主,但他也做過點Spring MVC,那麼遇到上述情況,他就可以在簡歷中寫上Spring MVC的經驗。

挖掘點二,有些公司規模比較小,所以一個人可能要做多方面事情,比如小王是以“測試”人員的身份進入的專案組,但後來專案進度比較緊,小王也被要求去開發Spring MVC了,這種情況我們也見了不少,這樣當小王想往Java方向轉時,也可以在簡歷上加上這段經歷。

除此之外,我們還見過這樣的簡歷:候選人正式工作是做C#,但他在業餘時間跟著他們的專案經理用Spring MVC幹私活,這樣他好歹在簡歷上也能寫上Spring MVC等相關方面的經驗。

但請大家注意,通過上述方式挖掘出來的專案經驗雖然能做到“實事求是”,但畢竟不能算“專職”;雖然也能提升獲得面試機會的可能性,但面試時技術面試官一定會因此加大相關經驗(比如Spring MVC)的考核力度。所以說大家不能簡單地在簡歷上加上相關經驗了事,面試前更得多做準備,比如多看面試題,或者深入實踐一個Spring MVC的學習專案,這樣最後才能應聘成功。     

2 面試前請準備專案描述的說辭
當大家得到面試機會時,其實能大致猜出這個公司技術面試問題的大致範圍:技術面試的問題一定會圍繞“招聘崗位”的要求,這似乎是廢話,但很少有人會照此準備面試,至少我面試的人裡,我會發現不少人一點準備也沒有。

具體而言,技術面試的問題會集中在三個方面,第一會確認候選人的專案經歷,第二會針對性地問些技術問題,第三才會問些演算法和邏輯方面的問題。而這三方面的問題大多是通過候選人敘述的專案經驗來展開的。

不過我發現不少候選人會大量準備一些演算法和邏輯方面的問題,對專案方面的問題往往很不重視,這就有些本末倒置了。

在面試環節,第一個問題一般是“介紹自己”,或“介紹下最近的(或最拿手的)專案”,然後面試官一般會以此為切入點提問。

這樣做除了能讓候選人放鬆下來從而能很好地進入到面試狀態,還有如下兩個目的,第一,面試官能以此確認候選人在簡歷上寫的專案經驗是否是真實的,第二,會根據候選人提到的技術點針對性地問問題。也就是說,候選人可以通過敘述專案,一定程度地引導後面面試官的提問。

具體而言,大家可以從如下幾個方面有條理地詳細敘述一個具體的專案。

第一,介紹專案的背景,比如客戶是誰,是要幹什麼的,分哪些模組,大致的工期是多少。這部分大家其實已經寫在簡歷裡了,這裡就簡要敘述下,無需詳細,因為面試官不會過多關注這個專案的需求,而是關注你是如何在這個專案用到和本崗位相關的技術的。

第二,介紹你做的模組裡用到了哪些技術?以及有哪些亮點,這裡需要提及的技術和亮點最好要和職位要求相一致。而且,面試官有可能會問你提到的技術的細節,也就是說,你寧可只講你非常熟悉的技術,而別提你不熟悉的技術。具體地,在介紹完專案背景後,大家可以採用如下的樣式來介紹在這個專案裡用到的技術。

在這個專案裡,我們用到了Spring MVC,具體而言,用到了攔截器和AOP元件,在資料庫層面,我們用到Oracle,其中最多的資料表裡大概有2千萬條資料,所以我在專案裡還做了SQL調優的工作。在程式碼裡,我們還用到了諸如ArrayList和HashMap等的集合物件。這個專案對記憶體有一定的要求,所以我還做了些記憶體調優的工作。

第三,可以介紹下這個專案的開發方式,以及在專案管理方面用到的軟體,比如可以這樣說:

這個專案我們採用了敏捷開發的方式(點到為止即可,如果面試官感興趣,會繼續提問),在專案管理方面,我們用Maven來管理專案,用Git做版本管理,用Junit來做單元測試,用Jira來做bug管理,在程式碼上線前,我們還會用Sonar來掃描程式碼,如果發現一些可改進點,比如Junit覆蓋率不高,我們會及時改正。

大家會發現,這些話在簡歷中都有,但面試官未必能注意這些細節,所以在面試時,大家還是有必要口頭說下。而且,這裡大家是在介紹專案,所以說出各個關鍵點即可,沒必要偏離這個主題去詳細介紹敏捷開發以及各種專案管理軟體的細節。

我們這裡是拿Spring MVC的專案舉例,如果大家要介紹其他型別的專案,也可以根據如下兩個要點來準備(因為重要,所以這兩個要點我們已經重複多次了,所以請大家務必重視)。

第一,儘可能多地提到職位描述裡給出的技能點,並且在此基礎上,適當地介紹些在這個專案裡你能拿得出手的而且別人未必有的亮點。

第二,在介紹時,點到為止即可,因為此時是在介紹專案,所以如果過於展開的話會喧賓奪主,從而偏離“介紹專案”這個主題,從而會給面試官留下“敘述條理不清晰”的不良印象。

3 回答問題時儘量結合你的專案實際
當面試官聽完大家按上述兩點準備好的專案敘述後,或多或少地會受到影響,根據大家提到的技術點深入地提些問題。比如會問,在你們的專案裡Spring的攔截器是怎麼用的,或者是,你們是怎麼做SQL調優的?

在提出問題後,面試官期望得到的結果是,首先候選人得知道相關技術點的用法,再進一步,候選人在實際專案裡還用過。所以,大家在回答時,可以結合專案的實際,而且還可以順勢展示自己的其它亮點,通過下面的兩個例項,我們來看下具體的回答方式。

例項一,面試官提問,Spring的攔截器是怎麼用的。

在我們的保證金專案裡,我們是通過Spring來攔截掉一些非法請求,比如在訂單撮合成交時,傳送的請求一定會包含些安全驗證資訊,這些請求在被請求前,會經過攔截器。具體而言,我們是通過繼承HandlerInterceptorAdapter類來實現攔截器,並在其中的preHandle方法裡添加了驗證安全資訊的邏輯,同時,我們還在配置檔案引入了攔截器的相關配置。

在說完Spring攔截器之後,大家還可以順勢說些其它相關的亮點,比如:除了攔截器之外,我們還用到了Spring裡的宣告式事務,這樣我們就能分離資料庫操作業務和事務處理業務,從而能用比較小的代價來更改業務的事務屬性。

這樣一來,候選人就能清晰地讓面試官感受到確實在專案裡用到攔截器,而且還有可能有很大概率把接下來的問題引入到宣告式事務方面。

例項二,面試官提問,你是否重寫過hashcode方法。

我們知道,當我們在HashMap裡放入自定義型別的物件時,需要在這個物件裡重寫equals和hashcode方法,否則在呼叫HashMap物件的get和 containsKey方法時,可能會得到意料之外的結果。這部分的內容我們在描述集合內容時詳細提到過。所以我們可以這樣回答。

在專案裡,我們用了HashMap物件來存放鍵值對型別的物件,其中“鍵“是使用者物件,值是這位使用者的訂單列表,所以我們就需要在使用者物件的class裡,重寫hashcode和equals方法,否則會出錯。

隨後可以舉個不重寫hashcode方法會導致的問題,之後可以結合專案的實際進一步展示自己對HashMap物件的理解。比如可以這樣說,由於在HashMap裡,放入的資料和它的“儲存位置”是通過hash演算法相關聯的,所以它的get方法的效率相當高,比如在我們的專案裡,我們在HashMap裡存了將近20萬條鍵值對資料,但它的get效率基本上是一槍命中。

從上述兩個例項中,大家可以體會下“如何結合專案實際”,其實也就是說下這個技術點解決實際需求的大致步驟。同樣地,大家在“順勢擴充套件”相關技能點時,提到即可,不用再結合專案展開具體的用法,如果面試官感興趣自然會接著問。畢竟這是“借其它問題”的擴充套件,如果展開過度也會導致喧賓奪主,從而給面試官留下“思維不清晰”的不良印象。    

4 面試前一定得準備些亮點,敘述專案時找機會丟擲
在下表裡,我們歸納了些可以在Java核心(Java Core)方面展示的亮點。事實上,我們不可能列出所有的亮點,這裡只是給出些案例,大家可以據此擴充套件。

技術方面

可以說的亮點

Java集合物件

1 能根據專案的需求選用合適的集合物件,比如知道ArrayList和LinkedList的差異,並能合理選用。

2 能在合適的場合選用WeakHashMap。

3 可以適當講一些集合的JDK底層實現程式碼。

異常處理方面

能在finally從句裡寫釋放資源的程式碼

JDBC方面

1 能通過PreparedStatement的預處理方法來防止SQL注入。

2 能通過批處理來提升操作效能。

3 能通過例項講述事務隔離級別的含義

多執行緒方面

1 會使用執行緒池

2 能通過鎖或訊號量等手段正確地處理多執行緒併發時的資料一致性。

在下表裡,我們列了些在資料庫方面可以準備的亮點。

技術方面

可以說的亮點

建表

建表時需要根據專案的資料情況,考慮是採用三正規化或是反正規化。

SQL調優

1 可以通過檢視日誌等方式看哪些SQL需要調優。

2 可以通過執行計劃檢視SQL的所消耗的代價,並據此調優。

3 可以通過建索引,建分割槽等手段來優化SQL效能。

事務

1 可以說下JDBC或Spring裡是如何管理事務的。

2 可以說下Spring裡的宣告式事務的做法和優點。

3 可以舉例說明事務隔離級別和事務傳播機制的用法。

分散式資料庫

1 可以通過水平或豎直等方式的方式來拆分資料庫,從而減輕對單表訪問所需要的代價。

2 可以通過叢集等方式來承擔對資料庫的過量的訪問請求。

NoSQL和Hadoop

這兩個本身就是個亮點,如果大家用過,可以結合專案來說明。

在下表裡,我們歸納了web這方面大家可以準備的亮點。

技術方面

可以說的亮點

Spring MVC架構

1 可以說下Spring的IOC和AOP是如何優化專案結構的。

2 可以說下攔截器等Spring元件對專案的幫助。

ORM,比如Hibernte或Mybatis

使用這種ORM技術時,如何優化訪問和操作資料庫的效能。

Spring和Mybatis等的整合

可以講下整合框架的細節,並可以舉例說明整合後的框架能很好地適應需求的變更。

此外,大家還可以在Linux使用技能以及專案管理軟體的使用經驗方面展示自己的亮點。這裡請注意,一定找合適的機會“順帶”地說,如果沒機會寧可別說,更不能仗著有所準備就直接自說自話地說。否則的話,反倒可能會得到“表達能力不清晰”或“敘述條理混亂”等的不良評價。

5 結語(求之後的文章內容)
同樣,如果這篇文章反響不錯,我會繼續寫文章告訴大家如何在面試前做準備,以便能更好地通過面試。

如果大家感覺我的文章有哪裡可以改進,請留言告訴我,同時也可以“反對”我,如果感覺對大家的面試有所幫助,也請幫忙推薦一下。

另外,大家如果還想了解面試方面的其它哪些知識點,也請留言告訴我,我就會準備這方面的文章了。