java面試總結(jié)

1、ArrayList储狭、Vector互婿、LinkedList之間的區(qū)別?

ArrayList:底層數(shù)組辽狈,查詢快慈参,增刪慢,線程不安全刮萌,效率高
Vector:底層數(shù)組懂牧,查詢快(由于線程安全,其實(shí)查詢也不快)尊勿,增刪慢僧凤,線程安全,效率低
LinkedList:底層雙重鏈表元扔,查詢慢躯保,增刪快,線程不安全澎语,效率高途事。

2、HashMap和Hashtable有什么區(qū)別擅羞?

HashMap允許null鍵null值尸变,線程不安全,效率高
Hashtable不允許null鍵null值减俏,線程安全召烂,效率低

3、列舉Collections工具類常用方法娃承?

Collections.sort(list);按自然順序排序奏夫;
Collections.binarySearch(list,key); 二分查找;
Collections.reverse(list) 反轉(zhuǎn)历筝;
Collections.shuffle(list) 隨機(jī)替換酗昼;

4、final梳猪、finally麻削、finalize的區(qū)別?

final:修飾類春弥,不能被繼承呛哟,修飾方法不能被重寫,修飾變量是常量
finally:是異常處理的一部分惕稻,用于釋放資源竖共,一般來說代碼肯定會執(zhí)行,除非在執(zhí)行finally之前俺祠,jvm退出了公给。
finalize:是Object的一個(gè)方法,用于垃圾回收蜘渣。

5淌铐、如果catch里有return語句,請問finally還會執(zhí)行嗎蔫缸?如果會是在return前還是return后腿准?

會,在return前執(zhí)行。不過finally的邏輯不會改變r(jià)eturn的返回值吐葱。

6街望、實(shí)現(xiàn)多線程有幾種方式?分別是什么

有三種方式弟跑,繼承Thread類灾前,實(shí)現(xiàn)runnable接口,實(shí)現(xiàn)callable接口

7孟辑、runnable與callable的區(qū)別柔纵?

Callable任務(wù)執(zhí)行后可以有返回值伊滋,而runnable不能返回值憎乙,call方法可以拋出異常卵凑,而run方法只能try catch,運(yùn)行callable任務(wù)可以拿到一個(gè)Future對象貌虾,callable依賴線程池吞加。

8、使用線程池的好處酝惧?

使用線程池提高系統(tǒng)的性能榴鼎,減少創(chuàng)建,銷毀線程的資源開銷晚唇,因?yàn)榇a結(jié)束后巫财,線程不會死亡,而是再回到線城池哩陕,等待下一個(gè)對象的調(diào)用平项。

9、線程的生命周期悍及?
20160925202623247.png
10闽瓢、sleep()和wait()的區(qū)別?

Sleep會把執(zhí)行機(jī)會給其他線程心赶,到時(shí)后自動恢復(fù)扣讼,不會釋放對象鎖,wait會釋放對象鎖缨叫,只有對象發(fā)出notify或notifyAll才準(zhǔn)備獲取對象鎖椭符。

11、run()和start()的區(qū)別耻姥?

Run僅僅是調(diào)線程執(zhí)行的普通方法销钝,start首先會啟動線程,由Jvm調(diào)用run方法琐簇。

12蒸健、寫一個(gè)單例設(shè)計(jì)模式例子?

懶漢式

public class student{
   private student(){}
   private static student s=null;
   public synchronized student getStudent(){
   if(s==null){
      s=new Student(); 
   }
   return s;
  }
}

餓漢式

public class student{
   private student(){}
   private static student s= new Student();
   public static student getStudent(){ 
      return s;
   }
}
13、spring是如何管理事務(wù)的似忧?

Spring并不是直接管理事務(wù)渣叛,而是提供了多種事務(wù)管理器,他們將事務(wù)管理的職責(zé)委托給持久化機(jī)制所提供的相關(guān)平臺框架的事務(wù)來實(shí)現(xiàn)橡娄,spring為不同的事務(wù)API提供一致的編程模型诗箍。
Spring的事務(wù)分為編程式事務(wù)和聲明式事務(wù),編程式事務(wù)允許用戶在代碼中精確定義事務(wù)的邊界挽唉,而聲明式事務(wù)(基于AOP)有助于將用戶操作與事務(wù)規(guī)則進(jìn)行解耦。
Spring提供兩種方式的編程式事務(wù)管理筷狼,分別是使用transactionTemplate(線程安全的)和platformTransactionManager瓶籽。

