Java工程師如何在1個月內做好面試準備?

来源:https://www.cnblogs.com/yuxiang1/archive/2019/03/04/10473142.html
-Advertisement-
Play Games

作者:石杉的架構筆記 寫在前面 春節長假轉眼已過,即將迎來的是一年一度的金三銀四跳槽季。 假如你準備在金三銀四跳槽的話,那麼作為一個Java工程師,應該如何利用1個月的時間,快速的為即將到來的面試進行充分的準備呢? 這兩篇文章,專門站在面試官的角度,給大家分析了平時互聯網公司是如何全方位的考察一個候 ...


作者:石杉的架構筆記

寫在前面

春節長假轉眼已過,即將迎來的是一年一度的金三銀四跳槽季。

 

假如你準備在金三銀四跳槽的話,那麼作為一個Java工程師,應該如何利用1個月的時間,快速的為即將到來的面試進行充分的準備呢?

 

這兩篇文章,專門站在面試官的角度,給大家分析了平時互聯網公司是如何全方位的考察一個候選人的。

 

總結起來,面試官考察候選人的時候主要是從技術廣度、技術深度、基礎功底、系統設計、項目經驗幾個角度來進行的。

 

那麼本文咱們就針對每一塊內容,具體的來說一下考察的一些點。更重要的,是針對考察的這些點,如何來快速的進行準備。

 

技術廣度

 

技術廣度,顧名思義,你作為一個合格的工程師在開發一個系統,完成一些具體的技術任務的時候,必然是要使用到很多的技術的,而且針對這些技術還需要掌握一些非常常見,各種不同的系統可能都會涉及到的一些技術架構/技術方案。

 

舉個例子,一個互聯網公司的比較重要的系統,首先肯定會用到分散式服務框架,比如dubbo/spring cloud,這樣可以將系統拆分為分散式的架構,或者說現在很流行的說法是微服務架構,這樣每個人負責一個服務或者是一個子系統。

 

接著這個系統很可能為了支撐一些特殊的技術場景會用到其他各種技術。

 

常見的比如說為了應對高併發的讀會用到Redis緩存技術,為了做系統非同步調用會用到RocketMQ技術,為了支撐大數據量的高性能檢索會用到Elasticsearch技術,等等。

 

那麼假如這個互聯網公司在招聘Java工程師的時候,他的招聘要求是什麼?

 

是不是必須得要求候選人起碼在dubbo、Redis、RocketMQ、Elasticsearch等多個技術領域,都有實際的生產項目使用經驗,而且還對這些技術的各種特性以及落地項目的時候常見的技術架構/方案都比較熟悉,這樣招聘這個人進來之後才能上手立馬幹活。

 

要求一個候選人對各種常見的技術以及相關架構都有實際的項目經驗以及對技術本身也足夠熟悉,這就是所謂的技術廣度,站在招聘候選人的角度來分析一下,想必大家就理解這個“技術廣度”考察項了。

 

實際上技術廣度這個東西,都說了是技術廣度了,所以肯定不僅僅只是上面提到的那點東西。

 

實際上,一個合格的適合互聯網公司的工程師在技術廣度上,還需要掌握其他很多東西。

 

比如分散式事務、微服務架構、分散式鎖、性能優化、Java虛擬機優化、Web Server優化、資料庫優化,等等。

 

越是大型的互聯網公司,就越是會針對技術廣度這塊,考察的可能會越廣泛,要求更高一些。

 

技術廣度的快速準備

那麼既然已經瞭解了這個技術廣度是什麼之後,現在針對這個技術廣度,在短時間內應該如何來快速的複習和準備呢?

 

這個問題,我們分成兩種情況來說。

 

假如說你是一個平時就很勤奮很努力,過去幾年一直在不停的學習的人,那麼恭喜你了,這塊東西百分百難不住你,因為你過去幾年持續的學習,可能已經自己把技術廣度的每個點的一些東西都研究過,而且或多或少都有一些使用的經驗

 

對於你學習過或者實踐過的東西,你肯定都記錄了一些筆記。你最好的準備方式,就是快速的回顧自己的筆記,把各種常見技術的核心原理和項目實踐都通過筆記回顧的方式快速的回憶起來,在大腦里形成一個知識網路。

 

如果你是一個不那麼勤奮的工程師,或者是一個工作才兩三年,涉世未深的小年輕,還那麼多的積累,此時怎麼辦呢?

 

