java 知乎面试题_JAVA高级面试题(一)

本文详细介绍了Spring框架的高级面试题,涵盖了Spring的IOC和DI原理、Bean的生命周期和作用域、AOP概念及其作用,以及Spring MVC和Shiro的相关知识。同时,还提及了Maven的优点、坐标组成和常见仓库类型。
摘要由CSDN通过智能技术生成

常见高级技术面试题

一、 Spring

1. Spring框架优点?

答:方便解耦,简化开发,方便程序的测试,声明事物的支持,AOP编程的支持,方便集成各种优秀框架,降低Java EE API的使用难度,独立于各种应用服务器,

基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承,Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦,

Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用,Spring的ORM和DAO提供了与第三方持久层框架的良好整合,

并简化了底层的数据库访问,Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。

2. 谈谈你对spring IOC和DI的理解,它们有什么区别?

答:IOC控制反转,DI依赖注入。

IOC是一种编程思想,是一种概念,它可以控制不同的类对象去工作。

依赖注入就是打补丁一样,在你在做这个项目的时候需要用到别的技术,就可以用依赖注入来解决这个问题。

3. spring配置bean实例化有哪些方式?

答:setter 方法,构造函数,静态工厂,实例工厂

4. 请介绍一下Spring框架中Bean的生命周期和作用域

答:单例管理的对象:当scope=”singleton”,即默认情况下会在启动容器时(实例化容器时)实例化,我们也可以指定Bean节点的lazy-init=true 延迟初始化bean,

这时只有在第一次获取bean时才会初始化bean。当然也可以设置全局,非单列管理的对象:scope=prototype ,容器也会延时初始化bean,在第一次请求改bean时才初始化,

因为是非单列的,Spring一旦把对象交给你就不会在帮你管理这个对象了。

5. Bean注入属性有哪几种方式?

答:@Controller:表明这是一个后台控制类,@Service,表明业务层。

@Autowired写在属性上,Ra....Maping写在方法上,@P...tory,规定范围,@Resourcesetter注入

构造方法注入

6. @Autowired和@Resource之间的区别

答:@Autowired注解属于Spring 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果想允许null值 @Autowired(required=false),如果我们想使用名称进行装配

@Autowired()@Qualifier("baseDao")

@Resource 注解属于J2EE,默认按照名称进行装配,当找不到与名称匹配的bean时会按照类型进行装配 我们也可以指定name属性,如果指定了name属性则只会按照名称进行装配

7. 什么是AOP,AOP的作用是什么?

答: AOP面向切面编程,他是面向对象编程的一种补充和完善,在对象运行时织入一些功能。

AOP底层 :1.如果使用AOP处理的业务层实现了一个接口,那么底层默认使用jdk动态代理机制为目标实现类创建一个代理对象(生成的代理对象同样实现了改接口)

2. 被代理对象没有实现接口,则底层默认采用CGLIB代理机制为目标对象创建代理对象(默认创建的代理类会继承目标对象类型)

作用:帮我将核心关注点和非核心代码分开,核心代码更专注业务逻辑。

非逻辑代码通常用于处理日志信息,事务管理,权限管理,缓存处理。

8. Spring里面如何配置数据库驱动?

答:1.配置解码,编码格式。

2. 配置事务管理器。

3. 配置数据库连接

4. 配置映射

5. 配置处理要解析的所有类的包路径。

9. 介绍一下Spring的事物管理

答:事务的传播行为:事务的传播行为是指如果在开始当前事务之前,一个事务上下文已经存在,此时由若干选项可以指定一个事务性方法的执行行为。

事务超时:一个事务所允许执行的最长时间,如果超过该时间限制但事务还没完成,则自动回滚事务、

只读: 指定对事务性资源(被事务管理的资源,比如数据源 )进行只读操作或者是读写操作

10.通知有哪些类型?

答:全部有五种,

前置通知,后置通知,环绕通知,最终通知,异常通知。

二、 SpringMVC

1. springmvc框架是什么?常见的mvc框架有哪些?他们的区别是什么?

答:Springmvc 是一种基于java的实现了web MVC设计模式的请求驱动类型的轻量级web架构,和servlet解耦合,可以和Spring无缝整合。

常见的MVC框架:Struts2

区别:

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

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

3.Struts采用值栈存储请求和响应的数据,通过OGNL存取数据。 springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView对象,最后又将模型数据通过request对象传输到页面。 Jsp视图解析器默认使用jstl

2. 阐述一下springmvc的运行流程

答:客户端发请请求

发请的请求会被前端控制器拦截,前端控制器会将请求给处理映射器,处理映射器处理完将结果返回

根据处理映射器的返回结果来决定将请求交给哪一个控制器

在控制器中处理请求,并将处理结果返回给前端控制器

前端控制器通过视图解析器来解决从控制器返回的视图,并将找到的视图返回给前端控制器

前端控制器调用对应的视图返回给客户端。

3. Spring MVC的主要组件有哪些 他们的作用是什么

答:spring配置文件,springmvc配置文件。Web.xml,,一样的,MVC三层架构加上spring容器框架,让开发更加方便。

4. SpringMVC怎么样设定重定向和转发的?默认是请求转发还是重定向?

答:默认的是请求转发。

5. SpringMvc怎么和AJAX相互调用的?

答:requestBody 接收json格式字符串

responseBody 将响应直接写入响应体。

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

答:

Get 解决方式:对方法参数进行重编码

7. Spring MVC如何做异常处理 ?

