面試那些不為人知的(套路)
面試那些不為人知的套路
1.0 相信大家在技術方面找工作 比如java或者C# 或者IOS 面試 通過會有一份基礎筆試給到大家 ,我相信大家決定不陌生 。
2.0 我個人覺得面試回答問題 不是在做填空題和選擇題 更像一種溝通,交流 也許自己不一定能勝任這家公司職位 但是你能從他(面試官)當中 受益匪淺 能知道自己很多地方不足
3.0 要引導面試官往你自己會的題目上問問題,切忌就問題回答問題
4.0 首選要分析問題 然後提出你的想法和解決方案
比如
單列模式 哪一種實現效率高 ?
錯誤的回答 靜態內部類延遲載入 效率高 ,或者 DCL 效率高
正確的回答 單列模式有很多種實現方式,
1.0 第一種是直接new 一個單列做為類的static 成員,這種方式的好處是簡單,沒有執行緒安全問題,
缺點是無論單列是否被使用到 都要例項化 如果沒有使用到就會浪費資源了。
我們一開始就說了,面試不是讓你做選擇題,對於這個問題來說,
你應該去分析有多少種實現方式,然後說明每一種的優缺點,答案自然而然就出來了
什麼是AOP?Spring中為啥要引入AOP或者AOP有什麼好處?
錯誤的回答:AOP就是面向切面程式設計。引入AOP可以提高程式碼的可讀性和可維護性。
正確的回答:AOP簡單了說就是在目標方法執行前可以自定義一些操作,在方法執行中或者執行後也可以自定義操作,
所以,一般都是基於代理模式來實現,Spring支援兩種代理模式,jdk原生的代理和cglib代理 (建議在說一下jdk 代理的優勢和cglib代理的優勢和他們的缺點)。
AOP可以給程式帶良好的擴充套件性和封裝性,可以實現業務程式碼與非業務程式碼的隔離。比如:可以在不改變目的碼的前提下,實現目標方法的增強,比如做方法執行時間監控,記錄方法訪問日誌,再比如:資料庫的connection.close()預設是把連線關閉掉,但是資料庫連線池的場景中,為了不改變使用者的使用習慣,一般呼叫close的時候是把連線重新放回到池中,這是因為從資料庫連線池中拿到的連線實際上是原生連線的一個代理類,所以內部把close給重寫了。實際上代理模式的優點實際上也是AOP的優點。
解析:面向切面程式設計是什麼鬼?單純的解釋字面意思沒有任何意義!你得分析通過問這個問題的他想考察你什麼,我們這麼回答首先說出了AOP的實現方式,還說了如何使用,還說了代理模式。面試官很有可能會接著問:那你說說JDK的代理和Cglib代理有啥區別?或者會問:除了代理模式,你還知道哪些設計模式?成功引出新的話題。這就是我們一開始說的,要引導面試官問你會的話題。
比如如下一個列子
問:秒殺的場景下,如何解決庫存超賣問題?
錯誤的回答:通過加分散式鎖,通過資料庫的樂觀鎖。。。
正確的回答:秒殺場景下,併發會特別的大,有兩種情況會導致庫存賣超:
(1)一個使用者同時發出了多個請求,如果庫存足夠,沒加限制,使用者就可以下多個訂單。
(2)減庫存的SQL上沒有加庫存數量的判斷,併發的時候也會導致把庫存減成負數。
對於(1)前端加驗證碼,防止合法使用者快速點滑鼠同時發出多個請求,在後端的miaosha_order表中,對user_id和goods_id加唯一索引,確保就算是刷介面一個使用者對一個商品絕對不會生成兩個訂單。
對於(2)需要在扣減庫存的SQL上加上庫存數量的判斷,只有扣減庫存成功才可以生成訂單:
要學習自信、樹立自信、敢於自信;使生命的過程更精彩!
我給大家一個建議
1.0 每天晚上下班回家保持2個小時看技術書籍時間
2.0 多看一些大牛的部落格 多關注一下大牛的微信公眾號 列如 小馬哥 乃乃 周哥(周立)
3.0 隨時關注一些新技術