【CS】筆試常見題目 HTTP 狀態碼 穩定排序和不穩定排序 比較排序算法

  1. 網絡
    1. IP地址分類
    2. 常見網絡協議
    3. HTTP狀態碼
  2. 算法
    1. 排序問題總結
  3. git
    1. git和svn的區別
    2. git經常使用命令
    3. git暫存區,工做區等

1、網絡html

1. IP地址分類:

  • IP網絡使用32位地址,以點分十進制表示,如172.16.0.0。地址格式爲:IP地址=網絡地址+主機地址IP地址=主機地址+子網地址+主機地址
  • 最初設計互聯網絡時,爲了便於尋址以及層次化構造網絡,每一個IP地址包括兩個標識碼(ID),即網絡ID主機ID同一個物理網絡上的全部主機都使用同一個網絡ID網絡上的一個主機(包括網絡上工做站,服務器和路由器等)有一個主機ID與其對應。IP地址根據網絡ID的不一樣分爲5種類型,A類地址、B類地址、C類地址、D類地址和E類地址。 
    • A類:由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是「0」, 地址範圍從1.0.0.0 到126.0.0.0。可用的A類網絡有126個,每一個網絡能容納1億多個主機。 
      A類地址的第一組數字爲1~126。注意,數字0和 127不做爲A類地址,數字127保留給內部回送函數,而數字0則表示該地址是本地宿主機,不能傳送。
    • B類:一個B類IP地址由2個字節的網絡地址和2個字節的主機地址組成,網絡地址的最高位必須是「10」,地址範圍從128.0.0.0到191.255.255.255。可用的B類網絡有16382個,每一個網絡能容納6萬多個主機 。
    • C類:一個C類IP地址由3字節的網絡地址和1字節的主機地址組成,網絡地址的最高位必須是「110」。範圍從192.0.0.0到223.255.255.255。C類網絡可達209萬餘個,每一個網絡能容納254個主機。 
    • D類多用於多點廣播:D類IP地址第一個字節以「lll0」開始,它是一個專門保留的地址。它並不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協議的一組計算機。
    • E類:以「llll0」開始,爲未來使用保留。
    • 全零(「0.0.0.0」)地址對應於當前主機。全「1」的IP地址(「255.255.255.255」)是當前子網的廣播地址。
    • 在IP地址3種主要類型裏,各保留了3個區域做爲私有地址,其地址範圍以下:
      • A類地址:10.0.0.0~10.255.255.255
      • B類地址:172.16.0.0~172.31.255.255
      • C類地址:192.168.0.0~192.168.255.255

  參考:IP地址的分類——a,b,c 類是如何劃分的git

 

2. 常見網絡協議

  • 應用層經常使用協議:文件傳輸,電子郵件,文件服務,虛擬終端
    • DNS:域名系統
    • FTP:文件傳輸協議
    • telnet遠程終端協議
    • HTTP:超文本傳送協議(使用面向鏈接的TCP做爲運輸層協議,保證了數據的可靠傳輸)
    • 電子郵件協議SMTP
    • POP3:郵件讀取協議
    • SNMP:簡單網絡管理協議
    • WebSocket:是HTML5一種新的協議。它實現了瀏覽器與服務器全雙工通訊(full-duplex)。一開始的握手須要藉助HTTP請求完成。
  • 傳輸層: 提供端對端的接口
    • TCP:
      • 提供IP下的數據可靠傳輸,它提供的服務包括數據流傳送、可靠性、有效流控、全雙工操做和多路複用。經過面向鏈接、端到端和可靠的數據包發送。
      • 支持的應用協議主要有:Telnet、FTP、SMTP等
    • UDP:
      • 不爲IP提供可靠性、流控或差錯恢復功能,是非面向鏈接,不可靠的傳輸。
      • 支持的應用層協議主要有:NFS(網絡文件系統)、SNMP(簡單網絡管理協議)、DNS(主域名稱系統)、TFTP(通用文件傳輸協議)等.
  • 網絡層:爲數據包選擇路由
    • IP
    • ICMP
    • RIP
    • OSPF
    • BGP
    • IGMP
  • 數據鏈路層:傳輸有地址的幀以及錯誤檢測功能
    • SLIP
    • CSLIP
    • PPP
    • ARP
    • RARP
    • MTU
  • 物理層:以二進制數據形式在物理媒體上傳輸數據
    • ISO2110
    • IEEE802
    • IEEE802.2

 參考:應用層經常使用協議  github

 

