javaweb面试题

57 ajax的概念

  • 异步js+xml技术,是原有技术的结合体
  • 原理:在用户层与服务器层增加了一套ajax服务引擎,使得用户操作与服务器响应异步化,而且不是所有请求都要经由服务器处理,某些数据验证及处理ajax本身也能完成,只有当确实需要服务器处理时才通过ajax向服务器发送请求
  • 优点:①页面无刷新更新 => 更快的加载 ,更强的性能 => 更好的用户体验,如搜索栏弹出提示框,用户添加购物车②异步通信,更快的响应,避免了用户界面出现卡死的情况③前后端负载均衡,一方面ajax引擎帮助服务端处理数据,另一方面推崇按需取数据避免冗余请求,降低了服务器端压力④促进了前后端分离技术的发展

58 servlet的声明周期

  • 初始化阶段,Servlet容器加载Servlet方法,并调用init方法进行初始化Servlet,有以下几种情况会加载Servelt①服务器启动自动装载一些Servlet②Servlet容器启动时用户首次发起请求③Servlet类文件被加载时
  • 处理用户请求阶段,用户每发起一个Servlet请求服务器就会创建一条线程区去处理,调用service()方法,并通过用户请求的类型来判断是使用post方法还是get方法
  • 销毁阶段,web容器或者Servlet容器停止时或Servlet重新加载时,servlet执行完毕调用destory方法进行处理

59 对Session的理解

  • 位置上:Session存储在服务器端
  • 创建过程:用户通过浏览器首次访问某服务器时,服务器端会开辟一块内存生成session,这个session与访问的浏览器一对一关联在一起,同时tomcat生成jsessionId来标识这个session
  • 意义:session表示和浏览器的一段会话
  • 底层:session的底层是cookie,并通过一个name为JSESSIONID的cookie来唯一标识这个session(标识服务器端是和那个客户浏览器建立的会话),每次请求服务器端都会获取这个cookie的JSESSIONID,只要JSESSIONID不变无论多少次请求服务器端都能获取到唯一的会话session,但如果删除或修改了这个jseesionid那么即使服务端内存还有那个session,但由于无法标识的缘故还要重写进行创建
  • 用法:因为http是无状态的,session可以将两个页面管理起来,例如①登录页登录成功将用户信息保存到session后显示到首页②添加购物车,将购物车信息保存到session,这样在确认支付页面和付款页都能通过session动态获取购物车信息

60 对Cookie理解

  • 位置上:存储在浏览器端
  • 创建过程:由服务器端创建,并通过response通知浏览器端以键值对的形式进行存储
  • 意义:web应用在浏览器端缓存的服务器数据或文件
  • 用法,每次客户端发送request给将cookie一并发送给服务器
  • 缺点:引发安全性问题,占用浏览器空间

61 Cookie vs Session

  • 存储位置:cookie位于浏览器端,Seesion位于服务器端
  • 安全性:Session高于Cookie
  • 存储数据大小不同:Session上限受服务器端影响,Cookie最大为4K
  • 数据格式不同:Session的value上存储的是Object类型,Cookie的Value上存储的是String类型,如果想要存储对象类型需要转化为JSON格式
  • 生命周期不同:Cookie默认是会话级别,也就是随着浏览器的关闭而结束,或者自定义设置时间;Session默认都是30分钟,不会随着浏览器的关闭而结束,时间需要在服务器端设置
  • 关系:session的底层是cookie,并通过一个name为JSESSIONID的cookie来唯一标识这个session(服务器端和那个客户浏览器建立的会话),每次请求服务器端都获取这个cookie的JSESSIONID,只要JSESSIONID无论多少次请求服务器端都能获取到唯一的会话session,但如果删除或修改了这个jseesionid那么即使服务端内存还有那个session,但由于 无法标识的缘故还要重写进行创建

62 重定向 vs 请求转发

  • 请求次数:重定向是客户端内的的跳转,所以是两次请求;请求转发始终都是一次请求,发送在服务器内部,客户端是感受不到的
  • 原先request数据:重定向获取不到先前request域中的数据,如需数据交互就需要使用session,请求转发能获取到最初数据
  • 关键字:重定向时redirect,请求转发是forward
  • 是否能访问网站外:重定向可以是站外访问,因为重定向时客户端的跳转,请求转发因为是站内跳转,所以不可能访问到外网;
  • 重复提交问题上,表单提交推荐使用重定向,防止在表单跳转过程中或或跳转后重复提交表单

63 javaEE三层架构
web层:负者和用户交互并对外提供接口,对应框架是SpringMVC,mvc是对web层的进一步划分

  • model层:数据模型层,存放数据库实体类entity
  • view层:视图层,存放各种前端资源如html,css,js,img…是用于渲染前端页面的
  • Controller/Servlet层:控制器层,负责接收请求,调用service层方法进行处理,并选择相应的已解析的前端页面渲染给用户,如果是ajax请求,那么只是将最终结果以json的格式回传即可
    业务逻辑层:实现业务逻辑模块(filter,listeren,config),对应着Spring
    数据存储层:将业务逻辑层的处理结果持久化储存到数据库,对应着mybatis,任务是和数据库连接并将操作持久化作用于数据库

64 jsp九大内置对象和四大域对象

  • ServletContext context域对象,在项目全局可用,慎用,不易被回收,太费存储空间
  • HttpSession session域对象,在一次会话中有效(贯穿多个请求与相应)
  • HttpServletRequest request域对象,在当前请求中可用(请求转发有效,重定向无效),推荐使用
  • PageContext page域对象,只能在当前jsp内使用(当前页面)

65 如何解决sql注入
① javawen中使用prepareStatement代替statement,此外还可以提高执行效率
② mybatis中使用#{}

66 前后端分离
前端(html img js css) 通过ajax请求的方式发送请求到后端开发的接口(此接口不是interface,而是mapper->service->controller),后端处理完毕统一返回所需的json格式的数据(通常要开会协调,指明数据格式ResultEntity),职责分明(前端接收并渲染数据,后端处理数据)

优点:

  • 应用程序的角度:程序耦合度大大降低,不必再将后台代码嵌入到前端代码,减轻服务器压力,代码可读性与复用性增强,更容易找bug
  • 实际开发的角度:前后端人员同步独立开发,除了json格式外没有额外交集,各自专注于自己的领域,大大提高了开发效率

67 如何防止表单重复提交

  • 如果是请求转发的方式提交的表单,那么提交完表单后每按一次f5都代表发送了一个表单提交请求,这是最容易造成请求转发的情况了,表单提交的次数+1,需要用重定向代替请求转发来解决这个问题

  • 由于网络延迟(线程sleep)用户第一次点击按钮无效,点击多次,重复提交

  • 用户提交成功,点击网页回退按钮,重复提交

原理是第一次生成验证码的存储在特定的session中,提交时会有比对操作,在登录信息正确基础上,如果相同那么验证成功且删除原先存储验证码的session,这样中途网络故障或故意回退都不会再通过

你可能感兴趣的:(面试)