說一下大型**架構演變過程
1.初始階段,這個階段可能應用伺服器、檔案伺服器、資料庫所有的資源都在同一臺伺服器上
2.應用伺服器和資料庫伺服器拆分
3.使用快取改善**的效能(貌似網際網路架構中,快取是離不開的話題了)
4.使用應用伺服器的集群來改啥**的併發處理能力(不過一般是同構的集群,偽集群了)
資料庫讀寫分離(由專門的機器提供寫服務,專門的機器提供讀服務,如果讀寫比例很大,可以多型讀伺服器)
5.使用反向**和cdn加速**響應(這兩個原理都是快取,cdn部署在網路提供商的機房,使使用者在請求**服務時,可以在距離自己最近的機房獲得資料,反向**則部署在**的中心機房,當使用者請求到達中心機房後,首先訪問的伺服器是反向**伺服器,如果反向**伺服器快取使用者的請求資源,可以直接返回給使用者)
使用分布式檔案系統和分布式資料庫系統
使用nosql和搜尋引擎
業務拆分(這個更多的是業務層面的規劃了)
分布式服務(我簡單劃分可以使訊息系統和同步的rpc呼叫,訊息的話是非同步的解決方案,
大型**架構模式?
分層,分層是應用系統中最常見的一種架構模式,在計算機世界中無處不在,可以更好的把龐大的軟體系統切分成不同的部分,便於分工合作和維護。分層中的挑戰就是合理規劃層次的邊界和介面,嚴格遵守分層的約束,禁止跨層次的呼叫以及逆向呼叫。
分割,分割在縱向層面對軟體進行切分。比如網購系統,在應用層,分割為交易、物流、優惠、庫存等系統。
分布式,分割和分層便於切分後的模組能夠便於分布式部署。分布式應用和服務、分布式檔案系統、分布式資料和儲存、分布式計算、分布式配置、分布式鎖。
集群,多台伺服器部署相同的應用構成乙個集群,保證負載均衡的同時來提公升系統的可用性,互相災備。
快取,cdn、反向**、本地快取、分布式快取、資料庫快取、瀏覽器快取
非同步,非同步架構中最典型的就是生產者和消費者模式,要解耦,就用非同步,非同步離不開佇列,有效的利用非同步,能夠消除併發訪問的高峰。
冗餘,在集群中機器數量達到一定數量的時候,部分機器死機會是常態,因此需要資料冗餘備份,資料庫定期備份稱之為冷備份,主從分離實時同步稱之為熱備份。
自動化,發布過程自動化、**管理自動化、自動化測試、自動化安全掃瞄、自動化低階bug掃瞄、自動化監控、自動化報警、自動化失效轉移、自動化降級。
安全,網際網路開放的特性注定了在安全方面提公升了很大的挑戰。
好的設計絕對不是模仿,不是生搬硬套乙個特定的模式,而是對問題深刻理解之上的創造和創新。
說說**優化方案?
web前端效能優化
減少http請求(http為無狀態,每次請求需要重新建立通訊鏈路)
使用瀏覽器快取(通過設定http頭中的cache-control和expires屬性)
啟用壓縮,伺服器端對檔案進行壓縮,在瀏覽器端對檔案進行解壓縮
減少cookie傳輸
使用cdn加速和反向**加速
應用伺服器效能優化
分布式快取(優先使用快取優化效能)
非同步(訊息佇列具有很好的消峰作用,使用非同步處理,將短時間的高併發產生的事務訊息儲存在訊息佇列中)
使用集群
**優化
多執行緒(執行緒安全問題:使用無狀態的物件、使用區域性物件、併發訪問資源新增鎖)
資源復用(單例模式和物件池《物件建立比較耗時的情況下使用物件池能夠提公升效能》)
合理使用資料結構
jvm中gc的優化
儲存系統的效能優化
合理使用快取
頻繁修改的資料不適合使用快取
沒有熱點的訪問,資料快取沒有意義
資料的不一致和髒讀
快取的可用性
快取如何預熱
快取穿透
你說說怎麼保證**安全性
xss攻擊
csrf攻擊
sql注入攻擊
**可能存在安全隱患掃瞄
線上日誌監控和安全列舉回放日誌
安全漏洞掃瞄
資訊加密技術
單向雜湊加密(指通過對不同輸入長度的資訊進行雜湊計算,得到固定長度的輸出,這個雜湊的過程是單向的)
例如常見的md5
輸入的任何微小變化可能導致結果完全不同
對稱加密(加密和解密使用的金鑰是同乙個)
特點是演算法簡單,加密解密效率高,系統開銷小
缺點是使用同乙個金鑰,有安全隱患
例如des演算法和rc演算法
非對稱加密(加密和解密不是用乙個金鑰,例如rsa演算法)
資訊保安傳輸
傳送者a通過公開途徑獲得資訊接受者b的公鑰,對資訊進行加密,然後通過非安全的通道把密文傳送給b
b得到密文之後,用自己的私鑰解密,獲得明文資訊
數字簽名 (和資訊保安傳輸相反)
簽名者用自己的私鑰對資訊進行加密,然後傳送給對方
接收方用簽名者的公鑰對資訊進行解密,獲得明文資訊,
由於私鑰只有簽名者擁有,資訊具有不可抵賴性,具有簽名的性質
常用的演算法有rsa,https中傳輸的瀏覽器使用的數字證書實質上是經過權威機構認證的非對稱加密的公鑰
分布式事務如何處理?
什麼是分布式?及優缺點
分布式架構:多個子系統相互協作才能完成業務流程。系統之間需要進行通訊。
分布式架構:
把系統按照模組拆分成多個子系統。
優點:1、把模組拆分,使用介面通訊,降低模組之間的耦合度。
2、把專案拆分成若干個子專案,不同的團隊負責不同的子專案。
3、增加功能時只需要再增加乙個子專案,呼叫其他系統的介面就可以。
4、可以靈活的進行分布式部署。
缺點:1、系統之間互動需要使用遠端通訊,介面開發增加工作量。
2、各個模組有一些通用的業務邏輯無法共用。
什麼是集群?
集群:同乙個工程部署到多台伺服器上。
集群如何同步會話狀態
什麼是負載均衡?
如果乙個服務由多條伺服器提供,需要把負載分配到不同的伺服器處理,需要負載均衡。
可以是使用nginx實現放在均衡
upstream tomcat2
可以根據伺服器的實際情況調整伺服器權重。權重越高分配的請求越多,權重越低,請求越少。預設是都是1
upstream tomcat2
負載均衡的實現原理?
輪訓(rr)
加權輪訓(在輪訓的基礎上,按照配置的權重將請求分發)
隨機最少連線(記錄每個應用伺服器正在處理的連線數,根據伺服器當前的資源使用情況)
程式設計師面試寶典
據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...
《程式設計師面試寶典》摘記
簡歷注意事項 1.簡歷不要太長 中文簡歷壓縮在 2頁左右就可以把所有的內容突出了。一般來說學習經歷應該從大學開始寫起。2.如實填寫。3.不要過分謙虛,不要把自己的一切包括弱項都寫進去。4.求職簡歷上一定要註明求職的職位。根據所申請的職位來設計,突出你在這方面的優點。編寫乙份或者幾份有針對性的簡歷。5...
程式設計師面試寶典一
1 int i i 首先宣告乙個變數i,然後將變數i的值 未初始化 賦值給自己 2 下面 的意義 void func int x,int count 求乙個整數轉換為二進位制之後包含多少個1 3 printf在vc6.0下是自右向左運算的 好像跟編譯器有關 int arr int ptr arr p...