Java Web

  1. 什么是Servlet?
    • Servlet就是小程序服务或服务连接器,使用Java编写的服务器端程序,独立于平台与协议,Servlet能够交互式浏览和生成数据,生成动态web内容
  2. Servlet的生命周期?
    • 加载并实例化-->初始化【init()】-->处理请求【service()】-->服务终止【destory()】
  3. JSP和Servlet的区别?
    •  JSP的本质就是Servlet,我们可以这样认为JSP是简易的Servlet
    • 主要区别:
      • Servlet的应用逻辑是Java文件,而JSP是由http和Java组合的以jsp为扩展名的文件
      • Servlet侧重于控制逻辑,JSP侧重于表现层
  4. JSP有哪些内置对象?作用是什么?
    • request:封装客户端请求的对象,包含get和post请求的参数
    • response:封装服务器端的响应
    • pageContext:通过此对象可以获取到其他对象
    • session:封装用户会话的对象
    • application:封装服务器运行环境对象
    • out:输出服务器响应的输出流对象
    • config:WEB应用的配置对象
    • page:JSP本身
    • exception:封装抛出异常的对象
  5. JSP的4中作用域分别是什么?
    • page:当前页面可用
    • request:一次请求
    • session:一次会话
    • application:当服务器关闭
  6. Ajax中浏览器的缓存问题如何解决?
    • 原因:
      • Ajax提高页面的载入速度的原因是通过Ajax减少加载重复的数据,也就是说Ajax在每次加载数据时都会将数据缓存到内存中,只要页面没有刷新缓存就一直存在。这样做降低了系统的负载,提高了用户的体验度,但我们不能拿到最新的数据,从而产生了Ajax的缓存问题
    • 解决方式:
      • 使用JQuery,$.ajaxSetup({cache:false});
      • 在Ajax请求的前面加上anAjaxObj.setRequestHandler("cache-control","no-cache");
      • 在请求的URl后面加上随机数,"fresh="+Math.random();
  7. session和cookie的区别?
    • 存储位置:session存放在服务器中,cookie存放在客户端浏览器中
    • 安全性:cookie不安全,因为存放在浏览器中,所以就有可能被篡改或伪造
    • 存储容量:cookie的存储容量是有限制的,每个cookie不能超过4K,而且每个站点对cookie的个数也是有限制的
    • 存储的多样性:session能够保存在Redis、数据库和应用程序中,cookie只能存在浏览器中
  8. 说一下session的工作原理?
    • 在我们使用session时,服务器会创建对应的session,并且将sessionId传给客户端存入cookie中,在客户端再次访问时,会通过sessionId找到对应的session完成后续操作
  9. 如果客户端禁止cookie能实现session吗?session还能使用吗?
    • 可以实现,因为session只需要cookie存储sessionId,在cookie被禁用之后,我们可以将sessionId加在URL上,从而保证session能够正常的使用
  10. get请求和post请求的区别?
    • 使用场景:get一般使用在服务器响应,post一般使用在客户端请求
    • 安全性:get的安全性较差会将请求的参数直接加在URL的后面,post的参数是在http包体中
    • 传输数据:get只能传输文本类型的数据,并且大小不能超过1024字节,post既能传输文本又能传输二进制的文件,默认没有限制
  11. 重定向和请求转发的区别?
    • 重定向:
      • 客户端行为,地址栏发生改变
      • 发送了两次请求,效率较低
      • 数据不共享
    • 请求转发:
      • 服务器行为,地址栏不发生改变
      • 发送一次请求,效率较高
      • 共享request对象的数据
  12. get与post请求request对象乱码问题如何解决?
    • tomcat7:
      • get请求:获取出现乱码的元素,将乱码元素的编码格式从ISO-8859-1改为UTF-8[new String(request.getParamter(name)).getBytes("ISO-8859-1","UTF-8")]
      • post请求:request.setCharacterEncoding("UTF-8")
    • tomcat8:
      • get请求:不会存在乱码
      • post请求:request.setCharacterEncoding("UTF-8")
  13. 如何避免SQL注入?
    • 使用预处理PreparedStatement
    • 使用正则表达式过滤字符中的特殊字符
  14. 说说TCP和UDP的区别?
    • TCP是面向连接,UDP是面向无连接的
    • TCP提供可靠的数据传输(三次握手与四次挥手),UDP是不可靠的数据传输
    • TCP的传输速度比较慢,UDP传输速度快
    • TCP是面向字节流的,UDP是面向报文的(报文包含需要发送的完整数据信息)
  15. 说说TCP的三次握手和四次挥手?
    • TCP连接的三次握手
      • 第一次握手:客户端发送请求报文SYN
      • 第二次握手:服务器发送响应报文ACK和同步报文SYN
      • 第三次握手:客户端发送响应报文ACK
    • TCP断开的四次挥手:
      • 第一次挥手:客户端发送请求断开报文FIN
      • 第二次挥手:服务器发送响应报文ACK,响应请求,继续处理数据
      • 第三次挥手:服务器数据处理完毕,发送断开报文FIN,断开连接
      • 第四次挥手:客户端发送响应报文ACK,表示成功断开
  16. 说说为什么TCP需要三次握手,两次握手行吗?
    • TCP连接只进行两次握手的话,代表服务器发送响应客户端的连接就成功建立连接,如果此时客户端没有对服务器的响应做任何操作,那么服务器就会一直处于等待客户端发送数据的状态,导致资源的白白消耗。采用TCP的连接三次握手,即使客户端没有对服务器的响应做任何操作,服务器也会重新发送请求进行确认,确认结果显示客户端没有建立请求,那么就直接断开就不会造成资源的浪费
  17. 说说TCP的粘包的原因?
    • 发送端:发送端等待缓冲区数据包占满,才发送出去,造成一次发送多个包
    • 接收端:接收端不及时获取缓冲区中的包,造成一次获取多个包
  18. 什么是XSS攻击,如何预防?
    • XSS(Cross Site Scripting)跨站脚本攻击,原理就是攻击者在WEB页面中使用恶意脚本代码(CSS代码、JavaScript代码等),在我们浏览页面时,这些代码也会被运行,从而达到攻击者的目的,如:cookie窃取,页面的重构以及重定向到其他页面
    • 预防:
      • 对输入的信息做过滤处理
  19. 什么是CSRF攻击,如何预防?
    • CSRF(Cross Site Request Forgrey)跨站请求伪造,可以这样理解攻击者伪装成你,使用你的名义来发送恶意请求。如:发送邮件、购买商品以及资金转账
    • 预防:
      • 在比较重要的操作部分添加验证码进行验证
      • 验证请求操作的源地址
      • 请求地址加上识别码并验证
  20. 如何实现跨域?
    • 使用Jsonp进行跨域,Jsonp是使用script标签的src连接可以访问不同源的特性,加载远程返回的“JS函数”来执行的
    • 在单接口使用注解@CrossOrigin运行跨域
  21. JDBC调用数据库的步骤?数据库操作流程?
    • JDBC获取数据库连接:
      • 创建properties的配置文件
      • 获取properties配置文件的流对象
      • 创建properties的配置文件对象
      • 使用properties对象load()方法加载流
      • 获取配置文件中的配置信息
      • 加载驱动
      • 返回数据库连接
    • 数据库操作流程:
      • 定义sql
      • 获得数据库连接
      • 使用PreparedStatement预编译sql语句
      • 设置sql参数,使用sql语句中使用?代表占位符,所以下标要从1开始设置,这样做能够避免sql的注入
      • 执行sql语句,返回ResultSet对象
      • 分析并判断ResultSet对象
      • 关闭资源
posted @ 2019-08-23 15:35  SvaloR  阅读(119)  评论(0编辑  收藏  举报