知識點小結

2021-07-25 02:58:50 字數 1663 閱讀 5313

華為:

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...