1、Java分布式應用如何入門以及有哪些資料
提到java分布式首先要知道rmi,幾乎所有的分布式都是跟rmi相似的原理。
2、大家有什麼java面試的有關的書籍推薦
書的話我不知道,不過應該是沒有的,面試知識點可以自己去網上找一找,有很多面試過的人分享的面試題。而且面試難易看公司和應聘崗位的,有的公司水平低或者崗位專業性要求不高,面試就容易,有的公司水平高專業要求高,那就面試難。我貼一下我找的一些面試知識點。
3.1.1 Java基礎
此時一般會問到一些Java的基礎知識,比如
l synchronized static修飾類和方法有什麼區別
l HashMap的原理,底層數據結構,rehash的過程,指針碰撞問題
l HashMap的線程安全問題,為什麼會產生這樣的線程安全問題
l ConcurrentHashMap的數據結構,底層原理,put和get是否線程安全
l Java IO的一些內容,包括NIO,BIO等
3.1.2 Java高級特性
此時問到的問題一般包含JVM,多線程的一些內容,這塊建議大家多看看源碼,大致如下:
l Java線程池的構造方法,裡面參數的含義,以及原理
l volatile和ThreadLocal解決了什麼問題
l CAS在Java中的具體實現
l Java虛擬機的構成,以及一個Java對象的生命周期,還有堆棧和方法區中存儲的內容
l JVM的GC過程,包括一些實際問題的分析,比如說明一個現象,讓你分析可能是什麼原因會導致這樣的問題,應該如何對JVM參數進行調優
l synchronized和Lock的區別,以及底層實現原理
l Full GC和Minor GC觸發的條件
l GC Roots的選擇
l jmap,jstat,jstack等的使用場景,MAT等
l ClassLoader的載入過程
l CountDownLatch、CyclicBarrier和Semaphore等
l Java 8 的新特性等
3.1.3 資料庫
這里的資料庫包含兩種,一種一般是MySQL,另外是NoSql資料庫,包括Redis、MongoDB等。一般會問的問題有:
l inner join和left join等的區別
l SQL調優,explain,profile等
l InnoDB和Myisam的區別
l ACID
l 資料庫的事務隔離級別,以及他們分別能解決什麼問題
l Redis的幾種數據結構
l Redis是單線程還是多線程
l Redis的持久化
l 悲觀鎖和樂觀鎖的含義
l 最左前綴索引,索引的數據結構,聚簇索引等(這塊還沒搞明白)
3.1.4 框架
3.1.4.1 Spring
因為spring是我們常用的框架,所以這塊的內容會問的比較多,也會比較細。
l Spring的兩大特性(IoC和AOP)
l Spring的bean的生命周期
l Spring是如何解決Bean的循環引用問題的
l AOP的兩種實現方式,以及兩者的區別(這里其實使用了動態代理,具體動態代理分為兩種,一種是JDK的動態代理,主要使用的是JDK的反射,還有一種是CGLib,兩者區別可以自己搜索,文章比較多)
l AOP一般的使用場景
l Spring的事務原理
3.1.4.2 MyBatis
這塊問到的比較簡單些:
l $和#的區別
l MyBatis和Hibernate的區別
l 源碼,一般問的比較少
3.1.4.3 Dubbo
因為平時自己用到了Dubbo,所以這塊會有問到:
l RPC的原理
l Dubbo是如何完成遠程調用的
l Dubbo如何進行調優
l Dubbo的通信協議
l Dubbo是如何實現負載均衡的
3.1.4.4 ZooKeeper
l ZK的使用場景
l ZK的選舉機制
l ZK的節點類型
l 一致性Hash原理
3.1.5 數據結構和演算法
這塊的內容是基礎,如果面試官懷疑你的能力,一般一會問到這部分內容,比如樹的遍歷、快速排序等。
3.1.6 linux
一般會問一些命令的使用,然後會舉一個實際的場景,讓你用命令去排查問題,這塊自己不是很熟,需要盡快加強。
3.1.7 綜合題
這塊的題目,面試官一般會問的比較深入。比如如何設計一個搶購系統,String轉Integer等,這部分需要考驗的就是一個人的臨場應變能力,以及在平時工作中系統設計能力的積累,以及考慮問題是否周到等。也有可能會對你簡歷上面寫的系統的設計進行詳細的詢問,所以在你寫簡歷的時候,千萬不能把自己不熟悉的內容寫上去,而且自己又講不清,這樣一般會被直接pass掉。
當然也會問一些常用的maven的命令,設計模式的題目(這部分問的比較多的就是單例模式)。
3、題目為"一個基於中間件的大型分布式信息系統的實現" 的論文是一篇什麼論文
美國計算機科學家,LaTex的作者Leslie Lamport說:「分布式系統就是這樣一個系統,系統中一個你甚至都不知道的計算機出了故障,卻可能導致你自己的計算機不可用。」一語道破了開發分布式系統的玄機,那就是它的復雜與不可控。所以Martin Fowler強調:分布式調用的第一原則就是不要分布式。這句話看似頗具哲理,然而就企業應用系統而言,只要整個系統在不停地演化,並有多個子系統共同存在時,這條原則就會被迫打破。蓋因為在當今的企業應用系統中,很難尋找到完全不需要分布式調用的場景。Martin Fowler提出的這條原則,一方面是希望設計者能夠審慎地對待分布式調用,另一方面卻也是分布式系統自身存在的缺陷所致。無論是CORBA,還是EJB 2;無論是RPC平台,還是Web Service,都因為駐留在不同進程空間的分布式組件,而引入額外的復雜度,並可能對系統的效率、可靠性、可預測性等諸多方面帶來負面的影響。
然而,不可否認的是在企業應用系統領域,我們總是會面對不同系統之間的通信、集成與整合,尤其當面臨異構系統時,這種分布式的調用與通信變得越重要,它在架構設計中就更加凸顯其價值。並且,從業務分析與架構質量的角度來講,我們也希望在系統架構中盡可能地形成對服務的重用,通過獨立運行在進程中服務的形式,徹底解除客戶端與服務端的耦合。這常常是架構演化的必然道路。在我的同事陳金洲發表在InfoQ上的文章《架構腐化之謎》中,就認為可以通過「將獨立的模塊放入獨立的進程」來解決架構因為代碼規模變大而腐化的問題。
隨著網路基礎設施的逐步成熟,從RPC進化到Web Service,並在業界開始普遍推行SOA,再到後來的RESTful平台以及雲計算中的PaaS與SaaS概念的推廣,分布式架構在企業應用中開始呈現出不同的風貌,然而殊途同歸,這些分布式架構的目標仍然是希望回到建造巴別塔的時代,系統之間的交流不再為不同語言與平台的隔閡而產生障礙。正如Martin Fowler在《企業集成模式》一書的序中寫道:「集成之所以重要是因為相互獨立的應用是沒有生命力的。我們需要一種技術能將在設計時並未考慮互操作的應用集成起來,打破它們之間的隔閡,獲得比單個應用更多的效益」。這或許是分布式架構存在的主要意義。
4、大型網站架構模式有哪些
1.分布式
對於大型網站,分層和分割的一個主要目的是為了切分後的模塊便於分布式部署,即將不同模塊部署在不同的伺服器上,通過遠程調用協同工作。分布式意味著可以使用更多的計算機完成同樣的功能,計算機越多,CPU、內存、存儲資源也就越多,能夠處理的並發訪問和數據量就越大,進而能夠為更多的用戶提供服務。
2.分層
分層是企業應用系統中最常見的一種架構模式,將系統在橫向維度上切分成幾個部分,每個部分負責一部分相對比較單一的職責,然後通過上層對下層的依賴和調用組成一個完整的系統。
分層結構在計算機世界中無處不在,網路的7層通信協議是一種分層結構;計算機硬體、操作系統、應用軟體也可以看作是一種分層結構。在大型網站架構中也採用分層結構,將網站軟體系統分為應用層、服務層、數據層。
3.分割
如果說分層是將軟體在橫向方面進行切分,那麼分割就是在縱向方面對軟體進行切分。
網站越大,功能越復雜,服務和數據處理的種類也越多,將這些不同的功能和服務分割開來,包裝成高內聚低耦合的模塊單元,一方面有助於軟體的開發和維護;另一方面,便於不同模塊的分布式部署,提高網站的並發處理能力和功能擴展能力。
4.集群
使用分布式雖然已經將分層和分割後的模塊獨立部署,但是對於用戶訪問集中的模塊(比如網站的首頁),還需要將獨立部署的伺服器集群化,即多台伺服器部署相同應用構成一個集群,通過負載均衡設備共同對外提供服務。
5.緩存
緩存就是將數據存放在距離計算最近的位置以加快處理速度。緩存是改善軟體性能的第一手段,現代CPU越來越快的一個重要因素就是使用了更多的緩存,在復雜的軟體設計中,緩存幾乎無處不在。大型網站架構設計在很多方面都使用了緩存設計。
6.非同步
計算機軟體發展的一個重要目標和驅動力是降低軟體耦合性。事物之間直接關系越少,就越少被彼此影響,越可以獨立發展。大型網站架構中,系統解耦合的手段除了前面提到的分層、分割、分布等,還有一個重要手段是非同步,業務之間的消息傳遞不是同步調用,而是將一個業務操作分成多個階段,每個階段之間通過共享數據的方式非同步執行進行協作。
5、大型分布式網站架構設計與實踐 怎麼樣
大型分布式網站架構設計與實踐 這本書 的點評如下:
書中提到了很多大型分布式網站設計所必須的知識點,如soa、分布式系統的基礎設施,
系統穩定性設計,數據分析,系統穩定設計的章節寫的很有實踐性,
自檢腳本的編寫、日誌分析命令的妙用,互聯網安全方面之前講類似知識點的,
書中介紹的比較詳細,不錯
還有疑問請追問沒有疑問請採納。
6、MySQL大型分布式集群具體怎麼做
1、主要解決針對大型網站架構中持久化部分中,大量數據存儲以及高並發訪問所帶來是數據讀寫問題。分布式是將一個業務拆分為多個子業務,部署在不同的伺服器上。集群是同一個業務,部署在多個伺服器上。
2、著重對數據切分做了細致豐富的講解,從數據切分的原理出發,一步一步深入理解數據的切分,通過深入理解各種切分策略來設計和優化我們的系統。這部分中我們還用到了資料庫中間件和客戶端組件來進行數據的切分,讓廣大網友能夠對數據的切分從理論到實戰都會有一個質的飛躍。
通過分布式+集群的方式來提高io的吞吐量,以及資料庫的主從復制,主主復制,負載均衡,高可用,分庫分表以及資料庫中間件的使用。
7、MySQL大型分布式集群具體怎麼做
1、主要解決針對大型網站架構中持久化部分中,大量數據存儲以及高並發訪問所帶來是數據讀寫問題。分布式是將一個業務拆分為多個子業務,部署在不同的伺服器上。集群是同一個業務,部署在多個伺服器上。
2、著重對數據切分做了細致豐富的講解,從數據切分的原理出發,一步一步深入理解數據的切分,通過深入理解各種切分策略來設計和優化我們的系統。這部分中我們還用到了資料庫中間件和客戶端組件來進行數據的切分,讓廣大網友能夠對數據的切分從理論到實戰都會有一個質的飛躍。
通過分布式+集群的方式來提高io的吞吐量,以及資料庫的主從復制,主主復制,負載均衡,高可用,分庫分表以及資料庫中間件的使用。
教程樣例項目中用到的技術及相應的環境:
MySQL5.7 CentOS6.9 Vmware Spring3.x以上 JDK8 Maven XShell Xftp