3. HTTP狀態碼:

  • 1XX表示消息:表示請求已被接受,須要繼續處理。
    這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,並以空行結束。因爲HTTP/1.0協議中沒有定義任何1xx狀態碼,因此除非在某些試驗條件下,服務器禁止向此類客戶端發送1xx響應。 這些狀態碼錶明的響應都是信息性的,標示客戶應該採起的其餘行動。
    100(繼續) 請求者應當繼續提出請求。服務器返回此代碼表示已收到請求的第一部分,正在等待其他部分。
    101(切換協議) 請求者已要求服務器切換協議,服務器已確認並準備切換。
  • 2XX表示:成功
    200(成功) 服務器已成功處理了請求。一般,這表示服務器提供了請求的網頁。若是針對您的 robots.txt 文件顯示此狀態碼,則表示 Googlebot 已成功檢索到該文件。
    201(已建立) 請求成功而且服務器建立了新的資源。
    202(已接受) 服務器已接受請求,但還沒有處理。
    203(非受權信息) 服務器已成功處理了請求,但返回的信息可能來自另外一來源。
    204(無內容) 服務器成功處理了請求,但沒有返回任何內容。
    205(重置內容) 服務器成功處理了請求,但沒有返回任何內容。與 204 響應不一樣,此響應要求請求者重置文檔視圖(例如,清除表單內容以輸入新內容)。
    206(部份內容) 服務器成功處理了部分 GET 請求。
  • 3XX表示:重定向
    300(多種選擇) 針對請求,服務器可執行多種操做。服務器可根據請求者 (user-agent) 選擇一項操做,或提供操做列表供請求者選擇。
    301(永久移動) 請求的網頁已永久移動到新位置。服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。您應使用此代碼告訴 Googlebot 某個網頁或網站已永久移動到新位置。
    302(臨時移動) 服務器目前從不一樣位置的網頁響應請求,但申請人應當繼續使用原有位置來響應之後的請求。此代碼與響應 GET 和 HEAD 請求的 301 代碼相似,會自動將請求者轉到不一樣的位置,但不該使用此代碼來告訴 Googlebot 頁面或網站已經移動,由於 Googlebot 要繼續抓取原來的位置並編制索引。
    303(查看其餘位置) 請求者應當對不一樣的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。對於除 HEAD 以外的全部請求,服務器會自動轉到其餘位置。
    304(未修改)

    自從上次請求後,請求的網頁未修改過。服務器返回此響應時,不會返回網頁內容。web

    若是網頁自請求者上次請求後再也沒有更改過,您應當將服務器配置爲返回此響應(稱爲 If-Modified-Since HTTP 標頭)。因爲服務器能夠告訴 Googlebot 自從上次抓取後網頁沒有變動,所以可節省帶寬和開銷。算法

    305(使用代理) 請求者只能使用代理訪問請求的網頁。若是服務器返回此響應,還表示請求者應當使用代理。
    307(臨時重定向) 服務器目前從不一樣位置的網頁響應請求,但請求者應當繼續使用原有位置來響應之後的請求。此代碼與響應 GET 和 HEAD 請求的 <a href=answer.py?answer=>301</a> 代碼相似,會自動將請求者轉到不一樣的位置,但您不該使用此代碼來告訴 Googlebot 某個網頁或網站已經移動,由於 Googlebot 會繼續抓取原有位置並編制索引。
  • 4XX表示:客戶端錯誤
    400(錯誤請求) 服務器不理解請求的語法。
    401(身份驗證錯誤) 此頁要求受權。您可能不但願將此網頁歸入索引。若是您的 Sitemap 中列出該網頁,您能夠將其刪除。但若是您將其保留在您的 Sitemap 中,咱們就不會抓取或索引該網頁(儘管該網頁將繼續保持錯誤狀態在此處列出)。若是咱們將其做爲搜索抓取的一部分抓取,您能夠在咱們的網站管理員信息中查閱其緣由。
    403(禁止) 服務器拒絕請求。若是您在 Googlebot 嘗試抓取您網站上的有效網頁時看到此狀態碼(能夠在 Google 網站管理員工具<strong>診斷</strong>下的<strong>網絡抓取< /strong>頁面上看到此信息),多是您的服務器或主機拒絕 Googlebot 訪問。
    404(未找到)

    服務器找不到請求的網頁。例如,對於服務器上不存在的網頁常常會返回此代碼。瀏覽器

    若是您的網站上沒有 robots.txt 文件,而您在 Google 網站管理員工具"診斷"標籤的 robots.txt 頁上看到此狀態碼,那麼這是正確的狀態碼。可是,若是您有 robots.txt 文件而又看到此狀態碼,則說明您的 robots.txt 文件可能命名錯誤或位於錯誤的位置(該文件應當位於頂級域,名爲 robots.txt)。服務器

    若是對於 Googlebot 嘗試抓取的網址看到此狀態碼(在"診斷"標籤的 HTTP 錯誤頁面上),則表示 Googlebot 追蹤的多是另外一個頁面的無效連接(是舊連接或輸入有誤的連接)。網絡

    405(方法禁用)

    禁用請求中指定的方法。app

    406(不接受) 沒法使用請求的內容特性響應請求的網頁。
    407(須要代理受權) 此狀態碼與 401 相似,但指定請求者必須受權使用代理。若是服務器返回此響應,還表示請求者應當使用代理。
    408(請求超時) 服務器等候請求時發生超時。
    409(衝突) 服務器在完成請求時發生衝突。服務器必須在響應中包含有關衝突的信息。服務器在響應與前一個請求相沖突的 PUT 請求時可能會返回此代碼,以及兩個請求的差別列表。
    410(已刪除) 請求的資源永久刪除後,服務器返回此響應。該代碼與 404(未找到)代碼類似,但在資源之前存在而如今不存在的狀況下,有時會用來替代 404 代碼。若是資源已永久刪除,您應當使用 301 指定資源的新位置。
    411(須要有效長度) 服務器不接受不含有效內容長度標頭字段的請求。
    412(未知足前提條件) 服務器未知足請求者在請求中設置的其中一個前提條件。
    413(請求實體過大) 服務器沒法處理請求,由於請求實體過大,超出服務器的處理能力。
    414(請求的 URI 過長) 請求的 URI(一般爲網址)過長,服務器沒法處理。
    415(不支持的媒體類型) 請求的格式不受請求頁面的支持。
    416(請求範圍不符合要求) 若是頁面沒法提供請求的範圍,則服務器會返回此狀態碼。
    417(未知足指望值) 服務器未知足"指望"請求標頭字段的要求。
  • 5XX表示:服務器錯誤
    500(服務器內部錯誤) 服務器遇到錯誤,沒法完成請求。
    501(還沒有實施) 服務器不具有完成請求的功能。例如,服務器沒法識別請求方法時則會返回此代碼。
    502(錯誤網關) 服務器做爲網關或代理,從上游服務器收到無效響應。
    503(服務不可用) 服務器目前沒法使用(因爲超載或停機維護)。一般,這只是暫時狀態。
    504(網關超時) 服務器做爲網關或代理,可是沒有及時從上游服務器收到請求。
    505(HTTP 版本不受支持) 服務器不支持請求中所用的 HTTP 協議版本。

   參考:HTTP 狀態碼ssh

