也有段時間沒有整理面試題目了,這幾天呢,完成了2場實習生和1場校招,十分鬱悶,爲何金融運維一點都不關注技術,在意個人學校成績,我尼瑪想說,學校那麼水的課程能說明什麼,跟技術有一丁丁點關係嗎?我學業成績很差,就可否定個人專業崗位基礎不行嗎?唉,勞資想說,你若是質疑個人能力,你就問我,勞資要是被你虐卻是我算我輸,學藝不精我就服,看過去有球用。php
這輩子職業生涯都不想進外包和IDC這兩種類型的公司,就是TM打雜的,薪資還低,關鍵是不厚道,好比垃圾勝藍。這回校招那家是我以前就提到的那家,大多數人對我是承認的,就是個人學校成績太難看,有點危險啊,還在等消息,但願不被發現我就進入巔峯的軌道了。反正,時時刻刻都要抱着以面試形式的姿態來學習,由於有可能分分鐘就丟掉了飯碗。後續我會整理人事面題目,一是以備本身使用,包括將來十年內跳槽、被炒魷魚後再求職都是這樣的套路問題,之後想用了,直接拿來看看就是了,二來呢,分享給你們,作個好人,不過我會以我自身的口吻描述和回答,各位看官笑笑就好。html
莫要中止向前啊,否則分分鐘被淘汰的節奏。網絡、數據庫、Linux運維、Develops,內容不要太多,可是能瞭解多少就學多少吧,接下來我要更注重操做了。
前端
一、什麼是關係型數據庫?什麼是非關係型數據庫?他們之間有何優點和區別?
答:(1)關係型數據庫:創建在關係模型基礎上的數據庫,是一張擁有關係名稱的二維表,關係模型由關係數據結構、操做集合、完整性約束三部分組成。如Mysql和Oracle。
非關係型數據庫:一種鍵值對形式存儲的數據結構,雖然它的速度很是快,但基本上只能經過鍵的徹底一致查詢獲取數據。如Mongodb和
Redis。
(2)SQL優點:支持事務(保證數據的一致性)、支持多表複合查詢。
(3)NOSQL優點:擅長大量數據的寫入處理,適合字段不固定的應用。
參考文檔:http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html
二、若是有一天,你發現主從不一樣步,你咋辦?(生產環境太難辦了)
答:經過安裝pt-table-checksum軟件來檢查主從一致性,或者在從機上show slave status \G查看SQL線程和IO線程是否Yes
(不太準確)。
解決:分析是IO線程不一樣步仍是SQL線程不一樣步,首先是分析Mysql的日誌狀況,通常狀況下的是
(1)跳過錯誤執行同步。set global sql_slave_skip_counter =1;
(2)從主庫上拷貝數據到從機上,而後進行導入,最後從新指定master的binlog文件和位置,從新進行主從複製同步。
參考文檔:(pt-table-checksum的安裝)http://mrxiong.blog.51cto.com/287318/1651349/
(主從不一樣步解決步驟)http://www.cnblogs.com/lixiansen/p/5667340.html
三、top和ps命令在進程佔有資源率的統計方式有什麼不一樣?(別看這些細節還很差說清楚)
答:(1)top命令是實時動態監控進程所佔資源的狀況,包括內存、CPU、以及進程運行的狀態;而ps命令是顯示執行命令的這一時刻的全部進程運行狀況。
(2)top命令更全面一些,記錄當前系統時間,平均負載狀況,以及交換分區狀況。
四、硬連接有什麼用?
答:由於在linux系統中經過硬連接刪除大文件速度會很快。
五、初學者在Linux系統的開機啓動項如何選擇?
答:建議選擇六個開機啓動項:
①crond:該服務用於週期地執行系統及用戶配置的計劃任務。有要週期性執行的任務計劃須要開啓
②iptables: iptables包過濾防火牆,有外網IP時,考慮開啓。
③network: 啓動系統時,若想激活/關閉啓動時的各個網絡接口,則應(必須)考慮開啓。
④sshd: 遠程鏈接Linux服務器時須要用到這個服務程序,因此必需要開啓,不然將沒法遠程鏈接到Linux服務器。
⑤rsyslogd:是操做系統提供的一種機制,系統的守護程序一般會使用rsyslog將各類信息收集寫入到系統日誌文件中,CentOS6之前此服務的名字爲syslog。
⑥sysstat:包含監測系統性能及效率的一組工具,好比CPU使用率、硬盤和網絡吞吐數據等,這些數據的分析,有利於判斷系統運行是否正常。
參考文檔:http://ccyypoint2008.blog.51cto.com/5602714/1763539
六、詳述iptales工做流程以及規則過濾順序?(這個問題一時很差回答,沒見過這種問問題的方式)
答:工做流程:本地網卡收到源端發過來的數據幀,根據四表五鏈的規則,進行匹配轉發或者丟棄。
過濾順序:iptables執行規則時,是從從規則表中從上至下順序執行的,若是沒遇到匹配的規則,就一條一條往下執行,若是遇到匹配的規則後,那麼就執行本規則,執行後根據本規則的動做(accept, reject, log等),決定下一步執行的狀況,後續執行通常有三種狀況。
(1)一種是繼續執行當前規則隊列內的下一條規則。好比執行過Filter隊列內的LOG後,還會執行Filter隊列內的下一條規則。
(2)一種是停止當前規則隊列的執行,轉到下一條規則隊列。好比從執行過accept後就中斷Filter隊列內其它規則,跳到nat隊列規則去執行
(3)一種是停止全部規則隊列的執行。
參考文檔:http://www.educity.cn/linux/515608.html
七、如何解釋iptables的四表五鏈?每一個表有哪幾個鏈(看圖說話纔好懂,真拓麻難記啊)
答:NAT表:用來作地址轉換的(PREROUTING/OUTPUT/POSTROUTIONG);
filter用來過濾的(INPUT/FORWARD/OUTPUT);
mangle:修改數據包格式的(五條鏈都有);
raw:(OUTPUT、PREROUTING)設置raw時通常是爲了避免再讓iptables作數據包的連接跟蹤處理,提升性能
PREROUTING:數據包進入路由表以前,用DNAT目的地址替換動做
INPUT:經過路由表後目的地爲本機
FORWARDING:經過路由表後,目的地不爲本機
OUTPUT:由本機產生,向外轉發
POSTROUTIONG:離開路由表以後,用於SNAT源地址替換動做
4個表的優先級由高到低的順序爲:raw-->mangle-->nat-->filter,若是PRROUTING鏈上,即有mangle表,也有nat表,那麼先由mangle處理,而後由nat表處理
參考文檔:http://www.360doc.com/content/11/0506/09/706976_114731108.shtml
八、如何使在命令行執行的 iptables 規則永久生效?
答:service iptables save 是臨時生效
(1)將規則寫入到/etc/sysconfig/iptables中。
(2)將規則寫入到/etc/rc.local中
九、linux 服務器突然變成只讀文件系統,是什麼狀況?(這個問題好像常常被考呀)
答:(1)檢查一下文件權限,從新掛載一下根分區,mount -o rw,remount /
(2)用mount命令查看已經掛載的文件系統,有何異常,若是有文件系統是隻讀的,建議卸載umount -l /dev/sr0(list label)
(3)可能Inode已經使用完了,雖然磁盤還有空間可是無法去寫文件了,用df -hi 參數查看一下。必須刪除小文件才行結合find。
(4)最差的選擇,用光盤引導進入,進入Linux rescue救援模式,進行fsck.ext4 -y /dev/sda進行文件修復,可是要以前備份好
文件,不然可能會產生災難。
參考文檔:http://blog.csdn.net/ablo_zhou/article/details/5530826/
十、爲何要整合apache和tomcat?
答:(1)爲了動靜分離客戶端發出來的請求。tomcat自己做爲web服務器能夠處理靜態內容,可是即要處理靜態資源和又要處理動態資源對tomcat服務器的處理壓力巨大。
(2)tomcat應用程序服務器對rewrite重定向規則、expires瀏覽器緩存、gzip傳輸壓縮等功能支持不夠好。
十一、shell中"."和"source"有什麼區別?
答:」.「 是新產生一個shell進程,而後執行相應的腳本
source是在當前shell下執行,再也不啓用其它shell。
十二、一主多從環境下,主機器down掉以後,選擇哪臺slave做爲新主?(唉,終於知道他想問什麼呢?)
答:選擇中繼的日誌偏移量最大的做爲新主。對比選擇Relay_Master_Log_File,Exec_Master_Log_Pos最大的做爲新的主庫,這裏咱們選擇slave1爲新的主庫,其實若是兩個從IO線程一直都是正常,沒有落後於主,且relaylog都已經重放完成,兩個從是同樣的,選擇哪一個均可以。也能使用keepalived高可用軟件實現自動的故障切換。
參考文檔:http://wenku.baidu.com/link?url=6HbE86_8JasiUAd6aJmgSa005KRAomGW3QVWZaEODsh_1jNqKTQazQlhxnaRTqJb_e4-8A9O5T_xIVhM8sSTP0TpJtKGXoCvVkq4mZ6iNm3
1三、mysql主從的物理特性是什麼?(我日啊,如今纔想起來當時思必馳技術總監想問啥意思)
答:保證數據的一致性和完整性。可是數據一致是在創建主從關係之後,主建立的數據纔會被傳入到從機器上面,在這以前的數據,只能進行手工導入(就這麼簡單吧,我都想不起來,唉,難怪我失業呀)
參考文檔:http://blog.chinaunix.net/uid-20639775-id-3254611.html
1四、說說讀寫分離是怎麼一回事?
答:(1)讀寫分離簡單的說是把對數據庫讀和寫的操做分開對應不一樣的數據庫服務器,這樣能有效地減輕數據庫處理壓力,也能減輕磁盤io壓力。主數據庫提供寫操做,從數據庫提供讀操做,其實在不少系統中,主要是讀的操做。當主數據庫進行寫操做時,數據要同步到從機器上面,這樣纔能有效保證數據庫完整性。
(2)使用mysql-proxy做爲讀寫分離的軟件,mysql-proxy的4040端口負責監聽前端應用程序發過來的請求,mysql-proxy自己並
不負責讀和寫的任務,僅僅是充當SQL路由的角色,將寫操做發生master上面,將讀操做發生在從服務器集羣的某個節點上面。這種設計可以很大程度上減輕mysql實例的CPU使用率高居不下的情形下。
1五、主從複製中有master,slave1,slave2,...等等這麼多MYSQL數據庫,那好比一個JAVA WEB應用到底應該鏈接哪一個數據庫?(這個問題我應該思考不少次了吧,只能說理論很簡單,實施實驗沒一天是完成不了的,還不是運維能作的是事情)
答:固然,咱們在應用程序中能夠這樣,insert/delete/update這些更新數據庫的操做,用connection(for master)進行操做,select用connection(for slaves進行操做。那咱們的應用程序還要完成怎麼從slaves選擇一個來執行select,
例如簡單的輪循算法。這樣的話,至關於應用程序完成了SQL語句的路由,並且與MYSQL的主從複製架構很是關聯,一旦master掛了,某些slave掛了,那麼應用程序就要修改了。能不能讓應用程序與MYSQL的主從複製架構沒有什麼太多關係呢?
找一個組件,application program只須要與它打交道,用它來完成MYSQL的代理,實現SQL語句的路由。
mysql proxy並不負責,怎麼從衆多的slaves挑一個?能夠交給另外一個組件(好比haproxy)來完成。這就是所謂的MYSQL READ WRITE SPLITE,MYSQL的讀寫分離。
參考文檔:http://biweili.blog.51cto.com/4234993/1839448
1六、請從一個運維的角度(非開發),窮盡全部思路,對數據庫服務器進行優化?(之因此這麼問,是避免回答說些SQL語句優化,可能不是運維面試官想聽的答案,開發大佬會接受)
答:(1)老思路,從硬件上改變是最給力,使用固態硬盤作RAID陣列(多是RAID 1+0),提升磁盤的IO能力
(2)根據業務邏輯,對數據庫進行分庫分表,是減輕對海量數據的讀寫壓力(不要說是提升讀寫能力)
(3)分佈式集羣,以mysql-proxy和ameoba爲首的讀寫分離方案
(4)搭建一臺Memcached服務器,用來對查詢頻繁的數據進行緩存,減輕後端服務器的讀壓力
(5)配置文件中對參數的優化,好比最大併發鏈接數、鏈接超時時間、表緩存和索引緩存。
1七、Nginx與Fastcgi整合的原理?
答:Nginx不支持對外部程序的直接調用或者解析,全部的外部程序(包括PHP)必須經過FastCGI接口來調用。FastCGI接口在Linux下是socket,(這個socket能夠是文件socket,也能夠是ip socket)。爲了調用CGI程序,還須要一個FastCGI的wrapper(wrapper能夠理解爲用於啓動另外一個程序的程序),這個wrapper綁定在某個固定socket上,如端口或者文件socket。當Nginx將CGI請求發送給這個socket的時候,經過FastCGI接口,wrapper接納到請求,而後派生出一個新的線程,這個線程調用解釋器或者外部程序處理腳本並讀取返回數據;接着,wrapper再將返回的數據經過FastCGI接口,沿着固定的socket傳遞給Nginx;最後,Nginx將返回的數據發送給客戶端,這就是Nginx+FastCGI的整個運做過程
http://blog.csdn.net/sunnyzhangwenhan/article/details/8833296
1八、進程的運行類型有哪幾種?有何區別。
答:standalone和xinetd。(1)standalone稱爲獨立運行模式,而xinetd稱爲超級模式,它是基於父進程啓動的。
(2)apache服務就是這樣的運行模式,standalone是啓動一次而後監聽全部的鏈接,而xinetd接到客戶端的鏈接請求才啓動,隨着鏈接的結束進程也相應結束。
1九、若是Apache服務器只容許192.168.1.1來訪問,不容許其餘人訪問,該怎麼設置?
答:在配置文件httpd.conf中,vim httpd.conf
-------------------------
<Directory /> ##用於定義URI的訪問控制屬性
Order deny,allow ##此處不區分大小寫也行的,此處allow和deny的順序不能反着來
deny from all
allow from 192.169.1.1
</Directory>
----------------------
20、Nginx+Fastcgi的工做原理?(這裏漏掉了wrapper派生線程的說法)
答:(1)Nginx服務器監聽在80端口。
(2)客戶端與服務端創建TCP三次握手,然後,鏈接創建成功,能夠傳輸數據了。
(3)客戶端發出http請求報文,web服務器收到該請求報文會根據URI判斷是不是動態請求,若是是動態請求,那麼web服務器會經過進程通訊找到fastcgi接口,這裏的接口能夠理解爲套接字。
(4)然後,fastcgi接口經過cgi協議將動態請求交給分離式的PHP-FPM進程池進行處理,PHP進程可能會讀取後臺的數據庫,他們之間經過
一種驅動進行通訊。
(5)PHP解釋器(php.ini)解釋執行完畢以後,先把處理結果發送給web服務器,然後web服務器封裝http應答報文返回給客戶端。
(6)客戶端的瀏覽器進行解析,就能獲得想要的頁面了。
參考文檔:http://www.cnblogs.com/mangguoxiansheng/p/5967745.html
2一、什麼叫作解釋執行?
答:(1)由高級語言編譯成一種中間語言,然後中間語言能夠在不一樣平臺上再次進行編譯成爲可執行的程序。
(2)讀取一行就向計算機的CPU提交一行,然後再讀取一行再提交一行,執行效率有點低下。
2二、NFS與FTP還有Samba之間有何區別?(我以爲這種問題實在太愚蠢了,他們徹底不一樣,打不到一竿子上去)
答:(1)NFS是網絡文件系統,用於Linux或Unix之間共享文件,基於C/S模式,服務端共享出來,客戶端再掛載在本地,有基於TCP傳輸的,也有
基於UDP傳輸的,NFS基於IP地址共享不夠安全。
(2)FTP是一種文件傳輸協議,用於上傳或下載,服務端的數據端口默認是20,控制端口是21,基於TCP協議傳輸,windows和linux可使用FTP,linux和linux之間也能使用FTP,FTP有很嚴格的權限控制機制。
(3)Samba是windows和linux之間文件和打印機共享的,基於CIFS(通用網絡文件系統)協議掛載。
2三、用tcpdump嗅探80端口的訪問看看誰最高,tcpdump能抓https流量包嗎。
答:tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print "$1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr|head -20
(1)tcpdump -i eth0 -tnn dst port 80 -c 1000:統計本機中目標端口爲80的數據包,-tnn:直接以IP及port number顯示,而非主機名與服務名稱,而且不顯示時間戳timestamp。-c 1000:count統計1000個數據包。
(2)awk -F"." '{print$1"."$2"."$3"."$4}':對tcpdump的輸出一行一行得進行處理,以.做爲分隔域,將遠程主機IP依次打印出來。
(3)sort:對輸出的訪問端IP進行排序。
(4)uniq –c:將相同行合併,並統計相同行的數量。
(5)sort –nr:以相同行數量進行排序,反向排序,最大的放在最前面。
(6)head -20:提取前20行
2四、nagios和cacti的區別。(本身再複習一下)
答:(1)Cacti主要用來監控網絡流量和系統性能,而Nagios主要用來監控主機和服務的狀態。
(2)Cacti可以製圖,更關注某個時間段內閾值高峯的變化,而Nagios更關注服務狀態的變化。
(3)Nagios報警功能更強大,短信和郵件報警,Cacti郵件報警須要下載模板(圖像模板、主機模板、數據模板)和web圖形界面設置。
(4)Cacti監控一個東西,須要下載模板,在web圖形界面進行配置,而Nagios監控一個東西,須要在配置文件中定義並彼此調用。
2五、讀寫分離如何測試?
答:(1)使用任意一臺客戶端,登錄mysql-proxy代理服務器的4041管理端口,select * from backends;查看主從機器狀態;
(2)而後再使用任意一臺客戶端,登錄mysql-proxy代理服務器的4040讀寫分離端口,再進行插入表數據,然後,分別在主從機器
上,查看是否有對應的數據,而且保持一致的功能。
(3)最後,重複(1)步驟,登錄到4041管理端口,觀察主從機器狀態是否發生了變化,好比Up Up轉態。
2六、(6)apache處理請求時prefork或者worker模型,而nginx是event模型。
(7)apache的事件IO處理模型是select模型,而Nginx的事件IO處理模型是epoll模型。
2七、Nagios報警如何設置,Cacti閾值報警如何設置。你更喜歡使用Cacti仍是Nagios呢?
答:Nagios:(1)啓動本機自帶的Sendmail服務,保證能開啓25端口便可。
(2)在Nagios的配置文件中contact.cfg定義聯繫人的郵件地址,在什麼監控指標下進行報警,好比宕掉(d)、不可達(u)、狀態恢復(r)、浮動(f),在什麼時間段通知。
Cacti:安裝一些插件,如thold和setting,在web界面上定義使用率的百分比達到多少就報警。
我的更喜歡使用Nagios,雖然在Nagios配置文件中彼此定義比較麻煩,可是容易排錯,並且Cacti能監控的功能,Nagios也能監控,甚至Nagios的功能更多,好比監控路由器、交換機、打印機。
參考文檔:Cacti閾值實現郵件報警:http://lizhenliang.blog.51cto.com/7876557/1361618/
2八、TCP的有限狀態機中各個狀態的含義?
答:好像之前整理過,雖然常常接觸,可是沒法用語言表達具體意思。
CLOSED:無鏈接是活動的或正在進行
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個鏈接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個鏈接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另外一邊已贊成釋放
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另外一邊已初始化一個釋放(這個東西愛考)
LAST_ACK:等待全部分組死掉
2九、平滑重啓什麼意思,Nginx如何作到平滑重啓(注意,不是平滑升級)
答:平滑啓動的意思是在不中止Nginx服務的狀況下,從新加載配置文件,啓動新的工做線程,中止舊的Nginx工做線程。
(1)kill -HUP `cat /var/run/nginx.pid`
(2)/usr/local/nginx/sbin/nginx -s reload ##都是經過信號的形式告知給內核
30、Memcached包含哪些模塊,slab allocator內存管理機制的基本原理?它有何做用?(這裏的slab能夠理解爲一頁內存)
答:模塊:內存管理機制(slab),hash算法,多線程及libevent事件處理機制。
slab allocator基本原理是按照預先定義的大小,將內存分割爲多種特定長度的trunk塊,並將長度相同的trunk塊歸成slab組,而且slab組的大小
按照一個增加因子的說法進行遞增。當Memcached接受到前端客戶端應用程序發過來的鍵值對存儲請求時,首先計算數據塊是否有足夠的大小容納該記錄,若是不夠就向系統申請,若是達到了申請上限,就使用LRU算法淘汰掉最近最少使用的數據塊,騰出空間來保存新的記錄(item)。
做用:儘量解決內存碎片問題。
node