你有提桶跑路的勇氣嗎?
本文轉載自微信公眾號「故里學Java」,作者故里。轉載本文請聯系故里學Java公眾號。
又是一天夜深人靜,老故里照常掏出電腦,給自己充一下電,剛好就看到了一個關于面試的課程,因為動了提桶的心思就看一下,感覺很有用,就結合自己的想法記錄下來。
(圖片來源:極客時間 每日一課《如何全面、高效地準備技術面試》)
接下來,分三部分:面試前、面試中、面試后。
面試前
1、編程能力
編程能力是最重要的,對于開發人員來說,這是核心競爭力,也是面試官最看重的部分之一。如何更快速的提高自己的編程能力?
每個人有各自的方式,比如:刷算法題,報訓練營、自己看源碼等等。先說說刷算法題,很多人喜歡刷力扣,保持著不錯的刷題數量,如果站在更高的層面上思考,這個題想考什么知識點?我對這些知識點的掌握程度?這個知識點還可以怎么來考?相信在堅持刷題一段時間之后效果是很顯著的。
專欄中作者自己的刷題經驗,我們也可以借鑒,當沒有頭緒的時候,可以嘗試二叉樹相關的題目,二叉樹也是面試中非常高頻的考點,而二叉樹題目中通常涉及遞歸和遍歷,這些也是后面解決更復雜問題的基礎。
舉例:力扣226題“翻轉二叉樹”:
二叉樹問題往往是通過遞歸方法解決的,而遞歸的要點就在于不需要關注整體完成了什么任務,只需要把任務細化為每次遞歸的子任務,剩下的交給遞歸就可以了。對于這個題來說,我們只要把二叉樹每個節點的左右節點進行交換,自上而下完成這個子任務,整個二叉樹就完成了翻轉。可以先寫出子任務:
- def invertTree(root: TreeNode) -> TreeNode:
- # 將二叉樹的左右子節點進行交換
- tmp_node = root.left
- root.left = root.right
- root.right = tmp_node
- return root
根據子任務代碼可以看出,針對輸入的一個根節點,我們已經可以把它的左右節點進行翻轉,那怎么讓這個任務遞歸進行呢?我們需要在完成當前任務的后邊添加遞歸任務就可以:
- def invertTree(root: TreeNode) -> TreeNode:
- # 將二叉樹的左右子節點進行交換
- tmp_node = root.left
- root.left = root.right
- root.right = tmp_node
- # 添加遞歸任務
- invertTree(root.left)
- invertTree(root.right)
- return root
在添加了遞歸任務后,我們還容易忽略一個問題,就是整個遞歸任務的最簡單情況是什么?根據題意應停止遞歸:
- def invertTree(root: TreeNode) -> TreeNode:
- # 處理 basecase,遇到葉子節點停止
- if root == None:
- return None
- # 將二叉樹的左右子節點進行交換
- tmp_node = root.left
- root.left = root.right
- root.right = tmp_node
- # 添加遞歸任務
- invertTree(root.left)
- invertTree(root.right)
- return root
在完成題目后,我們也應該對自己進行題問,明確自己是否掌握了這道題的知識點,即二叉樹的遍歷與遞歸思想的拆解,并且是否可以舉一反三,如果覺得自己掌握的不夠可以刷一些相似的題目。
以上這些是看到的別人的經驗,我自己一般喜歡玩自己平時工作中的代碼,閑的時候看看自己寫的代碼,很多時間就會有新的想法,可能當時寫的時候想的比較狹隘,隔了一段時間,結合模塊的整體情況重新設計,重構一下代碼,這個過程也是很有趣的,也可以發現一些影響性能的點,不斷優化,讓自己的程序更加順滑。自己寫的代碼自己是最了解的,結合平時自己學的系統設計、性能優化等方面的知識,現學現賣,這個實踐的過程是我認為效率最高的。
2、專業領域知識
編程能力只是面試過程中的一部分,專業領域的知識也是非常重要的,比如你特別熟悉電商業務、供應鏈業務、全渠道業務等等,通常也是因人而異,因崗位而異。兩方面準備:
準備自己當前或者之前做過的另外的專業知識,這對于找同領域崗位是非常有幫助的,很多公司都希望招一個技術ok又懂業務的伙伴,可以更好的融入團隊。
針對性領域知識,針對想投的崗位,進行一些特殊準備,這樣擴展投遞崗位的范圍,也可以提高面試的成功率。
3、建立相關內容
以上的準備可能需要提前準備,那么簡歷很多人就會忽略其重要性,在面試前匆匆準備。面試官在跟我們面對面之前,都是只能通過簡歷來了解我們的過往經歷,來進行題問。
在準備面試簡歷的時候也有很多技巧,社招簡歷,一些長期、規模較大的、較為重要的項目經歷可以詳述,一些簡單的項目就可以忽略不寫。對寫在簡歷上的內容充分準備,在面試的時候侃侃而談,適當地延申,這些都可以是加分項。
面試中
狀態
面試過程中與面試官交流的過程,轉不停是一個非常重要的關鍵點。精神狀態就是我們的精神面貌,可以從說話的聲音、表情、舉止等方面反映出來,好的精神狀態可以提高面試管與你交流的意愿,也有助于你更好的展示自己,提升面試官的印象分。思維狀態就是要保持思維敏捷,快速解決面試官拋出的問題,心理狀態對于面試的影響可能是比較大的,很多人在面試的時候很容易因為過度緊張手腳冰涼大腦一片空白,在面試的時候適度緊張,然后再逐漸放松,讓你感到些許躁動,思維活動迅速,這就是最好的心理狀態。
態度
態度主要就誠實、誠懇。搞技術的人一般都比較簡單,如果在面試過程中不誠實或不誠信的情況,印象分可能就直接沒有了,面試官也不愿意招這樣的人。誠懇是在面試過程中,與面試官出現意見不一致,可以態度誠懇的交流交換意見,不一定要爭論個高下。
溝通
面試過程中的最后一個關鍵點就是溝通,主要是三個原則:溝通主動、回答明確、沉著應對。面試過程中,面試官也會根據面試溝通情況綜合考量你在日常工作中的溝通能力,這些也是工作中非常重要的。舉例,如果在面試中突然忘記了某個點,不要突然就安靜下來,可以先從相關的內容說起,有助于快速回憶,哪怕真的想不起來,也可以展示出你真的了解這一塊,只是偶爾忘記了。
面試后
面試結束,在收到offer之前都不能放松,還是要復盤、總結,一方面對自己的技術查漏補缺,也可以對面試過程中發揮不好的地方進行總結,下次面試過程中多注意。
面試結束后,也可以主動和面試官確認后續情況,也不能太著急,最好是在面試結束后3-5天后確認,這樣也可以體現我們對于這個機會的看重,如果有后續的面試還可以提前著手準備。
最后
“金九銀十”馬上金九就要過去了,還有想法的兄弟們可以抓住后邊的機會,近期沒有跑路的兄弟,也可以思考一下,一些平時需要準備的東西,等面試的時候再去準備就有點遲了,日常中不斷提高自己,讓自己在未來有更多選擇。“
參考了:https://time.geekbang.org/dailylesson/detail/100056887#previewimg