14、數(shù)據(jù)庫事務(wù)的隔離級別埂材?

由低到高分別為Read uncommitted 塑顺、Read committed 、Repeatable read 俏险、Serializable

15严拒、spring事務(wù)的傳播行為?

PROPAGATION_REQUIRED--支持當(dāng)前事務(wù)竖独,假設(shè)當(dāng)前沒有事務(wù)裤唠。就新建一個(gè)事務(wù)。
這是最常見的選擇莹痢。
PROPAGATION_SUPPORTS--支持當(dāng)前事務(wù)种蘸,假設(shè)當(dāng)前沒有事務(wù),就以非事務(wù)方式運(yùn)行竞膳。
PROPAGATION_MANDATORY--支持當(dāng)前事務(wù)航瞭,假設(shè)當(dāng)前沒有事務(wù),就拋出異常坦辟。
PROPAGATION_REQUIRES_NEW--新建事務(wù)刊侯,假設(shè)當(dāng)前存在事務(wù)。把當(dāng)前事務(wù)掛起锉走。
PROPAGATION_NOT_SUPPORTED--以非事務(wù)方式運(yùn)行操作滨彻。假設(shè)當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起挠日。
PROPAGATION_NEVER--以非事務(wù)方式運(yùn)行疮绷,假設(shè)當(dāng)前存在事務(wù),則拋出異常嚣潜。

16冬骚、什么是AOP,AOP的作用是什么?

AOP只冻,面向切面編程庇麦,就是把可重用的功能提取出來,然后將這些通用功能在合適的時(shí)候織入到應(yīng)用程序中喜德,比如事務(wù)管理山橄、權(quán)限控制、日志記錄舍悯、性能統(tǒng)計(jì)等航棱。
AOP的作用
AOP并沒有幫助我們解決任何新的問題,它只是提供了一種更好的辦法萌衬,能夠用更少的工作量來解決現(xiàn)有的一些問題饮醇,使得系統(tǒng)更加健壯,可維護(hù)性更好秕豫。

17朴艰、說一下spring的bean的生命周期?

1)Spring通常通過配置文件定義Bean
2)初始化Bean混移。 通過方法或則通過接口
3)Bean的調(diào)用 祠墅。通過BeanFactoy 或則 ApplicationContext
4)Bean的銷毀 。通過方法或則接口來實(shí)現(xiàn)

18歌径、過濾器毁嗦、攔截器、AOP的區(qū)別沮脖?

過濾器作用于最外層金矛,根據(jù)url配置進(jìn)行過濾能拿到request,response勺届,不能拿到處理的controller的類和方法信息驶俊,攔截器可以拿到類和方法信息,拿不到方法的參數(shù)免姿,AOP可以拿到類饼酿,方法以及方法里的參數(shù)

19、redis的持久化胚膊?

有兩種方式故俐,RDB和AOF
RDB:當(dāng)主機(jī)在上一次快照之后,下一次快照之前掛了紊婉,則在上一次快照的數(shù)據(jù)將全部丟失
AOF:將發(fā)送服務(wù)端的每一條命令都記錄下來
AOF重寫:去除數(shù)據(jù)的中間執(zhí)行過程药版,保留最終數(shù)據(jù)命令。

20喻犁、簡述redis的主從復(fù)制(讀寫分離)

當(dāng)從庫與主庫建立主從關(guān)系后槽片,從庫會向主庫發(fā)送SYNC命令何缓。
主庫接受到SYNC命令開始保存快照(RDB持久化)并將期間收到的寫的命令緩存起來
快照完成后,主庫會將快照文件和緩存寫命令發(fā)送給從庫
從庫接收到后會載入快照文件并執(zhí)行寫的命令
之后主庫每當(dāng)接收到寫的命令就會發(fā)送給從庫还栓,從而保證數(shù)據(jù)一致

21碌廓、redis的主從復(fù)制出現(xiàn)宕機(jī)怎么辦?

