聯想網域星雲面試總結

1 首先是自定義宏:比較大小 #ifdefine  MAX(a,b) ((a)> (b) ? (a):(b))

2關於a的定義:

int a;

1) int *a; 一個指向整型數的指針(A pointer to an integer)

2) int **a;一個指向指針的的指針,它指向的指針是指向一個整型數(A pointer to   

a   pointer to an integer) 

3) int *a[10] 一個有10個指針的數組,該指針是指向一個整型數的(An array of 10pointers to integers)
4) int (*a)[10]一個指向有10個整型數數組的指針(A pointer to an array of 10 integers)
5) int (*a)(int); 一個指向函數的指針,該函數有一個整型參數並返回一個整型數(A   pointer to a function that takes an integer as an argument andreturns an integer)

6)int (*a[10])(int);一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數( An array of ten pointers to functions that take an integer argument and return an integer )

3 之後就是程序輸出題

忘了。但是有關於那個傳地址,然後輸出是不是空的那個經典題。。

4 問數據一些東西:什麼是索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構!

單索引:一個索引只有一個列

複合索引:一個索引有多個列

這裏並不是複合索引就比單索引速度快,有時複合索引的比較需要佔更多的系統資源,但是查找範圍更廣!

什麼是數據庫的主鍵:

	主關鍵字(主鍵,primary key)是被挑選出來,作表的行的惟一標識的候選關鍵字。一個表只有一個主關鍵字。主關鍵字又可以稱爲主鍵。 主鍵	可以由一個字段,也可以由多個字段組成,分別成爲單字段主鍵或多字段主鍵。 
	作用 
	1)保證實體的完整性; 
	2)加快數據庫的操作速度 
	3) 在表中添加新記錄時,ACCESS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重複。 
	4) ACCESS自動按主鍵值的順序顯示錶中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示錶中的記錄。 
5	進程和線程的區別:

首先每個程序都有一個進程,每個進程都有一個線程!

         線程的劃分尺度小於進程,所以多線程的併發性較高。。

         進城擁有獨立的內存單元,而線程共享內存單元。

總體來講:進程和線程的主要差別在於它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程。

6 TCP/IP的七層模型

物理層,數據鏈路層,網絡層,傳輸層,表示層,會話層,應用程!

什麼是三次握手:

	第一次
  	第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。

	第二次
  第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

	第三次
  第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
7   堆和棧的區別
	1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。
2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表。
	申請和管理方式不同!
	還有就是先進先出,棧先進後出!
8	寫一個簡單服務器僞代碼,客戶端通信之後返回服務器的時間。。。。要求使用select函數
	這裏主要說明一下select函數式非阻塞函數,也就是說該函數不論是不是返回都執行,如果返回-1錯誤,如果是0繼續,那麼while(1)循環,如果返回
	直接server
	
	main() 

    int sock; 
    FILE *fp; 
    struct fd_set fds; 
    time_t  local_time;
    struct timeval timeout={3,0}; //select等待3秒,3秒輪詢,要非阻塞就置0 
    char buffer[256]={0}; //256字節的接收緩衝區 
    /* 假定已經建立UDP連接,具體過程不寫,簡單,當然TCP也同理,主機ip和port都已經給定,要寫的文件已經打開 
    sock=socket(...); 
    bind(...); 
    fp=fopen(...); */ 
    while(1) 
   { 
        FD_ZERO(&fds); //每次循環都要清空集合,否則不能檢測描述符變化 
        FD_SET(sock,&fds); //添加描述符 
        FD_SET(fp,&fds); //同上 
        maxfdp=sock>fp?sock+1:fp+1;    //描述符最大值加1 
        switch(select(maxfdp,&fds,&fds,NULL,&timeout))   //select使用 
        { 
            case -1: exit(-1);break; //select錯誤,退出程序 
            case 0:break; //再次輪詢 
            default: 
                  if(FD_ISSET(sock,&fds)) //測試sock是否可讀,即是否網絡上有數據 
                  { 
                        recvfrom(sock,buffer,256,.....);//接受網絡數據 
			//不論什麼都返回本地時間。。。。
			{
				讀取本地時間,並且寫入buffer;
				local_time = time(NULL);
				memset(buffer,0,256);
				strncpy(buffer,ctime(&local_time),250);
			}
                        if(FD_ISSET(fp,&fds)) //測試文件是否可寫 
                            fwrite(fp,buffer...);//寫入文件 
                         buffer清空; 
                   }// end if break; 
          }// end switch 
     }//end while 
}//end main 
這裏主要講述非阻塞函數和阻塞函數。。都不是很難。。。
然後就是做過的項目,一定要說清楚。。這塊纔是最重要的




發佈了46 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章