日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java面试总结(2018 - 12 - 10)

發(fā)布時間:2025/3/20 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java面试总结(2018 - 12 - 10) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.緩存穿透,緩存雪崩,緩存擊穿解決方案分析

1)緩存穿透就是比如拿Redis數(shù)據(jù)庫來說,它是一個鍵值對,有可能用戶查詢某個數(shù)據(jù)的時候沒有查到這個key,就跑到數(shù)據(jù)庫中去查了,我們設(shè)置緩存的目的就是為了不讓請求去數(shù)據(jù)庫中查,但是穿透呢,沒查到key會自動去數(shù)據(jù)庫中去查了。這種透過緩存去數(shù)據(jù)庫中查就叫緩存穿透。一般我們把那些空的也存到緩存中,這樣就不會穿透緩存了,一般發(fā)生的也不是特別多。

2)緩存雪崩就是在高并發(fā)的情況下,因為在緩存中有緩存的時間,同一時間下有好多數(shù)據(jù)失效了,這樣在高并發(fā)訪問量比較大的時候呢,同時又去數(shù)據(jù)庫查,這樣數(shù)據(jù)庫的壓力就很大,有可能就掛掉了,這就是緩存雪崩。一般我們給實效時間設(shè)置點隨機數(shù),不讓它一起失效。

3)緩存擊穿就是指某一個數(shù)據(jù)失效的話,這個數(shù)據(jù)訪問的也比較多,比如說淘寶在0點的時候某個數(shù)據(jù)實效了,這個時候又有很多用戶提前預(yù)購了,在0點的時候去搶它,這個時候就會造成擊穿的效果。一般這種擊穿很難處理,因為你也不知道這個數(shù)據(jù)會不會用到,所以我也不是太清楚怎么處理。

2.緩存數(shù)據(jù)和數(shù)據(jù)庫數(shù)據(jù)一致性問題

1)用MQ模式的消息隊列,保證串行。

2)或者用Id先查詢數(shù)據(jù),保證每次操作數(shù)據(jù)是同一個,然后再設(shè)置隊列。如果分布式的話就再加個服務(wù)Id,保證同一個服務(wù)。

3.設(shè)計模式

Java中有23種設(shè)計模式,常見的設(shè)計模式有:

1)單列模式

一句話總結(jié):一個類在Java虛擬機中只有一個對象,并提供全局訪問點。

生活中例子:太陽,月亮,國家主席等。

解決什么問題:對象的唯一性,性能浪費太多。

項目里面怎么用:數(shù)據(jù)庫連接對象,屬性配置文件的讀取對象。

模式結(jié)構(gòu):分為懶漢模式和餓漢模式(如果考慮性能問題的話,就使用懶漢模式,因為懶漢模式是在方法里面進行初始化的,構(gòu)造器私有化,對外提供方法加同步關(guān)鍵字)。

框架里面的使用:Struts1的Action。

Jdk里面使用:java.lang.Runtime#getRuntimejava.awt.Desktop#getDesktop。

懶漢模式:就是說比較懶,在用到它的時候它才去創(chuàng)建對象(懶漢模式線程不安全,懶漢加載慢,但是在內(nèi)存作用域短,節(jié)省空間)。

/** 懶漢模式* 懶漢線程不安全* 懶漢加載慢,但是在內(nèi)存作用域短,節(jié)省空間*/ public class SingletonA {//SinglettonA的唯一實例private static SingletonA instance = null;//將構(gòu)造函數(shù)私有,防止外界構(gòu)造SingletonA實例private SingletonA() {}//獲取SingletonA的唯一實例,用synchronized關(guān)鍵字保證某一時刻只有一個線程調(diào)用此方法public static synchronized SingletonA getInstance(){//如果instance為空,便創(chuàng)建一個新的SingletonA實例,否則,返回已有的實例if(instance == null){instance = new SingletonA();}return instance;}public void print(){System.out.println("我是懶漢模式!");}public static void main(String[] args) {SingletonA s1 = SingletonA.getInstance();SingletonA s2 = SingletonA.getInstance();System.out.println(s1 == s2);} }

餓漢模式:就是說比較餓,在用到它的時候它早早的就加載完對象了(餓漢模式線程安全,餓漢加載快,但是在內(nèi)存中作用域長,不節(jié)省空間)。

/** 餓漢模式* 餓漢線程安全* 餓漢加載塊,但是在內(nèi)存中作用域長, 不節(jié)省空間*/ public class SingletonB {//SingletonB的唯一實例private static SingletonB instance = new SingletonB();//將構(gòu)造函數(shù)私有,防止外界構(gòu)造SingletonB實例private SingletonB() {}//獲取SingletonB的實例public static SingletonB getInstance() {return instance;}public void print() {System.out.println("我是餓漢模式");}public static void main(String[] args) {SingletonB s1 = SingletonB.getInstance();SingletonB s2 = SingletonB.getInstance();System.out.println(s1 == s2);}}

2)Factory(簡單的工廠模式)

一句話總結(jié):用一個方法來代替new關(guān)鍵字。

生活中的例子:制衣廠,面包廠等生產(chǎn)廠。

解決什么問題:對象產(chǎn)生過多,或者經(jīng)常有子類替換生成。

項目里面怎么用:對于經(jīng)常生成的對象,或者父子類替換的對象。

模式結(jié)構(gòu):寫一個對外聲明的方法,方法里面使用new關(guān)鍵字代替。

框架里面使用:Spring的核心就是工廠模式。

Jdk里面使用:newInstance。

工廠模式代碼:

public class UserFactory {public static User createUser(int i){//如果輸入的是1,就創(chuàng)建它的子類,否則就創(chuàng)建父類if(i == 1){return new Alices();}return new User();} }

?

3)Proxy(代理模式)

一句話總結(jié):為其他對象提供一個代理,以控制對當前對象的訪問。

生活中的例子:房屋中介,婚姻介紹所。

解決什么問題:不能直接訪問該對象,或者太大的資源耗費多。

項目里面怎么用:權(quán)限,或者大對象的訪問權(quán)限。

模式結(jié)構(gòu):代理類和被代理類實現(xiàn)同一個接口,用戶訪問的時候先訪問代理對象,然后讓代理對象去訪問被代理對象。

框架里面使用:Spring里面的AOP實現(xiàn)。

Jdk里面使用:java.lang.reflect.Proxy。

代理模式代碼:

創(chuàng)建一個接口:

public interface SellHouse { void sell(double money); }

創(chuàng)建一個被代理類:

public class Hoster implements SellHouse { @Override public void sell(double money) { System.out.println("祝你居住愉快"); } }

創(chuàng)建一個代理類:

public class Medium implements SellHouse { SellHouse hoster=new Hoster(); @Override public void sell(double money) { if(money>=1000){ hoster.sell(money); }else{ System.out.println("你的價格太低了"); } } }

創(chuàng)建一個測試類:

public class Renter { public static void main(String[] args) { SellHouse renter=new Medium(); renter.sell(500); } }

轉(zhuǎn)載于:https://www.cnblogs.com/chuanqi1995/p/10107369.html

總結(jié)

以上是生活随笔為你收集整理的Java面试总结(2018 - 12 - 10)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。