如果從庫宕機(jī)剩盒,重啟后自動加入主從架構(gòu)谷婆,增量更新
如果主庫宕機(jī),從庫執(zhí)行SLAVEOF NO ONE 斷開主從關(guān)系辽聊,變成主庫纪挎,主庫重啟后執(zhí)行SLAVEOF 將其變?yōu)閺膸欤≧DB持久化)

22、redis哨兵的作用身隐?

監(jiān)控主從是否正常廷区,主庫故障自動將從庫變?yōu)橹鲙?/p>

23、簡述下springsecurity的原理?

Springsecurity就是在訪問我們自己的web資源前加了一系列的過濾器組成過濾器鏈贾铝,springsecurity兩大核心認(rèn)證和授權(quán)。而這些過濾器也不是直接處理用戶的認(rèn)證和授權(quán)埠帕,而是交給了認(rèn)證管理器和決策管理器垢揩,認(rèn)證管理器會把任務(wù)交給對應(yīng)的provider,一般表單登錄會選擇DaoAuthenticationProvider敛瓷,這個(gè)provider會交給UserDetailService去處理叁巨。所以我們實(shí)際項(xiàng)目中會實(shí)現(xiàn)這個(gè)UserDetailService接口,而不管我們自己設(shè)計(jì)的數(shù)據(jù)庫如何呐籽,我們只需要在這個(gè)類里處理我們自己的邏輯锋勺。授權(quán)是通過權(quán)限表達(dá)式控制的。

24狡蝶、項(xiàng)目中為什么要用springsecurity作為安全框架庶橱,而不是自己寫個(gè)過濾器?

Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架贪惹。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean苏章,充分利用了Spring IoC,和AOP功能奏瞬,為應(yīng)用系統(tǒng)提供聲明式的安全訪問控制功能枫绅,減少了為企業(yè)系統(tǒng)安全控制編寫大量重復(fù)代碼的工作。

25硼端、簡述下redis分布式鎖并淋?

Redis有兩個(gè)命令setNs和getSet,我們用setNs的特性去加鎖珍昨,為了避免出現(xiàn)死鎖set的值設(shè)為當(dāng)前時(shí)間加上過期時(shí)間县耽,如果鎖過期了句喷,為了避免多個(gè)線程同時(shí)獲得鎖,在判斷鎖過期之后加getSet命令酬诀,判斷getSet獲得的值與原值是否相等脏嚷,相等才能獲取到鎖。

26瞒御、簡述下zookeeper的分布式鎖父叙?

Zookeeper有四種節(jié)點(diǎn)類型,持久節(jié)點(diǎn)肴裙,持久順序節(jié)點(diǎn)趾唱,臨時(shí)節(jié)點(diǎn),臨時(shí)順序節(jié)點(diǎn)蜻懦。Zookeeper會先創(chuàng)建一個(gè)持久節(jié)點(diǎn)甜癞,在此節(jié)點(diǎn)下面創(chuàng)建臨時(shí)順序節(jié)點(diǎn),規(guī)定節(jié)點(diǎn)號最小的獲取到鎖宛乃,每個(gè)節(jié)點(diǎn)首先會判斷自己是不是最小的節(jié)點(diǎn)悠咱,如果不是會監(jiān)聽他上一個(gè)節(jié)點(diǎn),如果上一個(gè)節(jié)點(diǎn)掛了征炼,此節(jié)點(diǎn)會再一次判斷自己是不是最小的節(jié)點(diǎn)析既,是則獲取到鎖。臨時(shí)順序節(jié)點(diǎn)有效避免了羊群效應(yīng)谆奥,而且拿到鎖的節(jié)點(diǎn)掛掉不會導(dǎo)致其他節(jié)點(diǎn)無法獲取到鎖眼坏,有效避免了死鎖問題。

27酸些、抽象類和接口的區(qū)別宰译?

抽象類的變量可以是各種類型的,而接口不能魄懂。
抽象類可以有非抽象的方法沿侈,而接口默認(rèn)都是public abstract
抽象類只能單繼承,而接口可以多實(shí)現(xiàn)

28逢渔、volatile和synchronized的區(qū)別肋坚?

