這裡的題目收集于網上,真實信應該是真的
1,下列排序算法中,初始資料集的排序程式對算法性能無影響的是()
A,插入排序B,堆排序 C,冒泡排序,D,快速排序
答案:B,冒泡的複雜度恒定為O(n^2),插入排序最差是O(n^2),最優化為O(n);堆排序建堆的時間是O(n),但是,排序的過程是O(nlogn),固定不變;
冒泡排序雖然大家都認為是O(n^2),但是,優化的冒泡是使用一個flag的,如果flag不變,說明不需要 再交換元素了,最優可以到O(n),快速排序不解釋,最差的情況每一次隻分出一個元素,最差是O(n^2),最優的時候是O(nlogn)
2,關于cache的描述中,以下說法正确的是()
CPU内的Cache容量應該大于CPU外的Cache容量
Cache的設計思想是在合理成本下提高命中率
Cache的設計目标是容量盡可能地與主存儲容量相當
在容量确定的情況下,替換算法的時間複雜度是影響Cache命中的關鍵因素
答案:B,Cache一般比較小,但是,速度會更快,CPU内的Cache容量顯然小于CPU外的,其設計原理是利用程式的局部性原理,即一斷資料現在被通路,可能一會又會被通路,目标是提高資料的通路速度,其命中率的關鍵因素與替換算法有關系,而不是替換算法的複雜度
3,資料存儲在磁盤上的方式直接影響IO性能,現在假設一個磁道有10個實體塊,一批資料的存儲如下:
塊
1
2
3
4
5
6
7
8
9
10
記錄
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
磁盤的轉速度是20ms/R,這批資料一次隻能被處理一個記錄,把這個記錄讀到緩沖區裡面,再處理,處理一個記錄需要4ms,起始時磁頭位于R1,問把這10個記錄全部完需要多少時間。()
A,180ms B,200ms C,204ms D,220ms
答案:C,要知道的是磁片會一直轉,當第一個記錄被處理完是,磁片已經轉到R4這個地方了(讀需要2ms,處理需要4ms),下一個記錄是R2,為了讀取R2,磁片必需轉過R5,R6…R10再到R2。一直這樣算下去,結果是204。
4,以下不是私有IP的是()
A,10.6.207.84 B,172.23.30.28 C,172.32.50.80 D,192.168.1.100
答案:C有位址有以下三斷
10.0.0.0~10.255.255.255 192.168.0.0~192.168.255.255
172.160.0~172.31.255.255
5,下列關于一個類的靜态成員的描述中,不正确的是()
A、該類的對象共享其靜态成員變量的值
B、靜态成員變量可被該類的所有方法通路
C、該類的靜态方法隻能通路該類的靜态成員變量
D、該類的靜态資料成員變量的值不可修改
答案:D,靜态變量(static變量)是一個類的變量,是這個類所有的對象公共的,這個類的所有函數都可以通路與修改(如果是const就算了),是以選D
6,已知一個線性表(38,25,74,63,52,48),假定采用散列函數h(key)
= key%7計算散列位址,并散列存儲在散清單A【0....6】中,若采用線性探測方法解決沖突,則在該散清單上進行等機率成功查找的平均查找長度為()
A,.5 B,7 C,2.0 D,2.3
答案:C,
依次進行取模運算求出哈希位址:
A
63
48
38
25
74
52
查找次數
由于是等機率查找,是以結果為:1/6*(1+3+1+1+2+4)= 2.0
7,表達式“X=A+B*(C--D)/E”的字尾表示形式可以為()
A、XAB+CDE/-*= B、XA+BC-DE/*= C、XABCD-*E/+= D、XABCDE+*/=
答案C,字尾是波蘭表達式,字首是逆波蘭表達式,這個最好搞清楚一下,還要搞清楚他們與二叉樹的通路的關系。
8,()設計模式将抽象部分與它的實作部分相分離。
A, Singleton(單例) B, Bridge(橋接)
C, Composite(組合) D,Facade(外觀)
答案B,在Singleton的核心結構中隻包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類隻有一個執行個體而且該執行個體易于外界通路,進而友善對執行個體個數的控制并節約系統資源。如果希望在系統中某個類的對象隻能存在一個,單例模式是最好的解決方案;
在軟體系統中,某些類型由于自身的邏輯,它具有兩個或多個次元的變化,那麼如何應對這種“多元度的變化”?如何利用面向對象的技術來使得該類型能夠輕松的沿着多個方向進行變化,而又不引入額外的複雜度?這就要使用Bridge模式。
組合設計模式不解釋,就是包含
外觀設計模式有個最大的特點将細粒度的對象包裝成粗粒度的對象,應用程式通過通路這個外觀對象,來完成細粒度對象的調用,外觀模式一般是分布式應用和系統架構中的應用服務層的設計中常用的方式
9,下面程式的輸出結果為多少?
1. void Func(charstr_arg[100])
2. {
3. printf("%d\n",sizeof(str_arg));
4. }
6. int main(void)
7. {
8. char str[]="Hello";
9. printf("%d\n",sizeof(str));
10. printf("%d\n",strlen(str));
11. char *p = str;
12. printf("%d\n",sizeof(p));
13. Func(str);
14.
答案:輸出結果為:6 5 4 4
注意當數組傳給函數的時候(函數調用),會退化成指針,指針與機器的位數有關,32位系統是32bit,64位系統是64bit,sizeof應用在字元串身上的時候要計算在後面加的一個’\0’,比如,sizeof(“A\0B\0”)應該是5,因為最後還會加一個0,但是,strlen卻是碰到0就結束,是以strlen(“A\0B\0”)應該是1.
10、下面程式的輸出結果為多少?
1. void Func(charstr_arg[2])
3. int m = sizeof(str_arg);
4. int n = strlen(str_arg);
5. printf("%d\n",m);
6. printf("%d\n",n);
7. }
8.intmain(void)
9. {
10.charstr[]="Hello";
11. Func(str);
12. }
答案:輸出結果為:4 5,數組傳遞給函數的時候會退化成指針,在函數原型裡面看到char x[10]和char x[90]一樣,都當成char *處理,strlen會一直數,直到‘\0‘為止。
11,到商店裡買200的商品返還100優惠券(可以在本商店代替現金)。請問實際上折扣是多少?
答案:5折,n元最後可以買2n元的東西,首先,n元可以擷取n/2的優惠券,繼續是n/4的優惠券...最後一直可以買到2n元的東西,果斷5折