Java SSM框架面试题

news/2025/3/14 1:07:50/

sql 中 ${} 和 #{}的区别:

  1. #将传入的参数都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{age},如果传入的值是18,那么解析成sql时的值为order by “18”, 如果传入 age ,则会解析为 order by “age”
  2. 将传入的参数直接显示生成在sql中,被当成一个对象。如:orderby{age},如果传入的值是18,那么解析成sql时的值为order by 18, 如果传入的值是age,则解析成的sql为order by age
  3. #方式底层采用预编译方式PreparedStatement,能够很大程度防止sql注入;$方式底层只是Statement,无法防止Sql注入。
  4. $方式一般用于传入数据库对象,例如传入表名.
  5. 一般能用#的就别用注意点:MyBatis排序时使用orderby动态参数时需要注意,用而不是#

Spring MVC 的运行流程:

  1. 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。
  2. 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,用map<url,handler>这样的方式来存储。
  3. HandlerMapping有了映射关系,并且找到url对应的处理器,HandlerMapping就会将其处理器(Handler)返回,在返回前,会加上很多拦截器。
  4. DispatcherServlet拿到Handler后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并执行处理器。
  5. 执行处理器
  6. 处理器会返回一个ModelAndView对象给HandlerAdapter
  7. 通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
  8. 前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
  9. 返回视图对象到前端控制器。
  10. 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。
  11. 通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可。

Spring MVC 常用的 5 个注解:

@Controller:@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。

@RequestMapping :@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于方法上,方法的返回值会通过视图解析器解析为实际的物理视图。

@RequestParam:@RequestParam用于将请求参数区数据映射到功能处理方法的参数上,用例:

@Resource和@Autowired:都是做bean的注入时使用

  共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

  不同点:

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

public class HelloWorld{ @Autowired @Qualifier("userDao") private UserDao userDao; 
}

复制

   @Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

注意:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

IOC,AOP的实现原理:

IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是 依赖注入 (DI)

DI:依赖注入,将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系,调用setter方法来注入(反射的话太消耗性能)。他们的依赖关系只在使用的时候才建立。简单来说就是不需要总是NEW一个对象了,只需要一个或多个对象(由你定义的策略决定,一般是单例),统一由容器进行管理。

AOP:面向切面,是一种编程思想,是对OOP面向对象的补充和完善。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行(jdk动态代理:必须至少实现一个接口,底层利用反射机制,效率较低;cglib动态代理:原理是使用ASM字节码技术对指定的业务类生成一个子类,并覆盖业务方法实现代理,采用继承的方式,所以不能对final修改的类进行代理);二是采用静态代理的方式,在代码中显示地实现一个业务实现类的指定代理,在代理类中对同名的业务方法进行包装(不修改原有的业务代码),用户通过代理类调用被包装过的业务方法,但会导致代码冗余。目前这几种代理方式并没有高低之分,只是应用的场景不同。

Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。 AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便。

Spring DI 常用的三种方式:

常用的注入方式主要有三种:构造方法注入,setter注入,接口注入。

 


http://www.ppmy.cn/news/425970.html

相关文章

运算符优先级/模板字符串/类型转换

1. 运算符优先级 优先级顺序1()2 -- !3先 * / % 后 -4> > < <5 ! !6先&& 后 ||7 2. 模板字符串中输入变量 模板字符串中可换行&#xff0c;变量放在${}中 3. 数据转换 为什么需要转换&#xff1f; 使用表单&#xff0c;prompt 获取过来的数据默认…

C语言之指针详解(8)

目录 本章重点 1. 字符指针 2. 数组指针 3. 指针数组 4. 数组传参和指针传参 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 9. 指针和数组面试题的解析 指针和数组笔试题解析 #include<stdio.h> int main() {//一维数组int a[] { 1,2,…

Docker容器---Harbor私有仓库部署与管理

Harbor私有仓库部署与管理 一、Harbor概述二、Harbor特性三、Harbor构成四、Harbor构建Docker私有仓库1、部署docker-compos2、下载或上传 Harbor 安装程序3、启动Harbor4、查看Harbor启动镜像5、浏览器访问创建一个新项目6、通过127.0.0.1来登录和推送镜像7、在客户端上传镜像…

Docker容器之harbor私有仓库部署与管理

目录 引言 一、Harbor概述 二、Harbor特性 三、Harbor的构成 四、Harbor构建Docker私有仓库 1、环境配置 2、案例需求 3、部署Harbor服务 4、物理机访问server IP 5、添加项目并填写项目名称 6、通过127.0.0.1来登陆和推送镜像 7、其他客户端上传镜像到Harbor …

Docker harbor私有仓库部署与管理

Docker harbor私有仓库部署与管理 Docker harbor私有仓库部署与管理一、Docker 私有仓库1、下载registry镜像2、修改配置文件/etc/docker/daemon.json &#xff0c;添加私有仓库配置&#xff0c;修改完后重启docker3、创建私有仓库容器4、推送镜像到私有仓库中5、查看当前仓库的…

电力系统潮流计算牛顿法

&#xff08;二&#xff09;牛顿迭代法 一元函数&#xff1a;设非线性函数 f ( x ) 0 f\left( x \right) 0 f(x)0 &#xff0c;对它做泰勒展开&#xff1a; f ( x ( 0 ) Δ x ( 0 ) ) f ( x ( 0 ) ) f ′ ( x ( 0 ) ) Δ x ( 0 ) ⋯ 0 ⇒ f ( x ( 0 ) ) f ′ ( x ( 0 )…

如何通过GPS结合UWB技术实现车载监控精准定位?

目前由青犀视频团队研发的TSINGSEE车载监控平台采用移动视频监控技术、4G/5G无线通信传输技术、大容量数据存储技术、GPS/UWB车辆定位追踪技术、混合联网传输技术、GIS可视化操作技术&#xff0c;形成一套针对所有管辖车辆进行精确监控的综合监管平台&#xff0c;为车辆指挥调度…

GPS北斗定位模块应用于车辆

定位导航&#xff0c;这个功能无论是否有车&#xff0c;大家应该都使用过&#xff0c;用来指路查找商店之类的&#xff0c;车辆安装GPS北斗卫星定位模块使用最多的功能就是导航&#xff0c;查找路线了&#xff0c;这其实不过是定位模块诸多功能中的一项&#xff0c;只是由于导航…