1)volatile本質(zhì)是在告訴jvm當(dāng)前變量在寄存器(工作內(nèi)存)中的值是不確定的,需要從主存中讀人嗬智厌; synchronized則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量盲赊,其他線程被阻塞住铣鹏。
2)volatile僅能使用在變量級別;synchronized則可以使用在變量哀蘑、方法诚卸、和類級別的
3)volatile僅能實(shí)現(xiàn)變量的修改可見性葵第,不能保證原子性;而synchronized則可以保證變量的修改可見性和原子性
4)volatile不會造成線程的阻塞合溺;synchronized可能會造成線程的阻塞卒密。
5)volatile標(biāo)記的變量不會被編譯器優(yōu)化;synchronized標(biāo)記的變量可以被編譯器優(yōu)化

29棠赛、簡述垃圾回收機(jī)制哮奇?

對象如果沒有更多的指向則變成垃圾;gc()垃圾回收器睛约,由虛擬機(jī)自動進(jìn)行回收鼎俘,gc回收規(guī)則是GC Roots引用鏈,GC首先從棧頂往下找引用的對象辩涝,然后到方法區(qū)中找引用的對象贸伐,當(dāng)一個(gè)對象跟引用鏈沒有連接則被回收,當(dāng)調(diào)用System.gc()進(jìn)行垃圾回收怔揩,內(nèi)存回收對象前會調(diào)用對象的finalize()方法捉邢,如果對象不想被回收則需要重新再將引用指向?qū)ο蠹纯伞?/p>

30、談?wù)勀銓vm內(nèi)存的理解商膊?

jvm把管理的內(nèi)存劃分5個(gè)內(nèi)存空間:方法區(qū)歌逢,堆,棧翘狱,本地方法棧,程序計(jì)數(shù)器砰苍。其中棧潦匈,本地方法棧,程序計(jì)數(shù)器是線程私有的赚导,而堆茬缩,方法區(qū)是線程共享的,每個(gè)線程在堆中會預(yù)先分配一個(gè)內(nèi)存塊吼旧,方法區(qū)存儲已被虛擬機(jī)加載的類的信息凰锡,常量,靜態(tài)變量圈暗。
jvm區(qū)域總體分兩類掂为,堆區(qū)和非堆區(qū),其中堆區(qū)又分為Eden space员串、survivor space勇哗、Tenured Gen(老年代)、Perm Gen(永久代)
對象在Eden Space創(chuàng)建寸齐,當(dāng)Eden Space滿了的時(shí)候欲诺,gc就把所有在Eden Space中的對象掃描一次抄谐,把所有有效的對象復(fù)制到第一個(gè)Survivor Space,同時(shí)把無效的對象所占用的空間釋放扰法。當(dāng)Eden Space再次變滿了的時(shí)候蛹含,就啟動移動程序把Eden Space中有效的對象復(fù)制到第二個(gè)Survivor Space,同時(shí)塞颁,也將第一個(gè)Survivor Space中的有效對象復(fù)制到第二個(gè)Survivor Space浦箱。如果填充到第二個(gè)Survivor Space中的有效對象被第一個(gè)Survivor Space或Eden Space中的對象引用,那么這些對象就是長期存在的殴边,此時(shí)這些對象將被復(fù)制到Permanent Generation憎茂。
若垃圾收集器依據(jù)這種小幅度的調(diào)整收集不能騰出足夠的空間,就會運(yùn)行Full GC锤岸,此時(shí)jvm gc停止所有在堆中運(yùn)行的線程并執(zhí)行清除動作竖幔。

31、簡述類加載過程和類加載機(jī)制

類加載器種類有上到下分根類加載器是偷,擴(kuò)展類加載器拳氢,系統(tǒng)類加載器,自定義加載器蛋铆。
類加載的階段:
加載:將類的class文件讀入內(nèi)存馋评,并創(chuàng)建一個(gè)java.lang.Class對象放入方法區(qū)
驗(yàn)證:檢測被加載的類是否有正確的內(nèi)部結(jié)構(gòu),會不會威脅虛擬機(jī)的安全等
準(zhǔn)備:為static修飾的變量分配內(nèi)存刺啦,并設(shè)置初始值留特,int型的是0,如果是static final修飾的玛瘸,則進(jìn)入常量池
解析:將類的二進(jìn)制數(shù)據(jù)中的符號引用替換為直接引用蜕青。
初始化:當(dāng)初始化一個(gè)類的時(shí)候,如果發(fā)現(xiàn)其父類還沒有進(jìn)行過初始化糊渊、則需要先觸發(fā)其父類的初始化右核,將準(zhǔn)備階段的初始值完成賦值。初始化運(yùn)行主類渺绒,比如main方法贺喝。

