一、簡歷中應包含的要素,一個都別落下
為了讓簡歷更吸引技術面試官或其它相關篩選簡歷的人,大家在準備簡歷應當注意“直接”兩字:能讓篩選人能直接地看出本人的教育背景、作業經歷和專案經理,并讓他們“直接”感到這份簡歷能納入考慮范圍,
根據這個原則,大家可以按次序在簡歷中列出如下表所給出的要素:
基本資訊:比如姓名,性別,年齡,目前所在城市,是否在職,手機和電郵等,
- 讓招聘方了解候選人的基本資訊,
- 以便招聘方通過手機等方式能聯系到候選人,
- 按時間倒敘寫教育背景,一般只需要包含高中以上,初中高中等不必寫,但需包含專業和學歷學位資訊,
- 用專業和學歷學位等資訊向招聘方證明自己的技術背景,
總結性地列出自己所掌握的技能,比如:
- 有3年Java經驗,有2年Spring MVC經驗,
- 有3年Oracle經驗,有2年Oracle調優經驗,
一般這些總結點是和職務需求是一致的,這樣能讓招聘方直接地感受到該候選人的匹配度,在這基礎上,可以適當列些能成功幫到自己的總結點,按倒敘列出作業過的公司,并列出在這些公司里的專案經驗,這部分的技能下文會詳細描述,
在專案經驗描述里,能通過專案用到的技術經驗等,具體地給出自己“匹配”該崗位的證明,可以列出和應聘崗位相關的培訓經歷和得到過的獎勵,這些屬于加分項,同等情況下能優先錄用,
用少量篇幅列出自己的興趣和自我總結,讓招聘公司進一步了解候選人:
1.該如何描述公司的作業情況
這部分一般是按時間倒敘描述,比如可以按如下的格式寫:
2015年11月到2017年10月,在xx公司,職務是Java高級開發,離職理由是想進一步發展,
2012年2月到2015年11月,在xx公司,職務是Java初級開發,離職理由是想進一步發展,
- 按此格式寫之前的公司情況,這部分的內容應當盡量靠前,在羅列公司情況時,請大家注意如下的四個要點:
- 作業情況可以和專案經驗分開寫,一般會在后繼的專案經驗里寫具體用到的技術框架以及所做過專案的細節,在這里的作業情況描述里,可以不用過于復雜,讓招聘方看到你之前的公司情況即可,
- 盡量別出現長時間的“空白期”,比如上份作業是2月份結束的,而下份作業是6月開始的,如果出現持續三個月以上的“不在職狀態”,需要在簡歷中說明情況,比如這段時間你是換城市發展了,或辭職復習考研或復習考公務員,總之得找個能說得過去的理由,
- 在簡歷上,盡量別讓人感覺你每份作業都做不長,但不能以此作假,比如我見過有候選人會合并公司,比如2016年11月到2017年3月在A公司,2017年4月到10月在B公司,他為了不讓招聘方感覺他換作業太頻繁,在簡歷上就寫2016年11月到2017年10月在B公司作業,而故意合并了A公司的經歷,這樣的話,如果遇到背景調查,會露餡,即使有些公司不做調查,在勞動手冊等材料上也能反應出真實的作業情況,所以這種做法有一定的風險性,
- 這里推薦的做法是,不要合并公司,但可以寫明理由,比如當時小王是被外派公司A以人力派遣的形式外派到B公司,但沒過多久A公司因某種原因不再具備人力派遣的資質了,這時小王就不得不終止與A公司的合同轉而和B公司簽約,這樣雖然看上去小王是換了公司,但實際上沒有,通過類似的合理解釋,招聘方就不再會質疑小王的作業能力和穩定性了,
- 可以寫上合適的離職理由,尤其當你短時間里換作業比較多,可能引起招聘方的質疑的情況里,更該考慮些合適的理由,
- 合理的離職理由可以是,想為自己提供一個更大的發展空間,或想通過升級來獨當一面,以此進一步提升自己的能力,或公司因資金等方面的原因倒閉了,總之,這不是我主觀上不穩定,而是由于客觀原因導致我不得不換作業,
- 而可能會導致沒面試機會的離職原因是,待遇問題(雖然大家心知肚明,但不能這樣寫),或無法承受大壓力,或同事領導排擠,這類理由往往會暴露出候選人的缺點,所以不建議大家采用,從這意義上來講,“合同期滿”也不是一個好的離職原因,因為如果候選人能力強,那么為什么原公司不和你續約呢?
- 總之,在描述公司情況時,一旦出現會讓招聘方感覺你能力不強或不穩定時,一定得醒目地寫上足以信服的理由,這樣你的簡歷才會有機會被繼續被讀下去,進而你才會有技術面試的機會,
2.盡量把學習培訓專案和畢業設計專案往商業專案上靠
商業專案是指能掙錢的專案,和它對應的就是些不以掙錢為目的的學習專案或畢業設計專案,正因為客戶付了錢,所以商業專案的要求要遠遠高于學習或畢業設計專案,這也是為什么招聘公司會看重商業專案而會主動過濾學習專案的原因,
比如小張在大三時幫計算機系的王老師所在的ABC軟體公司干了半年的活,如果小張在簡歷上寫:“在校期間,從x年x月到x年x月完成了xx系統,用到了xx技術”,那么這多半會被當成類似于課程設計的學習經驗,但如果再加上如下關鍵性的描述:“這個系統是屬于xx公司的xx商業專案里的一部分,我和另外三位開發人員做了半年,最終這個系統成功上線并在客戶xx公司的環境里投入運營”,那這樣小張的商業專案總年限里就能加上這半年時間了,
又如小李在做畢業設計時,花了7個月的時間參與了導師的一個電商商業專案,他主要的作業是設計一個調度演算法,但也參與了一些諸如訂單管理模塊的作業,如果他就平淡地寫一句,畢業設計是xx,畢業論文是xx,那么招聘方看過就算了,也不會認為小李在做畢業設計時還有過商業專案經驗,這樣小李未免有些吃虧,
但如果這樣寫:“在x年x月到x年x月的7個月里,在畢業設計中,我參與了xx公司的xx電商專案,客戶方是x,我參與了訂單管理和xx模塊,并設計了其中的調度演算法,在我的畢業論文里,詳細介紹了這種做法”,文字沒修改太多,但足以讓小李增加7個月的商業專案經驗,
我們發現大多數初級程式員的水平其實也差不多,這時就得看誰的商業專案經驗豐富了,比如有次我們無法從兩位候選人中權衡,因為他們的綜合條件和面試情況都差不多,但其中有一位在大三階段有段為期6個月的商業專案實習經驗,另一位沒有(也有可能他也有但沒當成商業專案來寫),這種情況下我們就錄用了有實習經驗的候選人了,
3.描述專案的技巧
我們可以根據職位需求,從如下幾個方面來描述專案經驗:
1.簡要描述專案的背景,比如時間范圍,客戶是誰,專案規模有多大,如下是范例,
從x年x月到現在(這個時間范圍至少是最近半年),我參與某外匯交易系統,客戶是xx銀行,這個專案組的構成是,1位專案經理外加10位開發,總共的規模大概在80個人月左右,
2.大致描述專案的需求和包含哪些模塊,然后簡要說下你做了哪些模塊,同時說下在這個專案用到的開發工具和主要技術點,這部分的描述如下所述,
這個外匯交易系統包括掛盤撮合成交、實盤成交、反洗錢和資料批處理等模塊,我主要負責了掛盤撮合成交模塊,其中用到了Spring MVC架構,資料庫是Oracle,用Mybatis實作的ORM,該系統是運行發布在Weblogic服務器上,我們還用了Nginx來實作負載均衡,用Redis來快取資料,在這個專案里,我還用到了JS實作了一些前臺頁面,
3.這里可以結合職位的需求,描述JD里要求的技術在專案里是如何用的,同樣這里也應圍繞技術,而別多寫業務細節,
4.在簡歷中描述專案時可以添加的亮點,
5.我們見過不少簡歷,在描述專案時,也能像上文一樣,能根據招聘職位的具體要求展示出自己的匹配點,這種簡歷屬于“達標”,即可以納入考慮范圍,在這個基礎上,如果大家在專案里有下表列出的亮點,一定請寫上,這就是大家優于別人的地方,
- 資料庫和JVM調優
- 你理解的框架底層代碼
- 專案里用到的設計模式
- 專案管理和部署工具
- 結合若干案例,講述你分析和解決bug的技能
- 其它能幫助到你的加分項,比如工期緊,用到新技術等
4.哪些簡歷可以通過篩選
從面試官角度來看,除了學歷等硬體條件外,如果簡歷滿足如下的4點要求,就一般能有面試機會了,
1.商業專案足量,且其中包含的技能和職位介紹很匹配,
2.最近用到的技能和職位介紹很匹配
3.沒有過長職業空白期或不穩定等情況
4.一定請記住,公司只能通過簡歷認識到你,簡歷上沒寫清楚等同于你不行,
5.其實這就是我們寫簡歷的方向,而且,在針對具體公司投遞簡歷時,還可以以此為目標,微調簡歷,
5.面試時該如何講解技術專案贏得面試官好感
別害怕,因為面試官什么都不知道,
面試官是人,不是神,拿到你的簡歷的時候,是沒法核實你的專案細節的(一般公司會到錄用后,用背景調查的方式來核實),更何況,你做的專案是以月為單位算的,而面試官最多用30分鐘來從你的簡歷上了解你的專案經驗,所以你對專案的熟悉程度要遠遠超過面試官,所以你一點也不用緊張,如果你的作業經驗比面試官還豐富的話,甚至還可以控制整個面試流程(筆者在面試方面成精后也經常干這種事情,大家一定也能行),
面試前你有充足的時間準備,一般在面試前用30分鐘閱讀你的簡歷,溝通程序,你可以出錯,但別出關鍵性的錯誤,不會太為難你,除非你太差,
你有足夠的技巧,也可以從網上找到足夠多的面試題,
其實就問些通用的有規律的問題,
既然面試官無法了解你的底細,那么他們怎么來驗證你的專案經驗和技術?下面總結了一些常用的提問方式:
1.讓你描述作業經驗和專案(極有可能是最近的),看看你說的是否和簡歷上一致,
2.看你是否真的做過這些專案
3.看你簡歷上專案里用到的技術,比如框架、資料庫,然后針對這些技術提些基本問題,
4.還是驗證你是否做過專案,同時看你是否了解這些技術,為進一步提問做準備,
5.針對某個專案,不斷深入地問一些技術上的問題,或者從不同側面問一些技術實作,看你前后回答里面是否有矛盾,
6.深入核實你的專案細節,針對某技術,問些專案里一定會遇到的問題,比如候選人說做過資料庫,那么就會問索引方面的問題,
7.通過這類問題,核實候選人是否真的有過專案經驗(或者還僅僅是學習經驗),
6.面試時的錯誤表現
在面試程序中,如果候選人出現如下的表現,那么很有可能過不了面試,請大家注意,
1.面試時介紹的專案時間等情況簡歷上寫的不一致,這就有簡歷造假的嫌疑,
2.介紹專案時只介紹業務,忽略技術,因為面試官只關心技術,不關心業務,
3.對于提到的技術,連最基本的問題也回答不上,這就說明候選人這項技術沒掌握,
4.說得太流利或太磕磕巴巴,這就說明在背詞或者是表達有問題,
7.面試中介紹專案的范例
第一步,介紹專案基本情況,
可以這樣說,這個專案是xx產品的xx模塊的,有xx和xx模塊,我做了xx模塊,用了半年,我的組里一共有5個人,這里可以談下業務,但別深入,因為面試官不熟悉,也不想熟悉候選人的業務,這塊時間控制在1分鐘之內,
第二步,介紹專案里關鍵技術和管理方式,
可以這樣說,這個專案里,我用到了Spring框架,用到nginx等組件,專案管理用Maven,部署用jenkins,靜態掃描用Sonar,任務管理和bug管理用jira,平時采用敏捷的專案迭代方式,每天有站會,大約1月一個迭代版本,這塊可以根據自己的情況來介紹,時間也別太長,估計用1分鐘也就夠了,
第三步,結合業務講用到的技術,但別展開,
比如有個職位介紹,里面寫到需要有資料庫優化的經驗,那么可以說,專案里xx模塊,我用到MyCat作為分庫分表,(不展開技術),上線后,資料庫能承受住每秒2000個并發請求(說下用好的結果),
又如一個JD里說要用到微服務技術,那么就可以說,專案里用到了Spring Cloud框架,用到了Ribbon,Eureka等組件,容器是Docker,用好以后,在發布時會發現,各模塊之間的呼叫耦合性大大降低,
8.介紹專案時的要點歸納
從上述介紹專案的范例中,可以歸納出相關要點如下,
1.面試前,需要閱讀職位介紹,挖掘用過的技能要點,然后盡可能地在介紹專案里提到這些技能關鍵字,
2.在介紹專案里,結合業務,提到職位介紹里的技術,因為一旦技術結業業務,就說明你有過相關技術的實踐經驗,而不是僅僅只會理論,
3.別過多介紹業務,多拋出職位介紹里的關鍵字,還是這句話,面試官不關心業務,你提到業務只是以此證明你在實踐中用過相關技術而已,
4.此時還在專案介紹階段,別過多展開技能,你拋出技能關鍵字后,面試官自然會問的,而一旦你過多展開技術,那么面試官就有可能感覺到你思路不清晰,
9.框架是重點,但別讓人感覺你只會山寨別人的代碼
一般作業在3年內的候選人,大多僅僅是能“山寨”別人的代碼,也就是說能在現有框架的基礎上,照著別人寫的流程,擴展出新的功能模塊,比如要寫個股票掛單的功能模塊,是會模仿現有的下單流程,然后從前端到后端再到資料庫,依樣畫葫蘆寫一遍,最多把功能相關的代碼點改掉,
如果單純使用SSM框架,大多數專案都會有痛點,比如資料庫性能差,或者業務模塊比較復雜,并發量比較高,用Spring MVC里的Controller無法滿足跳轉的需求,所以我一般還會主動問:你除了依照現有框架寫業務代碼時,還做了哪些改動?
我聽到的回答有:增加了Redis快取,以避免頻繁呼叫一些不變的資料,或者,在MyBitas的xml里,select陳述句where條件有isnull,即這個值有就增加一個where條件,對此,會對任何一個where增加一個不帶isnull的查詢條件,以免該陳述句當傳入引數都是null時,做全表掃描,或者,干脆說,后端異步回傳的資料量很大,時間很長,我在專案里就調大了異步回傳的最大時間,或者對回傳資訊做了壓縮處理,以增加網路傳輸性能,
對于這個問題,我不在乎聽到什么回答,我只關心回答符不符邏輯,一般只要答對,我就會給出“在框架層面有自己的體會,有一定的了解”,否則,我就只會給出“只能在專案經理帶領下撰寫框架代碼,對框架本身了解不多”,
其實,在準備面試時,歸納框架里的要點并不難,我就不信所有人在做專案時一點積累也沒,只要你說出來,可以說,這方面你就碾壓了將近7成的競爭者,
10.別單純看單機版的框架,適當了解些分布式
在描述專案里框架技術時,最好你再帶些分布式的技術,下面我列些大家可以準備的分布式技術,
反向代理方面,nginx的基本配置,比如如何通過lua語言設定規則,如何設定session粘滯,如果可以,再看些nginx的底層,比如協議,集群設定,失效轉移等,
遠程呼叫dubbo方面,可以看下dubbo和zookeeper整合的知識點,再深一步,了解下dubbo底層的傳輸協議和序列化方式,
訊息佇列方面,可以看下kafka或任意一種組件的使用方式,簡單點可以看下配置,作業組的設定,再深入點,可以看下Kafka集群,持久化的方式,以及發送訊息是用長連接還是短攔截,
以上僅僅是用3個組件舉例,大家還可以看下Redis快取,日志框架,MyCAT分庫分表等,準備的方式有兩大類,第一是要會說怎么用,這比較簡單,能通過組態檔搭建成一個功能模塊即可,第二是可以適當讀些底層代碼,以此了解下協議,集群和失效轉移之類的高級知識點,
11.資料庫方面,別就知道增刪改查,得了解性能優化
在實際專案里,大多數程式員用到的可能僅僅是增刪改查,當我們用Mybatis時,這個情況更普遍,不過如果你面試時也這樣表現,估計你的能力就和其它競爭者差不多了,
這方面,你可以準備如下的技能:
1.SQL高級方面,比如group by, having,左連接,子查詢(帶in),行轉列等高級用法,
2.建表方面,你可以考慮下,你專案是用三范式還是反范式,理由是什么?
3.尤其是優化,你可以準備下如何通過執行計劃查看SQL陳述句改進點的方式,或者其它能改善SQL性能的方式(比如建索引等),
4.如果你感覺有能力,還可以準備些MySQL集群,MyCAT分庫分表的技能,比如通過LVS+Keepalived實作MySQL負載均衡,MyCAT的配置方式,
同樣,如果可以,也看些相關的底層代碼,
5.哪怕你在前三點表現一般,那么至少也能超越將近一般的候選人,尤其當你在SQL優化方面表現非常好,那么你在面試高級開發時,資料庫層面 一定是達標的,如果你連第四點也回答非常好,那么恭喜你,你在資料庫方面的能力甚至達到了初級架構的級別,
12.Java核心方面,圍繞資料結構和性能優化準備面試題
Java核心這塊,網上的面試題很多,不過在此之外,大家還應當著重關注集合(即資料結構)和多執行緒并發這兩塊,在此基礎上,大家可以準備些設計模式和虛擬機的說辭,
下面列些我一般會問的部分問題:
String a = "123"; String b = "123"; a==b的結果是什么?這包含了記憶體,String存盤方式等諸多知識點,
HashMap里的hashcode方法和equal方法什么時候需要重寫?如果不重寫會有什么后果?對此大家可以進一步了解HashMap(甚至ConcurrentHashMap)的底層實作,
ArrayList和LinkedList底層實作有什么差別?它們各自適用于哪些場合?對此大家也可以了解下相關底層代碼,
volatile關鍵字有什么作用?由此展開,大家可以了解下執行緒記憶體和堆記憶體的差別,
CompletableFuture,這個是JDK1.8里的新特性,通過它怎么實作多執行緒并發控制?
JVM里,new出來的物件是在哪個區?再深入一下,問下如何查看和優化JVM虛擬機記憶體,
Java的靜態代理和動態代理有什么差別?最好結合底層代碼來說,
通過上述的問題點,我其實不僅僅停留在“會用”級別,比如我不會問如何在ArrayList里放元素,大家可以看到,上述問題包含了“多執行緒并發”,“JVM優化”,“資料結構物件底層代碼”等細節,大家也可以舉一反三,通過看一些高級知識,多準備些其它類似面試題,
13.Linux方面,至少了解如何看日志排查問題
如果候選人能證明自己有“排查問題”和“解決問題”的能力,這絕對是個加分項,但怎么證明?目前大多數的互聯網專案,都是部署在Linux上,也就是說,日志都是在Linux,下面歸納些實際的Linux操作,
能通過less命令打開檔案,通過Shift+G到達檔案底部,再通過?+關鍵字的方式來根據關鍵來搜索資訊,
能通過grep的方式查關鍵字,具體用法是, grep 關鍵字 檔案名,如果要兩次在結果里查找的話,就用grep 關鍵字1 檔案名 | 關鍵字2 --color,最后--color是高亮關鍵字,
能通過vi來編輯檔案,能通過chmod來設定檔案的權限,
當然,還有更多更實用的Linux命令,但在實際面試程序中,不少候選人連一條linux命令也不知道,還是這句話,你哪怕知道些很基本的,也比一般人強了,
14.通讀一段底層代碼,作為加分項
如何證明自己對一個知識點非常了解?莫過于能通過底層代碼來說明,我在和不少作業經驗在5年之內的程式員溝通時,不少人認為這很難?確實,如果要通過閱讀底層代碼了解分布式組件,那難度不小,但如果如下部分的底層代碼,并不難懂,
ArrayList,LinkedList的底層代碼里,包含著基于陣列和鏈表的實作方式,如果大家能以此講清楚擴容,“通過列舉器遍歷“等方式,絕對能證明自己,
HashMap直接對應著Hash表這個資料結構,在HashMap的底層代碼里,包含著hashcode的put,get等的操作,甚至在ConcurrentHashMap里,還包含著Lock的邏輯,我相信,如果大家在面試中,看看而言ConcurrentHashMap,再結合在紙上邊說邊畫,那一定能征服面試官,
可以看下靜態代理和動態代理的實作方式,再深入一下,可以看下Spring AOP里的實作代碼,
或許Spirng IOC和MVC的底層實作代碼比較難看懂,但大家可以說些關鍵的類,根據關鍵流程說下它們的實作方式,
其實準備的底層代碼未必要多,而且也不限于在哪個方面,比如集合里基于紅黑樹的TreeSet,基于NIO的開源框架,甚至分布式組件的Dubbo,都可以準備,而且準備時未必要背出所有的底層(事實上很難做到),你只要能結合一些重要的類和方法,講清楚思路即可(比如講清楚HashMap如何通過hashCode快速定位),
那么在面試時,如何找到個好機會說出你準備好的上述底層代碼?在面試時,總會被問到集合,Spring MVC框架等相關知識點,你在回答時,順便說一句,“我還了解這塊的底層實作”,那么面試官一定會追問,那么你就可以說出來了,
15.預估面試題,準備對應的回答,哪些問題面試中大概率會被問到
在面試里,不管如何引導面試官,其實如下方面的問題很大可能會被問到,所以在面試前可以提前準備,
職位介紹里提到的技能要點,比如職位介紹里有提到Mybatis,那么面試官一定會問相關問題,
你在專案介紹時拋出的技術關鍵字,比如你在面試程序中介紹專案時提到了Redis,那么在介紹完專案后,面試官就會問,“你專案里是如何使用Redis的?”,類似的,簡歷中你寫的技術,也有可能會被問到,
Java核心,資料庫,Spring框架,專案管理等基礎問題,這些就不用說了,不過如果你引導得當的話,面試官會花費很多時間問你提到的技術,這塊會問得比較少,
必要的演算法題,比如排序等,其實面試官感覺你技術可以的話,這塊就不怎么會問了,但準備的時候需要看這個,有備無患,
16.面試官提問的方式
以上介紹了常見問題的種類,這里介紹下面試官常用的提問方式,
問用法,比如直接提問,專案里你netty怎么用的?這塊大家可以結合專案準備說辭,
問流程,比如結合業務,講下nginx負載均衡的用法?這也可以結合專案和網上搜到的資料準備說辭,
問原因,比如為什么要用netty?這塊就要結合專案說明了,
問技術點, 比如netty里零拷貝怎么回事?對此,需要對簡歷上提到的每個技術點,以及面試程序中將要提到的每個技術點,搜相關面試問題,并結合業務說明,
問基礎知識,比如finally從句的用途,這就可以通過刷題來獲取了,
17.舉例說明該如何準備面試問題
下面給出準備問題的技巧,斟酌面試時拋出的技能,逐一準備說辭,
針對技術,網上搜索問題,比如搜Spring IOC面試題,結合網上的參考答案準備說辭,
準備技術的實施要點,比如做了哪些組態檔,你在專案里踩過哪些坑?
最好結合底層代碼說明,
如下給出兩個例子,先以MyCat分庫分表為例,給出介紹說辭的技巧,
1.準備業務背景,為什么要用?比如我們專案資料庫并發壓力大,需要用MyCat作為分庫分表,
2.如何使用,無非是設定分庫規則,改寫SQL陳述句等,
3.準備下踩到的坑,比如自增長主鍵在每臺機器上都要保證唯一,
4.然后再結合些底層代碼,準備下一條SQL陳述句是如何分發到對應的分庫上的,然后執行好以后又如何回傳的,
5.再可以準備些只有做過才知道的細節,比如發布上線和清洗資料的流程,
6.網上找些MyCAT的面試題,準備相關說辭,
一般說到了這里,面試官就不怎么問了,哪怕你后面再被問倒,面試官也會感覺你MyCat很熟悉,
下面以Netty為例,給出相關技巧,
結合業務需求點,說下為什么要用這個技術,怎么用的,以及用了有什么好處? 比如為了優化網路通訊協議,所以用基于TCP協議的Netty,業務模塊里的xxx功能是用到netty,
準備下踩到的坑,比如在某業務場景里,我遇到了半包粘包問題,我是通過除錯底層代碼解決的,
用了Netty對專案的幫助,比如Netty是基于TCP協議的,它要比Http協議要輕,所以通訊性能高,且Netty內部的Reactor執行緒模型對系統的IO幫助很大,
基于零拷貝、讀寫索引和異步處理機制,準備些底層代碼,在面試里說明,
順帶再準備下Netty的組件,作業流程等問題,這能搜到問題和相關說辭,
在講的時候,大家甚至可以邊畫Netty流程圖,再結合底層代碼說明,這樣面試官一定會對大家刮目相看,
其實這里僅僅是拋磚引玉,或者提到的技術比較高深 ,但可以講述的技識訓可以是執行緒池,MyBatis組件,Redis,甚至是虛擬機優化等,哪怕是初級開發,也能多少抓住一兩個點,按上述思路說明,
18.面試時如何不被面試官牽著鼻子,自我把控面試的走向?在介紹專案時,引導話題的技巧以及案例
在做專案介紹的時候,你可以穿插說出一些你的亮點,但請記得,不論在介紹專案還是在回答問題,你當前的職責不是說明亮點而是介紹專案,一旦你詳細說,可能會讓面試官感覺你跑題了,
所以這時你可以一筆帶過,比如你可以說,“我們的專案對資料要求比較大,忙的時候平均每小時要處理幾十萬條資料”,這樣就可以把面試官引入“大資料”的方向,
你在面試前可以根據職位的需求,準備好這種“一筆帶過”的話,比如這個職位的需求點是Spring MVC框架,大資料高并發,要有資料庫調優經驗,那么介紹以往專案時,你就最好突出這些方面你的實際技能,
再給大家舉個例子,比如Java虛擬機記憶體管理和資料庫優化是絕大多數專案都要遇到的兩大問題,大家都可以在敘述專案經驗時說,在這個專案里,我們需要考慮記憶體因素,因為我們的代碼只允許在2G記憶體環境中運行,而且對資料庫性能要求比較高,所以我們經常要監控優化記憶體和資料庫里的SQL陳述句,這樣當面試官深入提問時,就能拋出自己準備好的虛擬機記憶體優化和資料庫優化方面的說辭,
或者說,在專案介紹時提到,在xx模塊里,我們使用了nginx做負載均衡,達到了承受百萬級并發的效果,從而引出nginx的話題,
實在不行,你也可以說“我除了做開發,也做了了解需求,測驗和部署的作業,因為這個專案人手比較少,壓力比較大”,這樣你也能展示你有過獨擋一面的經歷,
19.以Netty為例,講述引出值錢話題的技巧
比如在介紹專案時,我提到了Netty技術,如果面試官沒打斷,我就問,能否介紹其中的Netty細節?得到允許后再說,
或者把技術關聯到面試官可能會問的問題上,比如問及網路通訊時介紹Netty,這個事先整理一個問題串列,遇到此類問題,順帶拋出Netty說辭,
問題串列可以是,專案里你用到哪些組件?用到哪些通訊協議?如何進行模塊間的互動等等,然后先回答問題本身,再擴展到Netty,但請記住,別自說自話,因為過猶不及,其它技術照此辦理,
20.以案例說明,在回答問題時引出準備過話題的技巧
比如面試官問你Spring相關問題,假設問到,你對Spring依賴注入了解多少,在說好Spring相關問題后再提一句,我們同時用Spring,以低耦合的方式整合了MyCAT組件,從而達到了分庫分表的效果,這樣就引出了分庫分表的話題,
或者在介紹Netty流程后,再說一句,在實際專案里,我們還遇到了因Netty底層代碼而導致的OOM問題,對此,我們組負責排查和解決問題,這樣就自然而然地引出了OOM記憶體溢位的問題,
或者在介紹完執行緒相關問題時,再提一句,在專案里,我們用到了執行緒池來管理執行緒,這樣就引出了高并發的話題,
但在引導的時候,請注意如下的三點:
1.面試官不介面的,應當立即停止,再說下去就屬于自說自話了,
2.還是要準備必要的基礎問題,還是要刷題,還是要準備各種說辭,因為面試前的全面準備,是引導的基礎,
3.應當引導面試官問些“框架”和“性能調優”等值錢方面的技能,這樣才能最大程度地展示你的能力,同樣,此類問題需要面試前準備,
21.你可以引導的加分項
1. 能根據專案的需求選用合適的集合物件,比如知道ArrayList和LinkedList的差異,并能合理選用
2.能在合適的場合選用WeakHashMap
3.例外處理方面,能在finally從句里寫釋放資源的代碼
4.可以適當講一些集合的JDK底層實作代碼
5.能通過PreparedStatement的預處理方法來防止SQL注入,
6.能通過批處理來提升操作性能
7.能通過實體講述事務隔離級別的含義
8.會結合專案使用執行緒池
9.能通過鎖或信號量等手段正確地處理多執行緒并發時的資料一致性,
10.熟悉各種并發組件
11.建表時需要根據專案的資料情況,考慮是采用三范式或是反范式
12.可以通過查看日志等方式看哪些SQL需要調優
13.可以通過執行計劃查看SQL的所消耗的代價,并據此調優
14.可以通過建索引,建磁區等手段來優化SQL性能
15.可以說下JDBC或Spring里是如何管理事務的
16.可以說下Spring里的宣告式事務的做法和優點
17.可以舉例說明事務隔離級別和事務傳播機制的用法
18.可以通過MyCAT進行分庫分表,從而減輕對單表訪問所需要的代價
19.可以通過集群等方式來承擔對資料庫的過量的訪問請求
20.可以說下Spring的IOC和AOP是如何優化專案結構的
21.可以說下攔截器等Spring組件對專案的幫助
22.可以說下Spring Boot對專案的幫助
23.使用這種ORM技術時,如何優化訪問和操作資料庫的性能
24.Spring和Mybatis等的整合,可以講下整合框架的細節,并可以舉例說明整合后的框架能很好地適應需求的變更
25.如何應對高并發的場景:1.如何達到負載均衡;2.如何進行失效轉移
26.定位排查和解決問題:1.如何通過分析log定位問題;2.問題的根源和解決方法
27.健康檢查和線上監控:1.如何通過健康檢查確定系統正常運行;2.出了問題,如何發出警告
由此大家能看到,其實很多事先可以準備的點,其實是你沒有想到,但你專案里一定用過,你據此準備,在通過上述技巧在面試中合理地找機會說出來,你面試成功的可能性一定會大大增加,
22.先從面試官的角度看下,哪些人能面試成功?
1.最近半年的專案經歷和JD匹配度很高
2.通過面試,JD上的技能候選人大多能掌握
3.候選人在Java核心,資料庫和框架方面的基礎技能達標
4.不是刺頭,團隊合作沒問題,沒有其它大問題
23.但如果大家面試前不準備,或者準備不到位,那么就會面臨如下的后果了
1.簡歷未必能過篩選,甚至沒有面試機會
2.無法證明專案里用到的技術和JD高度契合
3.介紹專案經驗時沒問題,把提問的主動權交給面試官
4.不知道將會問哪些問題,所有問題都現場想
5.在面試現場,沒法讓面試官全面了解你的技術亮點
24.但如果按照上述方法準備,大家很大程度上能得到如下的識訓
1.能通過微調簡歷,得到更多的面試機會
2.能通過挖掘專案經驗,證明自己的技能和JD契合
3.能知道哪些屬于值錢技能,并能結合業務準值錢技能和調優技能的說辭,而且能不露痕跡地展示
4.不僅限于coding,更能展示專案管理(sonar等),linux,專案部署(nginx)等方面的技能
5.知道面試大致會問哪些問題,并由此能事先準備
6. 能事先盡可能多地挖掘亮點,并在面試時展示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/174015.html
標籤:其他
