更新時間:2023-01-12 15:03:08 來源:動力節點 瀏覽1143次
第一題:一條sql執行過長的時間,你如何優化,從哪些方面?
答:1、查看sql是否涉及多表的聯表或者子查詢,如果有,看是否能進行業務拆分,相關字段冗余或者合并成臨時表(業務和算法的優化)
2、涉及鏈表的查詢,是否能進行分表查詢,單表查詢之后的結果進行字段整合
3、如果以上兩種都不能操作,非要鏈表查詢,那么考慮對相對應的查詢條件做索引。加快查詢速度
4、針對數量大的表進行歷史表分離(如交易流水表)
5、數據庫主從分離,讀寫分離,降低讀寫針對同一表同時的壓力,至于主從同步,MySQL有自帶的binlog實現 主從同步
6、explain分析sql語句,查看執行計劃,分析索引是否用上,分析掃描行數等等
7、查看mysql執行日志,看看是否有其他方面的問題
第二題:深入理解CAP
CAP原則又稱CAP定理,指的是在一個分布式系統中,一致性(Consistency)、可用性(Availability)、分區容錯性(Partition tolerance)這三個要素最多只能同時實現兩點,不可能三者兼顧。分布式系統肯定優先保證P,多數時候是在C和A之間做權衡選擇!
C:各個節點查詢的數據都一致;
A:所有節點盡量可用;
P:節點之間無法通信;
AP架構
向一個節點A寫入數據成功后,立刻給客戶端響應寫成功的信號。
如果此時集群節點之間網絡斷開了,由于其可用性,其他節點仍然提供服務,但是A節點的數據還未寫入到其他節點,當訪問除A之外的其他節點時,就會出現數據不一致的問題,當網絡恢復后,才會通過心跳保證最終一致性!
CP架構
在向一個節點A寫入數據成功后,并不是馬上給客戶端響應寫成功的信號,而是等待數據同步到其他節點后(個數取決于配置),才響應客戶端,表示此次寫數據成功了!這在一定程度上保證了數據一致性。為了防止數據混亂,寫數據時只允許往Leader節點寫,讀數據時可以從所有節點讀取!
CP架構下具有特殊的Leader - Flower機制,當發生網絡分區時,非Leader分區下的節點會變成不可用,重新進入選舉狀態。
第三題:雙十一秒殺高可靠如何實現?
Sentinel承接了阿里10年的促銷場景,利用:流量控制(通過設置QPS來控制),容錯(熔斷就是切斷壞路,讓后續新流量再走這個壞路),降級(備選B角,走了try-cath的機制,),三板斧解決高可靠。熔斷機制:通過滑動時間窗口實現的,對前一段時間的錯誤比例來設置熔斷點。
第四題:分布式事務問題如何解決?
Seata:服務端也是通過安裝和配置來實現,使用很簡單,實現了事務協調功能,需要加一個依賴包,然后加一個注解@globalTranscational, AT模式,是最推薦的一種,舉例:Seata如何協調訂單和庫存?要求同時成功或者失敗。一階段:訂單和庫存,都先做回滾日志記錄在本地事務中,二階段:如果有一個失敗,通過回滾日志來回到回到初始。
第五題:nacos和zookeeper是如何防止腦裂的?
集群的腦裂通常是發生在集群之間通信不可達(分區)的情況下,一個大集群會分裂成不同的小集群,小集群中又各自選舉出自己的master節點,導致原先的集群出現多個master節點對外提供服務的情況!
leader選舉時,要求節點獲取到的投票數量 > 總節點數量/2,有了這個選舉原則,當發生網絡分區時,無論如何最多只有一個小集群選出leader,避免集群發生腦裂。
第六題:線程間是怎么通信的,通過調用幾個方法來交互的?
線程是通過wait , notify等方法相互作用進行協作通信;
wait()方法使得當前線程必須要等待,直到到另外一個線程調用notify()或者notifyAll()方法喚醒
wait()和notify()方法要求在調用時線程已經獲得了對象鎖,因此對這兩個方法的調用需要在 synchronized修飾的方法或代碼塊中。
Wait,notify,notifyAll都必須在synchronized修飾的方法或代碼塊中使用,都屬于Object的方法,可以被所有類繼承,都是final修飾的方法,不能通過子類重寫去改變他們的行為
第七題:SpringMVC工作流程?
1.用戶請求旅程的第一站是DispatcherServlet。
2.收到請求后,DispatcherServlet調用HandlerMapping,獲取對應的Handler。
3.如果有攔截器一并返回。
4.拿到Handler后,找到HandlerAdapter,通過它來訪問Handler,并執行處理器。
5.執行Handler的邏輯。
6.Handler會返回一個ModelAndView對象給DispatcherServlet。
7.將獲得到的ModelAndView對象返回給DispatcherServlet。
8.請求ViewResolver解析視圖,根據邏輯視圖名解析成真正的View。
9.返回View給DispatcherServlet。
10.DispatcherServlet對View進行渲染視圖。
11.DispatcherServlet響應用戶。
以上就是“最新大廠面試總結,Java架構師面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習