面试篇-Web基础

TCP与UDP以及HTTP的区别

  • TCP网络传输协议 :需要先建立连接通道才能进行传输,安全
    例如:打电话,需要对方接通才可以进行通话
    应用:建立Session一次会话连接
  • UDP数据报信息:不需要和对方建立连接就可以传输,可以传输大数据量,不安全
    例如:发报纸。不需要考虑对方是否能接受到,只负责发出去
    应用:发送邮箱或者短信
  • HTTP 超文本网络传输协议 :在TCP网络传输协议基础上升级,针对用户服务的协议,用户服务体现在应用程序之间的交互
    强调请求三件套(请求行,请求头,请求体),响应三件套(响应头,响应行,响应体)
    应用:浏览器端和服务器端通过HTTP协议保持通信
TIP/IP网络通信协议模型及端口号
  • 网络接口层:
  • 网际层:IP,ICMP,ARP
  • 传输层:TCP,UDP
  • 应用层:HTTP 80,HTTPS 443,SMTP,FTP 21,TELNET 23,SNMP
OSI七层物理模型
HTTP请求报文和响应报文

HTTP请求报文(请求行+请求头+请求体):
在这里插入图片描述
HTTP响应报文(响应行+响应头+响应体):
在这里插入图片描述

层协的议服务于上层协议

HTTP状态码
  • 200: OK 请求响应成功
  • 303:See Other 重定向其他页面
  • 400: 请求无效,请求参数有误http格式有误
  • 404: Not Found 访问不到资源,请求路径有问题,或者服务器不存在
  • 500: Internal Server Error 服务器发生错误

HTTP协议的状态码在响应行
状态码首位规则:1 消息响应 2 成功响应 3重定向 4客户端错误 5服务端错误

Cookie和Session的区别

  • Cookie域浏览器存储用户缓存信息的地方,不同页面对应一个Cookie对象
    同一个站点最多保存20个Cookie,单个Cookie数据大小不能超过4k
  • Session域服务器存储用户缓存信息地方,不同浏览器对应一个Session对象
    每个浏览器记录SessionId,不同浏览器对应不同的SessionId,可存储数据较大
Cookie有什么优点?
  1. 判断用户是否登录,下次可以直接显示登录信息并登录,如果删除cookie,则每次需要重新填写登录信息
  2. 同一站点不同页面的购物商品的信息最终付款时将不同页面的Cookie信息提取合并
Cookie为什么不安全?

Cookie不安全,服务器端可以解析浏览器的本地Cookie而读取用户的信息,
将不重要的信息可以存放到Cookie

setMaxAge(int)方法设置cookie缓存保留时间

为什么选择使用Session?

Session安全,将一些敏感的数据存远端的服务器Session中其他服务器无法窃取

防止服务内存压力过大,Session关闭或定时会自动销毁数据
invalidate()方法强制结束占用时间长的会话
setMaxInactioveInterval(int)方法设置当前会话缓存保留时间

浏览器Cookie被禁用如何获取Session数据?

第一次请求访问服务器后,服务器作出响应并返回SessionId,SessionId被JavaScript获取并下一次请求时携带

Post和Get的区别

相同点
都可以先服务器发送请求,并携带传输实体

不同点
GET请求:

  1. 一般用于获取信息:指定资源经过服务器响应内容,发送请求参数可以追加到URL末尾传值,以便于?发送给服务器,
    将传输数据存放在HTTP报文实体的Head头中,提交URL末尾将传输内容暴露不安全,提交数据量小

POST请求:

  1. 一般用于更新信息:将传输数据防止在HTTP报文实体的主体中,不会暴露传输实体的内容,安全,提交数据量大
用途
  • GET 适用于 查询 删除
  • POST 适用于 添加 更新
应用场景

项目中使用RESTful架构风格,通过HTTP,根据GTE请求或POST请求做操作

请求转发和重定向的区别

  • 请求转发request: 请求ServletA,ServletA私下访问ServletB请求路径无变化
    例如:你开一张票据,让服务员A去做一件事,服务员A私下寻找服务员B,将事情办好后给你答复

优点: 一个requset对象数据,可以两个page页面数据作用域共享
缺点: 仅访问当前应用页面

  • 重定向response:第一次请求ServletA响应获取到ServletB的URl,然后浏览器第二次发送请求ServletB,请求路径发生了变化
    例如:你开一张票据,让服务员去做一件事,服务员返还给你一张票据,让你去寻找另一个服务员

