試題總結1

1.tcp斷開鏈接爲何要四次握手,若是沒有四次將會有什麼隱患?
TCP創建鏈接要進行3次握手,而斷開鏈接要進行4次,這是因爲TCP的半關閉形成的,由於TCP鏈接是全雙工的(即數據可在兩個方向上同時傳遞)因此進行關閉時每一個方向上都要單獨進行關閉,這個單方向的關閉就叫半關閉.關閉的方法是一方完成它的數據傳輸後,就發送一個FIN來向另外一方通告將要終止這個方向的鏈接.當一端收到一個FIN,它必須通知應用層TCP鏈接已終止了這個方向的數據傳送,發送FIN一般是應用層進行關閉的結果.

2.開機啓動流程


3.重定向和追加劇定向是怎麼實現的?
linux啓動後,會默認打開3個文件描述符,分別是:標準輸入standard input 0,正確輸出standard output 1,錯誤輸出:error output 2
之後打開文件後。新增文件綁定描述符能夠依次增長。 一條shell命令執行,都會繼承父進程的文件描述符。所以,全部運行的shell命令,都會有默認3個文件描述符。

linux

四、Arp的工做原理,若是沒在一個局域網,是怎麼實現的?算法

五、Linux由那幾個子系統組成?shell

六、文件系統如何找到存取文件的?數據庫

七、DNS的解析過程,好比給你一個域名www.baidu.com,那解析www.baidu.com和baidu.com有什麼不一樣?編程

八、給你一個數組,怎麼找出數組中某一個數超過了數組長度的一半?數組

九、談到備份的項目,講lsyncd內部是什麼實現實時同步?瀏覽器

十、考一個權限的問題,好比755表明什麼意思?服務器

十一、若是某一天網站流量增長了十幾倍,你該如何分析這個問題?怎麼解決?網絡

十二、你有用什麼開發語言作過什麼項目,最長代碼有多少?講解一下它的主要功能和實現?多線程

12,對運維的理解?

1三、大學期間暈倒的最難的問題是什麼?怎麼解決的?

 

補充

一、簡述Apache兩種工做模式,以及它們之間的區別
線程模式(worker)與進程模式(prefork)的區別
(1)prefork採用預派生子進程方式,用單獨的子進程來處理 不一樣的請求,進程之間彼此獨立。它使用多個子進程,每一個子進程只有一個線程。進程模式性能較穩定,可是系統開銷大於線程模式。
(2)worker全新的支持多線程和多進程混合模型的多路處理模塊(MPM) .它使用多個子進程,每一個子進程有多個線程。系統開銷小於進程模式(內存使用比較prefork小得多),適用於高流量的HTTP服務器。缺點是假如一個線程崩潰,整個進程就會連同其任何線程一塊兒"死掉".
(3)woker和prefork的切換,cd /usr/sbin ,mv httpd httpd.prefork,mv httpd.worker httpd,service http restart

二、用iptables添加一個規則容許192.168.0.123訪問本機3306端口
iptables -I INPUT -p tcp -s 192.168.0.123 -d 127.0.0.1 --dport 3306 -j ACCEPT

三、如何對一臺Linux服務器進行系統性能調優,列舉出參數


