1. 程式人生 > >這個秋季過關斬將—設計模式,分散式,多執行緒(文末有彩蛋)

這個秋季過關斬將—設計模式,分散式,多執行緒(文末有彩蛋)

一、前言

今天為什麼要談論這個話題暱?想必大家都知道了,又到一年的中跳槽季了,肯定有一些小夥伴寂寞難耐,想出去搞事情了。在此,我丟擲三個詞,這三詞應該歸屬面試最熱詞的範疇了,這是我自身體會及從各個同行公認的。下面我簡單概述一下,希望對大夥有所幫助。

二、設計模式

  • 概念

設計模式(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學習平臺。

相關推薦

這個秋季過關斬將設計模式分散式執行

一、前言 今天為什麼要談論這個話題暱?想必大家都知道了,又到一年的中跳槽季了,肯定有一些小夥伴寂寞難耐,想出去搞事情了。在此,我丟擲三個詞,這三詞應該歸屬面試最熱詞的範疇了,這是我自身體會及從各個同行公認的。下面我簡單概述一下,希望對大夥有所幫助。 二、設計模式 概念 設計模式(Design Patt

一頁程式碼實現高德地圖顯示自己定位以及Marker標記點顯示福利哦

import android.Manifest; import android.content.pm.PackageManager; import android.location.Location; import android.os.Bundle; import andr

大型前端應用中Redux與伺服器非同步通訊過程全解析

本文節選自程墨撰寫的《深入淺出React和Redux》一書,由機械工業出版社。 作者:程墨,資深架構師,曾任職於摩托羅拉、雅虎和微軟,雲鳥配送平臺聯合創始人,目前服務於美國視訊服務公司Hulu。知乎專欄《進擊的React》作者,《深入淺出React

年末至思鄉濃致敬北漂邯鄲人

獲得 生活 關心 歲月 大數 希望 關系 計算 裏的 北京一個令年輕人向往的地方,和廣大年輕人一樣我在5年前踏上了這片土地,五年的學習工作打拼卻仍然很難在北京生活下去,霧霾、地溝油、擁堵的地鐵、高昂的房價,北京啊北京,怪不得我那些不在北京的同學,最喜歡跟我來一句:我不喜歡北

堅持早起21天每月賺1000+ 驚喜

     震驚——獻給愛錢的你們“能控制早晨的人,方可控制人生。”這句話說明一個雞湯事實:要

】HTTPS加密時代SSL證書該怎麼挑選?

近年來,在各大網際網路巨頭以及相關政策法律的推動下,HTTPS的使用率逐年持續增長,資料表明,截止到2019年2月,在Alexa所

Java設計模式:單例模式的5種實現方式以及在執行環境下5種建立單例模式的效率

這段時間從頭溫習設計模式。記載下來,以便自己複習,也分享給大家。 package com.iter.devbox.singleton; /** * 餓漢式 * @author Shearer * */ public class SingletonDemo1 {

spring的controller是單例模式但是是執行各個執行之間不影響

spring mvc 的Controller類預設Scope是單例(singleton)的 使用Spring MVC有一段時間了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 說是因為執行緒安全問題,對於Spring

異步5月新書大咖雲集本本經典福利

人工智能 算法 微服務 少兒編程 Python 點擊關註異步圖書,置頂公眾號每天與你分享IT好書 技術幹貨 職場知識參與文末話題討論,每日贈送異步圖書。——異步小編5月小長假回來,小編帶來了18本異步新書,這些新書涵蓋熱點領域Python、深度學習、CPU設計、微服務、少兒編程等領域。可以

C# 解決子執行不能操作主執行UI介面問題涉及到執行的概念。

1、在預設情況下,C#不准許在一個執行緒中直接訪問或操作另一執行緒中建立的控制元件,這是因為訪問windows窗體控制元件本質上是不安全的。 2、執行緒之間是可以同時執行的,那麼如果有兩個或多個執行緒同時操作某一控制元件的某狀態,嘗試將一個控制元件變為自己需要的狀態時, 執行緒的死鎖就可能發生。

Windows遍歷全盤所搜檔案並通過執行顯示搜尋進度C++/C

程式設計軟體,系統 軟體:VS2017 工程屬性:MFC對話方塊(其他工程屬性稍作修改也適用) 系統:windows10家庭版 主要思想 1、利用CFileFind實現查詢檔案 2、利用遞迴實現全盤搜尋 3、多執行緒實現父對話方塊搜尋檔案時,子對話方塊顯示搜尋進度 軟體執行效

python3:執行threadingTread

多執行緒(threading) 執行緒是排程的最小單元. 一個程序可以包含多個執行緒. 執行緒是通過 Thread類進行例項化. 舉個例子說明多執行緒的好處: 1.我們在爬蟲的時候,輸入URL後需要做兩件事 第一要獲取列表,第二要獲取詳情 2.如果是多執行緒直接 第一,第二一起執

自己實戰整理面試題--執行帶答案不斷更新

一個執行緒兩次呼叫 start() 方法會出現什麼情況?執行緒的生命週期,狀態是如何轉移的? Java 的執行緒是不允許啟動兩次的,第二次呼叫必然會丟擲 IllegalThreadStateException,這是一種執行時異常,多次呼叫 start 被認為是程式設計錯誤。 關於執行緒生

結合生活剖析《生產者消費者模型》-java執行

  部落格園的園友們好,看部落格園上各位大佬的文章,已陪伴了我程式設計師職業的三年, 如今自己同樣希望能把自己從小白到菜鳥的成長過程分享給大家。不定期更新!!! 首先我本人智商不高,理解問題十分吃力,完全不屬於天才的行列,因此學習每一個知識 都喜歡刨根問底,結合生活,徹徹底底理解知識的本質! 進入正題,這篇文

執行Java執行啟動四個執行兩個執行加一另外兩個執行減一

  public class Test { public static void main(String[] args) { final ShareData data = new ShareData(); for (int i = 0; i < 2; i++) {

呼叫一個方法直接實現執行執行任務

import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.LinkedBlockingQueue; import ja

JAVA基礎24-執行【讀寫鎖阻塞佇列執行池】

一、讀寫鎖   使用步驟 二、阻塞佇列 (BlockingQueue) 提供執行緒安全的佇列訪問方式; 當阻塞佇列進行插入資料時,若佇列滿,則執行緒阻塞,直到佇列非滿的時候 當阻塞佇列取資料時,若佇列為空,則執行緒阻塞直到佇列非空時候。

JAVA基礎23-執行【synchronizedReentranLockvolatile、死鎖】

一、同步         大多數多執行緒應用中,兩個或兩個以上的執行緒需要共享對同一資料的存取,此時出現多個程式交替處理該資料,從而導致資料出現訛誤。 9-1.Synchronized關鍵字       &nb

JAVA基礎22-執行執行的概念執行狀態及其轉換】

多執行緒 一.概念          1. 程序:程序是表示資源分配的的基本概念,又是排程執行的基本單位,是系統中的併發執行的單位。           2. 執行緒:單個程序中執行中

Java基礎複習一之執行併發記憶體模型

前言:畢業來北京轉眼一年半了,但是沒有太多的成績。沒有太多的記錄和沉澱。現在開始複習一下基礎的知識。涉及到的有多執行緒,集合,JVM,NIO,資料庫,作業系統。後面還是想走實時處理那一塊,可能會有那方面的研究。 多執行緒:為啥用?因為想去執行不同的任務,或利用現狀多核的處