日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

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

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

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

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

2.緩存數據和數據庫數據一致性問題

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

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

3.設計模式

Java中有23種設計模式,常見的設計模式有:

1)單列模式

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

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

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

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

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

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

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

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

/** 懶漢模式* 懶漢線程不安全* 懶漢加載慢,但是在內存作用域短,節省空間*/ public class SingletonA {//SinglettonA的唯一實例private static SingletonA instance = null;//將構造函數私有,防止外界構造SingletonA實例private SingletonA() {}//獲取SingletonA的唯一實例,用synchronized關鍵字保證某一時刻只有一個線程調用此方法public static synchronized SingletonA getInstance(){//如果instance為空,便創建一個新的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);} }

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

/** 餓漢模式* 餓漢線程安全* 餓漢加載塊,但是在內存中作用域長, 不節省空間*/ public class SingletonB {//SingletonB的唯一實例private static SingletonB instance = new SingletonB();//將構造函數私有,防止外界構造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(簡單的工廠模式)

一句話總結:用一個方法來代替new關鍵字。

生活中的例子:制衣廠,面包廠等生產廠。

解決什么問題:對象產生過多,或者經常有子類替換生成。

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

模式結構:寫一個對外聲明的方法,方法里面使用new關鍵字代替。

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

Jdk里面使用:newInstance。

工廠模式代碼:

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

?

3)Proxy(代理模式)

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

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

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

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

模式結構:代理類和被代理類實現同一個接口,用戶訪問的時候先訪問代理對象,然后讓代理對象去訪問被代理對象。

框架里面使用:Spring里面的AOP實現。

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

代理模式代碼:

創建一個接口:

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

創建一個被代理類:

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

創建一個代理類:

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("你的價格太低了"); } } }

創建一個測試類:

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

轉載于:https://www.cnblogs.com/chuanqi1995/p/10107369.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。