优点: 可以转向任意其他网站页面
缺点: 一个requset对象数据作用域不共享,两次请求生成两个request对象

如何获取请求转发和重定向?
  • 请求转发
    HttpServletRequest对象
    getRequsetDispatcher(String path)方法
    ServletContext对象
    getRequsetDispathcer(String path)方法
    RequestDispatcher对象
    forward(ServletRequest request, ServletResponse response)方法

  • 重定向
    HttpServletResponse 对象
    sendRedirect()方法

请求转发和重定向的应用?

请求转发:可以访问web-inf下的文件
重定向:实现图片的异步上传

--------------------前端篇---------------------

什么是JSON数据

JavaScript的专属数据格式Json,JavaScript可以对Json格式数据直接使用

普通格式 {“key”:“value”}
数组格式 [{“key”:“value”},{“key”:“value”}]
复杂格式 {“key”:{“key”:“value”}}
复杂数组格式 [{“key”:{“key”:“value”}},{“key”:{“key”:“value”}}]

Json能做什么?
  1. 前后端数据交互:Json格式数据可以在JavaScript对象和字符串之间来回转换
  2. 跨域传输
  3. 跨语言传输
Json格式数据的注意事项

普通格式:字符串 数值型(十进制) 布尔值 null
数组格式:数组 对象 ,禁止正则,函数和日期

Jquery Ajax异步请求

同步与异步区别?

同步: 整个页面全部刷新,需要等待整个页面
异步: 按需获取局部位置的信息,俗称局部刷新

异步提交如何改为同步提交?

将jax参数Async参数修改为flase

Ajax参数都有哪些?

url:请求地址,string类型
Data:发生的数据,string或objcet类型
Type:请求方式,string类型
DataTpye:预期返回值类型,string类型
Timeout:请求超时时间(毫秒),number类型
Async:异步默认为true(默认),boolean类型
Cache:从浏览器缓存加载信息默认为true,boolean类型
BeforeSend:发送请求之间做多事情,添加自定义Http头,function类型

success:function成功触发的函数
error:function失败触发的函数

Ajax的优缺点
  • 优点: 服务器压力小,按需取数据,局部刷新减少等待
  • 缺点: Ajax大量使用Js和ajax引擎,取决于浏览器的支持,考虑浏览器的兼容性,并且局部刷新没有后退按钮
使用场景

省市区三级联动,按省市区下拉列表自动加载

Jquery选择器

选择器分为哪四大类:
  • 基本选择器
    – id选择器${"#id"}
    – class选择器${“element”}
    – 标签选择器${".class"}

  • 层级选择器
    – 父子选择器ancestor descendant
    – 后代选择器parent > child
    – 相邻选择器prev + next
    – 兄弟选择器prev ~ siblings

  • 过滤选择器
    – 基本过滤
    – 内容过滤
    – 可见性过滤
    – 属性过滤器
    – 子元素过滤
    – 表单对象属性顾虑

  • 表单选择器[重点]

--------------------后端篇--------------------

Servlet的生命周期

  1. HTTP请求:浏览器➡服务器
  2. Web服务器解析: 设计模式比较创建哪个子类的Handler的实例
  3. 实例化:创建Servlet实例
  4. 初始化:调用init()
  5. 服务:调用Service()
  6. 响应服务器:Servlet➡服务器
  7. 响应浏览器:服务器➡浏览器
  8. 销毁:调用desroy()

实例化: (单例)仅执行一次
初始化: 仅执一次
服务: 多线程的每次访问都执行
销毁: Web服务器停止或应用卸载

如何保证Servlet服务的线程安全问题?
  1. 继承SingleThreadModel
    缺点:打破单例Servlet实例,加大内存开销
  2. 必须避免使用全局变量共享数据,使用局部变量,每个线程执行Service()使用自己的变量
  3. 通过ThreadLocal ,内部结构是Map结构,会创建多个副本,当前线程作为key,每个线程对应一个ThreadLocal的一个Map副本,不会发生共享数据
  4. 使用线程锁
浏览器如何访问Servlet?

通过xml配置里的标签寻址➡地址对应Servlet➡执行Service()服务

JSP与Serlvet

  • 什么是JSP?
    JSP JavaServerPage (Java服务端页面)动态页面,jsp = html+java
  • 什么是Servlet?
    小型服务器程序,控制器,每个业务模块对应一个Servlet,纯Java