32、如何實(shí)現(xiàn)分布式事務(wù)宗兼?

1)可以采用消息事務(wù)+最終一致性:將一個(gè)分布式事務(wù)拆成一個(gè)消息事務(wù)(A系統(tǒng)的本地操作+發(fā)消息)+B系統(tǒng)的本地操作躏鱼,其中B系統(tǒng)的操作由消息驅(qū)動,只要消息事務(wù)成功针炉,那么A操作一定成功挠他,消息也一定發(fā)出來了,這時(shí)候B會收到消息去執(zhí)行本地操作篡帕,如果本地操作失敗殖侵,消息會重投贸呢,直到B操作成功,這樣就變相地實(shí)現(xiàn)了A與B的分布式事務(wù)拢军。
2)TCC編程模式:TCC提供了一個(gè)編程框架楞陷,將整個(gè)業(yè)務(wù)邏輯分為三塊:Try、Confirm和Cancel三個(gè)操作茉唉。以在線下單為例固蛾,Try階段會去扣庫存,Confirm階段則是去更新訂單狀態(tài)度陆,如果更新訂單失敗艾凯,則進(jìn)入Cancel階段,會去恢復(fù)庫存懂傀≈菏總之,TCC就是通過代碼人為實(shí)現(xiàn)了兩階段提交蹬蚁,不同的業(yè)務(wù)場景所寫的代碼都不一樣恃泪,復(fù)雜度也不一樣,因此犀斋,這種模式并不能很好地被復(fù)用贝乎。

33、cookie和session的區(qū)別叽粹?

1)cookie數(shù)據(jù)存放在客戶的瀏覽器上览效,session數(shù)據(jù)放在服務(wù)器上。
2)cookie不是很安全虫几,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙朽肥,考慮安全應(yīng)該使用session。
3)session會在一定時(shí)間內(nèi)保存在服務(wù)器上持钉,當(dāng)訪問增多,會比較占用服務(wù)器的性能篱昔。
4)單個(gè)cookie保存的數(shù)據(jù)不能超過4K

34每强、寫一個(gè)死鎖的例子
public class TestThread {  
    public static void main(String[] args) {  
// test dead lock  
        Thread t9 = new Thread(  
                new DeadLock(true));  
        Thread t10 = new Thread(  
                new DeadLock(false));  
        t9.start();  
        t10.start();  
    }  
}  
  
class DeadLock implements Runnable{  
  
    boolean lockFormer;  
    static Object o1 = new Object();  
    static Object o2 = new Object();  
    DeadLock(boolean lockFormer){  
        this.lockFormer = lockFormer;  
    }  
      
