說(shuō)一下分布式管理事務(wù)?
簡(jiǎn)單的來(lái)說(shuō)呢队橙,分布式事務(wù)其實(shí)就是一次大的操作分成了好的小的操作妥箕,這些小的操作分別部署在不同的服務(wù)器上,而且屬于不同的應(yīng)用石景,分布式的事務(wù)其實(shí)就是保證這些小的事務(wù)要么都成功劈猿,要么都失敗。
分布式事務(wù)出現(xiàn)的場(chǎng)景比如在支付和在線下單都會(huì)出現(xiàn)潮孽,我了解的分布式事務(wù)管理解決方法就是二次提交揪荣,基于MQ的特性,MQ作為二次提交的中間節(jié)點(diǎn)往史,負(fù)責(zé)儲(chǔ)存請(qǐng)求數(shù)據(jù)的仗颈,在失敗的情況下可以進(jìn)行多次嘗試,還有可以基于MQ中的事務(wù)回滾操作椎例,可以保證性能挨决,又能保證業(yè)務(wù)一致性的方案。
請(qǐng)你簡(jiǎn)單介紹一下SpringCloud組件分別是什么订歪,并有什么用處脖祈?
SpringCloud中有五個(gè)組件,分別是:
服務(wù)發(fā)現(xiàn)——Eureka
負(fù)載均衡——Ribbon
斷路器——Hystrix
網(wǎng)關(guān)——Zuul
配置——SpringCloud Config
Eureka是Netflix的一個(gè)子模塊刷晋,也是核心的模塊之一盖高,Eureka是一個(gè)基于rest的服務(wù)福压,用于定位服務(wù),服務(wù)注冊(cè)等功能或舞,有了這些功能荆姆,只需要使用服務(wù)的標(biāo)識(shí)符,就可以訪問到服務(wù)映凳,而不需要調(diào)用服務(wù)的配置文件了胆筒,功能類似于dobbo中的zookerper。
Ribbon主要提供負(fù)載均衡算法诈豌,它提供了一系列的配置項(xiàng)仆救,比如連接超時(shí),重試矫渔,重試算法等彤蔽,他有一些實(shí)現(xiàn)策略:簡(jiǎn)單輪詢負(fù)載均衡,加權(quán)響應(yīng)時(shí)間庙洼,區(qū)域感知輪詢顿痪,隨機(jī)負(fù)載均衡。
Hystrix可以防止個(gè)應(yīng)用程序多次試圖執(zhí)行一個(gè)操作油够,就是很可能失敗的操作蚁袭,斷路器模式也可以檢測(cè)出故障是不是解決了,如果問題得到了解決石咬,那么應(yīng)用程序就可以嘗試調(diào)用操作揩悄。
Zuul網(wǎng)關(guān)類似于Nginx,反向代理鬼悠,不過netflix自己增加了一些配合其他組件的特性删性。
Spring Cloud Config
這個(gè)是靜態(tài)的,得配合SpringCloudBus實(shí)現(xiàn)動(dòng)態(tài)的配置更新焕窝。
為什么eureka可以實(shí)現(xiàn)高可用蹬挺?
在微服務(wù)的項(xiàng)目中,我們要考慮到發(fā)生故障的情況袜啃,所以也要對(duì)服務(wù)的注冊(cè)中心也要進(jìn)行高可用的部署汗侵,那么eureka就是通過多個(gè)實(shí)例進(jìn)行互相注冊(cè),然后修改每個(gè)serviceUrl就可以群发,eurekaServer的高可用其實(shí)就是將自己作為服務(wù)去其他的注冊(cè)中心注冊(cè)自己晰韵,這樣就可以形成一組互相注冊(cè)的注冊(cè)中心,就可以實(shí)現(xiàn)服務(wù)清單的互相同步熟妓,這樣就達(dá)到了高可用的情況雪猪。
Git合并分支的命令是什么?
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>
HashMap和HashTable 的區(qū)別起愈?
首先他們兩個(gè)的底層都是基于數(shù)組+鏈表實(shí)現(xiàn)的只恨,然后hashtable的key和value都不可以為空译仗,他是線程安全的,他實(shí)現(xiàn)線程安全的方法是在修改數(shù)據(jù)時(shí)鎖住整個(gè)hashtable官觅,這樣的話效率就會(huì)很低纵菌。
Hashmap是線程非安全的,他可以存空值休涤,我對(duì)他印象比較深的就是他的初始size是16咱圆,然后每次擴(kuò)容都是以2的n次冪擴(kuò)容的。
負(fù)載均衡的策略有哪些功氨?
? 大約有很多種序苏,但我了解的有輪詢的方式和最小連接數(shù),輪詢就是很簡(jiǎn)單的實(shí)現(xiàn)捷凄,依次將請(qǐng)求發(fā)送給后端的服務(wù)器忱详,有點(diǎn)就是實(shí)現(xiàn)簡(jiǎn)單,請(qǐng)求分配均勻跺涤,缺點(diǎn)也是在均勻匈睁,因?yàn)橛械姆?wù)器性能好,可以承受更多的請(qǐng)求钦铁,但是他都是均勻分配的软舌,所以也是有不合適的地方才漆。最小連接數(shù)就是在后端服務(wù)器性能差異較大的話牛曹,可以優(yōu)化lc的性能,高權(quán)值的服務(wù)可以承載更高的連接負(fù)載醇滥。
線程池是什么黎比?
線程池就是java.util包下的有一個(gè)接口,用來(lái)創(chuàng)建線程池的鸳玩,加入一個(gè)服務(wù)完成一項(xiàng)任務(wù)需要的時(shí)間是創(chuàng)建線程的時(shí)間阅虫,執(zhí)行線程的時(shí)間,和銷毀線程的時(shí)間不跟,如果創(chuàng)建的時(shí)間和銷毀的時(shí)間大于執(zhí)行任務(wù)的時(shí)間颓帝,那我們就要采用線程池來(lái)提高服務(wù)器的性能了,線程池包括:線程池管理器(就是用來(lái)創(chuàng)建并管理線程的窝革,也包括銷毀购城,添加新任務(wù))工作線程(線程池中的線程,在沒有任務(wù)處于等待的情況下虐译,可以循環(huán)的執(zhí)行任務(wù)) 任務(wù)接口(每個(gè)任務(wù)必須實(shí)現(xiàn)接口瘪板,供工作線程的調(diào)用),任務(wù)隊(duì)列(用來(lái)存放沒有處理的任務(wù)漆诽,提供一種緩沖的機(jī)制) 線程池就是關(guān)注如何優(yōu)化創(chuàng)建線程時(shí)間和銷毀線程時(shí)間的侮攀。
常見的線程池有單個(gè)的線程池锣枝,和固定數(shù)量的線程池,還有就是無(wú)數(shù)量限制的線程池兰英。
?熔斷是什么撇叁,用來(lái)處理什么問題的?
熔斷機(jī)制就是應(yīng)對(duì)微服務(wù)雪崩效應(yīng)的一種鏈路保護(hù)機(jī)制畦贸,就是當(dāng)我們某個(gè)微服務(wù)忽然不可用或者響應(yīng)時(shí)間過長(zhǎng)的時(shí)候税朴,就會(huì)進(jìn)行服務(wù)降級(jí),熔斷該節(jié)點(diǎn)的服務(wù)調(diào)用家制,然后響應(yīng)錯(cuò)誤信息正林,等到檢測(cè)這個(gè)應(yīng)用響應(yīng)正常的時(shí)候,再恢復(fù)這個(gè)鏈路颤殴。SpringCloud中的熔斷是通過Hystrix實(shí)現(xiàn)的觅廓,它會(huì)監(jiān)測(cè)服務(wù)的調(diào)用狀況,
當(dāng)失敗到達(dá)一定閾值的時(shí)候涵但,就會(huì)啟動(dòng)熔斷杈绸,熔斷機(jī)制的注解就是加一個(gè)注解,@hystrixCommand矮瘟。
線程間的通信是什么瞳脓,通信狀態(tài)有幾種?
在一個(gè)進(jìn)程中澈侠,線程一般都不是單獨(dú)存在的劫侧,而是多個(gè)線程之間需要進(jìn)行通信的。他們的體現(xiàn)就是哨啃,當(dāng)一個(gè)線程傳輸數(shù)據(jù)給另一個(gè)線程烧栋,一個(gè)線程執(zhí)行完特定的任務(wù)后轉(zhuǎn)到另一個(gè)線程繼續(xù)執(zhí)行任務(wù)。線程通信的方法有perform拳球,還有NSmachport:本地之間的通信审姓,通過傳遞端口對(duì)象變量進(jìn)行端口間的通信。他應(yīng)該是通過代理模式來(lái)傳遞消息的祝峻。管道魔吐,命名管道,信號(hào)莱找,消息隊(duì)列酬姆,共享內(nèi)存
消息隊(duì)列是干什么的,舉一個(gè)實(shí)際應(yīng)用場(chǎng)景宋距?
消息隊(duì)列MQ就是一個(gè)保存消息的容器轴踱,另外它也是一個(gè)高性能的中間件。
實(shí)際場(chǎng)景的話當(dāng)我們用戶注冊(cè)后要初始化好多操作谚赎,比如調(diào)用郵箱服務(wù)發(fā)郵件淫僻,調(diào)用促銷活動(dòng)發(fā)優(yōu)惠券诱篷,這時(shí)候我們就可以把監(jiān)聽服務(wù)交給MQ,當(dāng)用戶注冊(cè)成功之后雳灵,就通知MQ讓其他服務(wù)開始操作棕所,確保能保證用戶的性能。
為什么要做服務(wù)降級(jí)悯辙?
因?yàn)楫?dāng)我們的服務(wù)壓力劇增的情況下琳省,要根據(jù)實(shí)際業(yè)務(wù)以及流量,對(duì)一些服務(wù)和頁(yè)面要有策略的不處理或者換一種簡(jiǎn)單的方式處理躲撰,從而釋放服務(wù)器資源保證核心交易正常工作或者高效工作针贬。
熔斷和服務(wù)降級(jí)是用什么實(shí)現(xiàn)的?
Springcloud有服務(wù)熔斷和降級(jí)的機(jī)制是Hystrix拢蛋,通過Hystrix的注解HystrixCommond實(shí)現(xiàn)的桦他。服務(wù)降級(jí)有幾種實(shí)現(xiàn)方法,超時(shí)降級(jí)谆棱,故障降級(jí)快压,限流降級(jí)。也可以在配置中心配置
sql的隔離級(jí)別有哪些垃瞧。
未提交讀:事務(wù)還沒提交蔫劣,而別的可以看到他修改數(shù)據(jù)的后果,就是臟讀个从。
提交讀:就是一個(gè)事務(wù)在執(zhí)行的時(shí)候脉幢,其他事務(wù)看不到他的操作,所以看到的是舊數(shù)據(jù)信姓,也是無(wú)效的數(shù)據(jù)鸵隧。
可重復(fù)讀:可以保證讀取同一條數(shù)據(jù)的一致性,卻不能保證沒有插入新的數(shù)據(jù)意推。
可串行化:是最高的隔離級(jí)別,由于他加上了大量的鎖珊蟀,所以可能會(huì)出現(xiàn)大量的請(qǐng)求超時(shí)菊值,性能比較低下。
Localstorge是干什么的育灸,sessionstorge是做什么腻窒,sessionstorge和Localstorge的區(qū)別
sessionStorage僅在當(dāng)前瀏覽器關(guān)閉之前有效,不在不同的瀏覽器窗口共享磅崭,在同源的同窗口可以共享跨頁(yè)面刷新依然存在儿子,存在本地。如果瀏覽器支持砸喻,瀏覽器崩潰并重啟之后依然會(huì)存在柔逼。
localStorage除非主動(dòng)清除否則始終有效蒋譬,無(wú)論窗口關(guān)閉與否,存儲(chǔ)大小達(dá)5M愉适,存本地
Spring原理?
? ? ? 內(nèi)部最核心的就是IOC了犯助,動(dòng)態(tài)注入,讓一個(gè)對(duì)象的創(chuàng)建不用new了维咸,可以自動(dòng)的生產(chǎn)剂买,這其實(shí)就是利用java里的反射,反射其實(shí)就是在運(yùn)行時(shí)動(dòng)態(tài)的去創(chuàng)建癌蓖、調(diào)用對(duì)象瞬哼,Spring就是在運(yùn)行時(shí),跟xml Spring的配置文件來(lái)動(dòng)態(tài)的創(chuàng)建對(duì)象租副,和調(diào)用對(duì)象里的方法的 倒槐。??
? ? ? Spring還有一個(gè)核心就是AOP這個(gè)就是面向切面編程,可以為某一類對(duì)象 進(jìn)行監(jiān)督和控制(也就是?在調(diào)用這類對(duì)象的具體方法的前后去調(diào)用你指定的 模塊)從而達(dá)到對(duì)一個(gè)模塊擴(kuò)充的功能附井。這些都是通過??配置類達(dá)到的讨越。??
? ? ??Spring目的:就是讓對(duì)象與對(duì)象(模塊與模塊)之間的關(guān)系沒有通過代碼來(lái)關(guān)聯(lián),都是通過配置類說(shuō)明管理的(Spring根據(jù)這些配置 內(nèi)部通過反射去動(dòng)態(tài)的組裝對(duì)象)??
? ? ? 要記子酪恪:Spring是一個(gè)容器把跨,凡是在容器里的對(duì)象才會(huì)有Spring所提供的這些服務(wù)和功能。??
spring aop? ioc ?
?IOC
概念:控制權(quán)由對(duì)象本身轉(zhuǎn)向容器沼死;由容器根據(jù)配置文件去創(chuàng)建實(shí)例并創(chuàng)建各個(gè)實(shí)例之間的依賴關(guān)系??
核心:bean工廠着逐;在Spring中,bean工廠創(chuàng)建的各個(gè)實(shí)例稱作bean??
AOP
1意蛀、 代理的兩種方式:??
靜態(tài)代理:??
l 針對(duì)每個(gè)具體類分別編寫代理類耸别;??
l 針對(duì)一個(gè)接口編寫一個(gè)代理類;??
動(dòng)態(tài)代理:??
針對(duì)一個(gè)方面編寫一個(gè)InvocationHandler县钥,然后借用JDK反射包中的Proxy類為各種接口動(dòng)態(tài)生成相應(yīng)的代理類
tomcat優(yōu)化?
優(yōu)化連接配置秀姐,可以修改conf/server.xml文件,修改連接數(shù)若贮,關(guān)閉客戶端dns的查詢省有。
采用集群
調(diào)整線程數(shù)量
優(yōu)化tomcat參數(shù)
什么是反射?
Java反射就是在運(yùn)行狀態(tài)中谴麦,對(duì)于任意一個(gè)類蠢沿,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象匾效,都能夠調(diào)用它的任意方法和屬性舷蟀;并且能改變它的屬性
spring攔截器 sturts過濾器有什么區(qū)別?
1.攔截器是基于java反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)的;
2.攔截器不依賴于servlet容器野宜,而過濾器依賴于servlet容器扫步;
3.攔截器只能對(duì)Action請(qǐng)求起作用,而過濾器則可以對(duì)幾乎所有請(qǐng)求起作用速缨;
4.攔截器可以訪問Action上下文锌妻、值棧里的對(duì)象,而過濾器不能旬牲;
5.在Action的生命周期中仿粹,攔截器可以多次調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次原茅。
6.Springmvc的入口是一個(gè)servlet即前端控制器吭历,而Struts2入口是一個(gè)filter過慮器
sql優(yōu)化?
模糊查詢的時(shí)候不要在字段前面加%
多用join少用子查詢
給常用的字段加索引
Where和having相比較用where
為什么要加索引擂橘?
在一個(gè)或者一些字段需要頻繁操作的時(shí)候晌区,創(chuàng)建索引會(huì)提高會(huì)快的速度,因?yàn)闀?huì)從全盤掃描改為索引掃描通贞,但是索引不是越多越好朗若,太多的索引會(huì)占用很多的索引表空間,而且加上索引之后昌罩,執(zhí)行insert操作會(huì)很慢哭懈。
Mysql中的mysam和innodb是干什么的
Mysam和innodb是mysql中最常見的兩個(gè)表類型,各有優(yōu)缺點(diǎn)茎用,innodb具有事務(wù)回滾和崩潰修復(fù)的能力遣总,Mysam相對(duì)簡(jiǎn)單所以效率上要比innodb好,所以在進(jìn)行讀寫分離的時(shí)候轨功,innodb適合做寫的操作旭斥,mysam適合做讀的操作
Jvm結(jié)構(gòu)?
方法區(qū)古涧,java堆垂券,java棧,本地方法棧蒿褂,指令計(jì)數(shù)器以及其他隱含寄存器
Wait和sleep的區(qū)別
?這兩個(gè)方法來(lái)自不同的類分別是Thread和Object ?
?最主要是sleep方法沒有釋放鎖圆米,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法(鎖代碼塊和方法鎖)啄栓。 ?
?wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用也祠,而sleep可以在任何地方使用(使用范圍) ?
?sleep必須捕獲異常昙楚,而wait,notify和notifyAll不需要捕獲異常
Java開發(fā)模式都有什么诈嘿?
集中式架構(gòu)
分布式服務(wù)
微服務(wù)
垂直拆分
服務(wù)治理(SOA)
線程池
線程池就是提前創(chuàng)建若干個(gè)線程堪旧,如果有任務(wù)需要處理削葱,線程池里的線程就會(huì)處理任務(wù),處理完之后線程并不會(huì)被銷毀淳梦,而是等待下一個(gè)任務(wù)析砸。由于創(chuàng)建和銷毀線程都是消耗系統(tǒng)資源的,所以當(dāng)你想要頻繁的創(chuàng)建和銷毀線程的時(shí)候就可以考慮使用線程池來(lái)提升系統(tǒng)的性能
關(guān)注我:私信回復(fù)? 獲取Dubbo爆袍、Redis首繁、設(shè)計(jì)模式、Netty陨囊、zookeeper弦疮、Spring cloud、分布式蜘醋、高并發(fā)等架構(gòu)技術(shù)視頻教程資料,架構(gòu)思維導(dǎo)圖胁塞,和BATJ面試題及答案。