網(wǎng)絡(luò)相關(guān)問題
1、請解釋下列術(shù)語:UrlEncode,Utf8,JSON,UTC,MD5?
Urlencode:將字符串以url形式編碼(在編程語言中通常都有實現(xiàn)該功能的內(nèi)置函數(shù)或者API)。
Utf8:是一種針對Unicode的可變長度字符編碼,主要用于在網(wǎng)頁上顯示各國語言字符
2、請解釋GET/POST的區(qū)別,以及請求參數(shù)放到url里和放到body里面的區(qū)別?
Post與Get區(qū)別:
GET請求,請求的數(shù)據(jù)會附加在URL之后,以?分割URL和傳輸數(shù)據(jù),多個參數(shù)用&連接。URL的編碼格式采用的是ASCII編碼,而不是uniclde,即是說所有的非ASCII字符都要編碼之后再傳輸。
POST請求:POST請求會把請求的數(shù)據(jù)放置在HTTP請求包的包體中。上面的item=bandsaw就是實際的傳輸數(shù)據(jù)。
因此,GET請求的數(shù)據(jù)會暴露在地址欄中,而POST請求則不會。
傳輸數(shù)據(jù)的大小
在HTTP規(guī)范中,沒有對URL的長度和傳輸?shù)臄?shù)據(jù)大小進行限制。但是在實際開發(fā)過程中,對于GET,特定的瀏覽器和服務器對URL的長度有限制。因此,在使用GET請求時,傳輸數(shù)據(jù)會受到URL長度的限制。
對于POST,由于不是URL傳值,理論上是不會受限制的,但是實際上各個服務器會規(guī)定對POST提交數(shù)據(jù)大小進行限制,Apache、IIS都有各自的配置。
安全性
Get是Form的默認方法,安全性相對比較低。
請求參數(shù)放到url里和放到body里面的區(qū)別
首先,參數(shù)的存放位置我們無法直接指定,而是不同的請求方法參數(shù)傳遞的方式不同。
常用的HTTP請求主要為GET請求和POST請求兩種,GET請求的參數(shù)會通過以跟隨在URL后邊以鍵值對的方式進行傳遞(例:key1=a&key2=b&key3...);而POST請求的參數(shù)會通過HEADER進行傳遞。考慮到安全性的問題,可以確定兩者都不安全,原因是HTTP請求可以被輕易抓包和截獲,其中的請求參數(shù)值自然會很容易被獲取。
3、請列舉出常用的Http Header,Cookie是怎么實現(xiàn)的?
Content-Length,請求、響應體的數(shù)據(jù)字節(jié)大小
Accept-Encoding,請求頭,可接受的文本壓縮算法,如: gzip, deflate
Accept-Language,請求頭,支持語言,客戶端瀏覽器的設(shè)置,如:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
User-Agent,請求頭,瀏覽器信息,
Cookie,請求頭,服務器或客戶端在上次設(shè)置的COOKIE,包括作用域名(.360buy.com),過期時間,鍵與值。
Referer,從一個連接打開一個新頁面,新頁面的請求一般會加此信息,標名是從哪里跳過來的,
所有的頁面的打開歷史鏈就可被挖掘出來,有利于分析用戶行為與CPS分成
Cookie在瀏覽器本地會有一個文件存儲數(shù)據(jù),通信的時候通過請求頭和響應頭傳遞數(shù)據(jù)
4、請解釋下列返回碼的含義:200,302,400,403,500,502
200:請求成功
302:請求的資源臨時從不同的 URI響應請求。(資源臨時重定向)
400:錯誤請求(請求的參數(shù)錯誤或者服務器不理解請求的語法)
402:10.4.3 402 Payment Required This code is reserved for future use.
該狀態(tài)碼是為了將來可能的需求而預留的。
500:服務器端錯誤
502:網(wǎng)關(guān)或代理無效/無響應,網(wǎng)絡(luò)錯誤
HTTP協(xié)議目前常用的有哪幾個?KEEPALIVE從哪個版本開始出現(xiàn)的?
到現(xiàn)在http出現(xiàn)了 1.0和 1.1版本
Keep-Alive是從1.1默認就支持了。
1、什么是Keep-Alive模式?
我們知道HTTP協(xié)議采用“請求-應答”模式,當使用普通模式,即非KeepAlive模式時,每個請求/應答客戶和服務器都要新建一個連接,完成之后立即斷開連接(HTTP協(xié)議為無連接的協(xié)議);當使用Keep-Alive模式(又稱持久連接、連接重用)時,Keep-Alive功能使客戶端到服務器端的連接持續(xù)有效,當出現(xiàn)對服務器的后繼請求時,Keep-Alive功能避免了建立或者重新建立連接。
http 1.0中默認是關(guān)閉的,需要在http頭加入"Connection: Keep-Alive",才能啟用Keep-Alive;http 1.1中默認啟用Keep-Alive,如果加入"Connection: close ",才關(guān)閉。目前大部分瀏覽器都是用http1.1協(xié)議,也就是說默認都會發(fā)起Keep-Alive的連接請求了,所以是否能完成一個完整的Keep-Alive連接就看服務器設(shè)置情況。
2、啟用Keep-Alive的優(yōu)點
從上面的分析來看,啟用Keep-Alive模式肯定更高效,性能更高。因為避免了建立/釋放連接的開銷。
業(yè)界常用的優(yōu)化WEB頁面加載速度的方法(可以分別從頁面元素展現(xiàn),請求連接,css,js,服務器等方面介紹)?
對于服務器方面前端能做的工作:
使用CDN加速,使用戶從離自己最近的服務器下載文件;
減少Cookie的大小,使用無cookie的域,客戶端請求靜態(tài)文件的時候,減少 Cookie 的反復傳輸對主域名的影響;
為文件頭指定Expires,使內(nèi)容具有緩存性;
前端優(yōu)化:DNS預解析提升頁面速度
<link rel="dns-prefetch"href="http://#" />
<link rel="dns-prefetch" />
服務器端能做的工作:
負載均衡,分布式存儲,提升服務器性能等等。
Daemon()程序是一直運行的服務端程序,又稱為守護進程。通常在系統(tǒng)后臺運行,沒有控制終端,不與前臺交互,Daemon程序一般作為系統(tǒng)服務使用。
Daemon是長時間運行的進程,通常在系統(tǒng)啟動后就運行,在系統(tǒng)關(guān)閉時才結(jié)束。一般說Daemon程序在后臺運行,是因為它沒有控制終端,無法和前臺的用戶交互。
Daemon程序一般都作為服務程序使用,等待客戶端程序與它通信。我們也把運行的Daemon程序稱作守護進程。
8、優(yōu)化一個以I/O為瓶頸的程序,以下哪些方法效果比較顯著,Why?
a) 增加CPU數(shù)目
b) 提高CPU主頻
c) 增大內(nèi)存的容量
d) 采用多線程
e) 采用異步I/O和多路(Multlplex)I/O
f) 對每次I/O進行Bath訪問(多次I/O合并一次完成)
c、e、d、f提升的效果會比較顯著
c通過將數(shù)據(jù)預讀取到內(nèi)存中(建立內(nèi)存池)的方式,提高訪問時候的效率,有效減少磁盤IO讀寫次數(shù)
9、設(shè)計一個系統(tǒng),實現(xiàn)統(tǒng)計網(wǎng)站中每個URL訪問到的次數(shù)(pv),以及訪問的獨立用戶數(shù)(uv),其中每個獨立網(wǎng)頁以URL為key,每個獨立用戶以ip為key?
#請自己想
10、什么是內(nèi)存對象的序列化(Serialiization)?為什么要序列化?請描述你熟悉的網(wǎng)絡(luò)傳輸序列化(Serialiization)框架或格式(Server)?
把對象轉(zhuǎn)換為字節(jié)序列的過程稱為對象的序列化
序列化主要用于網(wǎng)絡(luò)傳輸數(shù)據(jù)及將數(shù)據(jù)保存在硬盤上
常見的序列化以后的格式有:XML Jason ,但它們都是字符串
1.MD5
2.base64
3.sha256
對稱加密
DES、DEST、DEARC2、
非對稱加密
RSA、Elgamal、背包算法、Rabin、D-H、ECC
最后編輯于 :2019.01.09 13:59:41
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者 【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。 平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。