那也沒關係,記住一句老話:臨陣磨槍,不快也光。你雖然沒啥積累,但是你都要面試了,怎麼著也得臨陣突擊一下吧。

 

下麵就是要教你的方法了:你可以自己把技術廣度可能涉及到的各種點都羅列出來,然後上網百度一下各個技術點常見的一些面試問題,或者是基本的一些核心原理。

 

通過百度各個技術點,然後從各種技術博客中快速瞭解一個技術的方式,短時間內可以迅速建立起來對技術廣度中涉及到的各個點的一些基本認知、核心原理,這樣在面試的時候避免一問三不知。

 

當然,大家也清楚,技術這東西是沒法速成的,你採用第二種方法來突擊,跟你第一種情況下有幾年的積累厚積薄發,最後落地到面試的時候,表現是截然不同的,也會直接決定不同的人會進入不同層次的公司。

 

第二種情況的同學可能面試的時候問到一個問題,就只能說個一兩分鐘,但是第一種情況的同學,功夫都在平時,只要複習到位,面試的時候問到一個問題往往可以舉一反三,一下子給你說個十多分鐘都可以。這就是區別所在。

 

不過,就算你只說一兩分鐘,總比一問三不知,和麵試官大眼瞪小眼好,對吧?

 

最後還是給各位強調一下,成功無捷徑,作為一個優秀的技術工程師,最重要的事情是一年365天,每天都不停的學習積累,堅持很多年。

 

吃得苦中苦,方為人上人,筆者早年進行技術積累的時候,也是這樣過來的。每天晚上學習到凌晨一兩點,周六周日全天學習,堅持了很多年。

 

只有通過幾年的積累,你才能夠厚積薄發,量變產生質變,菜鳥變成大牛。

 

技術深度

技術深度是指的什麼呢?簡單來說,假如你有了上面第一條說的技術廣度,這不能說明你有多優秀,僅僅只能說滿足了面試的最基本的要求,招聘進來過後立馬就可以上手幹活了,沒太大的培養成本。

 

決定你未來技術的高度有多高,還有你能否成為團隊里頂梁柱的,是你的技術深度。

 

技術深度,顧名思義,就是說你對一個技術掌握的深度,舉個最簡單的例子。假如你們公司的一個系統里用到了kafka這個技術,好那麼現在問題來了,線上生產環境中,每當高峰到來的時候,不知道為啥寫kafka總會偶爾拋個異常出來,或者是說寫入到kafka中的數據不知道為啥每天統計下來總會少一些。

 

線上生產環境遇到這種稀奇古怪的問題的時候,往往就是團隊里技術大牛出場的時候。技術大牛,一定是對各種技術都有一定深度研究的人,能否在遇到技術問題的時候,直接從本質和底層出發,分析和定位問題,最後帶領團隊解決問題。

 

比如上面說的那些問題,那要解決的話,首先需要一個技術大牛對kafka的源碼有過一定深度的研究,接著就是在遇到問題的時候根據當時的故障現場以及一些日誌,結合源碼的運行流程,來一步一步分析和定位出來問題所在,最後可能就是通過一些kafka的參數的調整,就可以解決上述棘手的生產問題。

 

上述描述的場景和能力,就是技術深度的體現,比如說你對某個技術有過完整的、全方位的、深入底層的源碼研究,這就已經是常人不可及的技術深度了。

因為很多人說是看過源碼,但是其實都是淺淺的看過一點點,理解不太深入。

 

同時如果還有一些對某個技術線上上生產環境遇到過一些棘手問題,通過源碼分析來解決問題的經驗的,那麼就是更優秀的技術深度的體現。

 

技術深度的體現,不一定是說看過源碼,這隻是其中一種表現形式而已,其他的還有,比如說對某個特別有難度的技術場景,比如說公司雙11每秒幾十萬QPS併發請求下,你負責了其中支付系統,成功應對超高併發量。

 

在這個過程中,你對系統架構的設計,對系統做的大量的併發優化、性能優化,都可以成為你在某個技術領域的技術深度的體現。

 

技術深度的快速準備

如何為了即將到來的面試快速的做技術深度的準備呢?

 

其實也很簡單,分為兩種情況來討論。

 

如果你在過去幾年,自己就深入閱讀過大量開源技術的源碼,在閱讀源碼的過程中,自己還把源碼的架構圖、流程圖,手工畫了大量的圖出來。

 

那麼此時你完全就可以把過去幾年的源碼研究筆記翻出來,快速過一下,練習如何在面試現場在白板上純手工把各種技術的源碼架構圖和流程圖現場畫出來。

 

或者在過去幾年,你對某個技術領域,針對很高的技術難度做過什麼複雜的系統,在那個技術領域扎下了很深的研究的話,那麼此時你也可以針對過去的筆記快速的複習,在面試現場一定要現場畫圖把你做過的複雜系統以及技術難度都說清楚。

 

但是如果你過去幾年沒上述所說的任何積累,那咋辦呢?

 

還是那句話:臨陣磨槍,不快也光。

 

一般面試官在考察技術深度的時候,很可能會問你:你對哪個技術比較熟悉一些?

 

遇到這個問題的時候,希望大家頭腦清醒一些,千萬不要腦子發熱隨便亂說,因為你要做好一個心理準備,一旦你說出某個技術出來,比如你說你平時用dubbo用的比較多,接著面試官可能會開啟深入源碼級別的10連擊模式

 

比如說,面試官立馬就會開始問你對你熟悉的某個技術,各種底層的機制和原理,讓你說源碼的理解,給你出各種技術挑戰之下這個技術該如何應對,等等諸如此類的問題。

 

我見過太多沒經驗的同學隨便說個熟悉的技術,其實他就僅僅只是會用罷了,但是一旦當我深入提問的時候,基本就進入一問十不知的情況了。

 

如果發生上述情況,會讓面試官對你的印象和態度極其不好,大家一定切記切記!

 

所以,假如你要是確實沒有過對什麼技術的深入的積累,這裡也教你一個臨陣磨槍的辦法:

 

你可以從簡歷中挑選出某個你相對來說用的比較多,熟悉一點點的技術,然後直接用萬能的百度,搜索“XX技術源碼分析”,“XX技術底層原理”。

 

通過幾天的時間快速的 “ 死記硬背 + 軟磨硬泡 ”,力爭對某個技術相對有一些稍微底層一些的理解。

 

這樣做,起碼在面試的時候被要求問到一些技術深度的時候,能相對給出一些比普通工程師的回答更好一些的分析,起碼能在面試的時候,讓你拿到好點的offer概率會相對更大一些。

 

做,總比不做好。你能對底層做了準備,有一些瞭解,總是要勝過那些浮於錶面,只會使用API的工程師吧!

 

同樣筆者這裡要說,回歸技術的本質,對於技術深度的積累,那更是沒有任何捷徑可言,更不是幾個月可以完成突擊的。

 

因為真要有技術深度的話,你可能需要花費至少2年的時間,從底層開始研究一些基礎性的技術。

 

在打通你的底層技術任督二脈之後,再去對常見的開源技術進行深入的源碼研究,比如說:dubbo、zookeeper、spring cloud、redis、rocketmq、elasticsearch,等等。

 

有了幾年的積累過後,最後你在面試的時候,技術深度的體現,其實都是厚積薄發的。

 

 

基礎功底

這塊其實沒啥可多說的了,大家估計現在慢慢都感覺到了,社招的有經驗的工程師去面試互聯網大廠的時候,很多時候可是都要考察數據結構和演算法的。

 

基礎功底的快速準備

 

這塊如何快速準備呢?

 

我的建議是,如果真的還有1個月要去面試了,那你最起碼用幾天的時間,網上搜三五十個最常見、最典型的演算法題,反覆練習、務必熟練。

 

熟練到什麼程度呢?你需要反覆練習,最後自己能夠在白紙上一遍就手寫出沒有bug的代碼。

 

哪些題目是最常見、最典型的?舉個例子,經典排序演算法以及其時空複雜度分析,經典查找演算法,棧、隊列、鏈表、二叉樹等常見數據結構的演算法題,這些相關的基礎題目都要熟練掌握。

 

當然最好的對於基礎的演算法之類的東西的積累,還是在平時,比如你要是堅持每天就在leetcode或者lintcode上花費半小時刷一個演算法題,堅持一年,你就刷了至少300道演算法題,堅持兩年,你就積累了七八百道演算法題。

 

這個時候有了足夠的積累,起碼面試是不用擔心任何基礎性手寫演算法之類的問題了,功夫其實還是在平時的。

 

至於演算法題目的難度選擇,只需要LeetCode或者Lintcode上easy難度和medium難度即可。

 

社招對演算法和數據結構的要求是低於校招的,校招是因為學生沒有太多項目經驗,只能考察你數據結構演算法,看你聰不聰明。

 

這是一張lintcode上對應的數據結構演算法題的難度 vs 求職的一個對照圖,大家可以參考下。

 

還是那句話,搞定easy和medium難度的題目即可。曾經網上流傳著一句話:如果你能手寫所有easy和medium的題目,3遍之內通過,可以搞定矽谷大部分公司的技術面試,包括谷歌、Facebook等頂級公司的面試,這個在國內也差不多的情況。

 

下篇預告

這篇文章從技術廣度、技術深度、基礎功底,三大塊出發,給大家講了講每一塊會如何考察,以及大家從長期積累和短期突擊兩個方面來看分別應該如何準備。

 

不過,其實我個人一向是秉持著技術是長期積累的事兒,不是短期突擊的事兒的態度。

 

但是如果你真的就是沒長期積累,又要去面試,希望大家好好看下這篇文章,對你會被考察的東西有個思想準備。

 

就算是臨陣磨槍,怎麼磨,這裡面也是有不少學問。

 

我作為一個面試官的角度,最反感的就是不好好準備就瞎面試的人,自己美化炮製一份簡歷,拿到很多面試機會。但是過去直接裸面,最後一問三不知,浪費大家的時間。

 

接下來會再寫一篇文章,來給大家聊一聊系統設計以及項目經驗這兩塊該如何優雅的準備

 

這同樣是Java面試,尤其是Java進階崗位的面試里非常重要的部分,敬請期待。

免費Java資料領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高併發分散式、大數據、機器學習等技術。
傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Golang基礎之字元串函數詳解 1、字元串常用的函數 字元串處理依賴strings包 len(str):按位元組統計字元串的長度,這個函數是一個內建函數。如果是中文算三個,因為Golang中預設編碼是utf8 []rune(str):字元串遍歷時,如果有中文,需要將這個字元串轉換成切片在遍歷 str ...
  • 本文總結設計模式中六原則和一法則,同時根據工作中的實踐,以及前輩總結經驗,描述原則和法則中的關鍵點來闡述之。 ...
  • Apache Maven是一個軟體項目管理工具,基於項目對象模型(Project Object Model,即POM)的概念,Maven可用來管理項目的依賴、編譯、文檔等信息。使用Maven管理項目時,預設配置項目依賴的jar包將不再包含在項目目錄中,而是集中放置在用戶目錄(預設配置)的.m2目錄下 ...
  • 1. 安裝配置Maven: 1.1 從Apache網站 http://maven.apache.org/ 下載並且解壓縮安裝Apache Maven 下載: http://maven.apache.org/download.cgi 1.2 配置 Maven 的conf文件夾中配置文件settings ...
  • Scala與Java有著相同的數據類型,Scala數據類型都是對象,Scala中沒有類似Java中那樣的原始類型。Scala 的基本數據類型有: Byte,Short,Int,Long 和 Char (這些成為整數類型)。整數類型加上 Float 和 Double 成為數值類型。此外還有 Strin ...
  • python shell與反彈shell 正常shell需要先在攻擊端開機情況下開啟程式,然後攻擊端運行程式,才能連接 反彈shell,攻擊端是服務端,被攻擊端是客戶端正常shell,攻擊端是客戶端,被攻擊端是服務端 反彈shell,先啟用服務端,再啟用客戶端 反彈shell的好處就是:一旦被攻擊端 ...
  • 前面介紹了集合與映射兩類容器,它們的共同特點是每個元素都是唯一的,並且採用二叉樹方式的類型還自帶有序性。然而這兩個特點也存在弊端:其一,為啥內部元素必須是唯一的呢?像手機店賣出了兩部Mate20,雖然這兩部手機一模一樣,但理應保存兩條銷售記錄才是。其二,不管是哈希類型還是二叉類型,居然都不允許按照加 ...
  • 【路徑】 絕對路徑:從根目錄開始鏈接的路徑 >cd C:\Windows\Boot\DVD\EFI\en-US 相對路徑:不從根目錄開始鏈接的路徑 > cd Boot\DVD\EFI\en-US Python的文件名是以 .py 結尾的 dir是查看當前目錄下的文件cd 路徑 跳轉到指定路徑cd . ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...