2、算法

1. 排序問題總結

 

參考:

穩定排序和不穩定排序

比較排序算法

 

3、git

1. git和svn的區別?

  1. git是分佈式的,svn不是,是集中式的。GIT跟SVN同樣有本身的 集中式版本庫或服務器。但,GIT更傾向於被使用於分佈式模式,也就是每一個開發人員從中心版本庫/服務器上chect out代碼後會在本身的機器上克隆一個本身的版本庫。能夠這樣說,若是你被困在一個不能鏈接網絡的地方時,你仍然可以提交文件,查看歷史版本記錄,建立項 目分支等。也就是說,git和其餘同事不會有太多的衝突,本身寫的代碼放在本身電腦上,一段時間後再說起,合併,也能夠不用聯網在本地說起。
  2. GIT把內容按元數據方式存儲,而SVN是按文件。.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上全部的東西,例如標籤,分支,版本記錄等。
  3. git分支和svn分支的不一樣
    1. 分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。若是你想知道是否合併了一個分支,你須要手工運行像這樣的命令svn propget svn:mergeinfo,來確認代碼是否被合併。在SVN,分支是一個完整的目錄。且這個目錄擁有完整的實際文件。若是工做成員想要開啟新的分支,那將會影響「全世界」!每一個人都會擁有和你同樣的分支。而 Git,每一個工做成員能夠任意在本身的本地版本庫開啟無限個分支。
    2. 然而,處理GIT的分支倒是至關的簡單和有趣。你能夠從同一個工做目錄下快速的在幾個分支間切換。你很容易發現未被合併的分支,你能簡單而快捷的合併這些文件。
  4. GIT沒有一個全局的版本號,而SVN有:
  5. GIT的內容完整性要優於SVN:GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時下降對版本庫的破壞
  6. Git下載下來後,在本地沒必要聯網就能夠看到全部的log,很方便學習,SVN卻須要聯網
  7. 版本庫:

    1. SVN只能有一個指定中央版本庫。當這個中央版本庫有問題時,全部工做成員都一塊兒癱瘓直到版本庫維修完畢或者新的版本庫設立完成。

    2. 而 Git能夠有無限個版本庫。或者,更正確的說法,每個Git都是一個版本庫,區別是它們是否擁有活躍目錄(Git Working Tree)。若是主要版本庫(例如:置於GitHub的版本庫)發生了什麼事,工做成員仍然能夠在本身的本地版本庫(local repository)提交,等待主要版本庫恢復便可。工做成員也能夠提交到其餘的版本庫!

