0309 軟體基本原理1

来源:https://www.cnblogs.com/snidget/archive/2020/03/09/12452426.html
-Advertisement-
Play Games

程式開發技術學習方法論 軟體研發行業,新技術的出現日新月異,如何高效的學習,保持技術先進性?基於第一性原理:即 抓住事物的本質特征,按照事物本身的規律去推導,演繹事物在各種場景下的變化規律,東西技術在業務場景中的表現。物理學,幾何學,馬斯克等推崇第一性原理。軟體研發學習方法:建立自己的技術思維體系, ...


程式開發技術學習方法論

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

image.png

程式運行和崩潰原理

代碼或者程式包是程式的靜態表現;
代碼或者程式包通過操作系統從磁碟載入到記憶體,經過cpu的執行,即成為進程;


記憶體簡單分為4塊區域:


1,代碼區


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

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


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


但是進程切換的代價非常大,所以,在進程範圍內引入了線程;
線程的狀態跟進程類似;


image.png

JavaWeb程式運行和崩潰

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




image.png

程式崩潰的原因是:高併發引起的線程堵塞;

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

系統崩潰過程如下:
image.png

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

數據結構原理

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

順序表

即數組,具有連續的記憶體空間,相同的數據類型;


根據所有獲取值時間複雜度o(1)
根據值獲得索引時間複雜度o(n)
插入和刪除元素需要一定後續的所有元素

鏈表

離散的記憶體空間


結構包含: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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本人免費整理了Java高級資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分散式等教程,一共30G,需要自己領取。傳送門:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 前 ...
  • 圖解Java設計模式之建造者模式 蓋房項目需求 傳統方式解決蓋房需求 傳統方式的問題分析 建造者模式基本介紹 建造者模式的四個角色 建造者模式原理類圖 建造者模式在JDK的應用和源碼分析 建造者模式的註意事項和細節 蓋房項目需求 1)需要建房子 :這一過程為打樁、砌牆、封頂2)房子有各種各樣的,比如 ...
  • 使用gRPC做微服務的內部通信 gRPC是一個由Google開源的遠程服務調用框架,具有多路復用和雙向流式通信的特性。 大家好,在本文中將為大家介紹為什麼我們應該使用gRPC代替RESTful或JSON,來開發微服務內部的通信介面。 什麼是gRPC? gRPC是一個高性能的、開源的、普遍通用的RPC ...
  • 1.一個小型網路水果超市,負責給用戶網上訂購蘋果、芒果、桃子、荔枝。用戶可以註冊成為會員,預約、訂購、查詢、取消等常規動作。請設計用例模型.1) 參與者2)用例圖3)一個重要的用例進行描述 2. 畫出類圖 一家公司有許多部門,通過部門名唯一的確定一個部門,每個部門有一名經理主管,也有的經理不管理任何 ...
  • P1034 矩形覆蓋 題目描述 在平面上有n個點(n include include include include using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch'9'){if(ch==' ')f= ...
  • 一、內容回顧 1、re模塊 2、正則分組 元字元、量詞、惰性符號 3、補充 [],[^]:帶有特殊意義的元字元到字元組內大部分取消其特殊含義。 如果擔心出現特殊含義:加\ 會取消的:[()+ . ] [( )] 的位置決定了它的意義,寫在字元組的第一個位置就表示一個普通的橫杠。 寫在字元組的其他任何 ...
  • 一、BeautifulSoup四大對象 1.Tag (1)對應的就是Html中的標簽; (2)可以通過soup,tag_name (3)tag裡面有兩種重要的屬性 name:用於列印標簽的名字 attrs:用於列印屬性(返回一個字典) contents:列印內容(返回一個列表) from bs4 i ...
  • C語言中提供了許多的字元串操作函數,常見的字元串操作函數有以下幾種: 1,求字元串長度的函數 原型函數:strlen(字元串名稱); 實現原理:將字元串名稱傳入該函數,該函數會遍歷該字元串,最後將長度返回給我們,註意返回的長度不包括'\0'; 2,字元串拷貝函數 原型函數:strcpy(字元串1名稱 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...