打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
花了20天的时间给粉丝整理的一套"最全"的Java求职笔记(四)
    大家好,我是小编LRyab,公众号LRyab博客网,LRyab博客网是分享一些个人成长、思考方向、个人感悟、职业规划,博客涵盖java技术 vue. html. css.前端技术spring全家桶. linux运维技术在365天把你打造出来一个全栈工程师!

 点击下方卡片关注公众号,每天分享一篇技术干货!

前言:前几天有粉丝问我,网上java面试题总是参差不齐,希望我为他整理一套全面的java面试题,并且这套java面试题有个要求,必须能够让他20天就能看完这些面试题,他说现在很多面试题我看都得看3个月才能看完,然后我才能去找工作,但是自己得时间有限所以想让我帮他总结一套万能面试java求职笔记。接下来我将会至少分为12个章节进行阐述这套Java求职笔记,感兴趣的可以坚持看完!觉得不错的可以点个赞。

1为什么写这套Java求职笔记

      很早的时候我就想写一些Java求职方向的一些文章,由于很长时间耽搁了加上,有粉丝后台问我,可不可以帮他总结一些java求职笔记,他看了很多Java技术有很多技术,很迷茫不知道学哪些,我笑着说,不要着急,无论你到什么时候你都会迷茫,因为技术一直在更新,谢谢你信任我,解救你的迷茫唯一办法就是多看LRyab博客,就是这样我带着粉丝的问题,开始编写了这套Java求职笔记,看完这套求职笔记,我相信很多人都会找到属于自己的心仪工作。

2一套Spring.Spring mvc知识大纲技术图

  思来想去,本来不想放这套思维大纲技术图,但是很多大佬都喜欢放思维导图,那么我也放一张思维大脑图,方便大家以后学习,在java求职的时候可以带上这张脑图。

3spring spring mvc面试必知必会

3.1Spring 板块

  • 聊聊传统的MVC架构和基于RESTful架构前后端分离的开发架构

    传统的java开发,我们使用常用的一处框架是SSM(spring+springmvc+mybatis),简化了我们的开发过程,让程序员更加专注于业务逻辑而非其他细节。

                 RESTful架构前后端分离:从浏览器发送AJAX请求,然后服务端接受该请求并返回JSON数据返回给浏览器,最后在浏览器中进行界面渲染。而这个模型正是REST(表述性状态转移),这种轻量级的Web服务我们把它称之为RESTful Web Services服务(REST服务)。REST服务能够使得前后端分离,而spring mvc恰恰可以提供REST服务接口.

  • SSM框架说明?

      spring:提供IOC/AOP核心功能。实现了低耦合和高内聚的特点,让java开发者更加关注与业务逻辑的实现。 spring最强大的地方在于它能够与其他主流框架整合以减轻程序员的开发负担。  ORM:当前使用最多的O/R mapping框架,一个是Mybatis(IBATIS), 另一个是HibernateController:对服务端的MVC框架,使用最多的是Structs2以及SpringMVC.

  •  谈一下对spring 框架的理解

spring是一款轻量型框架,将代码解耦合开发,spring对Java分层管理,提升了代码的可阅读性,spring还对多种框架进行集成,完成对应的一站式服务。

     spring提供控制反转功能:即springIOC就是将对象的创建权交给spring管理,我们无需对创建对象,这样可以提升对应效率,节约了创建对象的时间。

springAOP:是指面向切面编程,面向切面,是spring提供的对事物的服务,而spring提供了两种事务,一种是响应式事务,另外一种是编程式事务,springAOP将响应式事务直接集成到对应的应用程序中。

springtransactional是spring提供的事务:它有两种,一种是响应式事务,另外一种是编程式事务,使用AOP与事务结合,完成对应的事务的管理。

spring框架的优缺点是什么?

优点:   1方便解耦,简化开发

 2AOP编程的支持

 3声明式事务的支持

 4方便程序的测试

 5方便集成各种优秀框架

缺点:

     1Spring明明一个很轻量级的框架,却给人感觉大而全,内容太庞大。

     2Spring依赖反射,反射影响性能

     3使用门槛升高,入门Spring需要较长时间

