碼農翻身(隨筆)

書一直都有在讀,我會一直更新博文,歡迎大家前來閱讀、指教!

XML和註解

xml:應用於集中配置的場合,比如數據源的配置;

註解:像@Controller、@RequestMapping、@Transactional這樣的註解,更適合與java方法寫在一起,顯得簡單而直觀;

所以就很快興起了xml和註解的混合使用。


SSO單點登錄

1、首次登錄

首次登錄後,瀏覽器就會保存sso.com的cookie

2、驗證ticket

CAS是一個著名的SSO(單點登錄)解決方案

單點退出

用戶在一個系統退出了,認證中心需要把自己的會話和cookie消滅,然後還要去通知各個系統,讓他們也把自己的會話統統消滅,這樣才能在所有的系統中都實現真正的退出。


從密碼到token,一個有關授權的故事

授權碼+token

注:獲取token的過程是在服務器後臺完成的,瀏覽器接觸不到

需要注意的一個問題:由於瀏覽器接觸到了授權碼,所以存在安全問題?

解決方法:第一種---設置授權碼的失效時間;第二種---設置授權碼只能用來申請一次token


Redis

1、數據結構

      List  列表

      Set  集合

      Sorted  Set  有序集合

      Hash   包含鍵值對的無序散列表

2、Hash槽(Hash  Slot)

      共16384個槽,採用了一種CRC16算法:先對key產生一個整數值,再對16384求餘數

      優點:在Redis集羣中,很好的解決了在增、刪緩存服務器時的緩存失效問題

3、故障轉移

      爲了使Redis集羣支持故障轉移,提供了master-slave功能,當Hash被均勻的分成幾個小組服務器,其中每個服務器都有一個master節點和多個slave節點組成,其中master節點的數據與slave節點的數據始終保持一致,對數據的操作都是在master節點中操作的,slave節點只作爲備份存在,一旦master節點掛掉,其中的一個slave節點就會替換它,成爲一個新的master,依然可以正常工作。

4、緩存服務器的優點

      緩存服務器之間可以互相通信,保證數據的完整性;(Hash槽)

      支持服務器動態的增加和刪除;(Hash槽)

      還支持緩存數據的備份和故障轉移。(master-slave)


Nginx(web服務器)

       實現了高可用,即集羣

       keepalived------將多個Nginx形成一種master-slave結構(對外只提供一個IP地址)


Tomcat(Tomcat服務器)

       實現了高可用,即集羣

       實現集羣過程中,存在的問題:一個tomcat掛掉,他所擁有的session也會丟失,如何解決?

       解決方案:將tomcat中的session放入Redis集羣


數據庫

       實現了高可用,即集羣,實現方式----讀寫分離

       一個master庫:可讀可寫,以寫爲主

       多個slave庫:只能讀,不能寫

       注:master庫與slave庫的數據要保持一致

       如何實現數據庫事務的隔離?

       X鎖和S鎖應運而生

       X鎖----排他鎖,寫數據的時候用

       S鎖----共享鎖,讀數據的時候用

       讀寫分離的好處:極大地緩解了程序對X鎖和S鎖的爭用

       數據庫的讀寫分離伴隨而來的一個問題是:tomcat的訪問比較麻煩,如何解決?

       解決方案:在tomcat與數據庫之間添加一箇中間層,tomcat只需要正常的向中間層發出請求,具體的操作如:在程序中找到寫數據的操作,發到master庫去執行,找到讀數據的操作發到指定的slave庫去執行,這些繁瑣的事情交給中間層去解決。


加解密技術

       分類:對稱加密、非對稱加密

       1、對稱加密

       對信息的加密和解密都使用相同的密鑰key,即:使用同一個密鑰key對數據進行加密和解密(需要交換密鑰key,交換過程中存在安全問題)

       2、非對稱加密

       密鑰被分解爲一對,一個公開密鑰(PK),一個私有密鑰(SK)。公鑰可以通過非保密方式向他人公開,而私鑰則由解密方保存,不對外公開。(發送信息的一方通過公鑰對數據進行加密,然後發送給接收方,接收方通過私鑰對密文進行解密)

       優點:可以使通信雙方無需事先交換密鑰就可以建立安全通信。

下面簡要介紹下RSA:

RSA(公鑰加密算法)

       用於數據的加密數字簽名

公鑰和私鑰的生成
1、選擇兩個素數P、Q
2、N=PQ
3、T=(P-1)(Q-1)
4、選擇一個整數E,使  E<T  且  (E,T)=1
5、由DE    mod   T   三    1      得出   D   (mod 代表取餘)
6、得到公鑰(N,E),私鑰(N,D)

 

        公鑰加密算法

         1、公鑰N,E

         2、密文C

         3、明文M

         公式:C  三   M的E次方     mod    N

        私鑰解密算法

         1、私鑰N,D

         2、密文C

         3、明文M

         公式:M  三   C的D次方     mod    N
 

數字簽名
    發送者A(RSA私鑰)    接收者B(RSA公鑰)    
明文M  ---> 簽名DSKA(M) ---> 恢復EPKA(C) ---> M
        比較M' = M    

       除A外沒有別人能具有A的私密密鑰SKA,所以除A外別人不能產生密文DSKA(M),這樣,報文M就被簽名了;B只能用持有的公鑰進行解密,以實現覈實A對報文的簽名。


心靈雞湯

        到盡頭爲止,這本書我已經大致看了一遍。初次閱讀,在理解上可能還停留在表面,在以後我還會反覆去閱讀,正所謂:書讀百遍,其義自見。

       1、對新技術要充滿好奇心,積極去學習。在現今這個技術更新飛快的時代,如果不實時更新自己的數據庫,就會很快被這個行業所淘汰。

        2、敢於去挑戰自我能力之外的東西。當機會降臨的時候,要勇敢地抓住它,當然在去做的時候會遇到很多的問題,但它會引導你去瘋狂的學習,最後你就會發現自己登上了更高一層的臺階。

        3、學東西要有追根溯源的喜好。想要對某個技術有更深層次的理解,就要明白這幾點:爲什麼要有這門技術、這門技術解決的什麼、如何使用這門技術。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章