    @Override  
    public void run() {  
        if(this.lockFormer){  
            synchronized (o1) {  
                try {  
                    Thread.sleep(500);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
                synchronized (o2) {  
                    System.out.println("1ok");  
                }  
            }  
        }else{  
            synchronized (o2) {  
                try {  
                    Thread.sleep(500);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
                synchronized (o1) {  
                    System.out.println("1ok");  
                }  
            }  
        }  
          
    }  
}  
35、ThreadLocal 與 Synchronized區(qū)別州刽?

相同:ThreadLocal和線程同步機(jī)制都是為了解決多線程中相同變量的訪問沖突問題空执。
不同:Synchronized同步機(jī)制采用了“以時(shí)間換空間”的方式,僅提供一份變量穗椅,讓不同的線程排隊(duì)訪問辨绊;而ThreadLocal采用了“以空間換時(shí)間”的方式,每一個(gè)線程都提供了一份變量匹表,因此可以同時(shí)訪問而互不影響门坷。

36宣鄙、堆內(nèi)存中的新生代,分為Eden區(qū)和兩個(gè)survivor區(qū)默蚌,請問為什么需要2個(gè)survivor冻晤?

假如不分為兩個(gè)survivor,一旦Eden滿了绸吸,觸發(fā)一次Minor GC鼻弧,那么eden中有引用的對象就會移到survivor區(qū),那么下一次Eden滿了锦茁,再一次Minor GC攘轩,survivor和Eden各有一部分存活對象,此時(shí)再把Eden的存活對象放到Survivor中码俩,會導(dǎo)致內(nèi)存的碎片化度帮,碎片化嚴(yán)重影響java性能,導(dǎo)致堆中沒有足夠大的連續(xù)內(nèi)存空間握玛。

37够傍、談?wù)勀銓pring IOC的理解?

在平時(shí)的java應(yīng)用開發(fā)中挠铲,我們要實(shí)現(xiàn)某一個(gè)功能或者說是完成某個(gè)業(yè)務(wù)邏輯時(shí)至少需要兩個(gè)或以上的對象來協(xié)作完成冕屯,在沒有使用Spring的時(shí)候,每個(gè)對象在需要使用他的合作對象時(shí)拂苹,自己均要使用像new object() 這樣的語法來將合作對象創(chuàng)建出來安聘,這個(gè)合作對象是由自己主動創(chuàng)建出來的,創(chuàng)建合作對象的主動權(quán)在自己手上瓢棒,自己需要哪個(gè)合作對象浴韭,就主動去創(chuàng)建,創(chuàng)建合作對象的主動權(quán)和創(chuàng)建時(shí)機(jī)是由自己把控的脯宿,而這樣就會使得對象間的耦合度高了念颈,A對象需要使用合作對象B來共同完成一件事,A要使用B连霉,那么A就對B產(chǎn)生了依賴榴芳,也就是A和B之間存在一種耦合關(guān)系,并且是緊密耦合在一起跺撼,而使用了Spring之后就不一樣了窟感,創(chuàng)建合作對象B的工作是由Spring來做的,Spring創(chuàng)建好B對象歉井,然后存儲到一個(gè)容器里面柿祈,當(dāng)A對象需要使用B對象時(shí),Spring就從存放對象的那個(gè)容器里面取出A要使用的那個(gè)B對象,然后交給A對象使用躏嚎,至于Spring是如何創(chuàng)建那個(gè)對象蜜自,以及什么時(shí)候創(chuàng)建好對象的,A對象不需要關(guān)心這些細(xì)節(jié)問題(你是什么時(shí)候生的紧索,怎么生出來的我可不關(guān)心袁辈,能幫我干活就行),A得到Spring給我們的對象之后珠漂,兩個(gè)人一起協(xié)作完成要完成的工作即可晚缩。
所以控制反轉(zhuǎn)Ioc是說創(chuàng)建對象的控制權(quán)進(jìn)行轉(zhuǎn)移,以前創(chuàng)建對象的主動權(quán)和創(chuàng)建時(shí)機(jī)是由自己把控的媳危,而現(xiàn)在這種權(quán)力轉(zhuǎn)移到第三方荞彼,比如轉(zhuǎn)移交給了IoC容器,它就是一個(gè)專門用來創(chuàng)建對象的工廠待笑,你要什么對象鸣皂,它就給你什么對象,有了 IoC容器暮蹂,依賴關(guān)系就變了寞缝,原先的依賴關(guān)系就沒了,它們都依賴IoC容器了仰泻,通過IoC容器來建立它們之間的關(guān)系荆陆。

38、HTTP 2.0與HTTP 1.1區(qū)別

HTTP/2采用二進(jìn)制格式而非文本格式
HTTP/2是完全多路復(fù)用的集侯,而非有序并阻塞的——只需一個(gè)連接即可實(shí)現(xiàn)并行
使用報(bào)頭壓縮被啼,HTTP/2降低了開銷
HTTP/2讓服務(wù)器可以將響應(yīng)主動“推送”到客戶端緩存中

39、數(shù)據(jù)庫連接池的原理棠枉?

數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個(gè)“緩沖池”浓体。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫連接時(shí)辈讶,只需從“緩沖池”中取出一個(gè)命浴,使用完畢之后再放回去。我們可以通過設(shè)定 連接池最大連接數(shù)來防止系統(tǒng)無盡的與數(shù)據(jù)庫連接贱除。更為重要的是我們可以通過連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫的連接的數(shù)量使用情況咳促,為系統(tǒng)開發(fā),測試及性能調(diào)整提供依據(jù)
?1).空閑連接池(存放已經(jīng)創(chuàng)建但并未分配出去的連接,按照創(chuàng)建時(shí)間大小放在一個(gè)容器)
?2).用戶請求連接時(shí)會看連接池內(nèi)是否還有空閑連接..分配一個(gè)最大創(chuàng)建時(shí)間的連接給它
?3).如果有空閑連接.判斷該連接是否有效,如果是無效的連接,則把它移出連接池,重新檢測是否還有其他空閑的連接
?4).如果沒有剩余空閑的連接,檢查當(dāng)前所開的連接池?cái)?shù)是否達(dá)到連接池所允許的最大數(shù),如果沒有達(dá)到就分配一個(gè)新的連接,如果達(dá)到了就等待一段時(shí)間。
?5).在等待的時(shí)間內(nèi),任何連接被釋放出來后都可以把這個(gè)連接分配給等待的客戶
?6).如果等待時(shí)間超過預(yù)定的時(shí)間則返回null值,系統(tǒng)對已經(jīng)分配出去了的正在使用的連接只做計(jì)數(shù)勘伺。