Spring框架的核心?  

   IOC和AOP模块。

  通过IOC容器管理POJO或JavaBean对象,以及它们之间的耦合关系;

  通过AOP以动态非入侵的方式增强服务。

Spring 框架到底有哪些好处?

  答:spring是现在的主流框架,他对其他持久层框架有很好的支持,比如说ORM框架,日志框架都有很好的支持。支持对应的DI注入,完成对应的参数传递。Spring是一种轻量型框架,使用起来比较方便。spring有很好的对事务进行支持。提供了比较好的异常处理机制。提供了对web的支持springmvc。使用面向切面思想,将代码分离。

什么是Spring IOC?

控制反转主要是把传统上的程序直接向内存中申请空间创建对象的这个控制权转移到了外部工厂,通过工厂来对这些创建好的对象进行装配和管理。外部工厂即我们常说的IOC容器,spring IOC负责创建对象,管理对象(依赖注入,装配对象Autowride)并管理这些对象的整个生命周期。

IOC 有什么作用?

管理对象的创建和依赖关系的维护。解耦降低了依赖,由容器去维护具体的对象的创建。

bean对象生命周期管理。

spring IOC支持哪些功能依赖注入

依赖检查

自动装配

支持集合

什么是Spring的依赖注入?

答:依赖关系的维护又称为依赖注入,这种关系交给spring来管理,当我们在类中要用到其它的类对象,都由spring来提供,我们只需要在配置文件中说明即可,依赖注入也是IOC控制反转的一种实现。

依赖注入有哪几种实现方式?

答:依赖注入是时下最流行的IOC控制反转的一种实现,实现方式有接口注入,构造器注入,setter方法注入。其中由于接口注入的灵活性太差,于是与spring4被废弃。构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入

Spring中支持的几种bean的作用域?

spring的bean的作用范围有5个:

singleton:默认单例,每个容器中只能有一个bean的实例,单例模式由BeanFactory自身来维护。

prototype:多例,为每一个bean创建一个实例,容器中可以存在多个实例。

request:为每一个网络请求建立一个实例,当请求完成后,bean随之被GC回收。

session:于request类似,每一个session会话有一个bean实例,当会话结束,bean随之失效。

global-session:全局的session,通常用于集群服务器使用,用于建立集群服务器的会话,多台服务器可以共享session域,当只有一台时,建立的就是session会话。

注意:缺省的Spring bean 的作用域是Singleton。使用 prototype 作用域需要慎重的思考,因为频繁创建和销毁 bean 会带来很大的性能开销。

Spring 类的bean定义如何设置?

基于XML配置可以在bean标签内配置scope如果spring需要bean的时候每次创建一个新的bean实例,这个时候应该使用多例,即scope = “prototype”。

使用一个bean对象,每次返回的是同一个bean对象,则scope = “singleton”。基于注解开发同样有scope属性支持配置。

聊聊spring bean

    spring Bean是收到spring管理的bean对象,具体来说是被spring容器初始化,配置和管理的对象。spring Bean是再spring配置文件中定义的,现在也可以通过注解来定义,在spring容器初始化,

注入到spring应用程序中。

     spring bean在spring中以单例存在,而struts2中的Action属于多例的

   一个spring Bean的定义包含容器所必知道的配置元数据,包括如何创建一个bean,它的生命周期和它的依赖。

springBean的生命周期

实例化bean对象,完成对应的对象的初始化。

使用构造方法赋值到对应的bean的对象中。

进一步初始化对象,完成对应的方法调用

服务器关闭销毁对应的bean对象。

Spring框架中的单例bean是线程安全的吗?

   spring框架并没有对单例bean进行任何的多线程封装处理。关于单例模式下的线程安全和并发问题需要程序员自己来解决,但是对于service和dao层,通常并不需要多个实例,即没有可变状态,所以默认情况下时我们说单例时线程安全的。如果你的bean有可变状态,如Model View对象,就需要自行保证线程的安全,最直接的方法就是修改bean的作用域scope从singleton改为prototype。

