I want to fly higher
          programming Explorer
          posts - 114,comments - 263,trackbacks - 0

          Java基礎(chǔ)技術(shù)體系

          • Java7,Java8,Java9
            • coin/invokedynamic/g1/nio2/fork-join/
            • Lambda/interface-static-default/function/stream/Nashorn/time
            • Jigsaw/jshell(REPL)/JMH benchmark/進(jìn)程api/jsonapi/
          • OpenJDK
            • 源代碼-最好的代碼參考
          • Java內(nèi)存模型/并發(fā)/多線程
            • 內(nèi)存模型
              • 計算機系統(tǒng)#緩存一致性
                • 每個處理器有自己的高速緩存,他們又共享同一主內(nèi)存;當(dāng)多個處理器都涉及同一塊主內(nèi)存區(qū)域時,將可能導(dǎo)致各自的緩存數(shù)據(jù)不一致,那同步到主內(nèi)存時以誰的緩存數(shù)據(jù)為準(zhǔn)呢
              • 在特定的操作協(xié)議下,對特定的內(nèi)存或者高速緩存進(jìn)行讀寫訪問的過程抽象
              • 指令重排序
              • Java內(nèi)存模型-主內(nèi)存與工作內(nèi)存(每條線程有自己的工作內(nèi)存)
                • 線程的工作內(nèi)存中保存了被該線程使用到的變量的主內(nèi)存副本拷貝
                • 線程對變量的所有操作都必須在工作內(nèi)存中進(jìn)行,而不能直接讀寫主內(nèi)存的變量
                • 不同的線程之間之間也無法直接訪問對方工作內(nèi)存的變量
                • 線程間變量的傳遞均需要通過主內(nèi)存來完成
                • lock/unlock/read/load/use/assign/store/write-每一種操作都是原子的,不可再分的(注意double/long)
              • volatile
                • 保證可見性
                • 禁止指令重排序優(yōu)化-內(nèi)存屏障
              • 先行發(fā)生原則
            • 工作竊取算法(Fork/Join)
            • 原子性、可見性、有序性(如果在本線程內(nèi)觀察,所有操作都是有序的;如果在一個線程中觀察另一個線程,所有操作都是無序的)

          工作竊取(work-stealing)算法是指某個線程從其他隊列里竊取任務(wù)來執(zhí)行。
          那么為什么需要使用工作竊取算法呢?假如我們需要做一個比較大的任務(wù),我們可以把這個任務(wù)分割為若干互不依賴的子任務(wù),為了減少線程間的競爭,于是把這些子任務(wù)分別放到不同的隊列里,并為每個隊列創(chuàng)建一個單獨的線程來執(zhí)行隊列里的任務(wù),線程和隊列一一對應(yīng),比如A線程負(fù)責(zé)處理A隊列里的任務(wù)。但是有的線程會先把自己隊列里的任務(wù)干完,而其他線程對應(yīng)的隊列里還有任務(wù)等待處理。干完活的線程與其等著,不如去幫其他線程干活,于是它就去其他線程的隊列里竊取一個任務(wù)來執(zhí)行。而在這時它們會訪問同一個隊列,所以為了減少竊取任務(wù)線程和被竊取任務(wù)線程之間的競爭,通常會使用雙端隊列,被竊取任務(wù)線程永遠(yuǎn)從雙端隊列的頭部拿任務(wù)執(zhí)行,而竊取任務(wù)的線程永遠(yuǎn)從雙端隊列的尾部拿任務(wù)執(zhí)行。工作竊取算法的優(yōu)點是充分利用線程進(jìn)行并行計算,并減少了線程間的競爭,其缺點是在某些情況下還是存在競爭,比如雙端隊列里只有一個任務(wù)時。并且消耗了更多的系統(tǒng)資源,比如創(chuàng)建多個線程和多個雙端隊列。
          

          • JVM
            • 內(nèi)存區(qū)域
            • gc
            • 工具
            • 調(diào)優(yōu)
          • Class/Bytecode/Classloader
            • hotswap
            • 加載、驗證、準(zhǔn)備、解析、初始化
            • agent/instrumentation
              • agentmain-jvm啟動后可以通過代理做一些事情
              • Instrumentation#redefineClasses,可以重定義class->而非之前實例替換->動態(tài)改變JVM已加載的類(這個很強大)
              • 可通過agentmain獲得Instrumentation,然后利用Instrumentation去redefineClasses
          • 多語言編程
            • invokedynamic/java.lang.invoke

          架構(gòu)

          • 分布式服務(wù)器架構(gòu)
            • 應(yīng)用和數(shù)據(jù)服分離/使用緩存/應(yīng)用服務(wù)器集群/數(shù)據(jù)庫讀寫分離/反向代理-CDN/分布式文件系統(tǒng)-分布式數(shù)據(jù)庫系統(tǒng)/NoSql-搜索引擎/業(yè)務(wù)拆分/分布式服務(wù)/
            • 分層
              • 橫向:應(yīng)用層、服務(wù)層、數(shù)據(jù)層
              • 縱向:將不同的功能和服務(wù)分割,模塊化
            • 分布式
              • 將不同的模塊部署在不同的機器上,通過遠(yuǎn)程調(diào)用協(xié)同工作
            • 集群
              • 將多臺服務(wù)器部署相同應(yīng)用構(gòu)成一個集群,通過負(fù)載均衡設(shè)備共同對外提供服務(wù)
            • 緩存
              • 本地緩存/分布式緩存/CDN/反向代理
            • 異步
            • 冗余
            • 自動化
            • 架構(gòu)要素
              • 性能、可用性、伸縮性、擴(kuò)展性、安全
                • 響應(yīng)時間、并發(fā)數(shù)、吞吐量、SystemLoad、對象數(shù)與線程數(shù)、內(nèi)存使用、cpu使用、io、性能測試、負(fù)載測試、壓力測試、穩(wěn)定性測試
          • mmo游戲服務(wù)器架構(gòu)
            • 分線/分場景
            • 動態(tài)的增加或者減少gs
            • 網(wǎng)關(guān)可動態(tài)的增加或者減少
          • 無縫地圖
            • NODE專注場景,OBJ專注玩家對象,GATE專注網(wǎng)絡(luò)
            • 動態(tài)負(fù)載均衡
            • 很多無縫動態(tài)負(fù)載均衡的服務(wù)端宣稱自己支持無限的人數(shù),但不意味著 MMORPG游戲的人數(shù)上限真的可以無限擴(kuò)充,因為這樣的體系會受制于網(wǎng)絡(luò)帶寬和客戶端性能。帶寬決定了同一個區(qū)域最大廣播上限,而客戶端性能決定了同一個屏幕到底可以繪制多少個角色

          模式

          • 架構(gòu)模式
            • 背景-問題-解決方案
            • Layers模式-分層-網(wǎng)絡(luò)協(xié)議
            • Pipes and Filters-處理數(shù)據(jù)流
            • Blackboard-一系列獨立的程序攜手合作,致力于處理同一個數(shù)據(jù)結(jié)構(gòu)
            • Microkernel
            • Broker
            • MVC/PAC
            • Reflection
            • Whole-Part/Master-Slave/Proxy/Command Processor/View Handler/Forwarder-Receiver/Client-Dispatcher-Server/publisher-subscriber/
            • CounterPointer
            • 抽象、封裝、信息隱藏、模塊化、分離關(guān)注點、耦合與內(nèi)聚、充分-完整-簡單、策略與實現(xiàn)分離、接口與實現(xiàn)分離、單個引用點、分而治之
            • 并發(fā):Reactor/Proactor/Acceptor-Connector/Aysnchronous Completion Token/Active Object/Thread-Speific Storage
            • 資源管理:Loopup/Lazy Acquisition/Caching/Pooling/Resouce Lifecycle Manager/
          • 設(shè)計模式
            • 23
          • 面向?qū)ο笤O(shè)計原則
            • solid
            • 抽象、解耦、開閉

          網(wǎng)絡(luò)編程/并發(fā)編程

          • bio/nio/nio2
          • netty
          • select/poll/epoll/kqueue/iocp/reactor/proactor
          • java.util.concurrent

          調(diào)優(yōu)

          • cpu、內(nèi)存、io
          • jvm調(diào)優(yōu)
          • 內(nèi)存泄露、死循環(huán)

          Mysql/NoSql

          • redis
          • mongodb
          • mongodb是一個真正的數(shù)據(jù)庫而,redis更接近于memcache
          • mongodb是文檔型的非關(guān)系型數(shù)據(jù)庫,其優(yōu)勢在于查詢功能比較強大,能存儲海量數(shù)據(jù)
          • nosql也分類型的;redis、memcached這樣的KeyValue天然適合做緩存,相互替代比較容易,優(yōu)缺點彼此爭論不一;mongo屬于文檔型,介于nosql與關(guān)系型數(shù)據(jù)庫之間,相比其他nosql,具有強大的查詢語句,在一定程度上可以用來存儲海量、需要多條件查詢同時又不需要關(guān)系型數(shù)據(jù)庫特性的“文檔”,反正我用他來存日志

          Linux

          • shell
          • vim
          • grep
          • 分析日志文件/啟動-關(guān)閉腳本
          • top、ps、netstat

          開源框架

          • Netty/Disruptor/Vert.x/Kafka/RocketMq/Nginx

          Node.js/Go

          • Go-Goroutine
          • Node.js-事件驅(qū)動、非阻塞式I/O

          前沿技術(shù)

          • 微服務(wù)
          posted on 2016-11-04 11:58 landon 閱讀(2983) 評論(0)  編輯  收藏 所屬分類: ProgramGameServerServerFramework
          主站蜘蛛池模板: 新乡市| 申扎县| 慈溪市| 吴旗县| 扎鲁特旗| 安仁县| 即墨市| 府谷县| 巴彦淖尔市| 内丘县| 深泽县| 剑河县| 册亨县| 临澧县| 卫辉市| 长岛县| 关岭| 保康县| 衡山县| 万安县| 长子县| 乐至县| 邳州市| 亳州市| 汕尾市| 永嘉县| 屏边| 龙川县| 肃南| 通许县| 当雄县| 桓仁| 商城县| 砚山县| 时尚| 开鲁县| 康平县| 海兴县| 扶余县| 锡林浩特市| 霸州市|