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