java面試題整理(1)

2021-09-25 01:12:07 字數 2392 閱讀 4424

一、請你談談對mq的理解?以及你們在專案中是怎麼用的?

答:mq(訊息佇列)是一種應用程式對應用程式的通訊方法,由於在高併發環境下,由於來不及同步處理,請求往往發生堵塞,通過訊息佇列,我們可以非同步處理請求,緩解系統壓力;mq( message queue) ,即訊息佇列是在訊息的傳輸過程中儲存訊息的容器。

通俗的說, 就是乙個容器, 你把訊息丟進去, 不需要立即處理。 然後有個程式去從你的容器裡面把訊息一條條讀出來處理。一般用於應用系統解耦、訊息非同步分發, 能夠提高系統吞吐量。

訊息佇列

註冊使用者,發郵件(非同步)

登入,發簡訊通知(非同步),加積分(非同步)

商品新增,非同步更新solr,非同步更新靜態頁面

靜態頁面—庫存—實時性較差

介面,庫存修改後,重新生成新的靜態頁面

二、請你談談對redis的認識?

答:redis是一種基於鍵值對的nosql資料庫(非關係型資料庫);是乙個key-value儲存系統

redis有兩個特點:高能性 可靠性

高能性:redis將所有資料都儲存在記憶體中,所以讀寫性特別高

可靠性:redis將記憶體中的資料利用rdb和aof的形式儲存到硬碟中,這樣就可以避免發生斷點或機器故障時記憶體資料丟失的問題

功能應用

1.資料快取功能,減少對資料庫的訪問壓力

2.訊息佇列功能(輕量級)

redis提供了發布訂閱功能和阻塞佇列功能

3.計數器-應用儲存使用者憑證

比如計算瀏覽數,如果每次操作都要做資料庫的對應更新操作,那將會給資料庫的效能帶來極大的挑戰

快取:優化**效能,首頁 (不常變的資訊)

儲存:單點登陸,購物車

計數器:登陸次數限制,incr

時效性:驗證碼expire

訂單號:數字

三、redis應用場景

答:1.快取資料伺服器

sso單點登入

2.應對高速讀寫的場景

秒殺高可用

3.分布式鎖

秒殺資料一致性

4.資料共享

庫存資料

四、請你談談單點登入的實現方案?你們怎麼包括cookie的安全性?跨域取cookie的問題,你們怎麼解決的?

答:單點登入使用了redis+cookie實現

把使用者資訊放在redis中,key作為使用者憑證存放在cookie中放在客戶端,通過獲取cookie憑證判斷使用者是否有登入

cookie的安全性,我們的憑證是唯一的uuid,使用工具類統一字串命名,並且設定了cookie,關閉document.cookie的取值功能

cookie的跨域問題,在二級網域名稱使用共享cookie的將多個系統的網域名稱統一作為二級網域名稱,統一平台提供使用主網域名稱,cookie.setpath("/")設定cookie路徑為根路徑,通過cookie.setdomain(".父網域名稱")使得專案之間跨域互相訪問他們的cookie

五、如何應對高併發問題?

答:1.html靜態化,消耗最小的純靜態化的html頁面避免大量的資料庫訪問請求

2.分離伺服器,對於web伺服器來說,是最消耗資源的將資源和頁面資源進行分離,進行不同的配置優化,保證更好的系統消耗和執行效率

3.資料庫集群和庫表雜湊,資料庫集群由於在架構、成本、擴張性方面都會受到所採用的關係型的限制,在應用程式安裝業務和功能模組將資料庫進行分離,不同的模組對應不同的資料庫或者表,再進行更小的資料庫雜湊,最終可以再配置讓系統隨時增加資料庫補充系統效能;

4.快取,使用外加的redis模組進行快取,減輕資料庫訪問壓力

5.負載均衡,在伺服器集群中需一台伺服器排程角色nginx,使用者所有請求先由它接收,在分配某台伺服器去處理;實現負載均衡:http重定向實現,dns匹配,反向**

6.動靜態分離,對於動態請求交給tomcat而其他靜態請求,搭建專門的靜態資源伺服器,使用nginx進行請求分發

六、zookeeper應用場景

答:1.統一配置管理

持久化節點存放配置資訊,監聽內容修改

2.集群管理

臨時節點機器(節點)退出或者加入,master選舉投票

臨時順序節點擊舉時候直接使用編號最小的即可

3.分布式鎖

建立臨時節點,建立成功者獲得鎖,執行業務操作,獨佔操作

也可以進行順序執行,通過順序臨時節點的編號

4.命名服務

/dubbo

/provider:存放服務位址

/consumer:存放消費位址(沒實際意義),

/conf:存放配置資訊

…consumer通過監聽provider節點的內容修改實現動態讀取位址,並且支援集群,只需要在provider中存放多個位址然後程式中通過**實現隨機呼叫即可

java集合面試題整理

可能會導致死迴圈和更新丟失問題。死迴圈的成因涉及到四個方法,最初的起因是呼叫put 方法,跟著方法走一遍 put 方法原始碼 只給出核心部分 public v put k key,v value modcount 該key不存在,需要增加乙個結點 addentry hash,key,value,i ...

java面試題整理(2)

一 註冊中心你了解了哪些?答 consul eureka zookeeper 二 jdk 中有哪幾個執行緒池?答 juc提供了排程器物件executors來建立執行緒池,可建立的執行緒池有四種 1 newfixedthreadpool建立乙個指定工作執行緒數量的執行緒池。每當提交乙個任務就建立乙個工...

個人的java面試題整理

1 string a 1 與string b new string 1 由於new是在堆上新建了乙個區域,兩個a。b的指向位址不同,所以,為false,而equal為true 2 堆 棧和堆疊的區別 速度 cpu 棧 堆 棧 int b 棧 char s abc 棧 char p2 棧 堆 new ...