答:实现handler Exception Resolver接口,实现resolver Exception方法,继承AbstractHandlerExceptionResolver类,和第一种相似 这个类也实现了handler Exception Resolver接口

使用注解@ControllerAdvice

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

答:

控制器单列的:单列的性能高

如果在controller中定义了很多的属性,那么单列肯定会出现竞争访问

解决:不要在controller中定义成员变量,非要定义一个非静态成员变量的时候,需 要通过注解@Scope(“prototype”)将其设置为多例模式

9. SpringMVC常用的注解有哪些?

答:

@Controller声明该类为控制层。

@RequestMapping用于映射web请求,包括访问路径和参数 ,可以定义在类和方法上。

@PathVariable 用于接受路径参数,使用resulf风格传参时。

10. SpringMvc中函数的返回值是什么?

答:

ModelAndView:可以使用构造方法指定返回页面的名称:也可以通过setViewName()方法跳转,使用addObject()设置需要返回的值。

String:指定返回设定的名称 跳转到指定页面。

Void 常用响应ajax请求。

三、 Shiro

1. 说一下什么是rbac,设计一个基于rbac的数据库模型,并解释每个模型之间的关系

答:用户和角色可以是一(用户)对多也可以是多对多

角色和菜单 多对多建立中间表

菜单和功能表一对多

2. 说一下什么是shiro,并且说出shiro的优点

答:Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密会话管理等功能。

对于任何一个应用程序,Shiro都可以提供全面的安全管理服务。其不仅以用在JavaSE环境,也可以用在JavaEE环境。

3. 简述 Shiro 的核心组件

答:subject:主体,可以是用户,也可以是程序,系统需要对主体进行认证、授权

Security Manager:安全管理器,主体进行认证和授权都是通过security manager进行

authenticator:认证器,主体进行认证最终通过authenticator进行的

Authorizer:授权器,主体进行授权最终同工过authorizer进行的

session manager:web应用中一般是用web容器对session进行管理。shiro也提供一套session管理机制。

sessionDao:通过这个来管理session数据。针对个性化的session数据的存储需要用到sessionDAO

cache manager:缓存管理器,主要对session和授权数据进行缓存。将授权数据通过cache manager进行缓存管理。

realms:领域,域,相当于数据源,通过realm存取认证、授权相关数据。在realm中存储授权和认证的逻辑。

cryptography:即密码管理,提供了一套加密和解密的组件,方便开发。

4. 简述Shiro认证过程

答:

获取当前的Subject

将获取到的用户名和密码封装成UserNamePassworkToken对象 user

调用Subject.login(user)

自定义realm实现AuthorizingRealm 接口 ,在doGetAuthenticationInfo方法里查询数据库,将查询到的数据放入SimpleAuthenticationInfo里,将这个对象返回,isAuthenticated可以得到一个boolean值判断是否成功

5. 简述Shiro授权过程

答:对subject进行授权,调用方法isPermitted("permission串")

SecurityManager执行授权,最终通过ModularRealmAuthorizer执行授权

ModularRealmAuthorizer执行Realm(自定义的Realm)从数据库查询权限数据调用realm的授权方法:doGetAuthorizationInfo

Realm从数据库查询权限数据,返回ModularRealmAuthorizer授权信息

ModularRealmAuthorizer调用PermissionResolver进行权限串比对

如果比对后,isPermitted中"permission串"在realm从数据库中查询到权限数据中,说明用户访问permission串有权限,否则 没有权限,抛出异常。

四、 Maven

1. Maven有哪些优点和缺点

答:优点:

1.不需要手工找jar包,去下载。

2.是一个模块化的项目构建工具,方便维护与发布。

缺点:

1.由于需要下载,导入等,导致加载缓慢,或者出现错误,和不稳定

2.缺少对Maven的文档描述(网上一大堆,但是没有标准)

3.中央存储库中的元数据不佳

4.POM.xml做为项目元数据的来源

2. Maven坐标由什么组成,分别代表什么意思

答:

1.groupId:

如果说是组ID的话,这样对初学者会造成困惑。可理解为项目名,首先,我们要有一个概念:maven的模块思想。一个项目,会有多个功能,通过maven工程的构建,我们可以把每个大功能分为一个模块来构建,这样一来,一个项目就由多个maven模块组成,而每个模块又都是属于同一个项目下的。所以,这个groupId,可以说就是各个模块的根节点。命名举例:com.resource.manager。

2.artifactId:

maven项目中的一个模块名,可根据前面的描述理解。

3.version: 项目当前的版本。

4.packaging:(可选)项目的打包方式,maven默认是jar,如果使用war打包,则会生成一个**.war后缀的文件。

5.classifier:(可选)用来定义构建输出与主构件对应的附属构件。

如java文档 resource-manager-0.0.1-javadoc.jar、项目源码包resource-manager-0.0.1-source.jar。

注意,不能直接定义项目的classifier,因为附属构件是maven插件帮助生成的,不是项目直接直接生成的。

3. pom文件中常见的标签有哪些,分别代表什么意思

答:4.0.0

4. 常见的Maven私服的仓库类型有哪些

答:代理仓库(Proxy Repository)

是代理第三方仓库的,如:

maven-central

nuget.org-proxy

宿主仓库(Hosted Repository)

存储本地上传的组件和资源的,如:

maven-releases

maven-snapshots

nuget-hosted

仓库组(Repository Group)

通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包,如:

maven-public

nuget-group

5. maven项目的关系有哪些?

答:依赖,继承,聚合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值