部分真题整理4
1、下面的代碼運行的結果是:(B)
class B extends Object { static { System.out.println("Load B"); } public B() { System.out.println("Create B"); } } class A extends B { static { System.out.println("Load A"); } public A() { System.out.println("Create A"); } }public class Testclass { public static void main(String[] args) { new A(); } }Load B ->Create B->Load A -> Create A
Load B -> Load A ->Create B ->Create A
Load B -> Create B-> Create A -> Load A
Create B ->Create A ->Load B ->Load A
解析:
java類中的靜態代碼塊只在類加載到內存時執行一次
B是A的父類,所以先加載B,再加載A
然后在new A()過程中首先構造父類,再構造子類
2、下列幾種關于進程的敘述,()最不符合操作系統地進程的理解?(B)
進程是在多程序并行環境中的完整的程序
進程可以由程序、數據和進程控制描述
線程是一種特殊的進程
進程是程序在一個數據集合上運行的過程,它是系統進行資源分配和調度的一個獨立單位
解析:
進程由進程控制塊唯一確定
3、以下代碼共調用多少次拷貝構造函數:(D)
Widget f(Widget u) { Widget v(u); Widget w=v; return w; } main(){ Widget x; Widget y=f(f(x)); }1
3
5
7
解析:
y=f(f(x)) 有兩層 f() ,為了說明過程,把里面的一層標明為 f_1 ,外面一層標明為 f_2 。則 7 次調用分別是:
x -> f_1 的 u
f_1 的 u -> f_1 的 v
f_1 的 v -> f_1 的 w
f_1 的 w -> f_2 的 u
f_2 的 u -> f_2 的 v
f_2 的 v -> f_2 的 w
f_2 的 w -> y
f_1 的 v -> f_1 的 w為啥調用的不是重載賦值運算符?
在使用一個現有對象去初始化一個新對象時,使用復制構造函數,而非賦值構造函數; 若'='左邊的對象已經初始化過了,這時才把'='看做是賦值構造函數。
在main()函數直接輸入f(x);是調用4次(可以自己寫個拷貝函數,輸出1,結果得到4個1),按上述代碼卻調用7次(只得到7個1),所以感覺很奇怪,不知道編譯器做了什么優化。。。
4、幀中繼是一種( AD)的協議。
面向連接
網絡協議
面積無連接
可靠
解析:
幀中繼( Frame Relay)是一種用于連接計算機系統的面向分組的通信方法。它主要用在公共或專用網上的局域網互聯以及廣域網連接。大多數公共電信局都提供幀中繼服務,把它作為建立高性能的虛擬廣域連接的一種途徑。幀中繼是進入帶寬范圍從56Kbps到1.544Mbps的廣域分組交換網的用戶接口。
幀中繼是一個提供連接并且能夠支持多種協議、多種應用的多個地點之間進行通信的廣域網技術,它定義了在公共數據網上發送數據的流程,屬于高性能、高速率的數據連接技術。
5、 int func(unsigned int i) { unsigned int temp = i; temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa) >> 1); temp = (temp & 0x33333333) + ((temp & 0xccccccccc) >> 2); temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0) >> 4)); temp = (temp & 0xff00ff) + ((temp & 0xff00ff00) >> 8); temp = (temp & 0xffff) + ((temp & 0xffff0000) >> 16); return temp; }請問 func(0x11530828)的返回值是: 1032
解析:
首先確定這個題是想考察數的二進制表示中1的個數的“平行算法”
分析改算法是如何實現二進制表示中1的個數統計的,為了方便理解,我們把代碼改成如下的形式:
int func(unsigned int i) { unsigned int temp = i; temp = (temp & 0x55555555) + ((temp>> 1) & 0x55555555); //temp相鄰位相加 temp = (temp & 0x33333333) + ((temp >> 2) & 0x33333333); //temp相鄰(以2為單位)相加 temp = (temp & 0x0f0f0f0f) + ((temp>> 4) & 0x0f0f0f0f); //temp相鄰(以4為單位)相加 temp = (temp & 0xff00ff) + ((temp>> 8) & 0xff00ff); //temp相鄰(以8為單位)相加 temp = (temp & 0xffff) + ((temp>> 16) & 0xffff) ; //temp相鄰(以16為單位)相加 return temp; }temp相鄰位相加:相加原理若相鄰的兩個數為00則結果為00, 相鄰的兩個數為01或10則結果為01,相鄰兩個數為11則結果為10,也就是先小范圍統計每兩位中1的個數,后面的步驟在累計有多少個1.
0x11530828的二進制表示如下:
0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0;
? ? 0 ? ? ? ? ??1 ? ??0 ? ??1 ? ??1 ? ??1 ? ??0 ? ??2 ? ? 0 ? ??0 ? ??1 ? ??0 ? ? 0 ? ? 1 ? ? 1 ? ? 0;
? ??1 ? ? ? ?1 ? ? 2 ? ?? ? ??2 ? ??0 ? ? 1 ? ? 1 ? ??? ? ? ? 1;
? ??2 ? ??4 ? ??1 ? ??2
? ? 6 ? ? 3
? ??9
6、在含有n個關鍵字的小根堆(堆頂元素最小)中,關鍵字最大的記錄有可能存儲在(D)位置上
[n/2]
[n/2]-1
1
[n/2]+2
解析:
小根堆中最大的數一定是放在葉子節點上,堆本身是個完全二叉樹,完全二叉樹的葉子節點的位置大于[n/2]
7、 cp拷貝命令的-f參數含義為?(D)
拷貝目錄
遞歸處理
顯示執行過程
強制進行拷貝
8、 unsigned int a= 0x1234; unsigned char b=*(unsigned char *)&a; 在32位大端模式處理器上變量b等于(A)?
0x00
0x12
0x34
0x1234
解析:
unsigned int a= 0x1234; 其中int是4字節, 大端存儲 ,補齊16進制表示為: 0x00 00 12 34
unsigned char b=*(unsigned char *)&a; 由于大端存儲, 所以上述int a變量的最低地址存儲的是
十六進制表示中最左邊的1字節, 為0x00.
9、 建立動態路由需要用到的文件有?(D)
/etc/hosts
/etc/HOSTNAME
/etc/resolv.conf
/etc/gateways
解析:
/etc/hosts 主機名到 IP 地址的映射關系的文件
/etc/resolv.conf DNS 服務的配置文件
/etc/gateways 建立動態路由需要用到的文件
10、下面有關文件系統元數據的描述,說法錯誤的是?(D)
元數據指用來描述一個文件的特征的系統數據,諸如訪問權限、文件擁有者以及文件數據塊的分布信息等等
我們可以使用stat命令來查看文件更多的元數據信息
Unix/Linux系統允許,多個文件名指向同一個inode號碼
文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B,這是文件A就稱為文件B的"硬鏈接"
解析:
我們知道文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。在 Linux 中,元數據中的 inode 號(inode 是文件元數據的一部分但其并不包含文件名,inode 號即索引節點號)才是文件的唯一標識而非文件名。文件名僅是為了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。
硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。鏈接為 Linux 系統解決了文件的共享使用,還帶來了隱藏文件路徑、增加權限安全及節省存儲等好處。
若一個 inode 號對應多個文件名,則稱這些文件為硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名。
若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟鏈接。
11、 忽略內部接口的情況,不能用來修飾interface的有( ACD)
private
public
protected
static
解析:
only public & abstract are permitted
你既然定義了interface(接口),那肯定是要其它的類去實現它的, 不然你定義它干嗎,所以不能用protected去修飾, 而要用public去修飾。
接口可以去繼承一個已有的接口。
接口只能被public和默認修飾符修飾,protected也不行所以除了public其他的都要選
12、下面的說法那個正確(B)
#define NUMA 10000000 #define NUMB 1000 int a[NUMA], b[NUMB];void pa() { int i, j; for(i = 0; i < NUMB; ++i) for(j = 0; j < NUMA; ++j) ++a[j]; } void pb() { int i, j; for(i = 0; i < NUMA; ++i) for(j = 0; j < NUMB; ++j) ++b[j]; }pa 和 pb 運行的一樣快
pa 比 pb 快
pb 比 pa 快
無法判斷
解析:
參考高質量C++編程在多重循環中,如果有可能,應當將最長的循環放在最內層,最短的 循環放在最外層,以減少 CPU 跨切循環層的次數。例如示例 4-4(b)的效率比示例 4-4(a)的高。 for (row=0; row<100; row++) { for ( col=0; col<5; col++ ) {sum = sum + a[row][col]; } 示例 4-4(a) 低效率:長循環在最外層} for (col=0; col<5; col++ ) { for (row=0; row<100; row++) { sum = sum + a[row][col]; } }示例 4-4(b) 高效率:長循環在最內層 測試時pb比pa快,數組a比數組b大很多,可能跨更多的頁,缺頁率高或者緩存命中更低,所以pb快
13、 B-樹中所有結點的平衡因子都為零(A)
對
錯
14、 用來輔助軟件開發、運行、維護、管理、支持等過程中的活動的軟件稱為軟件開發工具,通常也稱為(D)工具。
CAD
CAI
CAM
CASE
解析:
CAD:計算機輔助設計 , 指利用計算機及其圖形設備幫助設計人員進行設計工作。
CAI: 計算機輔助教學,是在計算機輔助下進行的各種教學活動,以對話方式與學生討論教學內容、安排教學進程、進行教學訓練的方法與技術。
CAM:計算機輔助制造 ,是將計算機應用于制造生產過程的過程或系統。
15、運行下面這段C語言程序之后,輸出在屏幕上的結果是:(A)
void foobar(int a, int *b, int **c) { int *p = &a; *p = 101; *c = b; b = p; }int main() { int a = 1; int b = 2; int c = 3; int *p = &c; foobar(a, &b, &p); printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p); return (0); }a=1, b=2, c=3, *p=2
a=101, b=2, c=3, *p=2
a=101, b=101, c=2, *p=3
a=1, b=101, c=2, *p=3
解析:
A: a=1, b=2, c=3, *p=2
函數foobar中的a是按值傳遞,因此在函數中的修改不會引起主函數中的變化。
函數中b傳遞的是主函數中b的指針,語句b = p ,其中p指向的是函數foobar內局部變量a的地址,讓傳遞過去的指針換了指向的數據,原來指向的數據(主函數中的b)不會有影響。如果這里是*b = *p那么主函數中的b也要相應變化。
函數中的c傳遞的是雙重指針,*c = b,也就是讓主函數中的p指針指向了主函數中的b的地址
在函數foobar中對指針的變化沒有影響到主函數,只是讓雙重指針更換了指向而已
說了半天上個圖吧,比較直接。說明:值用=表示,指針用:表示,雙重指針用::表示
16、長為N的字符串中匹配長度為M的子串的算法復雜度是多少?(B)
O(N)
O(M+N)
O(N+logM)
(M+logN)
17、實時操作系統的基本特性有?(AB)
提供高可靠性
提供及時響應性
提供多路性:即眾多聯機用戶可以同時使用同一臺計算機
提供獨占性:各終端用戶感覺到自己獨占了計算機
解析:
在特定時間內完成特定的任務,實時性與可靠性。
所謂“實時操作系統”,實際上是指操作系統工作時,其各種資源可以根據需要隨時進行動態分配。由于各種資源可以進行動態分配,因此其處理事務的能力較強、速度較快。 應該說,實時操作系統是在早期的操作系統基礎上發展起來的,早期的操作系統的各種資源都是事先已經分配好的,工作期間這些資源不能再重新進行分配。因此其處理事務的能力較差、速度較慢,現在則稱之為“非實時操作系統”。但“非實時操作系統”誕生時,其功能、性能等在當時也是非常強的,人們在未認識到更好的操作系統之前并不將其這樣稱呼。將來如果新的、功能更強的、實時性能更高的操作系統出現,也許現在稱之為“實時”的操作系統則可能將讓位于新的“實時操作系統”了。從這方面講“實時操作系統”是一個相對的概念的
18、軟件測試計劃評審會需要哪些人員參加?(ABCD)
項目經理
SQA 負責人
配置負責人
測試組
解析:
軟件測試計劃評審會需要有 項目經理、客戶(可選)、配置管理員、測試經理、開發組長等人的參加。
19、下面對路由器的描述正確的是(交換機指二層交換機)(ADE )
相對于交換機和網橋來說,路由器具有更加復雜的功能
相對于交換機和網橋來說,路由器具有更低的延遲
相對于交換機和網橋來說,路由器可以提供更大的帶寬和數據轉發功能
路由器可以實現不同子網之間的通信,交換機和網橋不能
路由器可以實現虛擬局域網之間的通信,交換機和網橋不能
解析:
A,路由器工作在網絡層,交換機工作在鏈路層,路由器具有交換機的全部功能,更復雜
B,錯誤,設備更復雜則延時更大。因為需要維護路由表
C,錯誤,交換機可以提供更大的帶寬和數據轉發功能
D,正確。路由器可以構建一個局域網,交換機鎖連接的是同一個局域網內的主機
E,正確。路由器可以構建VLAN,二層交換機不能
20、請描述http請求get和post的區別,下面描述正確的有:(CD)
GET用于信息獲取,而且應該是安全的和冪等的,POST表示可能修改變服務器上的資源的請求
POST比GET安全,因為采用了SSL加密
GET方式提交的數據最多只能是1024字節,理論上POST沒有限制,可傳較大量的數據
POST提交,把提交的數據放置在是HTTP包的包體中,GET提交的數據會在地址欄中顯示出來
class B extends Object { static { System.out.println("Load B"); } public B() { System.out.println("Create B"); } } class A extends B { static { System.out.println("Load A"); } public A() { System.out.println("Create A"); } }public class Testclass { public static void main(String[] args) { new A(); } }Load B ->Create B->Load A -> Create A
Load B -> Load A ->Create B ->Create A
Load B -> Create B-> Create A -> Load A
Create B ->Create A ->Load B ->Load A
解析:
java類中的靜態代碼塊只在類加載到內存時執行一次
B是A的父類,所以先加載B,再加載A
然后在new A()過程中首先構造父類,再構造子類
2、下列幾種關于進程的敘述,()最不符合操作系統地進程的理解?(B)
進程是在多程序并行環境中的完整的程序
進程可以由程序、數據和進程控制描述
線程是一種特殊的進程
進程是程序在一個數據集合上運行的過程,它是系統進行資源分配和調度的一個獨立單位
解析:
進程由進程控制塊唯一確定
3、以下代碼共調用多少次拷貝構造函數:(D)
Widget f(Widget u) { Widget v(u); Widget w=v; return w; } main(){ Widget x; Widget y=f(f(x)); }1
3
5
7
解析:
y=f(f(x)) 有兩層 f() ,為了說明過程,把里面的一層標明為 f_1 ,外面一層標明為 f_2 。則 7 次調用分別是:
x -> f_1 的 u
f_1 的 u -> f_1 的 v
f_1 的 v -> f_1 的 w
f_1 的 w -> f_2 的 u
f_2 的 u -> f_2 的 v
f_2 的 v -> f_2 的 w
f_2 的 w -> y
f_1 的 v -> f_1 的 w為啥調用的不是重載賦值運算符?
在使用一個現有對象去初始化一個新對象時,使用復制構造函數,而非賦值構造函數; 若'='左邊的對象已經初始化過了,這時才把'='看做是賦值構造函數。
在main()函數直接輸入f(x);是調用4次(可以自己寫個拷貝函數,輸出1,結果得到4個1),按上述代碼卻調用7次(只得到7個1),所以感覺很奇怪,不知道編譯器做了什么優化。。。
4、幀中繼是一種( AD)的協議。
面向連接
網絡協議
面積無連接
可靠
解析:
幀中繼( Frame Relay)是一種用于連接計算機系統的面向分組的通信方法。它主要用在公共或專用網上的局域網互聯以及廣域網連接。大多數公共電信局都提供幀中繼服務,把它作為建立高性能的虛擬廣域連接的一種途徑。幀中繼是進入帶寬范圍從56Kbps到1.544Mbps的廣域分組交換網的用戶接口。
幀中繼是一個提供連接并且能夠支持多種協議、多種應用的多個地點之間進行通信的廣域網技術,它定義了在公共數據網上發送數據的流程,屬于高性能、高速率的數據連接技術。
5、 int func(unsigned int i) { unsigned int temp = i; temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa) >> 1); temp = (temp & 0x33333333) + ((temp & 0xccccccccc) >> 2); temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0) >> 4)); temp = (temp & 0xff00ff) + ((temp & 0xff00ff00) >> 8); temp = (temp & 0xffff) + ((temp & 0xffff0000) >> 16); return temp; }請問 func(0x11530828)的返回值是: 1032
解析:
首先確定這個題是想考察數的二進制表示中1的個數的“平行算法”
分析改算法是如何實現二進制表示中1的個數統計的,為了方便理解,我們把代碼改成如下的形式:
int func(unsigned int i) { unsigned int temp = i; temp = (temp & 0x55555555) + ((temp>> 1) & 0x55555555); //temp相鄰位相加 temp = (temp & 0x33333333) + ((temp >> 2) & 0x33333333); //temp相鄰(以2為單位)相加 temp = (temp & 0x0f0f0f0f) + ((temp>> 4) & 0x0f0f0f0f); //temp相鄰(以4為單位)相加 temp = (temp & 0xff00ff) + ((temp>> 8) & 0xff00ff); //temp相鄰(以8為單位)相加 temp = (temp & 0xffff) + ((temp>> 16) & 0xffff) ; //temp相鄰(以16為單位)相加 return temp; }temp相鄰位相加:相加原理若相鄰的兩個數為00則結果為00, 相鄰的兩個數為01或10則結果為01,相鄰兩個數為11則結果為10,也就是先小范圍統計每兩位中1的個數,后面的步驟在累計有多少個1.
0x11530828的二進制表示如下:
0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0;
? ? 0 ? ? ? ? ??1 ? ??0 ? ??1 ? ??1 ? ??1 ? ??0 ? ??2 ? ? 0 ? ??0 ? ??1 ? ??0 ? ? 0 ? ? 1 ? ? 1 ? ? 0;
? ??1 ? ? ? ?1 ? ? 2 ? ?? ? ??2 ? ??0 ? ? 1 ? ? 1 ? ??? ? ? ? 1;
? ??2 ? ??4 ? ??1 ? ??2
? ? 6 ? ? 3
? ??9
6、在含有n個關鍵字的小根堆(堆頂元素最小)中,關鍵字最大的記錄有可能存儲在(D)位置上
[n/2]
[n/2]-1
1
[n/2]+2
解析:
小根堆中最大的數一定是放在葉子節點上,堆本身是個完全二叉樹,完全二叉樹的葉子節點的位置大于[n/2]
7、 cp拷貝命令的-f參數含義為?(D)
拷貝目錄
遞歸處理
顯示執行過程
強制進行拷貝
8、 unsigned int a= 0x1234; unsigned char b=*(unsigned char *)&a; 在32位大端模式處理器上變量b等于(A)?
0x00
0x12
0x34
0x1234
解析:
unsigned int a= 0x1234; 其中int是4字節, 大端存儲 ,補齊16進制表示為: 0x00 00 12 34
unsigned char b=*(unsigned char *)&a; 由于大端存儲, 所以上述int a變量的最低地址存儲的是
十六進制表示中最左邊的1字節, 為0x00.
9、 建立動態路由需要用到的文件有?(D)
/etc/hosts
/etc/HOSTNAME
/etc/resolv.conf
/etc/gateways
解析:
/etc/hosts 主機名到 IP 地址的映射關系的文件
/etc/resolv.conf DNS 服務的配置文件
/etc/gateways 建立動態路由需要用到的文件
10、下面有關文件系統元數據的描述,說法錯誤的是?(D)
元數據指用來描述一個文件的特征的系統數據,諸如訪問權限、文件擁有者以及文件數據塊的分布信息等等
我們可以使用stat命令來查看文件更多的元數據信息
Unix/Linux系統允許,多個文件名指向同一個inode號碼
文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B,這是文件A就稱為文件B的"硬鏈接"
解析:
我們知道文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。在 Linux 中,元數據中的 inode 號(inode 是文件元數據的一部分但其并不包含文件名,inode 號即索引節點號)才是文件的唯一標識而非文件名。文件名僅是為了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。
硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。鏈接為 Linux 系統解決了文件的共享使用,還帶來了隱藏文件路徑、增加權限安全及節省存儲等好處。
若一個 inode 號對應多個文件名,則稱這些文件為硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名。
若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟鏈接。
11、 忽略內部接口的情況,不能用來修飾interface的有( ACD)
private
public
protected
static
解析:
only public & abstract are permitted
你既然定義了interface(接口),那肯定是要其它的類去實現它的, 不然你定義它干嗎,所以不能用protected去修飾, 而要用public去修飾。
接口可以去繼承一個已有的接口。
接口只能被public和默認修飾符修飾,protected也不行所以除了public其他的都要選
12、下面的說法那個正確(B)
#define NUMA 10000000 #define NUMB 1000 int a[NUMA], b[NUMB];void pa() { int i, j; for(i = 0; i < NUMB; ++i) for(j = 0; j < NUMA; ++j) ++a[j]; } void pb() { int i, j; for(i = 0; i < NUMA; ++i) for(j = 0; j < NUMB; ++j) ++b[j]; }pa 和 pb 運行的一樣快
pa 比 pb 快
pb 比 pa 快
無法判斷
解析:
參考高質量C++編程在多重循環中,如果有可能,應當將最長的循環放在最內層,最短的 循環放在最外層,以減少 CPU 跨切循環層的次數。例如示例 4-4(b)的效率比示例 4-4(a)的高。 for (row=0; row<100; row++) { for ( col=0; col<5; col++ ) {sum = sum + a[row][col]; } 示例 4-4(a) 低效率:長循環在最外層} for (col=0; col<5; col++ ) { for (row=0; row<100; row++) { sum = sum + a[row][col]; } }示例 4-4(b) 高效率:長循環在最內層 測試時pb比pa快,數組a比數組b大很多,可能跨更多的頁,缺頁率高或者緩存命中更低,所以pb快
13、 B-樹中所有結點的平衡因子都為零(A)
對
錯
14、 用來輔助軟件開發、運行、維護、管理、支持等過程中的活動的軟件稱為軟件開發工具,通常也稱為(D)工具。
CAD
CAI
CAM
CASE
解析:
CAD:計算機輔助設計 , 指利用計算機及其圖形設備幫助設計人員進行設計工作。
CAI: 計算機輔助教學,是在計算機輔助下進行的各種教學活動,以對話方式與學生討論教學內容、安排教學進程、進行教學訓練的方法與技術。
CAM:計算機輔助制造 ,是將計算機應用于制造生產過程的過程或系統。
15、運行下面這段C語言程序之后,輸出在屏幕上的結果是:(A)
void foobar(int a, int *b, int **c) { int *p = &a; *p = 101; *c = b; b = p; }int main() { int a = 1; int b = 2; int c = 3; int *p = &c; foobar(a, &b, &p); printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p); return (0); }a=1, b=2, c=3, *p=2
a=101, b=2, c=3, *p=2
a=101, b=101, c=2, *p=3
a=1, b=101, c=2, *p=3
解析:
A: a=1, b=2, c=3, *p=2
函數foobar中的a是按值傳遞,因此在函數中的修改不會引起主函數中的變化。
函數中b傳遞的是主函數中b的指針,語句b = p ,其中p指向的是函數foobar內局部變量a的地址,讓傳遞過去的指針換了指向的數據,原來指向的數據(主函數中的b)不會有影響。如果這里是*b = *p那么主函數中的b也要相應變化。
函數中的c傳遞的是雙重指針,*c = b,也就是讓主函數中的p指針指向了主函數中的b的地址
在函數foobar中對指針的變化沒有影響到主函數,只是讓雙重指針更換了指向而已
說了半天上個圖吧,比較直接。說明:值用=表示,指針用:表示,雙重指針用::表示
16、長為N的字符串中匹配長度為M的子串的算法復雜度是多少?(B)
O(N)
O(M+N)
O(N+logM)
(M+logN)
17、實時操作系統的基本特性有?(AB)
提供高可靠性
提供及時響應性
提供多路性:即眾多聯機用戶可以同時使用同一臺計算機
提供獨占性:各終端用戶感覺到自己獨占了計算機
解析:
在特定時間內完成特定的任務,實時性與可靠性。
所謂“實時操作系統”,實際上是指操作系統工作時,其各種資源可以根據需要隨時進行動態分配。由于各種資源可以進行動態分配,因此其處理事務的能力較強、速度較快。 應該說,實時操作系統是在早期的操作系統基礎上發展起來的,早期的操作系統的各種資源都是事先已經分配好的,工作期間這些資源不能再重新進行分配。因此其處理事務的能力較差、速度較慢,現在則稱之為“非實時操作系統”。但“非實時操作系統”誕生時,其功能、性能等在當時也是非常強的,人們在未認識到更好的操作系統之前并不將其這樣稱呼。將來如果新的、功能更強的、實時性能更高的操作系統出現,也許現在稱之為“實時”的操作系統則可能將讓位于新的“實時操作系統”了。從這方面講“實時操作系統”是一個相對的概念的
18、軟件測試計劃評審會需要哪些人員參加?(ABCD)
項目經理
SQA 負責人
配置負責人
測試組
解析:
軟件測試計劃評審會需要有 項目經理、客戶(可選)、配置管理員、測試經理、開發組長等人的參加。
19、下面對路由器的描述正確的是(交換機指二層交換機)(ADE )
相對于交換機和網橋來說,路由器具有更加復雜的功能
相對于交換機和網橋來說,路由器具有更低的延遲
相對于交換機和網橋來說,路由器可以提供更大的帶寬和數據轉發功能
路由器可以實現不同子網之間的通信,交換機和網橋不能
路由器可以實現虛擬局域網之間的通信,交換機和網橋不能
解析:
A,路由器工作在網絡層,交換機工作在鏈路層,路由器具有交換機的全部功能,更復雜
B,錯誤,設備更復雜則延時更大。因為需要維護路由表
C,錯誤,交換機可以提供更大的帶寬和數據轉發功能
D,正確。路由器可以構建一個局域網,交換機鎖連接的是同一個局域網內的主機
E,正確。路由器可以構建VLAN,二層交換機不能
20、請描述http請求get和post的區別,下面描述正確的有:(CD)
GET用于信息獲取,而且應該是安全的和冪等的,POST表示可能修改變服務器上的資源的請求
POST比GET安全,因為采用了SSL加密
GET方式提交的數據最多只能是1024字節,理論上POST沒有限制,可傳較大量的數據
POST提交,把提交的數據放置在是HTTP包的包體中,GET提交的數據會在地址欄中顯示出來
總結
- 上一篇: 部分真题整理3
- 下一篇: 剑指offer 算法 (分解让复杂问题简