2. git經常使用命令

git init      #把當前目錄變成git能夠管理的倉庫
git add "read.me"        #git add + 要提交的文件名. 把文件添加到倉庫
git commit -m "要提交的說明"    
git status        # 查看倉庫當前狀態
git diff            #查看修改內容
git log            #查看說起日誌
git reset --hard HEAD^        #回退到HEAD開頭的版本庫
git reflog        #查看命令歷史,以便肯定要回退到哪一個版本庫

git checkout -- <filename>      #把文件在工做區的修改所有撤銷。即回退到最近一次git commit或git add時狀態
git reset HEAD <filename>       #把暫存區的修改回退到工做區。用HEAD表示最新的版本
#若是已經提交了不合適的修改到版本庫,想要撤銷本次提交,只要尚未推送到遠程庫,可用版本回退

git rm <filename>      #刪除文件
git checkout -- <filename>    #恢復

git remote add origin git@github.com:xzhyj93/reposName.git    #本地倉庫關聯遠程庫
git push -u origin master      #把本地庫master分支下的內容推送到遠程庫。第一次使用參數-u表示把本地的master分支和遠程的master分支關聯起來
git push origin master

git clone git@github.com:xzhyj93/respoName.git    #從遠程庫克隆。
            #git支持多種協議,git://使用ssh,也可使用https


git checkout -b dev    #建立並切換到分支dev,至關於下面兩條命令
git branch dev       #建立分支dev
git checkout dev      #切換到分支dev
git branch          #查看當前分支。會列出全部分支,當前分支前面會標一個*號
git merge dev        #把dev分支的工做成果合併到master分支上
git branch -d dev      # 刪除dev分支

git stach           #保存當前工做現場
git stash list       #查看stash
git stash apply       #回覆工做現場(並不刪除)
git stash drop       #刪除工做現場
git stash pop       #恢復並刪除stash
git stash apply stash@{0}  #恢復指定stash


git remote         #查看遠程庫信息
git remote -v       # 查看更詳細的遠程庫信息
#遠程多人協做
git push origin brach-name        #從本地推送失敗
git pull                   #若是推送失敗,使用這個命令抓取遠程的新提交。若是有衝突,要先處理衝突
git checkout -b dev origin/dev      #建立遠程origin的dev分支到本地
git branch --set-upstream branch-name origin/branch-name    # 創建本地分支和遠程分支的關聯

git tag v1.0      #打標籤
git tag         #查看全部標籤
git show <tagname>    #看到說明文字,查看標籤信息
git tag -d <tagname>   #刪除標籤

 

3. 關於git的暫存區和工做區

  1. 工做區(Working Directory):
    1. 就是在電腦裏能看到的目錄
  2. 版本庫(Repository):
    1. 工做區的隱藏目錄.git就是版本庫
    2. 包含:1)暫存區(stage/index);2)分支master,以及指向master的指針HEAD;3)其餘

   提交的過程:

  1. git add:把文件修改添加到暫存區
  2. git commit提交更改,其實是把暫存區的全部內容提交到當前分支
  3. 提交後,若是沒有對工做區作任何更改,那麼工做區就是乾淨的。

參考:git和SVN的區別

     廖雪峯:Git學習

相關文章
相關標籤/搜索