Spring是如何处理多线程并发问题?

  有状态bean就是有数据存储功能,无状态的bean就是不会保存数据  

  多线程并发问题的根本在于相同的变量访问冲突问题。那么spring中既有无状态的bean又有有状态的bean,spring中可以将绝大部分的bean对象声明为singleton。所以绝大多数spring bean在多线程中是可以共享,因为它们不会导致访问的冲突情况。但是还有一些有状态的bean 为什么可以在多线程中共享,spring 又是如何处理的呢?如(RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等),在spring 源码中他们使用了多线程并发中的ThreadLocal模式进行处理,让它们也成为线程安全的状态,所以有状态的bean就可以在多线程中共享了。

ThreadLocal是一种什么模式呢?

 ThreadLocal 和 线程同步机制都是为了解决相同的变量访问冲突问题。

线程同步机制中的处理是通过加入对象锁处理,而ThreadLocal会为每个线程提供一个独立的变量副本,从而隔离了多线程数据的冲突访问,

因为每个变量都有了自己的副本了,也就没必要对该变量进行数据同步了。ThreadLocal提供线程安全的共享对象,编写代码时,

可以把哪些不安全的变量封装进ThreadLocal。

概括来说:

同步机制提供的是一种时间换空间的机制,多个线程只提供一个变量,让不同线程进行排队,避免了冲突的发生。

ThreadLocal采用的是一种空间换时间的方式,为每个线程都提供一个变量,因此可以同时访问而互不影响。

spring的常用注解

答:spring注解配置可以替换XML的配置,可以大大减少XML配置的代码量。

@Configuration:表示这是一个配置类,可以用来为IOC容器注入bean

@Bean:一般使用在配置类中,用于方法上面,将方法的返回值注入到IOC容器中

@Component, @Controller, @Repository, @Service 有何区别?

@Component:在类上加载此注解,可以将Java类标记bean,由spring来管理它。spring的组件扫描机制可以可以将其拾取并注入到应用程序环境中(IOC容器)。

@Controller,@Repository,@Service服务于web三层架构,分别是springMVC层,持久层,业务层,功能和@Component一样,为什么有这三个注解,因为它们更好的指明了使用意图。

@Autowired 注解有什么作用

@Autowired是默认按照类型注入的,默认情况下它要求依赖必须存在,当然可以设置属性required为false,它的用法和required类似,可以作用域,属性,方法构造器或具有任意名称或任意参数的方法。

@RequestMapping 注解有什么用?

 @RequestMapping用于接收HTTP请求,并将请求发送到相应的控制器类/方法上。作用位置有:

类:映射请求的URL父级目录

方法:映射URL和HTTP请求方法

@Autowired和@Resource之间的区别

@Autowired:是默认按照类型注入的,默认情况下它要求依赖必须存在,当然可以设置属性required为false。

@Resource:默认是按照名称注入的,如果找不到名称匹配的bean,才会按照类型注入。

使用@Autowired注解自动装配的过程是怎样的?

  当启动spring的IOC容器后,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowired,@Resources,@Inject时,就会在IOC容器中查询需要的bean,并装配给该对象的属性。在使用@Autowired会在容器中寻找对应类型的bean:由于容器类似一个一个Map结构,存储着key-value,查询机制是先从value上面找如果找到一个,则就将bean装配给@Autowired指定的数据,如果找到两个,那么就从key值上面再找,找到则装配,如果查询结果为空,则会抛出异常。解决方法,可以设置@Autowired的required的属性为false。

怎样开启注解装配?

注解装配默认情况下是不开启的,如若开启,spring的XML文件中配置:

<context:annnotation-config/>

聊聊spring 数据访问?

  JdbcTemplate是一个封装了JDBC规范的工具类,并且提供了很多遍历的方法,如执行写好或者可调用的SQL语句,提供把数据库的数据封装成基本数据类型或对象,提供自定义的数据错误处理。

Spring框架的事务管理有哪些优点?

为不同的事务API,如JTA,JDBC,HIbernate,JPA等提供一种不变的编程模式为编程式事务管理提供一套简单的API而不是复杂的事务API

支持声明式事务管理

和spring各种数据访问抽象层很好的集成。

