一、請你談談對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 ...