0309 軟件基本原理1

程序開發技術學習方法論

軟件研發行業,新技術的出現突飛猛進,如何高效的學習,保持技術先進性?
基於第一性原理:即 抓住事物的本質特徵,按照事物自己的規律去推導,演繹事物在各類場景下的變化規律,東西技術在業務場景中的表現。
物理學,幾何學,馬斯克等推崇第一性原理。
軟件研發學習方法:創建本身的技術思惟體系,東西技術背後的核心原理。當新技術出現的時候,依據已有的第一性原理,去推進和驗證新技術的使用。java

image.png

程序運行和崩潰原理

代碼或者程序包是程序的靜態表現;
代碼或者程序包經過操做系統從磁盤加載到內存,通過cpu的執行,即成爲進程;


內存簡單分爲4塊區域:


1,代碼區


2,堆空間
是一塊無序連續的內存空間
3,棧空間
後進先出,每一個函數的執行產生一個線程棧;
線程棧包括入參,堆空間的入口地址,函數局部變量;
每一個線程棧之間是隔離的;
4,進程數據結構
通常是數組;程序員

現代cpu如何作到運行多任務?
即基於cpu的分時共享技術,多個進程之間共享cpu的時間片;


進程的狀態: 運行,就緒,堵塞


可是進程切換的代價很是大,因此,在進程範圍內引入了線程;
線程的狀態跟進程相似;


web

image.png

JavaWeb程序運行和崩潰

java程序員大部分寫的都是javaWEB程序,運行架構以下圖所示;




image.png算法

程序崩潰的緣由是:高併發引發的線程堵塞;設計模式

併發修改數據的時候,操做系統引入了鎖;
鎖上面有一個等待的線程池,當鎖沒有及時釋放,容易引發線程等待和堵塞;數組

系統崩潰過程以下:
image.png數據結構

解決高併發問題的方法有3種:
1, 採用集羣方式分擔壓力;
2,限流;
3,降級架構

數據結構原理

數據結構是軟件研發的基礎,數據結構不熟練,寫不出高品質的程序。併發

順序表

即數組,具備連續的內存空間,相同的數據類型;


根據全部獲取值時間複雜度o(1)
根據值得到索引時間複雜度o(n)
插入和刪除元素須要必定後續的全部元素
jvm

鏈表

離散的內存空間


結構包含:data,next


按照值查詢 時間複雜度爲o(n)


插入和刪除元素代價比較小,不須要移動後繼的元素;


特殊的順序表, 後進先出,能夠當作一個大桶;

隊列

特殊的順序表,先進先出,超市貨架的貨物擺放;

Hash

把key值轉換爲一個hashCode,  hashCode跟數組長度取餘獲得索引值;


數組元素裏放的是一個鏈表的指針,若是出現hash衝突,則遍歷該鏈表;


若是不出現hash衝突,hash表查找元素時間複雜度爲o(1)


image.png




一個元素,只有一個前驅,多個後繼的數據結構爲樹;




通常使用遞歸的方法進行遍歷。


設計模式的組合模式跟數相似。

JVM原理

write once,run everywhere! 

這個的基礎是jvm. 
java代碼編譯爲字節碼,jvm轉換成各類系統的編碼。

jvm結構

jvm分紅3個部分

類加載器:程序裝載和運行機制
運行時數據區:內存管理機制 
執行引擎:程序計數器和執行引擎  線程管理機制

運行時數據區分紅4個部分;

線程共享

方法區

線程獨有


程序計數器

image.png

垃圾清除算法

標記清除算法。

先使用可達算法標記哪些對象不使用了。
而後回收:

分:清理,壓縮,複製

image.png

垃圾回收算法

image.png

小結

本節回顧了軟件的基本原理,首先介紹了學習方法論,第一性原理。
分3個部分:
1,程序運行和崩潰的原理;
2,數據結構的基本類型;
3,jvm的結構,垃圾回收算法,來及清除算法;

image.png

image.png

image.png

原創不易,轉載請註明出處。

相關文章
相關標籤/搜索