Spring的事务传播行为?

事务传播行为指的是当存在多个事务时,spring是如何管理这些事务的事务的传播行为指如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。

默认传播行为:TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

spring 的事务隔离?

spring有5大事务隔离级别,默认值为isolation = “default”(使用数据库设置),其它四个隔离级别和数据库隔离级别一致:脏读:表示一个事务读取到另外一个事务未提交的数据。例如:事务甲尝试插入数据A,当时还没有提交数据,事务乙就已经查询到了事务甲的数据A。

不可重复读:表示的是在同一个事务两次访问同一个数据可能出现不一样。例如:事务1访问了数据A,此时还没有提交,事务2也访问了数据A,并修改为数据接着提交了。此时事务1再次访问数据就可能出现A或B了。

幻读:所谓幻读时某一个事务读取到某个范围的记录时,另外一个事务也访问了该范围的数据,并且增加了新的数据接着提交了,之前的事务再次读取到该范围的数据时,会出现幻行。

Spring支持的事务管理类型,事务实现方式有哪些?

编程式事务管理,在代码中显式调用开启事务、提交事务、回滚事务的相关方法.

声明式事务管理,底层是建立在 AOP 的基础之上。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

优缺点:

     编程式事务管理:通过编程的方式管理事务,给你带来极大的灵活性,但是难以维护

     声明式事务管理:可以将业务和事务管理分开,你只需要用注解或XML配置来管理事务

实际应用:

      基于 <tx> 和 <aop> 命名空间的声明式事务管理是目前推荐的方式,其最大特点是与 Spring AOP 结合紧密,可以充分利用切点表达式的强大支持,使得管理事务更加灵活。基于 @Transactional 的方式将声明式事务管理简化到了极致。开发人员只需在配置文件中加上一行启用相关后处理 Bean 的配置,然后在需要实施事务管理的方法或者类上使用 @Transactional 指定事务规则即可实现事务管理,而且功能也不必其他方式逊色。

聊聊spring 中的面向切面编程

AOP:面向切面编程,作为面向对象的补充,用于哪些与业务无关,但却对多个对象产生公共行为和逻辑,抽取并封装成一个可重用模块。这个模块被称为切面,减少系统中的重复代码,降低模块间的耦合度,同时提高了系统间的可维护性,可用于权限认证,日志,事务处理等。

简单说一下对AOP的理解

   spring协助对应的事务,完成对应的和功能实现,AOP是指面向切面编程,aspect是由切点和通知组成,减少业务代码中,混入对应的系统代码,比如说,事务 ,日志信息,权限管理。aop的实现原理是基于jdk的动态代理,反射共同实现完成。将对应的系统代码抽离出来,使用的动态代理。在切点中,织入对应的代理功能,比如说对应的事务,权限管理,日志管理。一个方法的执行或者一个异常的处理。advice和pointcut,在类中我们可以认为所有的节点是一个jointcut,但是我们不是所有的事务都添加对应的织入advice而pointcut就是提供对应的,给满足条件的pointcut添加对应的advice。

Spring AOP里面的几个名词解释

切面(Aspect):切面是通知和切点的结合,通知和切点共同定义了切面的全部内容,在spring AOP中在类上加上@AspectJ来实现。Joinpoint(连接点):连接点代表这一个个的方法,切面代码可以通过这些点插入到应用程序的正常流程中,并添加新的行为。

Pointcut(切入点):也是代表方法,但是这些方法并没有被增强。

Advice(通知/增强):spring AOP拦截到Joinpoint(连接点)所要做增强过程就是通知。

引入(Introduction):不修改代码的前提下,运行期我们新的类中添加新的属性或方法

织入(Weaving):是指把增强应用到目标对象来创建新的代理对象的过程。spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。简单的说加入事务控制的过程叫做织入。

Proxy(代理):一个类被AOP织入增强后,就产生结果代理类,其实就是代理对象。

Target(目标对象):代理目标对象,就是被代理对象。

JDK动态代理和CGLIB动态代理的区别

   Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在具体方法前调用InvokeHandler来处理。而CGLIB动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