JSP和Servlet均属于SUN公司定义的一种开发动态Web资源的技术

JSP的执行原理

翻译.jsp ➡ 编译.java ➡ 执行.class

为什么说Jsp是Servlet的升级版?

运行Web服务端➡
进入work文件目录寻找项目空文件夹➡
浏览器端访问Web浏览器➡
访问.Jsp浏览页面项目空文件夹自动生成.java和.class文件➡
打开.java文件主类的继承父类HttpJspBean➡
继续点击HttpJspBean的继承父类HttpServlet

Jsp间接的继承HttpSerlvet类,并重写了HttpServlet方法

Servlet的注意事项

浏览器访问服务器发送请求时,才会创建Servlet对象,它提供了生命周期: 实例化,初始化,服务和销毁.可以在初始化方法设置一些初始数据.Serlvet线程不安全,多线程单实例执行并发访问同一资源,引发线程安全问题,必须避免使用全局变量,应该使用局部变量

JSP的九大内置对象

JSP对象原型功能
pageObjcet当前this对象代表当前Servlet实例
outJspWriter,与PritinWriter对继承Writer字符输出流
responseHttpServletResponse通过HTTP协议响应到浏览器的数据
pageContextPageContext代表当前页面信息,可以创建并获取其他8个隐式对象。可以获取四大作用域
requestHttpServletRequest通过HTTP协议请求到服务器的数据
sessionHttpSerssion代表当前会话信息
applicationServletContext代表整个应用信息
configServletConfig获取xml文件的Servlet配置信息
exceptionThrowable显示异常信息,需要isErrorPage=”true“
JSP四大作用域
  • PageContext
    pageConext 仅页面有效,存放当前页面的数据,使用较少
  • SerlvetRequset
    requset 仅一次请求(转发)内有效,使用非常多
  • HttpSerssion
    session 作用域仅当前会话,存放用户的登录信息,各个页面的购物车信息,使用较多
  • SerlvetContext
    application 作用域整个应用,作用域大,谨慎使用
四大作用域由小到大

page(一个页面,转发后不会存在) < request(一个请求,重定向后不会存在) < session(整个会话,换一个浏览器将会失效) < application(整个Web应用,切换Web应用失效)

JSTL标签

建立在EL基础语言上,解决EL表达式不能复杂循环操作的问题的标签

使用过什么JSTL标签?

常见的由Core标签库,c标签的使用

  • 通用标签
    – set 设置变量
    – out 输出数据
    – remove 溢出变更

  • 条件标签
    – if
    – choose 相当于swich语句

  • 迭代循环
    – 普通循环
    – 迭代器循环

JSP动作标签

<jsp:forward>请求转发
<jsp:param>页面传递数据
<jsp:include>动态包含

JSP动作标签 静态包含和动态包含的区别

静态包含<%:include> 嵌入内容,不能传入参数
动态包含<jsp:include> 嵌入结果,可以传递参数

避错小节

如何防止表单重复提交数据?

表单重复提交相同请求产生的原因?

网络延迟,用户重复提交,发生重复提交

表单重复提交的解决方案?
  1. 数据库主键唯一约束.相同数据不做任何处理.
  2. 提交之后响应重定向.避免用户重复点按钮
  3. 页面 JavaScript 逻辑标识,提交后用户点击按钮会判断逻辑标识,作出提示"信息已提交"
  4. 利用Sessino:生成Toeken令牌,第一次提交Session没有携带token,于是生成token令牌并做记录,然后进行表单内容保存数据库,第二次重复提交token相同,不做任何操作

跨域

同源策略 :不支持两个域进行交互

静态标签 跨域问题

Ajax 不能跨域
Cookie 不能跨域
LocalStorage 不能跨域

解决方案:
一、CORS (Get put delete update) @CrossOrigin前台会增加一个响应头
二、JSONP (仅支持get请求)

JSONP

WebSocket 服务端和客服端简历三次握手(连接)

双全工通信

客户端 请求头 : Upgrade(不是HHTP协议) 对应WebSocket

Tomcat 对 Websocket 支持

编程式
注解式 @ServerEndnPoint

生命周期:
@OnOpen 打开连接
@OnMessage
@OnError服务端报错触发
@OnClose连接关闭

服务端给客户端推数据

WebSocekt基于H5的新协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值