博主是2017屆的應屆生,主要掌握的語言是java,後面在實習的時候,自學了golang,期間也是做了一些小東西,實習結束後,開始投入到找工作的大流中,所以想把面試中遇到的各種問題記錄起來方便學習,同時也希望能對其他找工作的同學有點幫助吧,有些問題是經過查資料整理的,感謝提供答案的大家。好了,廢話不多說,我們下面開始。文筆不好,望諒解。
第一次
docker commit containerid foo/live
docker run -d -p 8000:80 foo/live /bin/bash
後臺啓動一個linux服務命令:(1).通過增加一個(&)符號,將應用程序在後臺啓動,如:libreoffice &. 此操作在關閉終端時服務也會停止
將一個在後臺暫停的命令,變成繼續執行
fg
將後臺中的命令調至前臺繼續運行
jobs
查看當前有多少在後臺運行的命令
ctrl + z
可以將一個正在前臺執行的命令放到後臺,並且暫停
第二次
(2). TCP連接
(3). 發送HTTP請求
(4). 服務器處理請求並返回HTTP報文
(5). 瀏覽器解析渲染頁面
(6). 連接結束
比如:
200 OK
Allow: HEAD,GET,PUT,DELETE,OPTIONS
PATCH:PATCH方法是新引入的,是對PUT方法的補充,用來對已知資源進行局部更新。這裏對局部的理解,可以參考下面:
2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的
UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
resp, err := http.Get("http://example.com/")
resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf)
resp, err := http.PostForm("http://example.com/form",
url.Values{"key": {"Value"}, "id": {"123"}})
req, err := http.NewRequest("GET", "http://example.com", nil)
resp, err := client.Do(req)
req.Header.Add("If-None-Match", `W/"wyzzy"`)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
package main
import (
"fmt"
"log"
"net/http"
)
// w表示response對象,返回給客戶端的內容都在對象裏處理
// r表示客戶端請求對象,包含了請求頭,請求參數等等
func index(w http.ResponseWriter, r *http.Request) {
// 往w裏寫入內容,就會在瀏覽器裏輸出
fmt.Fprintf(w, "Hello golang http!")
}
func main() {
// 設置路由,如果訪問/,則調用index方法
http.HandleFunc("/", index)
// 啓動web服務,監聽9090端口
err := http.ListenAndServe(":9090", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
request的一些屬性和方法:
URL *url.URL
// 接收到的請求的協議版本。本包生產的Request總是使用HTTP/1.1
Header Header
//請求頭
Body io.ReadCloser
//請求體
Form url.Values
// // Form是解析好的表單數據,包括URL字段的query參數和POST或PUT的表單數據。
// 本字段只有在調用ParseForm後纔有效。在客戶端,會忽略請求中的本字段而使用Body替代。
PostForm url.Values
//// PostForm是解析好的POST或PUT的表單數據。
// 本字段只有在調用ParseForm後纔有效。在客戶端,會忽略請求中的本字段而使用Body替代。
MultipartForm *multipart.Form
// MultipartForm是解析好的多部件表單,包括上傳的文件。
// 本字段只有在調用ParseMultipartForm後纔有效。
// 在客戶端,會忽略請求中的本字段而使用Body替代。
方法:
func (r *Request) AddCookie(c *Cookie) //添加cookie
func (r *Request) SetBasicAuth(username, password string) //SetBasicAuth使用提供的用戶名和密碼,採用HTTP基本認證
func (r *Request) Write(w io.Writer) error //將w寫入到request的相關屬性中
func (r *Request) ParseForm() error //ParseForm解析URL中的查詢字符串,並將解析結果更新到r.Form字段。
func (r *Request) FormValue(key string) string //FormValue返回key爲鍵查詢r.Form字段得到結果[]string切片的第一個值
func (*Request) PostFormValue //PostFormValue返回key爲鍵查詢r.PostForm字段得到結果[]string切片的第一個值。注:postform和form的區別是from還
包含了url的查詢參數
func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error) //FormFile返回以key爲鍵查詢r.MultipartForm字段得到結果中的第一個文件和它的信息。如果必要,本函數會隱式調用ParseMultipartForm和ParseForm。查詢失敗會返回ErrMissingFile錯誤。
Status string // 例如"200 OK"
StatusCode int // 例如200
Header Header //響應頭
Body io.ReadCloser //響應體
方法:
func (r *Response) Write(w io.Writer) error //將w寫入到reponse的相關屬性中、如statuscode ,body
func (r *Response) Cookies() []*Cookie //Cookies解析並返回該回復中的Set-Cookie頭設置的cookie。
func ReadResponse(r *bufio.Reader, req *Request) (*Response, error) //ReadResponse從r讀取並返回一個HTTP 回覆。req參數是可選的,指定該回復對應的
請求(即是對該請求的回覆)。
func (r *Response) Location() (*url.URL, error) //Location返回該回復的Location頭設置的URL。相對地址的重定向會相對於該回復對應的請求來確定絕對地
址。
詳細參考go官方文檔:golang官方中文文檔
2,session 默認被存在在服務器的一個文件裏(不是內存)
3,session 的運行依賴 session id,而 session id 是存在 cookie 中的,也就是說,如果瀏覽器禁用了 cookie ,同時 session 也會失效(但是可以通過其它方式實現,比如在 url 中傳遞 session_id)
4,session 可以放在 文件、數據庫、或內存中都可以。
5,用戶驗證這種場合一般會用 session
詳細參考:cookie和session的區別詳解