C 一些問題

2021-06-22 18:04:00 字數 2811 閱讀 8595

1、if-else語句和switch-case語句的效率分析對比

switch效率高。switch的效率與分支數無關,

當只有分支比較少的時候,if效率比switch高,因為switch有跳轉表。分支比較多,那當然是switch

根據大量的實際程式測試(不考慮不同的編譯器優化程度差異,假設都是最好的優化),那麼switch語句擊中第三個選項的時間跟if/else if語句擊中第三個選項的時間相同。

擊中第一,第二選項的速度if語句快,擊中第四以及第四之後的選項的速度switch語句快。

switch的優缺點

缺點:不夠靈活,switch僅支援 int,char,unsigned char 等基本型別;**空間大。

優點:**結構清晰,效率高

if else的優缺點

缺點:效率低(相對於switch)

優點:使用靈活,**空間小

2、strcpy、memcpy、memset、strlen

char * strcpy(char * strdest,const char * strsrc) 

這個測試用例並沒有考慮到拷貝時記憶體重疊的情況,改寫如下:

char *my_strcpy(char *dst,const char *src)

int strlen( const char *str ) 

return len;

}

void *memcpy(void*dest, const void *src, size_t n);

//由src指向位址為起始位址的連續n個位元組的資料複製到以destin指向位址為起始位址的空間內。

strcpy和memcpy主要有以下3方面的區別。

1、複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。

2、複製的方法不同。strcpy不需要指定長度,它遇到被複製字元的串結束符"\0"才結束,所以容易溢位。memcpy則是根據其第3個引數決定複製的長度。

3、用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy

3、靜態全域性變數和動態全域性變數的區別

全域性變數本身就是靜態儲存方式,所以二者在儲存方式上相同。

非靜態全域性變數的作用域是整個源程式,當源程式由多個原始檔構成時,在各個原始檔中都是有效的;

靜態全域性變數只在該變數的原始檔內有效。

4、用兩個堆疊實現乙個佇列

入隊時,將元素壓入s1。

出隊時,判斷s2是否為空,如不為空,則直接彈出頂元素;如為空,則將s1的元素逐個「倒入」s2,把最後乙個元素彈出並出隊。

如果兩個都為空的話需要加入異常處理,也就是在實際寫**的時候考慮的要全面。

5、本週**上有5億個商品成交資料,讓你找出銷量最高的10000個商品

建立乙個優先佇列,也就是最小堆,堆大小為10000,如果當前銷量比堆頂要大,該商品入隊,堆頂出隊。時間複雜度為o(nlogm),n為總的元素個數,m為優先佇列長度

6、阿里旺旺裡人和人之間交流產生了很多個商業群,要我找出一共有多少個不同的群。

並查集

7、列舉物件導向的三個基本要素和五個基本原則

三個基本要素:繼承、封裝、多型

五個基本原則:單一職責原則:是指只有一種單一功能,不要為類實現過多的功能點,以保證實體只有乙個引起它變化的原因。 

開放封閉原則:軟體實體應該是可擴充套件的,而不可修改的。也就是,

對擴充套件開放,對修改封閉的。

liskov替換原則:子類必須能夠替換基類。這是對繼承機制的約束規範,保證繼承復用的基礎。但基類不能替換子類。

依賴倒置原則:依賴於抽象。高層模組不依賴於底層模組,二者都同依賴於抽象;抽象不依賴於具體,具體依賴於抽象。 抽象的穩定                                           性決定了系統的穩定性,因為抽象是不變的,依賴於抽象是物件導向設計的精髓,也是依賴倒置原則的核心。 

介面隔離原則:使用多個小的專門的介面,避免使用大的介面。乙個類對另乙個類的依賴應該建立在最小的介面上。將胖介面分解為多個特                                           點的定製化方法,使得客戶端僅僅依賴於它們的實際呼叫的方法,從而解除了客戶端不會依賴於它們不用的方法。

8、windows記憶體管理的幾種方式及優缺點。

(1)塊式管理。把主存分為一大塊、一大塊的,當所需的程式片段不在主存時就分配一塊主存空間,把程式片段載入到主存,就算所需要的程式片段只有幾個位元組也只能把這塊分配給它。優點:易於管理;缺點:浪費空間。

(2)頁式管理。把主存分為一頁一頁的,每一頁的空間要比一塊一塊的空間小很多,顯然這種方式的空間利用率要比塊式管理高出很多。

(3)段式管理。把主存分為一段一段的,每一段的空間又要比一頁一頁的空間小很多,這種方法在空間利用率上比頁式管理高出很多,但也有另外乙個缺點,乙個程式片段可能會被分為幾十個段,這樣很多時間就會浪費在計算每一段的實體地址上。(i/o操作)

(4)段頁式管理。結合了段式管理和頁式管理的優點。把主存分為若干頁,每一頁又分為若干段。

c 一些問題總結

這裡總結一些c 常遇到的問題 不同型別之間的轉換。1 string const char std string s 1 lsw const char cs 1 s 1.c str printf const char cs is s n cs 1 2 const char string const c...

C 環境方面一些問題。

關鍵點 vs中的pyhton環境必須和windows中的python環境一致。python檔案預設可以放在.exe同級目錄下,同時也可以放在cpp同級目錄下,但是後者需要在新增路徑。注意release模式和debug模式區別 指定python模組的位置 pyrun string import sys...

String 一些問題

前言 等號 對於基本型別,比較的是值,對於引用型別,比較的是記憶體位址。1.在物件池中建立,如果常量池中已經存在則返回常量池中已經有的。private static void test1 結果 true 2.乙個在string pool中,乙個在堆中。private static void test...