華為:
1. c與c++哪個效能比較好?
從語言特性角度上來看,c++是c的超集。在(c++) - c的這部分語言特性中有很多會降低執行效率。乙個例子是dynamic_cast,執行乙個dynamic_cast要消耗100-300個cpu cycles,因為機器要跳到一段特別的snippet(一小段程式)去檢查type inheritance,在內層迴圈中使用它無非是大大浪費時間。另乙個例子是大家都很熟悉的vtable,這裡不多說了。
通常談語言也會比較它們的標準庫,例如c++的std::sort肯定比c的qsort快(因為templatefunction的優點,甚至可以做specialization),但c++的iostream系列又比c的printf系列慢。
題外說一句,編譯器很重要。說乙個之前優化**的例子:在做迴圈內的運算優化時,如果運算資料在記憶體裡相鄰並對齊,gcc可以檢測出來並生成並行**(在x86上是intel sse指令)。最終我通過資料對齊讓gcc生成simd**將迴圈速度提公升了20倍。這一點上c和c++收到的效果是一樣的。
所以我更加覺得就這兩種語言而言,效率問題視具體問題和程式設計師自身水平的不同而不同。所以不能簡單地說c和c++哪個效率更高。它們各有各的特性,如何利用它們各自的特性生成執行效率優秀的程式,是乙個程式設計師應該多多思考的事情。
2. c與c++區別。
c是面對過程的,c++是面對物件的。c++更複雜,包含有更豐富的庫函式,功能相對更強大,某些方面也更隨意。c是乙個結構化語言,它的重點在於演算法和資料結構。c程式的設計首要考慮的是如何通過乙個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制),而對於c++,首要考慮的是如何構造乙個物件模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程(事務)控制。所以c與c++的最大區別在於它們的用於解決問題的思想方法不一樣。
3. a*演算法
4. udp如何提高可靠性
傳輸層無法保證資料的可靠傳輸,只能通過應用層來實現了。實現的方式可以參照tcp可靠性傳輸的方式,只是實現不在傳輸層,實現轉移到了應用層。
實現確認機制、重傳機制、視窗確認機制。
如果你不利用linux協議棧以及上層socket機制,自己通過抓包和發包的方式去實現可靠性傳輸,那麼必須實現如下功能:
傳送:包的分片、包確認、包的重發
接收:包的調序、包的序號確認
目前有如下開源程式利用udp實現了可靠的資料傳輸。分別為rudp、rtp、udt。
個人的想法是在應用層模仿傳輸層tcp的可靠性傳輸。下面不考慮擁塞處理,談談自己的個人簡單粗暴的設計。
1、新增seq/ack機制,確保資料傳送到對端。
2、新增傳送和接收緩衝區,主要是使用者超時重傳。
3、新增超時重傳機制。
1、傳送端傳送資料時,生成乙個隨機seq=x,然後每一片按照資料大小分配seq。資料到達接收端後接收端放入快取,並傳送乙個ack=x的包,表示對方已經收到了資料。傳送端收到了ack包後,刪除緩衝區對應的資料。
2、時間到後,定時任務檢查是否需要重傳資料。
牛客網:
記憶體對齊:
// 對齊原則:每一成員需對齊為後一成員型別的倍數
// 補齊原則:最終大小補齊為成員型別最大值的倍數
structa
;structb
通用型:
知識點小結
一 mysql計算日期 timestampdiff day,t3.payment due date,now 二 字段轉換 case when t1.status in d01 a01 a00 then 三 mybatis在插入資料時,返回id usegeneratedkeys true keypro...
unity知識點小結
1 通過gameobject.find 玩家物體 getcomponent 獲取玩家的player指令碼 2 quaternion.identity就是指quaternion 0,0,0,0 就是每旋轉前的初始角度,是乙個確切的值,而transform.rotation是指本物體的角度,值是不確定的...
corejava知識點小結
對於基本資料型別 比較的是值 對於引用型別的變數 比較的是記憶體位址 equals方法 equals方法的底層使用 來寫的 對於基本資料型別 無法比較 沒有重寫equals方法的比較的記憶體位址 重寫過equals方法的 string date 比較的是物件的內容 spring的核心機制ioc和ao...