一、前言 今天為什麼要談論這個話題昵?想必大家都知道了,又到一年的中跳槽季了,肯定有一些小伙伴寂寞難耐,想出去搞事情了。在此,我拋出三個詞,這三詞應該歸屬面試最熱詞的範疇了,這是我自身體會及從各個同行公認的。下麵我簡單概述一下,希望對大伙有所幫助。 二、設計模式 + 概念 設計模式(Design P ...
一、前言
今天為什麼要談論這個話題昵?想必大家都知道了,又到一年的中跳槽季了,肯定有一些小伙伴寂寞難耐,想出去搞事情了。在此,我拋出三個詞,這三詞應該歸屬面試最熱詞的範疇了,這是我自身體會及從各個同行公認的。下麵我簡單概述一下,希望對大伙有所幫助。
二、設計模式
- 概念
設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、代碼設計經驗的總結。
使用設計模式的目的:為了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。設計模式使代碼編寫真正工程化;設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。
為什麼要提倡“Design Pattern“呢?根本原因是為了代碼復用,增加可維護性。那麼怎麼才能實現代碼復用呢?面向對象有幾個原則:單一職責原則 (Single Responsiblity Principle SRP)開閉原則(Open Closed Principle,OCP)、里氏代換原則(Liskov Substitution Principle,LSP)、依賴倒轉原則(Dependency Inversion Principle,DIP)、介面隔離原則(Interface Segregation Principle,ISP)、合成/聚合復用原則(Composite/Aggregate Reuse Principle,CARP)、最小知識原則(Principle of Least Knowledge,PLK,也叫迪米特法則)。開閉原則具有理想主義的色彩,它是面向對象設計的終極目標。其他幾條,則可以看做是開閉原則的實現方法。
- 問題
簡單敘述了一下概念之後。想必大家也不耐煩了,那你講講面試會提到的設計模式呀,這裡我引出一個問題,大家從這個問題,去看一些重點的設計模式好吧?
面試官引出設計模式,他一般會這麼說Spring中用了什麼設計模式呀?這些設計模式怎麼用呀?
在此我們看看Spring到底用了什麼設計模式:
* 第一種:簡單工廠
* 第二種:工廠方法(Factory Method)
* 第三種:單例模式(Singleton)
* 第四種:適配器(Adapter)
* 第五種:包裝器(Decorator)
* 第六種:代理(Proxy)
* 第七種:觀察者(Observer)
* 第八種:策略(Strategy)
* 第九種:模板方法(Template Method)
這裡只列出了九種設計模式,大伙在查閱相關資料時,可以從這個九種開始考慮。至於怎麼用,這裡只給大伙拋出兩個鏈接,希望大伙能從中找到答案:
https://www.cnblogs.com/foryang/p/5849402.html
https://www.cnblogs.com/yuefan/p/3763898.html
三、分散式
- 概念
分散式業務系統,就是把原來用 Java 開發的一個大塊系統,給拆分成多個子系統,多個子系統之間互相調用,形成一個大系統的整體。假設原來你做了一個 OA 系統,裡面包含了許可權模塊、員工模塊、請假模塊、財務模塊,一個工程,裡面包含了一堆模塊,模塊與模塊之間會互相去調用,1 台機器部署。現在如果你把這個系統給拆開,許可權系統、員工系統、請假系統、財務系統 4 個系統,4 個工程,分別在 4 台機器上部署。一個請求過來,完成這個請求,這個員工系統,調用許可權系統,調用請假系統,調用財務系統,4 個系統分別完成了一部分的事情,最後 4 個系統都幹完了以後,才認為是這個請求已經完成了。
- 問題
面試官在提問你分散式相關問題,肯定是一連串連環炮的,比如說如下:
* 為什麼要進行系統拆分?
* 分散式服務框架有那些呀?
* 分散式鎖怎麼實現?
* 分散式事務怎麼實現?
* 分散式會話怎麼實現?
* ......
接著他又會引出以下問題?
* 高併發相關問題?
* 高可用相關問題?
* 微服務相關問題?
大伙不要慌,上面相關問題中華石杉大佬在github中就整理給大伙了,大伙只需將上面的問題梳理梳理,慢慢研究一下,即可面試了。
這裡我拋出兩個地址給大伙:
一個是github地址:https://doocs.github.io/advanced-java/#/README
一個是視頻地址:https://pan.baidu.com/s/1MRVXoEqvqDT2h5kYFJgRew 提取碼:e861
四、多線程
- 概念
前面有一篇文章賊精彩講述了JMM結構,大家可以再看看《求你了,再問你Java記憶體模型的時候別再給我講堆棧方法區了…》,看一下線程的規範。
我們先過一下概念:
多線程(英語:multithreading),是指從軟體或者硬體上實現多個線程併發執行的技術。具有多線程能力的電腦因有硬體支持而能夠在同一時間執行多於一個線程,進而提升整體處理性能。具有這種能力的系統包括對稱多處理機、多核心處理器以及晶元級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。在一個程式中,這些獨立運行的程式片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的電腦因有硬體支持而能夠在同一時間執行多於一個線程(臺灣譯作“執行緒”),進而提升整體處理性能。
- 問題
在面試中談論到多線程,肯定會涉及下麵一些關鍵字synchronized、線程池、Runnable、AQS、Atomic.....這裡東西太多了,我也是直接拋出兩個地址:
https://www.nowcoder.com/discuss/167801
https://www.cnblogs.com/Jansens520/p/8624708.html
五、總結
面試套路花式多,重點難點就這了。大伙可拓展自己的思維,可聯想到虛擬機等相關知識。希望這個秋季大伙的工資能翻幾番。
六、彩蛋
標題提到文末有彩蛋,如果你讀到了這裡,恭喜你你不虧,前段時間我發表過這篇文章:《【今日頭條】200換12000,千萬不要錯過!》現在有現成的答案了,大伙可以收藏一下:
https://blog.csdn.net/qq_42006733/article/details/98078584
文章內容如有侵權,請聯繫屏蔽。
本文在米兜公眾號鏈接:
https://mp.weixin.qq.com/s/OzMgSobnYoAjL4g-COs5Tw
歡迎關註米兜Java,一個註在共用、交流的Java學習平臺。