一,選擇題1,在32位機器中,如下結構體佔用多少字節(考察結構體對齊規則)(B)struct { char a; double b; int c; short d;};A.24 B.20 C.18 D.以上都不對2.網絡協議採用()的方式來傳輸數據,在此字節序下,從低地址到高地址0x12345678的表示形式爲____。(B)A.big_endian, 0x78 56 34 12B.big_endian, 0x12 34 56 78C.little_endian, 0x78 56 34D.little_endian, 0x12 34 56 783.上網時候發現網頁不能訪問,QQ使用正常,出現此問題可能的緣由是(C)A.網線的問題 B.IP地址衝突 C.DNS問題 D.網關錯誤4.某系統中一個組件的某個函數中,有一個變量沒有正確初始化,在(A)階段最可能發現問題。A.單元測試 B.集成測試 C.確認測試 D.系統測試5.一個棧的入棧序列是ABCDE,則棧的不可能輸出序列是(B)A.DECBA B.ADEBC C.EDCBA D.ABCDE6.已知一棵二叉樹,若是線序遍歷的節點順序是ABDCGEF,中序遍歷是DBCGAEF,後序遍歷結果爲(C)A.CFHGEBDA B.CDFEGHBA C.DGCBFEA D.CFHGEDBA7.執行如下語句的結果是(C) int a[2][3] = {0,1,2,3,4,5}; int *b = a[1]; *b = 6; b = a[0]; for(int i=0;i<6;++i) { printf("%d",b[i]); }A.012345 B.062345 C.012645 D.編譯出錯8.進程調度是從(A)選擇一個進程投入運行。A.就緒隊列 B.等待隊列 C.做業後備隊列 D.提交隊列9.下列關於類和對象的敘述中,錯誤的是(A)A.一個類只能有一個對象B.對象時類的具體實例C.類是對某一類對象的抽象D.類和對象的關係是一種數據類型與變量的關係10.若是存在一個基本有序的序列,按照哪一種排序方式最快(D)A.快速排序 B.冒泡排序 C.歸併排序 D.插入排序11.在一個單鏈表中,已知指針q指向的節點是指針p所指結點的前驅節點,若是q和p之間插入s節點,則執行(C)A.s->next=p->next;p->next=s; B.p->next=s->next;s->next=p;C.q->next=s;s->next=p; D.p->next=s;s->next=q;12.25匹馬,五條賽道,一匹馬一條賽道,求決勝跑得最快的1,2,3名,至少(C)次A.9 B.8 C.7 D.613.進程間通訊方式有(多選)(ABC)A.管道 B.信號量 C.socket D.互斥鎖14.下面哪些協議屬於TCP/IP模型的傳輸層(多選)(CE)A.HTTP B.POP3 C.TCP D.IPX E.UDP F.HDLC15.多線程同步機制包括(多選)(ABD)A.critical section B.semaphoreC.pipe D.mutex二.填空題1.請寫出下面二叉樹的後序遍歷節點順序(DFGEBIHCA) 2.linux進程的三種狀態是(就緒)(運行)(阻塞)。3.瀏覽器訪問某頁面,HTTP協議返回狀態碼403表示(服務器接受請求,可是被拒絕處理)。4.快速排序在序列已經有序的狀況下的複雜度是(O(n^2))。5.設數組定義爲a[50][70],每一個元素佔2個存儲單位,數組按照列優先存儲,元素a[0][0]地址爲1024,那麼元素a[32][58]的地址爲(1024+2*31*70+2*58=5480)。三,編程題1. 給定一個整數序列,取出其中第二大的數,要求不對整個序列排序。要求:a.語言爲C/C++/Java b.自定義函數原型和輸入輸出 c.符合相關語言的編碼規範解題代碼:void getSecondNum(int *a, int len)//傳入整型數組a及其長度len{ int i=0,j=0,maxindex=0,max=a[0]; int b[len]; for(i=0;i<len;++i)//爲了避免改變原數組,將a數組複製到b數組 b[i]=a[i]; for(i=0;i<2;++i) { //一共兩次外循環,第一次循環刪除最大值,第二次得到的即爲所求第二大的數字 max=b[0]; for(j=0;j<len;++j) if(max<b[j]) { max=b[j]; maxindex=j; } b[maxindex]=-65535;//將最大值修改成一個很是小的負數 } printf("第二大的數字爲:%d\n",max); return;}測試:int main(void){ int a[10]={1,2,3,4,7,8,-33,-99,100,101}; int len=sizeof(a)/sizeof(int); getSecondNum(a,len);}2. 給你一個單詞a,若是經過交換單詞中字母的順序能夠獲得另外的單詞b,那麼定義b是a的兄弟單詞,如今給你一個字典,用戶輸入一個單詞,讓你根據字典找出這個單詞有多少兄弟單詞。請給出算法思路和僞代碼實現。思路:1.計算給定單詞a的長度len,從字典中獲取長度爲len的全部單詞,以後b單詞就遍歷此次獲取到的全部單詞,並分別和原單詞a比較。2.定義一個函數part,統計傳入單詞中的各個字母的個數,分別存入一個長度爲26的整型數組(如a[1]就對應字母b的個數,a[25]就對應字母z的個數),大概就是個桶排序的思路。3.比較單詞a和單詞b用part函數得出的結果,若是對應的字母個數都是同樣的,則說明單詞a和單詞b是兄弟單詞,同時,統計兄弟單詞個數的變量count自增一便可。3. 輸入爲一個小寫字母(a-z)組成的字符串,請編寫一個字符串壓縮程序,將字符串中連續出現的重複字母進行壓縮,並輸出壓縮後的字符串。好比,hello通過壓縮後變成he2lo,wwwabc壓縮後變成3wabc。要求:a.語言爲C/C++/Java b.自定義函數原型和輸入輸出 c.符合相關語言的編碼規範解題代碼:void compressString(char *a,int len)//傳入字符串a和a長度len{ char c; int i=0,j=0,skip=1; while(i<len) { c=a[i]; for(j=i+1;j<len-i-1;++j) { if(a[j]==c) ++skip; else break; } if(skip != 1)//若是本次向後探索,發現相同的字母,則打印個數和字母 printf("%d%c",skip,c); else//若是本次向後探索,沒有發現相同的字母,則僅打印字母 printf("%c",c); i+=skip; skip=1; } printf("\n"); return;}附加題:某電商作活動,共有50萬臺ipone,用戶(user)可用1000我的積分(point)兌換一臺ipone,且每人限換一臺。請設計一套接口並實現下單邏輯。參考(但不侷限於)下面的下單邏輯:A. 建立訂單B. 扣減用戶積分C. 扣減ipone庫存D. 下單成功同時請回答:A. 數據庫表結構如何設計?有哪些表?分別有什麼做用?B. 下單過程當中哪些地方可能成爲瓶頸?如何解決或改善?C. 是否會用到數據庫事務,哪些地方會用到?若是不用數據庫事務,如何保證數據的一致性這個涉及到接口的設計(開發),還有數據庫(DBA),系統瓶頸(運維)等多方面的知識,可能考查的就是你對哪些方面的知識更精通,也就是考查你的知識面,開放性題目,這裏我就不寫本身的答案了。注:本人知識有限,不必定都對,敬請指正。

相關文章
相關標籤/搜索