應用優化總結

hashmap

數組 + 鏈表, key的hashcode() 取數組中鏈表位置Index (算法是 hashcode&數組長度-1) , equals()在鏈表中查值

爲了降低Java開發的複雜性, Spring採取了以下4種關鍵策略:

-基於POJO的輕量級和最小侵入性編程;
-通過依賴注入和麪向接口實現松耦合;
-基於切面和慣例進行聲明式編程;
-通過切面和模板減少樣板式代碼。

bean生命週期

1. Spring對bean進行實例化;
2. Spring將值和bean的引用注入到bean對應的屬性中;
3.如果bean實現了BeanNameAware接口, Spring將bean的ID傳遞給
setBean-Name()方法;
4.如果bean實現了BeanFactoryAware接口, Spring將調
用setBeanFactory()方法,將BeanFactory容器實例傳入;
5.如果bean實現了ApplicationContextAware接口, Spring將調
用setApplicationContext()方法,將bean所在的應用上下文的
引用傳入進來;
6.如果bean實現了BeanPostProcessor接口, Spring將調用它們
的post-ProcessBeforeInitialization()方法;
7.如果bean實現了InitializingBean接口, Spring將調用它們的
after-PropertiesSet()方法。類似地,如果bean使用init
method聲明瞭初始化方法,該方法也會被調用;
8.如果bean實現了BeanPostProcessor接口, Spring將調用它們
的post-ProcessAfterInitialization()方法;
9.此時, bean已經準備就緒,可以被應用程序使用了,它們將一直
駐留在應用上下文中,直到該應用上下文被銷燬;
10.如果bean實現了DisposableBean接口, Spring將調用它的
destroy()接口方法。同樣,如果bean使用destroy-method聲明
了銷燬方法,該方法也會被調用。

應用優化

前端優化:合併js css 圖片 ,前置css 後置js
後端優化:
1.讀寫分離系統
2.分表分庫(使用mycat shark做數據庫路由,模糊查詢使用solr es),不常改動的數據加緩存,合併對數據庫操作命令(存儲過程 和 Alisql對同一行數據修改操作命令收集合並),合併對緩存操作命令(Redis批處理Pipeline或者Lua腳本)
3.消息路由: nginx (限制流量),就近訪問服務器
4.數據分類,生命週期長(不容易變化)的頁面數據緩存到redis
同步遠程調用RPC =》dubbo (二進制數據壓縮傳輸)、springcloud
異步遠程調用MQ =》kafka、rabbitmq (可以消息對接和回溯)
數據庫悲觀鎖for update,改成樂觀鎖update version:加個版本號,每次改數據前查到對應版本號,根據版本號修改數據和版本號 => 數據庫變更移到redis緩存(IO效率高)=>分佈式鎖redisson(線程1創建數據1和超時時間,處理事務結束之後查詢數據1和時間,時間超時不需要刪除數據1,沒超時,刪除數據;線程2創建數據1失敗了,查詢數據1超時了GETSET如果是老時間說明成功,否則就是失敗)=>分佈式樂觀鎖 multi創建事務前watch數據超時時間,改變了就回滾
5.數據庫存儲過程事務:oracle存儲過程是默認在一個事務中的,mysql和mssql需要手工加入事務控制語句

6.緩存redis的問題:
6.1穿透 : 大量查詢不存在的數據(緩存和db大量不命中) =>緩存空對象+實時同步新數據
6.2無底洞:大量新增緩存節點+批量命令(大量多次網絡交互)=>根據路由算法合併對應key對應的命令 併發發送批處理
6.3雪崩:緩存宕機,請求在db爆發=>redis 3.0緩存集羣 + 多個線程池管理不同的資源請求和限流 使用java Hystrix
6.4熱門數據key重建速度慢,大量請求:分佈式鎖 或者使用專門線程去更新數據
6.5單品高併發讀(突發高併發)導致宕機:針對某些數據冗餘存於所有節點+路由訪問各個緩存節點=>zk分佈式鎖同步數據一致;或者多級緩存 本地+集羣緩存+消息隊列同步

管理優化

1.用戶故事地圖 需求分析

2.文檔BUG管理工具 JIRA 、代碼管理工具GITHUB

3.數據模型設計 powerdesigner

3.1用例圖 描述系統功能
3.2 cdm描述類對象關係 =》pdm描述具體屬性 =》數據庫表結構sql
3.3oom描述java類關係(設計模式)=》生成java代碼 java代碼逆向對象圖參考
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章