网络
# 1 TCP&UDP区别,TCP三次握手目的,OSI七层模型,get和post区别
# 题⽬描述
# 1 简述tcp和udp的区别?
- TCP⾯向连接(如打电话要先拨号建⽴连接);UDP是⽆连接的,即发送数据之前不需要建⽴连接。
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,⽆差错,不丢失,不重复,且按序到达;UDP尽最⼤努⼒交付,即不保证可靠交付。
- Tcp通过校验和,重传控制,序号标识,滑动窗⼝、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进⾏顺序控制。
- UDP具有较好的实时性,⼯作效率⽐TCP⾼,适⽤于对⾼速传输和实时性有较⾼的通信或⼴播通信。
- 每⼀条TCP连接只能是点到点的;UDP⽀持⼀对⼀,⼀对多,多对⼀和多对多的交互通信
- TCP对系统资源要求较多,UDP对系统资源要求较少。
# 2 tcp为什么要三次握⼿,两次不⾏吗?为什么?
为了实现可靠数据传输,TCP协议的通信双⽅,都必须维护⼀个序列号,以标识发送出去的数据包中,哪些是已经被对⽅收到的。三次握⼿的过程即是通信双⽅相互告知序列号起始值,并确认对⽅已经收到了序列号起始值的必经步骤。
如果只是两次握⼿,⾄多只有连接发起⽅的起始序列号能被确认,另⼀⽅选择的序列号则得不到确认。
# 3 OSI的七层模型都有哪些?
- 应⽤层:⽹络服务与最终⽤⼾的⼀个接⼝。
- 表⽰层:数据的表⽰、安全、压缩。
- 会话层:建⽴、管理、终⽌会话。
- 传输层:定义传输数据的协议端⼝号,以及流控和差错校验。
- ⽹络层:进⾏逻辑地址寻址,实现不同⽹络之间的路径选择。
- 数据链路层:建⽴逻辑连接、进⾏硬件地址寻址、差错校验等功能。
- 物理层:建⽴、维护、断开物理连接。
# 4 get和post请求有哪些区别?
- GET在浏览器回退时是⽆害的,⽽POST会再次提交请求。
- GET产⽣的URL地址可以被Bookmark,⽽POST不可以。
- GET请求会被浏览器主动cache,⽽POST不会,除⾮⼿动设置。
- GET请求只能进⾏url编码,⽽POST⽀持多种编码⽅式。
- GET请求参数会被完整保留在浏览器历史记录⾥,⽽POST中的参数不会被保留。
- GET请求在URL中传送的参数是有⻓度限制的,⽽POST么有。
- 对参数的数据类型,GET只接受ASCII字符,⽽POST没有限制。
- GET⽐POST更不安全,因为参数直接暴露在URL上,所以不能⽤来传递敏感信息。
- GET参数通过URL传递,POST放在Requestbody中
# JSP
# 1.jsp和servlet有什么区别?
jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP
的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
jsp更擅⻓表现于⻚⾯显⽰,servlet更擅⻓于逻辑控制。
Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,
HttpServletResponse对象以及HttpServlet对象得到。
Jsp是Servlet的⼀种简化,使⽤Jsp只需要完成程序员需要输出到客⼾端的内容,Jsp中的Java脚
本如何镶嵌到⼀个类中,由Jsp容器完成。⽽Servlet则是个完整的Java类,这个类的Service⽅法⽤于⽣成对客⼾端的响应。
# 2.jsp有哪些内置对象?作⽤分别是什么?
JSP有9个内置对象:
request:封装客⼾端的请求,其中包含来⾃GET或POST请求的参数;
response:封装服务器对客⼾端的响应;
pageContext:通过该对象可以获取其他对象;
session:封装⽤⼾会话的对象;
application:封装服务器运⾏环境的对象;
out:输出服务器响应的输出流对象;
config:Web应⽤的配置对象;
page:JSP⻚⾯本⾝(相当于Java程序中的this);
exception:封装⻚⾯抛出异常的对象。
# 3.说⼀下jsp的4种作⽤域?
JSP中的四种作⽤域包括page、request、session和application,具体来说:
page代表与⼀个⻚⾯相关的对象和属性。
request代表与Web客⼾机发出的⼀个请求相关的对象和属性。⼀个请求可能跨越多个⻚⾯,涉及多个Web组件;需要在⻚⾯显⽰的临时数据可以置于此作⽤域。
session代表与某个⽤⼾与服务器建⽴的⼀次会话相关的对象和属性。跟某个⽤⼾相关的数据应该放在⽤⼾⾃⼰的session中。
application代表与整个Web应⽤程序相关的对象和属性,它实质上是跨越整个Web应⽤程序,包括多个⻚⾯、请求和会话的⼀个全局作⽤域。
# 4.session和cookie有什么区别?
由于HTTP协议是⽆状态的协议,所以服务端需要记录⽤⼾的状态时,就需要⽤某种机制来识具体的⽤⼾,这个机制就是Session.典型的场景⽐如购物⻋,当你点击下单按钮时,由于HTTP协议⽆状态,所以并不知道是哪个⽤⼾操作的,所以服务端要为特定的⽤⼾创建了特定的Session,⽤⽤于标识这个⽤⼾,并且跟踪⽤⼾,这样才知道购物⻋⾥⾯有⼏本书。这个Session是保存在服务端的,有⼀个唯⼀标识。在服务端保存Session的⽅法很多,内存、数据库、⽂件都有。集群的时候也要考虑Session的转移,在⼤型的⽹站,⼀般会有专⻔的Session服务器集群,⽤来保存⽤⼾会话,这个时候Session信息都是放在内存的,使⽤⼀些缓存服务⽐如Memcached之类的来放Session。
思考⼀下服务端如何识别特定的客⼾?这个时候Cookie就登场了。每次HTTP请求的时候,客⼾端都会发送相应的Cookie信息到服务端。实际上⼤多数的应⽤都是⽤Cookie来实现Session跟踪的,第⼀次创建Session的时候,服务端会在HTTP协议中告诉客⼾端,需要在Cookie⾥⾯记录⼀个SessionID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有⼈问,如果客⼾端的浏览器禁⽤了Cookie怎么办?⼀般这种情况下,会使⽤⼀种叫做URL重写的技术来进⾏会话跟踪,即每次HTTP交互,URL后⾯都会被附加上⼀个诸如sid=xxxxx这样的参数,服务端据此来识别⽤⼾。
Cookie其实还可以⽤在⼀些⽅便⽤⼾的场景下,设想你某次登陆过⼀个⽹站,下次登录的时候不想再次输⼊账号了,怎么办?这个信息可以写到Cookie⾥⾯,访问⽹站的时候,⽹站⻚⾯的脚本可以读取这个信息,就⾃动帮你把⽤⼾名给填了,能够⽅便⼀下⽤⼾。这也是Cookie名称的由来,给⽤⼾的⼀点甜头。所以,总结⼀下:Session是在服务端保存的⼀个数据结构,⽤来跟踪⽤⼾的状态,这个数据可以保存在集群、数据库、⽂件中;Cookie是客⼾端保存⽤⼾信息的⼀种机制,⽤来记录⽤⼾的⼀些信息,也是实现Session的⼀种⽅式。