程式開發技術學習方法論 軟體研發行業,新技術的出現日新月異,如何高效的學習,保持技術先進性?基於第一性原理:即 抓住事物的本質特征,按照事物本身的規律去推導,演繹事物在各種場景下的變化規律,東西技術在業務場景中的表現。物理學,幾何學,馬斯克等推崇第一性原理。軟體研發學習方法:建立自己的技術思維體系, ...
程式開發技術學習方法論
軟體研發行業,新技術的出現日新月異,如何高效的學習,保持技術先進性?
基於第一性原理:即 抓住事物的本質特征,按照事物本身的規律去推導,演繹事物在各種場景下的變化規律,東西技術在業務場景中的表現。
物理學,幾何學,馬斯克等推崇第一性原理。
軟體研發學習方法:建立自己的技術思維體系,東西技術背後的核心原理。當新技術出現的時候,依據已有的第一性原理,去推動和驗證新技術的使用。
程式運行和崩潰原理
代碼或者程式包是程式的靜態表現;
代碼或者程式包通過操作系統從磁碟載入到記憶體,經過cpu的執行,即成為進程;
記憶體簡單分為4塊區域:
1,代碼區
2,堆空間
是一塊無序連續的記憶體空間
3,棧空間
後進先出,每個函數的執行產生一個線程棧;
線程棧包括入參,堆空間的入口地址,函數局部變數;
每個線程棧之間是隔離的;
4,進程數據結構
一般是數組;
現代cpu如何做到運行多任務?
即基於cpu的分時共用技術,多個進程之間共用cpu的時間片;
進程的狀態: 運行,就緒,堵塞
但是進程切換的代價非常大,所以,在進程範圍內引入了線程;
線程的狀態跟進程類似;
JavaWeb程式運行和崩潰
java程式員大部分寫的都是javaWEB程式,運行架構如下圖所示;
程式崩潰的原因是:高併發引起的線程堵塞;
併發修改數據的時候,操作系統引入了鎖;
鎖上面有一個等待的線程池,當鎖沒有及時釋放,容易引起線程等待和堵塞;
系統崩潰過程如下:
解決高併發問題的方法有3種:
1, 採用集群方式分擔壓力;
2,限流;
3,降級
數據結構原理
數據結構是軟體研發的基礎,數據結構不熟練,寫不出高品質的程式。
順序表
即數組,具有連續的記憶體空間,相同的數據類型;
根據所有獲取值時間複雜度o(1)
根據值獲得索引時間複雜度o(n)
插入和刪除元素需要一定後續的所有元素
鏈表
離散的記憶體空間
結構包含:data,next
按照值查詢 時間複雜度為o(n)
插入和刪除元素代價比較小,不需要移動後繼的元素;
棧
特殊的順序表, 後進先出,可以看成一個大桶;
隊列
特殊的順序表,先進先出,超市貨架的貨物擺放;
Hash
把key值轉換為一個hashCode, hashCode跟數組長度取餘得到索引值;
數組元素里放的是一個鏈表的指針,如果出現hash衝突,則遍歷該鏈表;
如果不出現hash衝突,hash表查找元素時間複雜度為o(1)
樹
一個元素,只有一個前驅,多個後繼的數據結構為樹;
一般使用遞歸的方法進行遍歷。
設計模式的組合模式跟數類似。
JVM原理
write once,run everywhere!
這個的基礎是jvm.
java代碼編譯為位元組碼,jvm轉換成各種系統的編碼。
jvm結構
jvm分成3個部分
類載入器:程式裝載和運行機制
運行時數據區:記憶體管理機制
執行引擎:程式計數器和執行引擎 線程管理機制
運行時數據區分成4個部分;
線程共用
方法區
堆
線程獨有
棧
程式計數器
垃圾清除演算法
標記清除演算法。
先使用可達演算法標記哪些對象不使用了。
然後回收:
分:清理,壓縮,複製
垃圾回收演算法
小結
本節回顧了軟體的基本原理,首先介紹了學習方法論,第一性原理。
分3個部分:
1,程式運行和崩潰的原理;
2,數據結構的基本類型;
3,jvm的結構,垃圾回收演算法,來及清除演算法;
原創不易,轉載請註明出處。