面试总结--01
Posted znwithlc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试总结--01相关的知识,希望对你有一定的参考价值。
昨天面试感觉技术不够好的样子,回答的太过于急躁,内心不够沉淀。总归来说还是内力不够深厚。
总结几个问题吧,感觉出现过而自己没有太过于重视。
1、get与post的区别
查找资料发现这个问题的答案还真是不太一样,每个人都有不同的说法,我就总结一些在面试中至少还说的过去的答案吧。
①:get请求时将请求参数放在URL地址栏后面,post请求将请求参数放在请求体中。
②:get请求一般用于向服务器请求数据,post请求一般用于向服务器发送数据。(关于这点我觉得还说的过去的,因为一般提交的数据涉及安全和数据量的时候会考虑到post方法吧,而关于get一般用于向服务器请求数据的原因看③④点)。
③:get请求浏览器会有数据缓存,这样在页面进行回退的时候不会再发送请求,post请求浏览器没有数据缓存,页面回退的时候会再一次发送请求。
④:get请求产生一次TCP数据包(HTTP Header + data得到服务器响应200则返回数据),post请求会产生二次TCP数据包(先发送header,服务器响应100,则继续发送data,服务器响应200,返回数据)。
⑤:get与post安全性上的差异。
2、n+1问题
关于这个问题,首先应该明白什么是n+1问题。
①:对于一对多,例如订单表和订单商品表。查询订单表时会自动关联每个订单的订单商品。这样查询订单时用掉了一条sql语句,查出了n条订单数据。然后hibernate会挨个找出n个订单对应的订单商品,又用掉n条sql语句,一共是n+1条。
②:对于多对一,同样是订单表和订单商品表。查询订单商品时hibernate会自动关联每个订单商品的订单。这样查询订单商品时用了一条语句,查出了n条订单商品。然后hibernate挨个找到每个订单商品的订单,又用掉了n条sql语句,一共是n+1条。
解决方案:
1)lazy=true, hibernate3开始已经默认是lazy=true了;lazy=true时不会立刻查询关联对象,只有当需要关联对象(访问其属性,非id字段)时才会发生查询动作。
2)使用二级缓存, 二级缓存的应用将不怕1+N 问题,因为即使第一次查询很慢(未命中),以后查询直接缓存命中也是很快的。刚好又利用了1+N 。
3 ) 当然你也可以设定fetch="join",一次关联表全查出来,但失去了延迟加载的特性。
以上是关于面试总结--01的主要内容,如果未能解决你的问题,请参考以下文章
大数据面试题--最真实面试总结!!BAT等一线大厂,学长们实测!!
[干货]2017已来,最全面试总结——这些Android面试题你一定需要
Java核心面试宝典Day14“线程池”高频面试题总结!✊✊✊
Java核心面试宝典Day14“线程池”高频面试题总结!✊✊✊