Java经典面试题整理及答案详解(四)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Java经典面试题第四弹来啦!本节小编整理了关于Java开发框架常见的面试题,希望大家多多怜惜,一起进步~

上一篇:Java经典面试题整理及答案详解(三)
Java经典面试题第四弹来啦!本节小编整理了关于Java开发框架常见的几道面试题,希望大家多多练习,一起进步~

1.SpringMVC返回值,使用SpringMVC的时候我看到两种风格的开发,一种是控制层的方法返回值类型主要是ModelAndView(就如我们的BSM项目),另外一种风格是返回值Spring类型,在开发中要怎么取舍?

从简单来讲就是ModelAndView,如果只是做一个过渡,符合MVC标准设计,可能有人就会认为返回ModelAndView需要实例化新对象太麻烦了,就直接返回String。
MVC的设计角度在于你需要通过控制层传输相应的对象信息给显示层来进行显示,而且业务层也会返回Map数据,这个时候就希望可以把Map的数据直接传递到JSP里面,这样的话使用ModelAndView就很简单。最关键的是ModelAndView整体的处理来讲是很容易的,只是一个跳转的页面路径,以及相关的属性设置,可以帮助一些基础不牢固的人员不使用错误的属性范围,例如:request。(如果要想更好的理解细节,那么就必须在项目之中感受。)

2.Hibernate是不是只能与Struts2组合才好?我怎么没看到SpringMVC+Hibernate的组合?

Hibernate实现的是一个数据层的开发框架,数据层是不会与MVC层产生任何直接联系,必须通过控制层与业务层来进行操作的处理后才可以使用。
最初的时候(2005)开始流行这个框架开发,使用最多的就是Struts1.X、Hibernate、Spring,而后就形成SSH的开发框架。现在的环境出现了改变,因为MyBatis出现之后会有人觉得Hibernate操作过于频繁,而MyBatis的开发更加简单。正因为如此,对于整体新项目设计而言就不会再过多的去考虑Hibernate了,基本上都是使用MyBatis开发框架。同时,在这个时期之后SpringMVC开始流行了,因为Struts毕竟需要与Spring整合,有人认为麻烦,现在对于开发就可能有如下几种结构:
Struts 2.X+Hibernate+Spring;
Struts 2.X+MyBatis+Spring;
SpringMVC+Hibernate;
SpringMVC+MyBatis。

3.SSH整合

SSH整合实际上需要考虑到一个核心的问题:Struts之所以要整合到Spring之中主要是希望可以利用里面的IOC&DI机制实现业务层接口对象的注入处理,如果不使用Spring去管理Struts,那么无法直接利用容器注入的模式来实现业务层接口对象的配置,这样整个的整合效果就会出现严重的问题。
从另外一个角度来讲,虽然Struts支持Spring管理,但毕竟Spring属于两个开发框架,所以从2016年开始许多互联网公司的开发都不再选择使用Struts 2.x,但这并不表示Struts 2.x没有人使用,许多传统公司还在使用着。

4.ShiroRealm机制

Realm是几乎所有的认证授权框架都具备的一个概念,Realm本身有两层含义:
(1)进行用户的认证处理:主要是进行用户名或密码的判断,同时还可以判断出该用户是否被锁定;
(2)用户的授权处理:进行角色或权限认证,而且这里的认证所需要的就是根据用户名查询角色或权限标记。对于授权处理需要一些特殊处理方式:授权的操作在实际检测之中有两类:
——实时授权检测:修改了一个用户的角色或权限之后该配置立即生效,而且立即影响到已登陆的用户,这样的操作需要频繁进行数据库的查询处理,所以一般不建议使用;
——非实时授权检测:因为用户的角色和权限几乎很少会被改动,所以这样频繁的进行数据库的查询,性能会比较差。在实际开发之中,会考虑在用户第一次使用角色和权限的时候将数据信息查询出来。如果是单节点,会将授权信息保存在内存里(EhCache),如果是分布式集群,会将这些信息保存在Redis里面,总之就一个原则,不要在用户授权检测的时候重复查询数据库即可。
总结:ShiroRealm有一套自己的Session,在WEB中该Session会在HttpSession里面保存数据,但用户看不见这些。所有的授权处理一定要使用缓存,否则会影响程序性能。

5.Shiro中的Session与HttpSession的关系是什么?
如果说你现在使用的不是WEB程序,而是一个Java程序,那么Shiro中的认证与授权依然有效。可以得出一个结论:Shiro有一套自己维护的“Session”机制(不等同于HttpSession),如果要在WEB中应用,实际上就表示该Shiro Session要结合HttpSession一起使用,也就是说在Shiro Session中保存的内容在WEB容器里面实质上是保存在了HttpSession里面。
理解为:HttpSession中存在一个指定的Shiro属性,Shiro在设计的时候考虑到了用户的使用习惯,所以对于一些用户的身份信息,会将这些身份信息保存在Session里面,用户也可以直接利用Session属性取得相关的身份信息。

6.Shiro与Redis整合操作

前提是你的系统之中有多个WEB容器,并且使用了负载均衡,例如:Nginx。
image.png
如果要想实现Session数据的共享,那么需要继承一个默认的企业SsessionDAO管理器:
image.png
里面就是针对Redis数据的CRUD操作。

如果要想实现缓存数据的共享(角色或者权限),那么就去继承一个默认的缓存管理器:

image.png
CacheManager、同时还需要去实现一个Cache的接口的子类才可以实现这样的共享操作。
在整个流程之中你还需要考虑Tomcat的Session缓存。
image.png
如果想要实现缓存:需要知道Nginx、Shiro的具体操作类的方法、Jedis工具类、Redis使用,这样才能去做集群的Session的缓存处理过程。

更多专业知识,面试技巧就在面试一点通,持续更新中……
感谢浏览~
本内容来源于阿里云大学-Java面试技巧

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
缓存 Java 关系型数据库
【Java面试题汇总】ElasticSearch篇(2023版)
倒排索引、MySQL和ES一致性、ES近实时、ES集群的节点、分片、搭建、脑裂、调优。
【Java面试题汇总】ElasticSearch篇(2023版)
|
9天前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
26 1
Java面试题之Java集合面试题 50道(带答案)
|
5天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
18 3
|
1月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
307 37
|
9天前
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
19 0
Java面试题之cpu占用率100%,进行定位和解决
|
13天前
|
存储 安全 Java
java基础面试题
java基础面试题
19 2
|
13天前
|
缓存 NoSQL Java
Java中redis面试题
Java中redis面试题
25 1
|
14天前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
35 2
|
1月前
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
1月前
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
【Java面试题汇总】设计模式篇(2023版)