資料結構基本概念
資料:資料即資訊的載體,是能夠輸入到計算機中並且能被計算機識別,儲存和處理的符號總稱
資料元素:資料元素是資料的基本單位,又稱之為記錄。一般,資料元素由若干基本項(字段,域,屬性)組成。
資料結構:資料結構指的是資料元素及資料元素之間的相互關係,或組織資料的形式
資料之間的結構關係
邏輯結構
分類儲存結構
分類線性表
線性表的順序儲存
線性表的鏈式儲存
特點:棧和佇列棧佇列
樹形結構
基礎概念:有且只有乙個根,其餘結點分為互不相交的有限集合,並稱為其根的子樹
二叉樹的遍歷:沿著條搜尋路徑周遊二叉樹,再樹中的每乙個節點訪問一次且僅訪問一次
遞迴思想和實踐
遞迴函式是指乙個函式的函式體中直接呼叫或間接呼叫了該函式自身的函式
遞迴函式呼叫的執行過程的兩個階段
優缺點排序和查詢
排序:將無序的記錄序列調整成有序的序列
常見的排序方法:
查詢:是在給定資訊集上尋找特點資訊元素的過程
二分查詢:當資料量很大適宜採用該方法,採用二分法查詢時,資料需要是排好序的
網路程式設計基礎
計算機網路功能主要是包括實現資源共享,實現資料資訊的快速傳遞
osi七層模型
作用:使網路通訊工作流程標準化
優點:建立了統一的工作流程
分部清晰,各司其職,每個步驟分工明確
降低了各個模組直接的耦合度,便於開發
四層模型(tcp/ip模型)
背景:實際工作中工程師無法完全按照七層模型要求操作,逐漸演化為更符合實際情況的四層
資料傳輸過程
傳送端由應用層程式傳送訊息,逐層新增首部資訊,最終在物理層傳送訊息包
傳送的訊息經過對個節點(交換機,路由器)傳輸,最終到達目標主機
目標主機由物理層逐層解析首部訊息包,最終到應用程式呈現訊息
網路協議
在網路資料傳輸中,都遵循的規定,包括建立宣告樣的資料結構,什麼樣的特殊標誌等
網路基礎概念
傳輸層服務
四次揮手(斷開連線)
面向無連線的傳輸服務(基於udp協議)
socket套接字程式設計
套接字:實現網路程式設計進行資料傳輸的一種技術手段
套接字分類:
客戶端流程
tcp套接字資料傳輸特點
網路收發緩衝區
tcp粘包
資料報套接字:以資料報方式傳輸資料,實現udp網路傳輸方案
tcp套接字和udp套接字程式設計區別
流式套接字是以位元組流方式傳輸資料,資料報套接字以資料報形式傳輸
tcp套接字會有粘包,udp套接字有訊息邊界不會粘包
tcp套接字保證訊息的完整性,udp套接字則不能
tcp套接字依賴listen accept建立連線才能收發訊息,udp套接字則不需要
tcp套接字使用send,recv收發訊息,udp套接字使用sendto,recvfrom
tcp套接字之http傳輸
http協議(超文字傳輸協議)
用途:網頁獲取,資料傳輸
特點:網頁請求過程
http請求
請求行:具體的請求類別和請求內容 get (請求類別) /(請求內容) http/1.1(協議版本)
請求類別:每個請求內別表示要做不同的事情
請求頭:對請求的進一步解釋和描述
空行請求體:請求引數或者提交內容
http響應
響應格式:響應行,響應頭,空行,響應體
響應行:反饋基本響應情況 http/1.1(版本資訊) 200(響應碼) ok(附加資訊)
響應碼:
響應頭:對響應內容的描述 content-type:text/html
響應體:響應的主體內容資訊
多工程式設計
意義:充分利用計算機多核資源,提高程式的允許效率
實現方案:多執行緒,多程序
並行與併發
程序定義:程式在計算機中的一次執行
程序的基本概念:
五態(在三態基礎上增加新建和終止)
程序的執行特徵:
基於fork的多程序程式設計
孤兒和殭屍
殭屍程序:子程序先於父程序退出,父程序又沒有處理子程序的退出狀態,此時子程序就會成為殭屍程序
如何避免殭屍程序產生
multiprocessing模組建立程序
將需要子程序執行的事件封裝為函式
通過模組的process類建立程序物件,關聯函式
可以通過程序物件設定程序資訊及屬性
通過程序物件呼叫start啟動程序
通過程序物件呼叫join**程序
程序池實現
程序的建立和銷毀過程消耗的資源較多
當任務量眾多,每個任務在很短時間內完成時,需要頻繁的建立和銷毀程序。此時對計算機壓力較大
程序池技術很好的解決了以上問題
建立程序池的步驟
建立程序池物件,放入適當的程序
將事件加入程序池佇列執行
關閉程序池
**程序池中程序
程序間通訊(ipc)
建立本地套接字:sockfd = socket(af_unix,sock_stream)
繫結本地套接字檔案:sockfd.bind(file)
監聽,接收客戶端連線,訊息收發:isten()-->accept()-->recv(),send()
訊號量:給定乙個數量對多個程序可見,多個程序都可以操作該數量增減,並根據數量值決定自己的行為
執行緒(thread)
執行緒基本概念
執行緒被成為輕量級的程序
執行緒也可以使用計算機多核資源,是多工程式設計方式
執行緒是系統分配核心的最小單元
執行緒可以理解為程序的分鐘任務
乙個程序中可以包含多個執行緒
執行緒也是乙個執行行為,消耗計算級記憶體
乙個程序中的所有執行緒共享這個程序的資源
多個執行緒之間的執行互不影響各自執行
執行緒的建立和銷毀消耗資源小於程序
各個執行緒也有自己的id特徵
建立執行緒物件:t = thread()
啟動執行緒:t.start()
**執行緒:t.join([timeout])
同步互斥
同步互斥機制
執行緒同步互斥方法
死鎖如何避免死鎖
python執行緒gil
結論:在無阻塞狀態下,多執行緒程式和單執行緒程式執行效率幾乎差不多,甚至還不如單執行緒效率。但是多程序執行相同內容卻可以有明顯的效率提公升
程序和執行緒的區別聯絡
兩者都是多工程式設計方式,都能使用計算機多核資源
程序的建立刪除消耗的計算機資源比執行緒多
程序空間單獨,資料互不干擾,有專門通訊方法,執行緒使用全域性變數通訊
乙個程序可以有多個分支執行緒,兩者有包含關係
多個執行緒共享程序資源,在共享資源操作時往往需要同步互斥處理
程序執行緒再系統中都有自己的特有屬性標誌,如id,**段,命令集
協程技術
第二階段小結
先是pta上的作業 這題要求我們熟練的掌握類之間的繼承與多型的使用,在類與類之間傳遞資訊時不能弄混,要弄清楚單一職責原則。這一題主要考察繼承與多型,泛型容器的應用。接下來是學習通上的課後作業 第乙個是單向鍊錶 單向鍊錶由乙個個的節點組成,這些節點都帶有下乙個節點的引用,最後乙個節點指向null,這樣...
vivi的第二階段
vivi 的第二階段 vivi 的第二階段是從 main 函式開始,同一般的 c語言程式一樣,該函式在 init main.c 檔案中,總共可以分為 8個步驟。1 函式開始,通過 putstr vivi banner 列印出vivi 的版本。vivi banner 在 init version.c ...
Bete衝刺第二階段
web 修復了a版本中介面資料返回錯誤的問題。通知對資料表新增了幾個字段。並且新增了乙個通知查詢的介面。ios 修正網路連線bug 招募功能介面完成但是跳轉問題正在解決 web bug是解決可以一步一步摳好,查查資料也就解決了。晚上手殘,在eclipse的行數條上不小心設了個斷點,導致啟動tomca...