如果目标对象实现了接口,则默认使用JDK的动态代理实现AOP

如果目标对象使用了,可以强制使用CGLIB实现AOP

如果目标对象没有实现接口,则必须使用CGLIB,spring会自动在CGLIB和JDK动态代理之间切换

如何强制使用CGLIB实现AOP?

添加CGLIB库,SPRING_HOME/cglib/*.jar

在spring配置文件中加入 < aop:aspectj-autoproxy proxy-target-class=“true” />

JDK动态代理和CGLIB动态代理生成字节码的区别

JDK动态代理只能对实现接口的类生成代理,不能针对类

CGLIB是针对类实现代理,主要是指定的类生成一个子类,覆盖其中方法,因为是继承,所以该类或方法最好不要声明为final

spring aop实现方式

  Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式。

如果要被代理的对象是个实现类,那么Spring会使用JDK动态代理来完成操作(Spirng默认采用JDK动态代理实现机制);如果要被代理的对象不是个实现类那么,Spring会强制使用CGLib来实现动态代理。

Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?

    AOP的实现关键技术在于代理模式,代理模式又分为静态代理和动态代理。AspectJ AOP 使用的是静态代理,Spring AOP使用的是动态代理。

      AspectJ是静态代理的增强,所谓静态代理就是AOP框架会在编译阶段生成AOP代理类,因此也成为编译期增强,它会在编译期将Aspect(切面)织入到Java字节码中,运行时候就是增强后的AOP对象

Spring AOP使用的就是动态代理,所谓动态代理就是AOP框架不会去修改字节码文件,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含目标对象的全部方法,并且在特定切点处做了增强处理,并回调原对象的方法。

聊聊Spring通知有哪些类型?

    在AOP属于中,切面的工作被称为通知,实际上是程序执行时要通过spring AOP框架触发的代码段。spring可以又5中通知类型:

前置通知(Before):在目标方法被调用之前调用此方法。

后置通知(After):在目标方法调用完成后执行。

最终通知(After-returning):目标方法成功执行之后执行。

异常通知(After-throwing):在目标方法抛出异常后调用通知。

环绕通知(Around):通知包裹被通知的方法,在被通知调用之前和调用之后执行自定义的行为。

3.2Spring mvc板块

什么是MVC?

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式。

Model(模型):处理应用程序数据逻辑的部分

View(视图):处理数据显示的部分

Controller(控制器):处理与用户交互的部分

Spring Mvc设计模式

SpringMVC 将传统的 Model 层再次进行细化,拆分为 Service 层和 Dao层

Service(业务层):处理业务逻辑代码

Dao(数据访问层):处理数据库操作

简单介绍下你对springMVC的理解

      Spring MVC是Spring的一个模块,式一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。

   Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

  Spring整体框架的核心思想是容器,用来管理bean的生命周期,而一个项目中会包含很多容器,并且它们分上下层关系,目前最常用的一个场景是在一个项目中导入Spring和SpringMVC框架,而Spring和SpringMVC其实就是两个容器,Spring是父容器,SpringMVC是子容器,Spring父容器中注册的Bean对SpringMVC子容器是可见的,反之则不行。

Springmvc有哪些优点?

springmvc 是spring 是一个公司发布的,那么他们间的兼容性较好。springmvc 配置简单容易上手springmvc 支持restful架构springmvc 视图配置与控制器映射非常灵活

springMVC和struts2的区别有哪些?

(1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。

(2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

(3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,

最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

SpringMVC的执行流程

1、用户发送请求至前端控制器DispatcherServlet;

2、DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler;

3、处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet;

4、DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler;

5、HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑;

6、Handler执行完成返回ModelAndView;

7、HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;

8、DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;

9、ViewResolver解析后返回具体View;

10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)

11、DispatcherServlet响应用户。

前端控制器 DispatcherServlet:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

处理器映射器 HandlerMapping:根据请求的URL来查找Handler

处理器适配器 HandlerAdapter:负责执行Handler

处理器 Handler:处理器,需要程序员开发

视图解析器 ViewResolver:进行视图的解析,根据视图逻辑名将ModelAndView解析成真正的视图(view)

视图View:View是一个接口, 它的实现类支持不同的视图类型,如jsp,freemarker,pdf等等

SPring mvc请求转发与重定向

  SpringMVC请求转发区别于重定向,请求转发地址栏不会发生改变、只发送一次请求、能携带原有的参数,但只可以在同一个服务器中进行转发。

    传统的重定向请求地址会改变(两次请求)、不能传递参数,但是利用SpringMVC的重定向可以携带和传递参数。重定向相比于请求转发可以跨服,但是不能直接重定向访问WEB-INF下的资源(可重定向后再进行一次请求转发)。

   转发配置:在返回值前面加"forward:",比如"forward:user.do?name=method4"

   重定向配置:在返回值前面加"redirect:",比如"redirect:http://www.liph.fun"

SpringMVC常用的注解有哪些?

@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

@RequestParam

包位置:org.springframework.web.bind.annotation

作用:从请求体中读出对应的数据

@PathVariable

包位置:org.springframework.web.bind.annotation

作用:获得请求url中的动态参数

@ResponseBody

包位置:org.springframework.web.bind.annotation

作用:将 Controller 对象返回的方法,通过适当的转换器转换为指定格式后,写入到 response 的 body 区中,长用来返回 JSON 数据或是 XML 数据。使用此注解后不会再走视图解析器,返回对象转化为json对象响应给客户。

SpingMvc中的控制器的注解一般用哪个?有没有别的注解可以替代?

   一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody加@Controller,表示是表现层,除此之外,一般不用别的注解代替。

Spring mvc如何解决POST请求中文乱码问题,GET请求的又如何处理呢?

    解决post请求乱码问题:在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

    get请求中文参数出现乱码解决方法有两个:

  修改tomcat配置文件添加编码与工程编码一致,如下:<ConnectorURIEncoding="utf-8"         connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

    另外一种方法对参数进行重新编码:

String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

Spring MVC的异常拦截器处理

 可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。

系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器。

Filter 与 Interceptor 的区别

过滤器和拦截器的作用看起来非常相似,都是对客户端发来的请求进行处理,区别如下:

作用域不同

过滤器依赖于 servlet 容器,只能在 servlet 容器, web 环境下使用

拦截器依赖于 spring 容器,可以在 spring 容器中使用,无论此时 Spring 是什么环境

细粒度不同

过滤器的控制比较粗,只能在请求进来时进行处理,对请求和响应进行包装

拦截器支持更精细的控制,可以在 controller 对请求处理之前或之后被调用,也可以在渲染视图呈现给用户后被调用

中断链执行的难易程度不同

过滤器较为复杂,需要处理请求和响应对象来引发中断,如将用户重定向到错误界面

拦截器只需要在 preHandle 方法内返回 false 进行中断

总结

拦截器相比过滤器有更细粒度的控制,依赖于Spring容器,可以在请求之前或之后启动,过滤器主要依赖于servlet,过滤器能做的,拦截器基本上都能做

SpringMvc用什么对象从后台向前台传递数据的?

答:通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前端就可以通过el表达式拿到。

怎么样把ModelMap里面的数据放入Session里面?

答:可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。

SpringMvc的控制器是不是单例模式?如果是,有什么问题?怎么解决?

 答:是单例模式,在多线程访问的时候有线程安全问题,解决方案是在控制器里面不能写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal机制解决,

为每个线程单独生成一份变量副本,独立操作,互不影响。

常见的处理并发问题的机制

     常见的解决多线程中相同变量的访问冲突,有两种方式:线程同步机制(锁) 或 ThreadLocal

    线程同步机制:同步机制采用了"时间换空间"的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队等待

   ThreadLocal: 采用了"空间换时间"的方式,为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。由于每一个线程都拥有了自己的变量副本,就无需锁了。在编写代码时,应该将不安全的变量封装进 ThreadLocal

5个人说明

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring面试题
深入理解微服务架构spring的各个知识点(面试必问知识点)
spring面试题
【第一章】 Spring概述 ——跟我学Spring3
SpringInAction读书笔记
spring有关的一些知识点
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服