好幾天沒複習了,腦袋已經反應不過來了,被問到本身研究過的,絕對SB,前功盡棄!但願明天接到電話啊,進入嚮往的電商公司!html
一、一個sql語句查詢很慢怎麼辦?mysql
答:(1)登陸到Mysql,show global status;和show processlist查看數據庫系統狀態linux
(2)查看慢查詢日誌,show variables like '%slow%',分析是那些SQL語句拖慢了系統ios
(3)vi /etc/my.cnf配置文件,對參數進行修改,好比最大鏈接數和表緩存程序員
(4)合理添加索引web
二、哪些字段適合看成索引,哪些字段不適合創建索引?內鏈接外鏈接的區別?面試
答:適合:外鍵字段、主鍵字段、在where子句中的字段。正則表達式
不適合:更新頻繁的數據不適合創建索引、全表掃描比創建索引快則不須要創建索引、like查詢以%開頭、有or語句的不適合創建索引sql
內鏈接:匹配左右兩表某個列值的相同的記錄行shell
外鏈接:又分爲左外鏈接、右外鏈接、全外鏈接,返回某一個表相匹配的行,並在另外一表不匹配的行爲空值
左外鏈接就是以左表爲準,去匹配右表,若是有匹配的則返回,若是不匹配,則對應的列爲空值。左表有多少條數據,結果就是多少條數據
三、事務隔離級別?
答:(1)未提交讀,能夠讀取未提交事務的數據,也稱爲髒讀
(2)提交讀,只能讀取已經提交事務的數據,也稱爲未重複讀
(3)可重複讀,這個事務在讀取某一行的時候,另外一個事務又對這行數據進行修改並提交,那麼以前的事務就會看到新的行,也稱爲幻讀
(4)串行化讀,強制事務順序,使之不可能衝突,從而解決幻讀問題
四、mysql數據庫cpu飆升到500%的話他怎麼處理?
答:(1)多實例的服務器,先top查看是那一個進程,哪一個端口占用CPU多;
(2)show processlist查看是否因爲大量併發,鎖引發的負載問題;
(3)不然,查看慢查詢,找出執行時間長的sql;explain分析sql是否走索引,sql優化;
(4)再查看是否緩存失效引發,須要查看buffer命中率
五、bash for循環打印下面這句話中字母數不大於6的單詞(崑崙萬維面試題)
I am oldboy teacher welcome to oldboy training class. #!/bin/bash for word in I am oldboy teacher welcome to oldboy training class do if [ `echo ${word}|wc -L` -le 6 ] ## -L, --max-line-length顯示最長行的長度 then echo $word fi done
六、正則表達式匹配具備IP地址的行
答:grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" test.txt ##事實上,這不是正確答案,還須要細分255等,可是這個好記,通常適用,還必須是擴展的
七、[1,15,4,6,29,22] 把他進行排序,並去掉中括號和逗號 (這要是筆試題遇到,跪了)
答:(1)sed -i 's/,/ /g ;s/\[//g ;s/\]//g ' test.txt ##把逗號變爲空格,並刪除中括號,-i改變原文件,可是-i不會輸出該文件
(2)sed -i 's/ /\n/g' test.txt |sort -nr ##把空格變爲換行,並進行逆向排序
(3)sed -i 's/\n/ /g' test.txt ##已經排完序,可是須要改成橫行輸出
八、設置網卡MTU爲1K的命令是
答:臨時生效:ifconfig eth0 mtu 1024
永久生效:echo "MTU=1024" >>/etc/sysconfig/network-scripts/ifcfg-eth0
9:將當期Linux終端的系統環境變量改成GB2312;
答:export LANG=zh_CN.GB2312
十、創建一個用戶組(group)group1,該組只能對目錄/opt/dir1進行讀取;
答:groupadd group1;setfacl -m g:group1:r-- /opt/dir1
十一、若是天天3:00時,須要將進程myproc自動強行終止掉(使用kill中止),以後並從新啓動(執行 myproc命令便可),則應該執行的腳本命令分別是:
0 3 * * * /bin/pkill -18 myproc
十二、用awk實現以下結果?(若是不知道paste命令,很難作出來)
cat 1.txt
1 2 3
1 2 3
cat 2.txt
a b c
a b c
實現:2 a c
2 a c
答:paste 1.txt 2.txt |awk '{print $2,$4,$6}'
1三、MySQL的鎖類型,什麼時候會觸發鎖?
答:頁級:引擎 BDB。
表級:引擎 MyISAM , 理解爲鎖住整個表,能夠同時讀,寫不行
行級:引擎 INNODB , 單獨的一行記錄加鎖
用索引字段作爲條件進行修改時, 是否表鎖的取決於這個索引字段可否肯定記錄惟一,當索引值對應記錄不惟一,會進行鎖表,相反則行鎖。
讀鎖應該是第一個sql就釋放,寫鎖在整個事務結束時釋放
1四、session和cookie的區別
答:(1)cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
(2)cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session,由於它不會任意讀取客戶存儲的信息。
(3)單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。
1五、MySQL的索引的實現方式?索引類型?
答:方式:B+樹、散列索引、位圖索引 類型:普通索引、主鍵索引、惟一索引、彙集索引
參考文檔:http://www.cnblogs.com/barrywxx/p/4351901.html
1六、session原理和共享方式。
答:(1)定義:session是由服務器維持的一個存儲空間,用戶鏈接服務器時,會由服務端生成一個惟一的session_ID,該session_ID被稱爲標識符來存取服務端的session存儲空間。
(2)原理:sessionID這一數據是保存在cookie中的,用戶提交頁面時,會將這一sessionID提交到服務端,用於存取session數據。可是不會徹底依賴於cookie,能夠經過服務端自動URL重寫方式來傳遞sessionID的,而且整個過程對程序員透明。
(3)方式:基於cookie的共享,基於數據庫的共享,基於memcached的共享
參考文檔:http://blog.csdn.net/zhuanshenweiliu/article/details/38844741
1七、取出/etc/passwd中shell出現的次數?(awk數組解決)
答:awk -F ":" '{arr[$NF]++}END{for (shell in arr){print shell,arr[shell]}}' /etc/passwd
1八、合併文件問題(這題比上面更難一些,主要是排序問題和大小變換問題)
a.txt
100 $5,000
200 $500
300 $3,000
400 $1,250
b.txt
100 Json Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma
要求結果
400 ashok sharma $1,250
200 john doe $500
100 json smith $5,000
300 sanjay gupta $3,000
答:paste b a|awk '{print $1,$2,$3,$5}'|tr [:upper:] [:lower:]|sort -k 2 >c.txt
##tr命令將大寫轉爲小寫,sort -k根據關鍵字排序,2表示第二列
1九、打印本機交換分區大小,輸出以下:(這題是很難的,若是不是上機,很難作出來)
Swap: 2016M
答:free -m|grep -i swap|awk '{print $1,$2"M"}'或者下面第二種方法
top -n 1|grep Swap|sed 's/k.*//g'|awk '{print $1,$2/1024"M"}'
##top 命令顯示系統資源佔用狀況,-n 1表示只調用1次,Swap: 16779884k total 將k以及後面的字符串替換爲空,這樣這剩下Swap: 16779884,除以1024便可
20、測試輸出本機建立20000個目錄所用的時間?(我日,這題要是沒見過覺得是世紀難題!)
time for i in `seq 1 20000`; do mkdir "$i" &>/dev/null; done
輸出;
real0m0.065s
user0m0.015s
sys0m0.024s
##值得注意的是do後面沒有分號,另外/dev/null只是把屏幕產生的結果放在黑洞中,可是依然會產生這些目錄
2一、求root用戶登錄了多少時間。
答:用如今的時間減去登錄時間,一步作不了用腳本
#!/bin/bash login=`who am i | awk '{print $4}'` logintime=`date -d $login +%s` ##%s是取到秒的意思,由於上面只有小時:分鐘 now=`date +%s` ##-d顯示指定字符串所描述的時間,而非當前時間 let last=now-logintime ##用let命令進行計算操做時不須要用$符號 let lasttime=last/3600 echo "logged on for $lasttime hours"
2二、Nagios監控linux服務器的通訊過程?
答:當Nagios須要監控某個遠程linux主機的服務或者資源狀況時:
1)nagios會運行check_nrpe插件,咱們要在nagios配置文件中告訴它要檢查什麼(/usr/local/nagios/etc/objects/commands.cfg)
2)check_nrpe插件會經過SSL鏈接到遠程的NRPE daemon
3)NRPE daemon會運行相應的nagios插件來執行檢查本地資源或服務
4)NRPE daemon將檢查的結果返回給check_nrpe插件,插件將其遞交給nagios程序作處理
5)CGI圖形顯示展示給用戶
注意:NRPE daemon須要nagios插件安裝在遠程被監控linux主機上,不然,daemon不能作任何的監控
2三、有商品表, 有主鍵goods_id, 欄目列cat_id, 價格price,在價格列上已經加了索引,但按價格查詢仍是很慢,多是什麼緣由。
答:在實際場景中,一個電商網站的商品分類不少,直接在全部商品中,按價格查商品,是極少的,通常客戶都來到分類下,而後再查.
改正: 去掉單獨的Price列的索引, 加 (cat_id,price)複合索引再查詢
2四、解釋varchar(30)中的30、int(20)中20的涵義?爲何這麼設計?int(20)存儲的數字的上限和下限是多少?
答:20表示最大顯示寬度爲20,但仍佔4字節存儲,存儲範圍不變;varchar(30)中30的涵義最大存儲30個字符,它是可變長度。
設計緣由:實際業務有這樣的需求。4個字節是32位,多是第一位爲0,則正數是2^32,可能第一位是1,則負數是-(2^32-1)
2五、MySQL主從複製binlog 日誌格式
答:row:只須要記錄哪一條記錄被修改了,修改爲什麼樣了
statment:每一條會修改數據的SQL語句都會記錄到 master 的bin-log中
mixed:就是前兩種模式的結合
2六、如何將本地80端口的請求轉發到9000端口,當前主機IP爲192.168.2.1(這題常常搞混)
答:iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.18:9000
2七、處理如下oldboy.log,將域名取出並進行計數排序
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html
答:awk -F "/" '{print $3}' oldboy.log |sort|uniq -c
2八、如何提升MySql的安全性?
答:(1)若是MYSQL客戶端和服務器端的鏈接須要跨越並經過不可信任的網絡,那麼須要使用ssh隧道來加密該鏈接的通訊。
(2)使用set password語句來修改用戶的密碼,先「mysql -u root」登錄數據庫系統,而後「mysql> update mysql.user set password=password(’newpwd’)」,最後執行「flush privileges」就能夠了。
Mysql須要提防的***有,防偷聽、篡改、回放、拒絕服務等,不涉及可用性和容錯方面。對全部的鏈接、查詢、其餘操做使用基於acl即訪問控制列表的安全措施來完成。也有一些對ssl鏈接的支持。
(3)設置除了root用戶外的其餘任何用戶不容許訪問mysql主數據庫中的user表;加密後存放在user表中的加密後的用戶密碼一旦泄露,其餘人能夠隨意用該用戶名/密碼相應的數據庫;
(4)使用grant和revoke語句來進行用戶訪問控制的工做;
採用防火牆能夠去掉50%的外部危險,讓數據庫系統躲在防火牆後面工做,或放置在dmz區域中;
(5)爲了防止被惡意傳入非法參數,例如where id=234,別人卻輸入where id=234 or 1=1致使所有顯示,因此在web的表單中使用」或」"來用字符串,在動態url中加入%22表明雙引號、%23表明井號、%27表明單引號;傳遞未檢查過的值給mysql數據庫是很是危險的;
(6)確信在mysql目錄中只有啓動數據庫服務的用戶才能夠對文件有讀和寫的權限;
2九、線程通訊、以及線程同步機制?
答:通訊:跟進程同樣,消息隊列、共享內存、套接字、信號、信號量、管道通訊
同步:(1)、臨界區:經過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。在任意時刻只容許一個線程對共享資源進行訪問,若是有多個線程試圖訪問公共資源,那麼在有一個線程進入後,其餘試圖訪問公共資源的線程將被掛起,並一直等到進入臨界區的線程離開,臨界區在被釋放後,其餘線程才能夠搶佔。
(2)、互斥量:採用互斥對象機制。 只有擁有互斥對象的線程纔有訪問公共資源的權限,由於互斥對象只有一個,因此能保證公共資源不會同時被多個線程訪問。互斥不只能實現同一應用程序的公共資源安全共享,還能實現不一樣應用程序的公共資源安全共享
(3)、信號量:它容許多個線程在同一時刻訪問同一資源,可是須要限制在同一時刻訪問此資源的最大線程數目
(4)、事 件: 經過通知操做的方式來保持線程的同步,還能夠方便實現對多個線程的優先級比較的操做
30、mysql優化?
答:(1)表的設計合理(符合3NF)(2)添加適當索引(3)分表技術(4)讀寫【update/insert/delete】分離(5)存儲過程【模塊化編程】(6)mysql配置文件優化【配置最大併發數、緩存大小】(7)硬件升級(固態硬盤或RAID陣列)(8)定時清除不須要的數據,定時碎片整理