【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学习

相关文章
相关标签/搜索