40、http與https的區(qū)別褂删?

在URL前加https://前綴表明是用SSL加密的飞醉。 你的電腦與服務(wù)器之間收發(fā)的信息傳輸將更加安全。
Web服務(wù)器啟用SSL需要獲得一個(gè)服務(wù)器證書并將該證書與要使用SSL的服務(wù)器綁定。
http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443缅帘。http的連接很簡單,是無狀態(tài)的,...
HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸轴术、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議
要比http協(xié)議安全。

41钦无、簡述CocurrentHashMap逗栽?

CocurrentHashMap利用鎖分段技術(shù)增加了鎖的數(shù)目,從而使?fàn)帄Z同一把鎖的線程的數(shù)目得到控制失暂。
鎖分段技術(shù)就是對數(shù)據(jù)集進(jìn)行分段彼宠,每段競爭一把鎖,不同數(shù)據(jù)段的數(shù)據(jù)不存在鎖競爭弟塞,從而有效提高 高并發(fā)訪問效率凭峡。
CocurrentHashMap在get方法是無需加鎖的,因?yàn)橛玫降墓蚕碜兞慷疾捎胿olatile關(guān)鍵字修飾决记,保證共享變量在線程之間的可見性(每次讀取都先同步緩存和內(nèi)存摧冀,直接從內(nèi)存中獲取值,雖然不是原子操作系宫,但根據(jù)JAVA內(nèi)存模型的happen before原則索昂,對volatile字段的寫入操作先于讀操作,能夠保證不會臟讀),volatile為了讓變量提供線程之間的內(nèi)存可見性扩借,會禁止程序執(zhí)行結(jié)果的重排序(導(dǎo)致緩存優(yōu)化的效果降低)

42椒惨、redis可以存儲哪些數(shù)據(jù)類型?

redis常用五種數(shù)據(jù)類型:string,hash,list,set,zset(sorted set).

43往枷、mysql索引失效的幾種情況框产?

1.如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什么盡量少用or的原因)
2.對于多列索引错洁,不是使用的第一部分秉宿,則不會使用索引
3.like查詢是以%開頭
4.如果列類型是字符串,那一定要在條件中將數(shù)據(jù)使用引號引用起來,否則不使用索引
5.如果mysql估計(jì)使用全表掃描要比使用索引快,則不使用索引

44屯碴、mysql的執(zhí)行計(jì)劃explain列的解釋描睦?

運(yùn)行上面的sql語句后你會看到,下面的表頭信息:
table | type | possible_keys | key | key_len | ref | rows | Extra

