整理收集一些自己遇到的面試題及部分大家的題,自己來作答,回答不妥或者不全的還請大家指正
網絡
(一)簡單描述下TCP協定
TCP:傳輸控制協定,是傳輸層通信協定。它有面向連接配接、可靠、位元組流傳輸等特點
TCP建立連接配接時,需要三次握手協定
TCP三向交握的過程如下:
用戶端發送SYN封包給服務端,進入SYN_SEND(SEQ=X)狀态
服務端收到SYN封包,回應一個SYN(SEQ=Y) ACK(ACK=X+1)封包,進入SYN_RECV狀态
用戶端收到服務端的SYN封包,回應一個ACK(ACK=Y+1)封包,開始建立連接配接
TCP/IP作用是什麼?
TCP/IP協定是一套網絡通信标準,讓全世界的各種不同的裝置之間可以進行通信
TCP與UDP的差別?
TCP傳輸控制協定 。UDP使用者資料報協定
TCP對資源要求比較多,UDP對資源要求比較少
TCP可以保證資料的正确性,UDP有可能會丢包
TCP可以保證資料的順序,UDP不會保證
(二)網絡7層模型是那7層?列舉一些具體的應用執行個體
從下到上,實體層、資料鍊路層、網絡層、傳輸層、會話層、表示層、應用層
實體層:同軸電纜、接收器、發送器等
資料鍊路層:網卡、交換機、網橋
網絡層:路由器、網關
傳輸層:TCP協定、UDP協定
會話層:SQL、ASP、 PHP等
表示層:ASCII、JPEG、PNG、MP3等
應用層:telnet、ssh、http、smtp等
怎麼測試網絡是否連通
使用ping指令
什麼方式可以是外網連接配接到家裡主機
telnet
如何讓外網通路家裡的終端?它的原理是什麼?
- 電腦上開啟遠端桌面
-
使用teamview
他們的原理是:
- 你和對方機器建立一個Socket連接配接
- 在本地虛拟一個對方的系統
- 對方系統會在這個Socket連接配接上實時發送它系統狀态的資料
- 收到的資料,是本虛拟系統通過這個資料還原對方系統操作
- 本地操作這個虛拟作業系統,會發送資料指令到對方機器
- 對方繼器接收指令,通過Hook(底層鈎子)傳給作業系統
- 然後循環
通路一個網址會經曆哪些流程?
以下幾個簡單的流程
- 首先需要通過域名找到IP,如果本地緩存沒有需要請求DNS伺服器
- 得到IP後開始與目的主機進行三次握手來建立TCP連接配接
- 連接配接建立後進行HTTP通路,傳輸病擷取網頁内容
- 傳輸完成後與目的主機四次揮手斷開TCP連接配接
Linux
Linux常用指令有哪些,并簡述他們的作用
ls
檢視目前目錄
df-h
檢視磁盤使用情況
kill
殺掉程序
top
檢視目前主機狀态
mv
移動檔案
cp
複制檔案
netstat-a
檢視端口使用狀态
rm
删除
cat
檢視檔案
vim怎麼退出
q
不儲存直接退出
wq
儲存後退出
q!
強制退出
vim怎麼快速查找
按下
ESC
輸入
:
再輸入
:
空格
+查找内容
如何查找日志關鍵詞上下文
# 檢視檔案關鍵詞前後10行
grep 關鍵詞 -C 10 檔案名 catalina.out
# 檢視檔案關鍵詞後10行 a=after
grep 關鍵詞 -A 10 檔案名 catalina.out
# 檢視檔案關鍵詞前10行 b=before
grep 關鍵詞 -B 10 檔案名 catalina.out
怎樣一頁一頁地檢視一個大檔案的内容呢?
cat filename.txt | more
通過管道指令和more實作
如何檢視linux端口号被占用
netstat -a
檢視端口狀态
如何檢視程序狀态?
ps -ef | grep 程序名
chown是什麼?grep是什麼?
chown
改變檔案的擁有者群組
gerp
查找檔案裡符合條件的字元串
如何檢視日志?
tail -f
日志檔案名
5個用戶端通過TCP連接配接到主機,如何檢視這5個連接配接
netstat -nat|grep ESTABLISHED
資料庫
哪些方法可以提高資料庫查詢效率?
- 建立索引,利用索引
- 隻查詢必要的字段
- 合理的處理NULL字段
- 慎用like等通配符
索引設計的時候要注意什麼?
- 索引字段長度不能太長
- 索引的個數不能太多
資料庫更新語句?GROUP BY 如何使用?
UPDATE TABLENAME SET 字段名稱 = 新值 WHERE 列名稱 = 舊值
GROUP BY 一般常用于對查詢結果進行分組
# 如果想要對結果進行分組統計,加上SUM函數即可
SELECT SUM(列名1) 列命2 FROM TABLENAME
WHERE 列名1 列名2
GROUP BY 列命1
如果一個資料表有成千上萬條記錄,通路時很慢,有哪些方法可以優化?
Redis的優勢是什麼
- 讀寫快,Redis是将資料放在記憶體裡,而記憶體的讀取速度比硬碟要快,是以Redis性能優勢比其他資料庫要好
- 并發性能好
程式設計
HTTP協定中GET和POST的差別
在http協定中
get方法一般用來從伺服器擷取資料
post方法一般用來向伺服器上傳資料
HTTP狀态碼的含義
狀态碼 | 描述 |
---|---|
1XX | 伺服器收到請求,需要請求者繼續執行操作 |
2XX | 成功,操作被成功接收并處理 |
3XX | 重定向,需要進一步的操作以完成請求 |
4XX | 用戶端錯誤,請求包含文法錯誤或無法完成請求 |
5XX | 伺服器錯誤,伺服器在處理請求的過程中發生了錯誤 |
常用的如下
狀态碼 | 傳回 | 描述 |
---|---|---|
200 | OK | 請求成功。一般用于GET與POST請求 |
400 | Bad Request | 用戶端請求的文法錯誤,伺服器無法了解 |
401 | Unauthorized | 未注冊或需要使用者的身份認證 |
403 | Forbidden | 伺服器了解請求用戶端的請求,但是拒絕執行此請求 |
404 | Not Found | 伺服器無法根據用戶端的請求找到資源 |
500 | Internal Server Error | 伺服器内部錯誤,無法完成請求 |
502 | Bad Gateway | 作為網關或者代理工作的伺服器嘗試執行請求時,從遠端伺服器接收到了一個無效的響應 |
503 | Service Unavailable | 由于超載或系統維護,伺服器暫時的無法處理用戶端的請求 |
505 | HTTP Version not supported | 伺服器不支援請求的HTTP協定的版本,無法完成處理 |
HTTP請求Header裡包含哪些内容
浏覽器F12随意截取了一段,可以看看
# 主機名
Host: cn.bing.com
# 你目前通路的方式,一般為浏覽器版本,或者APP
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
# 語言資訊
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
# 編碼資訊
Accept-Encoding: gzip, deflate, br
# HTTP請求應答模式,KeepAlive模式,也有非KeepAlive模式
Connection: keep-alive
# 本地緩存
Cookie: SNRHOP=I=&TS=; _EDGE_S=mkt=zh-cn&F=1&SID=0227DE6146F26D360001D09247DC6CAA; _EDGE_V=1; MUID=0791871266626F2726E289E1674C6E73; _SS=PC=MOZI&SID=0227DE6146F26D360001D09247DC6CAA; SRCHS=PC=MOZI; SRCHD=AF=MOZLBR; SRCHUID=V=2&GUID=552BA37B5F5640E0BFCB0985B1F1AF85&dmnchg=1; SRCHUSR=DOB=20200624&T=1592977196000; MUIDB=0791871266626F2726E289E1674C6E73; SRCHHPGUSR=HV=1592977466&WTS=63728573996&CW=1920&CH=432&DPR=1&UTC=480&DM=0; ipv6=hit=1592980798172&t=6
# 是對應伺服器的響應頭部資訊,Content-Security-Policy: upgrade-insecure-requests
Content-Security-Policy: upgrade-insecure-requests
# 1,表示隻是用戶端支援
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
白盒測試方法有哪些
語句覆寫
使程式中的每個可執行語句都能執行一次的測試用例
判定覆寫
對于判斷語句,在設計用例的時候,要設計判斷語句結果為True和False的兩種情況
條件覆寫
設計足夠多的測試用例,使得程式中每個判定包含的每個條件的可能取值(真/假)都至少滿足一次
判定條件覆寫
設計足夠的測試用例,使得判斷條件中的所有條件可能取值至少執行一次,同時,所有判斷的可能結果至少執行一次
條件組合覆寫
設計足夠的測試用例,使得程式中每個判斷的所有可能的條件取值組合都至少出現一次
路徑覆寫
設計所有的測試用例,來覆寫程式中的所有可能的執行路徑
白盒測試覆寫率如何保證
使用條件組合覆寫達到100%
讓程式中每個判斷的所有可能條件取值組合都至少出現一次
這就就可以保證語句覆寫率、判定覆寫率、條件覆寫率和判定-條件覆寫率必為100%
關系如下:
參考知乎作者-吃完飯後不刷牙(https://zhuanlan.zhihu.com/p/43007988)