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

简介: 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面试技巧

相关文章
|
4月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
7月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
421 1
|
7月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
346 3
|
6月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
537 0
|
6月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
323 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
7月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
4422 49
|
4月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
7月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
227 5
|
7月前
|
Java API 微服务
2025 年 Java 校招面试全攻略:从面试心得看 Java 岗位求职技巧
《2025年Java校招最新技术要点与实操指南》 本文梳理了2025年Java校招的核心技术栈,并提供了可直接运行的代码实例。重点技术包括: Java 17+新特性(Record类、Sealed类等) Spring Boot 3+WebFlux响应式编程 微服务架构与Spring Cloud组件 Docker容器化部署 Redis缓存集成 OpenAI API调用 通过实际代码演示了如何应用这些技术,如Java 17的Record类简化POJO、WebFlux构建响应式API、Docker容器化部署。
401 5