ssm面试题总结

目录

一、springMVC工作流程

二、SpringMVC和Struts2的区别

三、SpringMVC是不是单例模式

四、如何指定拦截的是GET请求还是POST请求

五、mybatis和hibernate的区别

1、区别总览

2、缓存机制

六、Ajax


spring的比较多,单独拿出来写了一篇了spring框架面试题总结_巴啦啦小刺猬的博客-CSDN博客

一、springMVC工作流程

  • 用户发送请求到前端控制器DispatcherServlet
  • 前端控制器调用处理器映射器HandlerMapper
  • 处理器映射器生成处理器对象,返回给前端控制器
  • 前端控制器调用处理器适配器HandlerAdapter
  • 处理器适配器经过适配调用具体的控制器Controller执行
  • Controller处理完成后,生成ModelAndView返回
  • 前端控制器收到ModelAndView后传给视图解析器ViewResolver
  • 视图解析器解析后返回View
  • 前端控制器再根据model渲染view(模型数据填充到视图中)
  • 前端控制器响应客户

二、SpringMVC和Struts2的区别

SpringMVC的核心控制器(也叫前端控制器是Servlet),而Struts2是filter

SpringMVC是基于方法设计,一个类(其实是一个单例对象)可以处理多个请求,Struts2是基于对象,每次请求都会产生一个action

三、SpringMVC是不是单例模式

是,所以在多线程访问的时候,会有线程安全问题,但是最好不要加同步,会影响性能,解决方案就是,在Controller层中不要有变量

四、如何指定拦截的是GET请求还是POST请求

在requestMapping中指定method = requestMethod.GET

post同理

五、mybatis和hibernate的区别

1、区别总览

1)sql 优化方面

  • Hibernate 不需要编写大量的 SQL,就可以完全映射,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性,此外还提供 HQL(Hibernate Query Language)对 POJO 进行操作。但会多消耗性能。
  • MyBatis 手动编写 SQL,支持动态 SQL、处理列表、动态生成表名、支持存储过程。工作量相对大些。

2)开发方面

  • MyBatis 是一个半自动映射的框架,因为 MyBatis 需要手动匹配 POJO、SQL 和映射关系。
  • Hibernate 是一个全表映射的框架,只需提供 POJO 和映射关系即可。

3)Hibernate 优势

  • Hibernate 的 DAO 层开发比 MyBatis 简单,Mybatis 需要维护 SQL 和结果映射。
  • Hibernate 对对象的维护和缓存要比 MyBatis 好,对增删改查的对象的维护要方便。
  • Hibernate 数据库移植性很好,MyBatis 的数据库移植性不好,不同的数据库需要写不同 SQL。
  • Hibernate 有更好的二级缓存机制,可以使用第三方缓存。MyBatis 本身提供的缓存机制不佳。

4)Mybatis优势

  • MyBatis 可以进行更为细致的 SQL 优化,可以减少查询字段。
  • MyBatis 容易掌握,而 Hibernate 门槛较高。

总的来说,MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。
所以对于性能要求不太苛刻的系统,比如管理系统、ERP 等推荐使用 Hibernate,而对于性能要求高、响应快、灵活的系统则推荐使用 MyBatis。

2、缓存机制

访问数据顺序是:一级缓存——》二级缓存——》数据库

(1)hibernate(默认一级缓存)

hibernate是持久层框架,经常访问物理数据库。为了较少对数据库的访问,提高数据库访问性能,加入了hibernate缓存机制

  • 一级缓存 : 自带的不可卸载的.一级缓存的生命周期与session一致.一级缓存称为session级别的缓存.
  • 二级缓存 : 默认没有开启,需要手动配置才可以使用的.二级缓存可以在多个session中共享数据,二级缓存称为是sessionFactory级别的缓存.

SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。

(2)mybatis(默认一级缓存)

一级缓存为 ​SqlSession​ 缓存,缓存的数据只在 SqlSession 内有效。在操作数据库的时候需要先创建 SqlSession 会话对象,在对象中有一个 HashMap 用于存储缓存数据,此 HashMap 是当前会话对象私有的,别的 SqlSession 会话对象无法访问

二级缓存是​ mapper​ 级别的缓存,也就是同一个 namespace 的 mapper.xml ,当多个 SqlSession 使用同一个 Mapper 操作数据库的时候,得到的数据会缓存在同一个二级缓存区域

二级缓存默认是没有开启的。需要在 setting 全局参数中配置开启二级缓存

(3)关于sql

MyBatis :可以自由书写SQL、支持动态SQL、处理列表、动态生成表名,支持存储过程

Hibernate:hql能自动生成sql,数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL

(4)延迟加载

Hibernate对实体关联对象的抓取有着良好的机制。对于每一个关联关系都可以详细地设置是否延迟加载,并且提供关联抓取、查询抓取、子查询抓取、批量抓取四种模式。 它是详细配置和处理的。

而Mybatis的延迟加载是全局配置的。

六、Ajax

1、介绍

通过在后台与服务器进行少量数据交换,来使网页异步更新

通过异步模式,提升了用户体验

2、请求的步骤

  • 创建XMLHttpRequest 对象(Ajax的核心就是XMLHttprequest),即创建一个异步调用对象。
  • 创建一个新的HTTP 请求,并指定该HTTP 请求的方法(GET、POST或者delete、put),URL及验证信息
  • 设置响应HTTP请求状态变化的函数
  • 发送HTTP 请求
  • 获取异步调用返回的数据
  • 使用JavaScript和DOM 实现局部刷新

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 首先,@SessionAttributes注解可以在类上面加上,里面包含的字符串就是要放入session里面的key。通过Jackson框架可以将Java对象直接转化成可以识别的Json对象。具体步骤包括加入Jackson.jar,配置json的映射,以及在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。\[1\] MyBatis的好处是可以将SQL语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护带来了很大便利。此外,MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,简化了Java数据库编程的重复工作。相比于全自动ORM框架,如Hibernate,MyBatis需要程序员自己编写SQL语句,因此能够更灵活地控制SQL语句,实现更高的查询效率,能够完成复杂查询。\[2\] 关于MyBatis的缓存,它可以提高查询性能。MyBatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,它默认开启,可以减少对数据库的访问次数。二级缓存是Mapper级别的缓存,可以跨SqlSession共享数据,需要手动配置开启。使用缓存可以减少对数据库的访问,提高系统性能。但是需要注意缓存的更新和失效机制,以保证数据的一致性。\[3\] #### 引用[.reference_title] - *1* *2* *3* [JavaSSM框架精选50道面试题](https://blog.csdn.net/qq_41735004/article/details/87199651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值