学习面经----2
Posted 寂静花开
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习面经----2相关的知识,希望对你有一定的参考价值。
目 录
- 1.http状态码
- 2.get和post区别
- 3.数据库三范式
- 4.mysql索引,需要遵循什么原则
- 5.磁盘上有8G大的文件,里面都是 int,内存只有2G,我想把文件排序,你打算怎么排?
- 6.lru lfu是什么,在哪用到了这种算法?
- 7.http https什么区别?
- 8.tcp udp什么区别
- 9.从输入域名到浏览器看见页面经历了什么过程?
- 10.算法:一个单调栈的题。
链接:https://www.nowcoder.com/discuss/811065
来源:牛客网
1.http状态码
HTTP状态码表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常或者是出现的错误,能够根据返回的状态码判断请求是否得到正确的处理很重要。
状态码由3位数字和原因短语组成 ( 三个十进制数字组成,第一个十进制数字定义了状态码的类型 )
HTTP 状态码共分为以下 5 种类型:
类别 原因短语
1xx : Information(信息状态码) 接受的请求正在处理
2xx : Success(成功状态码) 请求正常处理完毕
3xx : Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx : Client Error(客户端错误状态码) 服务器无法处理请求
5xx : Server Error(服务端错误状态码) 服务器处理请求出错
详细见:
面试官问你HTTP状态码,你敢答吗?
HTTP常见状态码(14种)
2.get和post区别
GET和POST都是是HTTP协议中的两种发送请求的方法。
同时,HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样的。
但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据
除了上面几点,GET和POST还有一个重大区别,简单的说,就是
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
那post能在url上拼吗?
可以,因为GET/POST都是TCP链接,能做的事情是一样的,所以给GET加上request body,给POST带上url参数,技术上是完全行的通的。
3.数据库三范式
三范式的目的是为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
- 第一范式(1NF,Normal Form):属性不应该是可分的。举例:如果将“电话”作为一个属性(一列),是不符合1NF的,因为电话这个属性可以分解为家庭电话和移动电话…如果将“移动电话”作为一个属性,就符合1NF;
- 第二范式 2NF:每个非主属性完全依赖于主属性集(候选键集),确保表中的每列都和主键相关,消除部分依赖。;
- 第三范式 3NF:在 2NF 的基础上,非主属性不传递依赖于主属性,确保每列都和主键列直接相关,而不是间接相关,消除传递依赖,非主属性的依赖。
按照三范式来构建数据库可以减少冗余数据、修改异常、删除异常、插入异常等异常。
详细见:数据库三范式详解
4.mysql索引,需要遵循什么原则
详细见:
MySQL创建索引需要遵循的原则
Java面试题——索引解决什么问题?遵循怎样的原则?
如果我建a b c 三个字段的索引,查询时候用 where b<1 and a=1 这样能用到吗
能用,但是不推荐。在查询的时候应该尽量优化SQL语句。
尽量避免在 where 子句中使用!=
、<
、>
操作符或对字段进行null值判断,否则将引擎放弃使用索引而进行全表扫描。
(这里目前不对)
嗯,那这句sql究竟用到了那几个索引呢
ab都用到了
(这里目前不对)
什么字段适合建索引
索引是建立在数据库表中的某些列的上面,一般来说,应该在这些列上创建索引,例如:
- 在经常需要搜索的列上,可以加快搜索的速度;
- 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
- 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
- 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
- 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
- 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
详见:MySQL数据库建立索引的优缺点以及什么样的字段适合建立索引
5.磁盘上有8G大的文件,里面都是 int,内存只有2G,我想把文件排序,你打算怎么排?
外排序:路归并加败者树
详见:
外部排序算法总结
Java实现外部排序
6.lru lfu是什么,在哪用到了这种算法?
缓存淘汰算法
7.http https什么区别?
HTTP是超文本传输协议,HTTPS是安全套接字层超文本传输协议。
HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。而HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
两者的区别主要有:
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
8.tcp udp什么区别
用户数据报协议UDP:
(User Datagram Protocol)
无连接
支持一对一,一对多,多对一和多对多交互通信。
对应用层交付的报文直接打包,面向报文
尽最大努力交付,也就是不可靠;
不使用流量控制和拥塞控制。
首部开销小,仅8字节
传输控制协议TCP:
(Transmission Control Protocol)
面向连接
每一条TCP连接只能有两个端点EP, 只能是一对一通信。
面向字节流
可靠传输,使用流量控制和拥塞控制。
首部最小20字节,最大60字节
9.从输入域名到浏览器看见页面经历了什么过程?
主要是域名解析的过程
详见:
面试题:从用户在浏览器输入域名,到浏览器显示出页面,这中间发生了什么(工作过程)?
详解DNS域名解析全过程
10.算法:一个单调栈的题。
以上是关于学习面经----2的主要内容,如果未能解决你的问题,请参考以下文章