從面試官角度告訴大家如何准備項目方面的描述


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

    本文的內容是根據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 結語(求之后的文章內容)

    同樣,如果這篇文章反響不錯,我會繼續寫文章告訴大家如何在面試前做准備,以便能更好地通過面試。

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM