1. 程式人生 > >面試回答問題的小套路

面試回答問題的小套路

先把結論丟擲來,如果感覺有道理就繼續往下看,如果不認同就省了浪費時間了

  • 面試回答問題不是做選擇題,更不是做判斷題,而是作文題
  • 要引導面試官往你自己會的題目上問問題,切忌就問題回答問題
  • 首先要分析問題,然後再提出解決的方案

舉一個栗子

問:單例模式哪一種實現效率高?

錯誤的回答:靜態內部類延遲載入效率高,或者:DCL效率高。

正確的回答:單例模式有很多種實現方式,第一種是直接new一個單例做為類的static成員,這種方式的好處是簡單,而且沒有執行緒安全問題,缺點是無論單例是否被使用到,都要做例項化,假如沒有使用到就會浪費了。第二種是。。。,優點是。。。,缺點是。。。,第三種。。。。。

解析:

我們一開始就說了,面試不是讓你做選擇題,對於這個問題來說,你應該去分析有多少種實現方式,然後說明每一種的優缺點,答案自然而然就出來了。

再舉一個栗子:

問: 什麼是AOP?Spring中為啥要引入AOP或者AOP有什麼好處?

錯誤的回答:AOP就是面向切面程式設計。引入AOP可以提高程式碼的可讀性和可維護性。

正確的回答:AOP簡單了說就是在目標方法執行前可以自定義一些操作,在方法執行中或者執行後也可以自定義操作,所以,一般都是基於代理模式來實現,Spring支援兩種代理模式,jdk原生的代理和cglib代理。

AOP可以給程式帶良好的擴充套件性和封裝性,可以實現業務程式碼與非業務程式碼的隔離。比如:可以在不改變目的碼的前提下,實現目標方法的增強,比如做方法執行時間監控,記錄方法訪問日誌,再比如:資料庫的connection.close()預設是把連線關閉掉,但是資料庫連線池的場景中,為了不改變使用者的使用習慣,一般呼叫close的時候是把連線重新放回到池中,這是因為從資料庫連線池中拿到的連線實際上是原生連線的一個代理類,所以內部把close給重寫了。實際上代理模式的優點實際上也是AOP的優點。

解析:面向切面程式設計是什麼鬼?單純的解釋字面意思沒有任何意義!你得分析通過問這個問題的他想考察你什麼,我們這麼回答首先說出了AOP的實現方式,還說了如何使用,還說了代理模式。面試官很有可能會接著問:那你說說JDK的代理和Cglib代理有啥區別?或者會問:除了代理模式,你還知道哪些設計模式?成功引出新的話題。這就是我們一開始說的,要引導面試官問你會的話題。

最後再舉一個栗子

問:秒殺的場景下,如何解決庫存超賣問題?

錯誤的回答:通過加分散式鎖,通過資料庫的樂觀鎖。。。

正確的回答:秒殺場景下,併發會特別的大,有兩種情況會導致庫存賣超:(1)一個使用者同時發出了多個請求,如果庫存足夠,沒加限制,使用者就可以下多個訂單。(2)減庫存的SQL上沒有加庫存數量的判斷,併發的時候也會導致把庫存減成負數。對於(1)前端加驗證碼,防止合法使用者快速點滑鼠同時發出多個請求,在後端的miaosha_order表中,對user_id和goods_id加唯一索引,確保就算是刷介面一個使用者對一個商品絕對不會生成兩個訂單。對於(2)需要在扣減庫存的SQL上加上庫存數量的判斷,只有扣減庫存成功才可以生成訂單:
這裡寫圖片描述

解析:首先要分析問題的原因,然後再給出解決方案,不要上來就怎麼怎麼樣,連問題都不清楚,談何解決啊!

以上簡單說了下面試回答問題的一些小思路,希望對求職路上的同學有所幫助。當然打鐵還需自身硬,只有技巧沒有真本事一樣無法獲得自己心儀的工作,程式碼擼起來吧,小夥伴們!