前言
很多人做java開發2至3年后,都會感覺自己遇到瓶頸,什么都會又什么都不會,如何改變困境,為什么很多人寫了7,8年還是一個碼農,作業中太多被動是因為不懂底層原理,公司的作業節奏又比較快,難有機會學習架構原理,也沒人教,所以這個時候,學習架構原理,擴展思維,對自己以后職業生涯尤為重要,
同樣公司的兩個新人,一個新人一點就通,學東西很快,有的人,學東西很慢,也很痛苦,處處都是新技術,為什么?因為那個人懂原理,萬物都有規律,掌握了規律學其他東西原理相通,一觸就會,不懂原理就會處處碰壁,學習很慢還很折磨,
很多程式員會有一個苦惱,作業了很久,在公司一味的增刪改查,得不到技術的提高,無緣底層代碼,只會用不知其原理!

正值跳槽季,有越來越多的人感覺自己以前引以為傲的技術水準已經不夠用了,一去面試就是問底層,一面試就是問原理,哪怕你實戰能力再強,不懂底層原理也只是一個會機械堆代碼的高級碼農,現今互聯網企業需要的卻是能夠不斷創新,有想法的人,

Java架構系列面試題:高并發+高性能+高可用
1、現在有T1、T2、T3三個執行緒,你怎樣保證T2在T1執行完后執行,T3在T2執行完后執行?
這個執行緒問題通常會在第一輪或電話面試階段被問到,目的是檢測你對”join”方法是否熟悉,這個多執行緒問題比較簡單,可以用join方法實作,
2、在Java中Lock介面比synchronized塊的優勢是什么?你需要實作一個高效的快取,它允許多個用戶讀,但只允許一個用戶寫,以此來保持它的完整性,你會怎樣去實作它?
3、在java中wait和sleep方法的不同?
通常會在電話面試中經常被問到的Java執行緒面試問題,最大的不同是在等待時wait會釋放鎖,而sleep一直持有鎖,Wait通常被用于執行緒間互動,sleep通常被用于暫停執行,


4、BIO、NIO和AIO的區別?
BIO:一個連接一個執行緒,客戶端有連接請求時服務器端就需要啟動一個執行緒進行處理,執行緒開銷大,
偽異步IO:將請求連接放入執行緒池,一對多,但執行緒還是很寶貴的資源,
NIO:一個請求一個執行緒,但客戶端發送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求時才啟動一個執行緒進行處理,
AIO:一個有效請求一個執行緒,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動執行緒進行處理,
BIO是面向流的,NIO是面向緩沖區的;BIO的各種流是阻塞的,而NIO是非阻塞的;BIO的Stream是單向的,而NIO的channel是雙向的,
NIO的特點:事件驅動模型、單執行緒處理多任務、非阻塞I/O,I/O讀寫不再阻塞,而是回傳0、基于block的傳輸比基于流的傳輸更高效、更高級的IO函式zero-copy、IO多路復用大大提高了Java網路應用的可伸縮性和實用性,基于Reactor執行緒模型,
在Reactor模式中,事件分發器等待某個事件或者可應用或個操作的狀態發生,事件分發器就把這個事件傳給事先注冊的事件處理函式或者回呼函式,由后者來做實際的讀寫操作,如在Reactor中實作讀:注冊讀就緒事件和相應的事件處理器、事件分發器等待事件、事件到來,激活分發器,分發器呼叫事件對應的處理器、事件處理器完成實際的讀操作,處理讀到的資料,注冊新的事件,然后返還控制權,
5、NIO的組成?
6、Netty的特點?
7、Netty的執行緒模型?


8、dubbo服務負載均衡策略?
l Random LoadBalance
隨機,按權重設定隨機概率,在一個截面上碰撞的概率高,但呼叫量越大分布越均勻,而且按概率使用權重后也比較均勻,有利于動態調整提供者權重,(權重可以在dubbo管控臺配置)
l RoundRobin LoadBalance
輪循,按公約后的權重設定輪循比率,存在慢的提供者累積請求問題,比如:第二臺機器很慢,但沒掛,當請求調到第二臺時就卡在那,久而久之,所有請求都卡在調到第二臺上,
l LeastActive LoadBalance
最少活躍呼叫數,相同活躍數的隨機,活躍數指呼叫前后計數差,使慢的提供者收到更少請求,因為越慢的提供者的呼叫前后計數差會越大,
l ConsistentHash LoadBalance
一致性Hash,相同引數的請求總是發到同一提供者,當某一臺提供者掛時,原本發往該提供者的請求,基于虛擬節點,平攤到其它提供者,不會引起劇烈變動,預設只對第一個引數Hash,如果要修改,請配置


9、什么是Redis?
10、Redis相比memcached有哪些優勢?
11、Redis支持哪幾種資料型別?
12、Redis主要消耗什么物理資源?

13、什么是Spring Cloud?
Spring cloud流應用程式啟動器是基于Spring Boot的Spring集成應用程式,提供與外部系統的集成,Spring cloud Task,一個生命周期短暫的微服務框架,用于快速構建執行有限資料處理的應用程式,
14、使用Spring Cloud有什么優勢?
15、服務注冊和發現是什么意思?Spring Cloud如何實作?


16、什么是競爭條件?你怎樣發現和解決競爭?
這是一道出現在多執行緒面試的高級階段的問題,大多數的面試官會問最近你遇到的競爭條件,以及你是怎么解決的,有些時間他們會寫簡單的代碼,然后讓你檢測出代碼的競爭條件,可以參考我之前發布的關于Java競爭條件的文章,在我看來這是最好的java執行緒面試問題之一,它可以確切的檢測候選者解決競爭條件的經驗,or writing code which is free of data race or anyother race condition,關于這方面最好的書是《Concurrency practices in Java》,
17、你將如何使用threaddump?你將如何分析Thread dump?
在UNIX中你可以使用kill -3,然后thread dump將會列印日志,在windows中你可以使用”CTRL+Break”,非常簡單和專業的執行緒面試問題,但是如果他問你怎樣分析它,就會很棘手,
18、為什么我們呼叫start()方法時會執行run()方法,為什么我們不能直接呼叫run()方法?
19、Java中你怎樣喚醒一個阻塞的執行緒?
等等,還有整個系列的面試題及答案,如果需要請一鍵三連后;“加我VX小助理”來免費獲取到!
![]()
架構師進階之路

最后
最后就是面試題及答案的獲取方式,加我VX小助理,有免費分享的Java架構系列視頻,還有思維導圖,主要分享分布式架構、高可擴展、高性能、高并發、性能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式專案實戰學習架構師視頻,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/179135.html
標籤:其他
上一篇:干貨收藏 | 如何優化前端性能?