EXPLAIN列的解釋
table
顯示這一行的數(shù)據(jù)是關(guān)于哪張表的
type
這是重要的列导而,顯示連接使用了何種類型忱叭。從最好到最差的連接類型為const、eq_reg今艺、ref韵丑、range、indexhe和ALL
說明:不同連接類型的解釋(按照效率高低的順序排序)
system:表只有一行:system表虚缎。這是const連接類型的特殊情況撵彻。
const :表中的一個(gè)記錄的最大值能夠匹配這個(gè)查詢(索引可以是主鍵或惟一索引)。因?yàn)橹挥幸恍校@個(gè)值實(shí)際就是常數(shù)陌僵,因?yàn)镸YSQL先讀這個(gè)值然后把它當(dāng)做常數(shù)來對待轴合。
eq_ref:在連接中,MYSQL在查詢時(shí)碗短,從前面的表中受葛,對每一個(gè)記錄的聯(lián)合都從表中讀取一個(gè)記錄,它在查詢使用了索引為主鍵或惟一鍵的全部時(shí)使用偎谁。
ref:這個(gè)連接類型只有在查詢使用了不是惟一或主鍵的鍵或者是這些類型的部分(比如总滩,利用最左邊前綴)時(shí)發(fā)生。對于之前的表的每一個(gè)行聯(lián)合搭盾,全部記錄都將從表中讀出咳秉。這個(gè)類型嚴(yán)重依賴于根據(jù)索引匹配的記錄多少—越少越好。
range:這個(gè)連接類型使用索引返回一個(gè)范圍中的行鸯隅,比如使用>或<查找東西時(shí)發(fā)生的情況澜建。
index:這個(gè)連接類型對前面的表中的每一個(gè)記錄聯(lián)合進(jìn)行完全掃描(比ALL更好,因?yàn)樗饕话阈∮诒頂?shù)據(jù))蝌以。
ALL:這個(gè)連接類型對于前面的每一個(gè)記錄聯(lián)合進(jìn)行完全掃描炕舵,這一般比較糟糕,應(yīng)該盡量避免跟畅。
possible_keys
顯示可能應(yīng)用在這張表中的索引咽筋。如果為空,沒有可能的索引徊件〖楣ィ可以為相關(guān)的域從WHERE語句中選擇一個(gè)合適的語句
key
實(shí)際使用的索引。如果為NULL虱痕,則沒有使用索引睹耐。很少的情況下,MYSQL會選擇優(yōu)化不足的索引部翘。這種情況下硝训,可以在SELECT語句中使用USE INDEX(indexname)來強(qiáng)制使用一個(gè)索引或者用IGNORE INDEX(indexname)來強(qiáng)制MYSQL忽略索引
key_len
使用的索引的長度。在不損失精確性的情況下新思,長度越短越好
ref
顯示索引的哪一列被使用了窖梁,如果可能的話,是一個(gè)常數(shù)
rows
MYSQL認(rèn)為必須檢查的用來返回請求數(shù)據(jù)的行數(shù)
Extra
關(guān)于MYSQL如何解析查詢的額外信息夹囚。將在表4.3中討論纵刘,但這里可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引荸哟,結(jié)果是檢索會很慢

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末假哎,一起剝皮案震驚了整個(gè)濱河市蛔翅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌位谋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堰燎,死亡現(xiàn)場離奇詭異掏父,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)秆剪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門赊淑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仅讽,你說我怎么就攤上這事陶缺。” “怎么了洁灵?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵饱岸,是天一觀的道長。 經(jīng)常有香客問我徽千,道長苫费,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任双抽,我火速辦了婚禮百框,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牍汹。我一直安慰自己铐维,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布慎菲。 她就那樣靜靜地躺著嫁蛇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钧嘶。 梳的紋絲不亂的頭發(fā)上棠众,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機(jī)與錄音有决,去河邊找鬼闸拿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛书幕,可吹牛的內(nèi)容都是我干的新荤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼台汇,長吁一口氣:“原來是場噩夢啊……” “哼苛骨!你這毒婦竟也來了篱瞎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤痒芝,失蹤者是張志新(化名)和其女友劉穎俐筋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體严衬,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澄者,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了请琳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粱挡。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖俄精,靈堂內(nèi)的尸體忽然破棺而出询筏,到底是詐尸還是另有隱情,我是刑警寧澤竖慧,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布嫌套,位于F島的核電站,受9級特大地震影響测蘑,放射性物質(zhì)發(fā)生泄漏灌危。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一碳胳、第九天 我趴在偏房一處隱蔽的房頂上張望勇蝙。 院中可真熱鬧,春花似錦挨约、人聲如沸味混。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翁锡。三九已至,卻和暖如春夕土,著一層夾襖步出監(jiān)牢的瞬間馆衔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工怨绣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留角溃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓篮撑,卻偏偏與公主長得像减细,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子赢笨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354