日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2024/9/3 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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。

如果要想實現Session數據的共享,那么需要繼承一個默認的企業SsessionDAO管理器:

里面就是針對Redis數據的CRUD操作。

如果要想實現緩存數據的共享(角色或者權限),那么就去繼承一個默認的緩存管理器:


CacheManager、同時還需要去實現一個Cache的接口的子類才可以實現這樣的共享操作。
在整個流程之中你還需要考慮Tomcat的Session緩存。

如果想要實現緩存:需要知道Nginx、Shiro的具體操作類的方法、Jedis工具類、Redis使用,這樣才能去做集群的Session的緩存處理過程。

總結

以上是生活随笔為你收集整理的Java经典面试题整理及答案详解(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。