很奇怪,一道邏輯題都沒有。而且題量不大,難度僅是稍稍大點,不過一些地方是埋有地雷的,做題要小心呀。記錄了幾道涉及到自己知識盲點的題目。俺相信隨著自己的積累,一定會釣到一條大魚滴!加油!菜鳥們共勉啊~~
一、選擇題:
1.求函數輸出
class A{public:int m_a;A():m_a(0){cout << "A" << endl;}};class B : public A{public:int m_a;B():m_a(2){cout << "B" << endl;}};int main(){A * a = new B();cout << sizeof(B) << endl;cout << a->m_a << endl;}
答案是 A B 8 0。分析:子類將父類的資料成員繼承下來了。另外sizeof(a) = 4, 當由一個基類指標指向一個子類對象時,此指標只可訪問到父類的成員變數。
2.涉及到這幾個欄位。需要瞭解。在TCP層,有個FLAGS欄位,這個欄位有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG.
其中,對於我們日常的分析有用的就是前面的五個欄位。
它們的含義是:
SYN表示建立串連,FIN表示關閉串連,ACK表示響應,PSH表示有 DATA資料轉送,RST表示串連重設。
其中,ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立串連之後的響應,
如果只是單個的一個SYN,它表示的只是建立串連。
TCP的幾次握手就是通過這樣的ACK表現出來的。
但SYN與FIN是不會同時為1的,因為前者表示的是建立串連,而後者表示的是中斷連線。
RST一般是在FIN之後才會出現為1的情況,表示的是串連重設。
一般地,當出現FIN包或RST包時,我們便認為用戶端與伺服器端斷開了串連;而當出現SYN和SYN+ACK包時,我們認為用戶端與伺服器建立了一個串連。
PSH為1的情況,一般只出現在 DATA內容不為0的包中,也就是說PSH為1表示的是有真正的TCP資料包內容被傳遞。
TCP的串連建立和串連關閉,都是通過請求-響應的模式完成的。
概念補充-TCP三向交握:
TCP(Transmission Control Protocol)傳輸控制通訊協定
TCP是主機對主機層的傳輸控制通訊協定,提供可靠的串連服務,採用三向交握確認建立一個串連:
位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重設) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)
第一次握手:主機A發送位碼為syn=1,隨機產生seq number=1234567的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機;
第二次握手:主機B收到請求後要確認聯機資訊,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;
第三向交握:主機A收到後檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則串連建立成功。
完成三向交握,主機A與主機B開始傳送資料。
3.win32 x86機器,輸出什麼
union U{ char a; int b; double c;};struct A{ char b; U a; };int main(){ cout << sizeof(A) << endl;}
答案是16.選項中沒有這一項。只有8,12等等,只得選了8。 須記住sizeof(double) = 8。
4.運算元包含在指令中的定址方式:立即定址。立即定址中的立即數是指令的一部份,儲存在程式碼片段,執行是不用去取資料區段中的資料。例如:MOV AX,10H,採用的是立即數定址方式,這條指令(包含運算元AX和10H)被彙編器編譯成一條機器代碼,此指令執行前被載入到指令緩衝隊列裡,執行時CPU在讀取此機器代碼時就讀取了10H,10H立即就可以被送往AX(而不用到寄存器或者記憶體中去取運算元),因此叫做立即數定址,指令執行效率最高。
5.RAID0,1,2,5,10穩定性比較?
(RAID, Redundant Array ofInexpensive
Disks)簡稱硬碟陣列,其基本思想就是把多個相對便宜的硬碟組合起來,成為一個硬碟陣列組,使效能達到甚至超過一個價格昂貴、容量巨大的硬碟。 越往後越穩定,0最不穩定。其中RAID10指的是RAID 1+0不是十。
6.HTML中用哪條語句表示超級連結。
HTML用<a>來表示超連結,英文叫anchor。
<a>可以指向任何一個檔案源:一個HTML網頁,一個圖片,一個影視檔案等。用法如下:
<a href="url">連結的顯示文字</a>
點擊<a></a>當中的內容,即可開啟一個連結檔案,href屬性則表示這個連結檔案的路徑。
比如連結到blabla.cn網站首頁,就可以這樣表示:
<a href="url">連結的顯示文字</a>
7.使前一條命令的輸出作為後一條命令的輸入,這是哪種命令方式:A.輸入重新導向;B輸出重新導向;C管道 答案:C.
二、填空題:
1.C++中四種類型轉換符?const_cast, static_cast, reinterpret_cast,dynamic_cast.
分別對應的例子如下:
i)const_cast
char * string_copy(char * s){return s;}int main(){const char * pc_str = new char;//char * pc = string_copy(pc_str); //如直接傳入pc_str則編譯錯誤char * pc = string_copy(const_cast<char*>(pc_str));if(pc_str == pc)cout << "hello" << endl;return 0;}
運行後,輸出hello
ii)static_cast
int main(){double d = 12;void * p = &d; //cout << *p << endl; //報錯:must be a pointer to a complete object type.double * pd = static_cast<double *>(p);cout << *pd << endl;}
運行後,輸出12.
iii)reinterpret_cast
int main(){int * ip = new int;char * pc = reinterpret_cast<char * >(ip);string str(pc);//string(ip); // 報錯,類型不符合。}
可以正常運行。以上這個例子只明白意思就可以了。例子不好。
iv)dynamic_cast
class A{public:virtual void print() const{cout <<"A\n";}};class B{public:virtual void print() const {cout<< "B\n";}};class C:public A, public B{public:void print() const {cout << "C\n";}};int main(){A * a = new A;B * b = new B;C * c = new C;a->print(); b->print(); c->print();b = dynamic_cast<B*>(a); if(b)b->print();elsecout << "no B\n";a = c;a->print();b = dynamic_cast<B*>(a);if(b)b->print();elsecout << "no B\n";b = dynamic_cast<B*>(c);if(c)b->print();elsecout << "no B\n";}
運行後,輸出
A
B
C
no B
C
C
C
還是國外的例子更給力。
2.pM是某塊可用記憶體的首地址,如果希望A類的對象分配到這塊記憶體,需要如何?? pM = new A();
3.關於Bit-map。其中, 將第n bit置位,char b[Len]; if( n < LEN) b[n] |= ?; 1.
三、大題:
一副撲克牌54張,用1-54編號,請設計一個演算法使得這些牌序被隨機打亂。完美排序看起來不錯。不過現在還沒搞懂。。。 有點難度!