1. 程式人生 > >用商城維護類專案,講下應屆生如何在面試中介紹專案,如何準備面試

用商城維護類專案,講下應屆生如何在面試中介紹專案,如何準備面試

    本人之前寫的面試系列文,一直是針對技術和麵試技巧,所以在本文裡,就將結合具體的商城維護專案,給出介紹專案經驗的做法。

    1 面試前的準備要點

    1 執行通本專案,尤其地,瞭解用JPA訪問資料庫,以及用Eureka等元件管理專案的做法。

    2 背若干配置引數,比如JPA訪問資料庫是如何做配置,面試中要以此證明自己做過。

    3 瞭解專案敏捷開發的模式,因為你是要把這個專案介紹成商業專案,而不是學習專案。

    4  看如下專案管理方式:用Maven + Git管理程式碼,用Maven+jenkins打包部署,用junit作單元測試,以此進一步證明這是商業專案。       

    準備這些技能的目的是,想辦法把這個專案當商業專案來介紹,因為大多數畢業生只做過學習專案,沒有在公司裡幹過,你只要證明出你有,哪怕是三個月半年,這就是優勢。而在學習專案裡,不會接觸到敏捷開發和專案管理軟體,當你準備好上述第3第4點後,你就能證明你做過商業專案。

    2 進入面試環節,首先是自我介紹

    您好,我叫xx,目前雖然沒有在公司幹過,但大三大四的時候,幫老師做過實習專案,加起來有半年時間(強調你做過商業專案,這很有優勢),在實習過程中,有做過一個社群超市的維護專案(別說商城專案,因為一聽就是學習專案,但如果是小型維護專案,還比較可信些),這個專案是用敏捷開發方式來管理,在其中用到了Spring Boot框架,用JPA連線資料庫,前端用過VUE+jquery框架,用Maven+Git管理程式碼,用jenkins打包,用junit作單元測試,在其中我不僅寫程式碼,還參與過線上問題排查工作,還解決過因沒寫hashcode方法而導致的問題。(這裡別詳細說業務細節,因為面試官不關心,你就說這個專案裡你用過什麼技術,同時更要強調你有分析解決實際問題的能力)

    說明:在自我介紹環境,首先要展示你的專案經驗以及技能,同時證明這個專案是商業專案,所以其他的,比如業務需求等,不用展開。同時,面試前一定要準備,不僅要準備自我介紹的說辭,更要準備你提到的技術,其實這些不難,哪怕是應屆畢業生,網上查下也能說出來。

    3 然後一定是介紹專案,面試官會讓你介紹最近做過的專案

    你在自我介紹階段,已經概要性說出你掌握的技能,以及專案經驗,這裡就要結合專案經歷,達到如下的目的。

    1 進一步證實你的專案是商業專案,而不是學習專案。

    2 結合專案說明關鍵技術,比如JPA和Eureka等用法,否則這些技能只能算學習專案。

    3 展示你有分析問題和解決問題的能力。

    4 同時說明,你在專案裡不僅參與過編碼,更參與過測試、業務分析等工作。

    5 展示自己的責任心,肯加班,肯學習。

    同時切記,你別在這階段犯如下的錯誤,因為這些錯誤非常普遍。

    1  再次強調,要通過說專案開發模式和用過的專案管理軟體,說明這是商業專案,就在公司裡能掙錢的專案,別說成學習專案,很多候選人專案會預設按學習專案來介紹,這雖然聊勝於無,但無法證明相關技術在實際專案裡用過,相反,你一旦說成了半年商業專案經驗,那麼你就有代差優勢。  

    2 要結合專案說技術,但別大談特談業務需求,比如說訂單管理模組怎麼做,因為面試官不關心這個。

    3 過於突出專案規模和用到的新技術,忽略基礎技能。對於應屆生而言,其實能證明有增刪改查的經驗,那就足夠了。證明有分散式等值錢經驗,也要先講好基礎技能。我見過不少候選人,大談特談專案的規模和複雜度,結果說半天是學習專案而不是商業專案,也見過不少人準備了redis和kafka等分散式技能,但jpa增刪改查,以及java集合等技術,說得一塌糊塗,這就屬於南轅北轍了。

    如下給出具體的說辭。

    這個專案是超市維護專案,是我在大三暑假階段幫實驗室老師做的,這是個外面公司接的維護專案,我做了3個月,結果拿到了1萬塊錢。(證實是商業專案,非學習專案)

    這個專案採了目前流行的微服務架構方案。我們選擇的是以SpringCloud為核心的,基於Rest風格的微服務架構。在這個專案裡,我用到了Spring Cloud全家桶做後臺,具體採用了Eureka做服務治理,用Ribbon做負載均衡,用Zuul做閘道器,用JPA連線MySQL資料庫,用RabbitMQ(訊息佇列)來發送簡訊,做後臺時還用到了Java的集合,異常處理等技術,前端用Vue+Nuxt技術。

    這個專案採用的是敏捷開發模式,我們每天有站會討論進度,每兩週一個開發週期,在其中討論哪些要做,並在此基礎上排任務,週期結束會release,在開發過程中,我不僅寫程式碼,還參與過商品模組的需求討論,也做過單元和整合測試。(說明你幹過的活,並用專案管理方式進一步證實是商業專案)

    在做這個專案的過程中,我在解決技術問題的時候,看過HashMap和ArrayList快速失效的底層原始碼,也通過建索引調優過資料庫效能,也通過看日誌解決過線上問題。(丟擲亮點,等面試官來問)

    這個專案有時候進度會比較緊,我會主動加班開發,並排查線上問題,遇到一些我沒接觸過的技術,比如Zuul,我會主動查資料,並通過問別人等方式,保證進度保證質量地完成任務。(說明你的責任心,肯加班,肯學習)

    說這個專案前,你該準備的技術要點

    1 你提到過的Eureka,Ribbon,Zuul等技術,事先通過跑通程式理解下。同時要準備如下細節,zuul過濾器,ribbon配置檔案,eureka註冊方式,jpa一對一一對多等,如果可以,再到網上搜些spring cloud面試題,或者系統看基本spring boot和spring cloud的書。

    2 就看HashMap的底層原始碼,尤其結合hashcode和equal方法看,看快速失效的原始碼,這體現在,集合不能一邊迭代一邊修改。應屆生很少有人會通過程式碼講技術,你講清楚了就是優勢,而且這些不難。

    3 看下索引,尤其是索引背後的b+樹資料結構,瞭解下索引的用法,以及索引的缺點。

    4 由於專案是部署在linux上,所以你看下linux裡開啟檔案,以及在檔案裡用關鍵字查資訊的命令,後面說分析問題和解決問題時要用到。

    5 看下Java核心,尤其是集合,異常處理,多執行緒等的面試題。

    4 後面是面試官提問

    面試官一般會根據你在專案介紹時丟擲的亮點提問,這時你要結合專案需求說明。

    問題1:談下你們專案裡是怎麼用到微服務的?

    我們是把個業務需求以微服務的方式切割成若干個功能要帶你,比如商品微服務,檔案上傳微服務等,各微服務模組間用restful的方式相互呼叫。在專案裡,是把這些微服務模組註冊到Eureka上,同時用zuul做閘道器來管理。

    問題2:說下Spring Cloud裡 實現增刪改查的流程?

    可能未必是這樣問,但面試官一定會考核候選人基本的增刪改查能力。對此你可以按如下的方面來準備。

    1 在控制器裡,用@RestController註解標識,用@RequestMapping來對映請求。

    2 用@Service註解標識業務層,業務層裡用@Autowired的方式引入Repo類。

    3 Repo類裡,就用JPA提供的基本方法,對於一些複雜的請求,就用@Query加原生SQL的方式來查詢。

    4 用@Entity和@Table註解標識POJO類。

    5 可以的話,講下用@Transactional做事務,同時可以準備事務隔離級別和事務傳播機制這兩個值錢要點。

    6 前端用ThyMeleaf模板,後端會用ModelAndView向前端傳資料。

    以上技術點用一個業務流程穿起來,比如對於下訂單的業務功能,我們首先會在控制器層裡用@RequestMapping對映到該請求,隨後會把該請求提交到業務層和Repo層,最終通過Repo層加入到資料庫裡,對於這個請求,我們會在業務層用@transactional註解來用事務管理。當訂單成功插入後,會通過ModelAndView向前端ThyMeleaf模板傳送成功資訊,並展示到前臺。

    問題3:你提到了你看過原始碼?你詳細說明下。

    你就結合原始碼,主要說下hashcode等

    問題4:你專案裡是怎麼用索引的?

    在這個專案的業務流水錶裡,資料規模比較大,有十萬規模,而專案裡經常要根據業務流水號來查詢,所以我們就對這個欄位建了索引。建好索引後,我們會非常小心,以免索引用不到,比如如果對該欄位進行左值查詢,或者用isnull判斷,就用不到索引了。同時,我看過索引的資料結構是b*樹。如果後面面試官允許,你可以邊畫邊講。

    問題5:你提到你用過junit做過單元測試,你是怎麼做的?

    在寫單元測試前,我會了解業務需求,尤其是邊緣輸入會導致的問題,然後就寫各種case,具體的,會用@Test註解來標識資料,同時我還會用mockit等方式來mock資料。尤其在遇到for,if等條件時,我會確保所有的分支和各邊緣條件和異常情況都測到。

    (這是重點)在測試過程中,我發現過不少問題,哪怕這些問題不是我造成的,我會第一時間分析,遇到需要協調的,我會第一時間和相關人員溝通處理。

    問題6:你是怎麼解決線上問題的?

    在簡訊微服務模組,我們是對接阿里雲平臺,用RabbitMQ(訊息佇列) 實現非同步的簡訊傳送,但有時候會發現,簡訊發不出去,通過看linux日誌(用vi開啟,ps命令搜尋),根據異常提示,發現是對同一個手機號傳送訊息限制一分鐘之後才可以再發送驗證,然後修改程式碼就解決問題了。

    這裡面試官不在乎你發現什麼問題,在乎你如何通過看日誌發現問題,以及發現問題後你要主動解決,而不是推諉。

    5 接下來是面試官自由發問

    這塊就太多了,雖然多,但網上有太多的準備題和答案,我這裡就給些連線,大家自己看吧。

    https://www.cnblogs.com/java1024/p/7685400.html

    https://www.cnblogs.com/marsitman/p/9539369.html

    但請注意,一定得圍繞Java核心,資料庫和框架方面準備,而且在準備時,優先準備專案介紹以及專案裡提到的技術。

    6 總結

    先總結下應屆生準備面試的要點。

    1 多挖掘商業專案經驗。   

    2 執行通你要介紹的專案,並瞭解其中的技術要點。 

    3  準備本文給出的面試說辭。   

    4  隨後再是刷各種面試題和演算法題。

    再總結下在面試中介紹專案的要點。

    1 通過本文給出的各種手段,把專案介紹成商業專案。   

    2 介紹專案時注重技術,別偏重業務。   

    3 丟擲亮點,等面試官發問   

    4 回答技術問題時,圍繞業務需求,以此證實在專案裡用過。

    要知道,有商業專案經驗的應屆生少之又少,而有商業專案經驗的應屆生往往還不知道如何把專案說成商業專案,所以如果你按本文給出的方法,在面試中向面試官證明你有商業專案,這種優勢可能是決定性的。這還不算,如果你按本文給出的方式準備技術問題,以及亮點說辭,你還能在證實商業專案的基礎上,向面試官展示你紮實的功底。

    這樣你哪怕當下基礎一般,但按本文給出方法準備一段時間後,你就能成功應聘。最後祝大家前程似錦。

   請大家關注我的公眾號:一起進步,一起掙錢,在本公眾號裡,會有更多精彩文章。

&n