【刷遊戲開發面經記錄】2
TCP中的擁塞控制
在TCP傳輸過程中,傳送端開始傳送資料的時候,如果剛開始大量傳送資料,那麼可能造成一些問題,網路可能在開始的時候非常的擁堵,如果給網路中再次加入大量的資料,那麼這個擁堵就會加劇。
擁堵加劇會產生大量的丟包,就會產生大量的超時重傳,嚴重影響傳輸速率
所以TCP引入了慢啟動機制,在開始傳送資料的時候,先傳送少量的資料探路,探清當前的網路狀態如何
在決定使用多大的速度進行傳輸
**擁塞視窗:**傳送剛開始定義擁塞視窗為1,每次收到ACK應答 擁塞視窗加一
在傳送資料之前,首先將擁塞視窗和接收端返回的視窗大小進行比對,取最小值作為實際傳送的視窗
擁塞視窗的增長是指數級別的,慢啟動機制只是說明在開始的時候傳送的少,傳送的慢,但是增長的速度是很快的,
為控制擁塞視窗的增長,不能單純的是擁塞視窗加倍
設定一個擁塞視窗閾值,當擁塞視窗超過閾值以後,不再按照指數來增長,而是線性的增長
在慢啟動開始的時候,如果慢啟動的閾值等於視窗的最大值,一旦發生網路阻塞,發生超時重傳
慢啟動的閾值會降低為原來的一半,同時擁塞視窗設定為1
擁塞控制是TCP在傳輸的儘可能的將資料傳輸,並且避免擁塞的一系列問題,是可靠性的保證同時也維護了傳輸的高效型
C++編譯過程中的動態連結和靜態連結有什麼區別?動態連結的流程是怎樣的
動態連結和靜態連結最大的區別就在於連結的時機不同
動態連結的進行在程式執行時連結,靜態連結在形成可執行程式之前的連結
流程
預處理->編譯->彙編->連結
預處理 編譯器把c程式的標頭檔案編譯進來,還有巨集的替換
編譯 這個階段主要做詞法分析,語法分析,語義分析,在檢查無錯誤之後,把程式碼翻譯成為組合語言
彙編 組合語言變成機器語言
連結 將編譯階段生成的檔案連結為一個整體的檔案
TCP和UDP的不同點
1.TCP提供面相連結的傳輸,通訊之前建立連線(三次握手);UDP提供無連線的傳輸,通訊之前不需要連線
2.TCP提供可靠的傳輸(有序,無差錯,不丟失,不重複);UDP提供不可靠的傳輸
3.TCP面相位元組流的傳輸,每次傳輸之前,先把資訊分割成組,到達接收端在將其充足,UDP面相資料的傳輸,沒有分組和充足
4.TCP提供擁塞控制和流量控制機制,UDP不提供擁塞控制和流量控制機制
用UDP如何保證資料的完整性
外加校驗碼來保證正確性,加順序碼保證完整性,相當於把TCP保證完整性和可靠性的東西自己去完成,不需要做的太複雜
值型別和引用型別的區別
1.管理機制: 值型別是作業系統負責管理,作用於結束只有作業系統會自動釋放,引用型別是垃圾回收器負責管理
2.記憶體分配: 值型別:被分配到變數宣告的地方,區域性變數分配到棧上
引用型別分配到託管堆上,變數 儲存在棧中
3.賦值方式 值型別:賦值變數包含的值,引用型別:賦值物件引用的地址
4.基類值型別:繼承System.ValueType;System.ValueType又繼承自System.Object
引用型別:繼承自System.Object
結構體和類的區別
1.語法定義的區別一個是class 一個是struct
2.宣告欄位是否可以設定初值 結構體中欄位不可設定初值 類中欄位可以設定初值
3.建構函式要求 結構體的建構函式中要求所有欄位賦值,類的建構函式中無限制
4.所佔空間 結構體是值型別在棧中分配空間,類是引用型別,在堆上分配空間
5.處理方式 struct變數使用完成之後會自動解除記憶體分配,class例項有垃圾回收機制保證記憶體回收處理
C#中的GC
GC就是記憶體的垃圾收集器,以應用程式root為基礎,遍歷應用程式在Heap上動態分配的所有物件,通過辨識他們是否被引用來確定哪些物件是死亡的,哪些是仍需要被使用的,已經不再被應用程式的root或者是別的物件所引用的就是已經死亡的物件,即所謂垃圾
優點:
1.提高了軟體開發的抽象度
2.程式設計師可以將精力集中在實際問題上,而不是專門分心來管理記憶體的問題
3.可以使模組的介面更加清晰,減少模組之間的耦合
4.大大減少了因為認為不當的處理而帶來的bug
5.是記憶體更加的使用高效
總體來說就是GC把程式設計師從複雜的記憶體問題中解放了出來,從而提高了軟體的開發速度,質量和安全性
以上即是最近我刷面經遇到的高頻問題,我都總結下來
希望對大家有所幫助
相關文章
- LeetCode刷題記錄——day2LeetCode
- 面試刷題偶有記錄面試
- LeetCode刷題記錄LeetCode
- 刷前端面經筆記(十)前端筆記
- 刷前端面經筆記(七)前端筆記
- 刷前端面經筆記(九)前端筆記
- 刷前端面經筆記(八)前端筆記
- 刷前端面經筆記(一)前端筆記
- 刷前端面經筆記(二)前端筆記
- 刷前端面經筆記(三)前端筆記
- 刷前端面經筆記(四)前端筆記
- 刷題記錄(C語言)01C語言
- ctfshow刷題記錄-cry方向-1
- ctfshow刷題記錄-社工篇-1
- 手把手教你刷github提交記錄Github
- 劍指offer刷題記錄_2. 二維陣列中的查詢陣列
- LeetCode刷題記錄——day1LeetCode
- LeetCode刷題記錄——day3LeetCode
- LeetCode刷題記錄——day4LeetCode
- LeetCode刷題記錄——day5LeetCode
- 面試記錄2面試
- LeetCode-劍指Offer刷題記錄LeetCode
- Vue開發庫存管理前端頁面時一些小經驗記錄Vue前端
- 記錄Effective Objective C 2 0筆記目錄Object筆記
- db2不記錄日誌插入記錄DB2
- 阿里巴巴面經記分享阿里
- Laravel 使用個人經驗記錄Laravel
- LeetCode刷題記錄與題解(C++版本)LeetCodeC++
- 【程式設計大賽刷題記錄】C語言 06程式設計C語言
- 【程式設計大賽刷題記錄】C語言 02程式設計C語言
- LeetCode 刷題記錄(16、17、18)—Java語言LeetCodeJava
- 記CTF小白的第一次刷題經歷
- 管理經驗分享會議記錄--【管理經驗】
- 記錄曾經拒絕的話
- leetcode刷題記錄:演算法(六)BFS&DFSLeetCode演算法
- 【新手小白刷leetcode記錄貼】 1.兩數之和LeetCode
- android遊戲開發自學筆記3-2Android遊戲開發筆記
- html頁面轉PDF、圖片操作記錄HTML