Java14道高頻面試題

面試題

1、JWT

①、JWT(全稱:Json Web Token)是一個開放標準(RFC 7519),它定義了一種緊湊的、自包含的方式,用于作為 JSON 對象在各方之間安全地傳輸信息。

②、JWT 的原理是,服務器認證以后,生成一個 JSON 對象,發回給用戶

③、JWT是由頭部、負載和簽名這三部分組成的,其中頭部和負載都是明文,簽名是經過加密處理的。頭部是加密方式(HS256)

2、Session和Cookie區別

Session和Cookie都是客戶端-服務端的一種存儲機制,但是它們之間有一些重要的區別:

1、存儲位置:Cookie數據存放在客戶端,Session數據存儲在服務端

2、數據共享:Cookie是不安全的,可以通過網絡被共享,而Session更加安全,因為數據只在客戶端和服務器之間共享。

3、數據大小限制:單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie,而session則存儲與服務端,瀏覽器對其沒有限制。

4、數據有效期:Cookie過期時間由開發者設置,而Session數據在用戶關閉瀏覽器后自動過期

5、數據傳輸:Cookie在每次請求時都需要手動添加到HTTP頭中,而Session ID會自動添加到HTTP頭中,因此Session更加高效

總之,Cookie更加靈活,但不夠安全,適用于不需要太高安全性的場景;Session更加安全,適用于對安全性要求較高的場景。

3、route與router區別

1、router 主要負責頁面跳轉

2、route 獲取當前頁面的參數等信息

4、為什么要用token,token的優勢

Token是一種用于驗證用戶身份及權限的機制,它是由服務器頒發給客戶端的,用于驗證客戶端的身份及權限。Token的優勢有:

1、增強安全性:Token機制使用了時間戳和簽名算法,使得Token更加安全,可以有效防止CSRF攻擊

2、簡化客戶端代碼:Token機制允許客戶端存儲服務器頒發的Token,從而減少了客戶端與服務器之間的交互,簡化了客戶端代碼

3、靈活性:Token機制可以根據具體需求進行靈活配置,可以用于不同類型的請求和場景

4、易于實現:Token機制的實現相對簡單,可以使用現有的框架和庫來實現。

5、token攔截器,前后端如何驗證

Token攔截器是一種用于驗證用戶身份和權限的機制,它通過在HTTP請求頭中添加一個Token字段,服務器在處理請求時會檢查Token的有效性。

具體實現流程如下:

1、當用戶成功登錄時,在服務器端生成一個Token,并將其返回給客戶端

2、客戶端在每次發送請求時,將Token添加到HTTP請求頭中。

3、服務攔截器收到請求后,從HTTP請求頭中獲取Token。

4、服務器對Token進行驗證,包括檢查Token是否過期、是否被篡改等。

5、如果Token驗證通過,則服務器繼續處理請求;如果Token驗證失敗,則返回錯誤響應。

通過Token攔截器,可以實現前后端的聯合驗證,增強系統的安全性。前后端分別負責生成、驗證和存儲Token,以確保Token的安全性和有效性。

6、如何使用自定義注解和AOP實現萬能分頁

一、先自定義一個注解,然后這個注解上面有三個注解分別為:@Target、@Retention、@Documented

1、@Target({ElementType.METHOD})

在方法上面放注解

2、@Retention(RetentionPolicy.RUNTIME)

表示該注解在程序運行時仍然被保留并可以被讀取。

3、@Documented

用于指示注解應該被包含在代碼文檔中

二、定義切面類 在類里定義切入點

二、AOP,在需要分頁的方法上面打上自定義注解,然后使用切入點注解,在有自定義注解的方法運行之前,也就是在環繞通知里面(@around)完成分頁配置。

7、reduce函數的概念和使用場景

1、reduce概念:reduce函數是用于對數據進行累加或聚合操作的函數。它接收一個函數作為參數,用于指定聚合的方式,然后將輸入的迭代器作為參數傳入,通過不斷調用指定的聚合函數來將輸入的元素進行累加或聚合操作,最后返回一個單獨的值

2、使用場景:把扁平化數據轉化為樹形數據,(統計總數、計算總和、求最大值或最小值)

8、利用線程傳遞數據

1、ThreadLocal是一個類,它提供了一種將對象保存為線程變量的方法,相當于一個特殊的Map,它通過提供get()和set()方法來實現線程局部變量的功能。

2、ThreadLocalMap的作用:①、為每一個線程創建一個變量,這個變量可以隨時獲取,并且可以隨時設置。

②、可以跨類跨方法傳遞變量

3、ThreadLocalMap的優點:①、安全性、可以方便的在多線程中傳遞數據。

②、可以在service層、controller層里面少些代碼,減少代碼量。

9、MyBatis攔截器

  1. Executor 攔截器:對于 Executor 類中的四個基本操作(update、query、flushStatements、commit/rollback),執行前后都可以進行攔截。

  2. ParameterHandler 攔截器:對查詢參數進行處理的攔截器,可以在執行 SQL 語句前對參數進行處理,比如對參數進行加密等。

  3. ResultHandler 攔截器:對查詢結果集進行處理的攔截器,可以在獲取結果集時對結果進行處理,比如將結果集轉換為 Excel 文件等。

  4. StatementHandler 攔截器:對 SQL 語句進行處理的攔截器,可以在執行 SQL 語句前對 SQL 進行處理,比如對 SQL 進行分頁等。

10、內存泄漏和內存溢出

1、內存泄漏:指程序運行后,沒有釋放所占用的內存空間(程序中有引用沒有釋放,不能被GC回收),一次內存泄漏可能不會有很大的影響,但長時間的內存泄漏,堆積到一定程度就會產生內存溢出。

2、內存溢出:內存溢出(Memory Overflow)是指程序請求的內存超出了 JVM 可以提供的最大內存限制,從而導致內存無法分配而產生的錯誤。內存溢出通常由于應用使用的內存不斷增長,超過了 JVM 配置的堆內存大小而導致。內存溢出會導致應用崩潰或者變得非常緩慢。

11、什么 SPI 和 Spring SPI

1、SPI(Service Provider Interface)是一種設計模式,翻譯過來就是“服務提供接口”,再說簡單一點就是提供某一個服務的接口, 提供給服務開發者或者服務生產商來進行實現。

2、Java SPI 是JDK內置的一種動態加載擴展點的實現。

3、這個機制在一般的業務代碼中很少用到,但是在底層框架中卻被大量使用,包括JDBC、Dubbo、Spring框架、日志接口中都有用到,不同的是有的使用Java原生的實現,有的框架則自己實現了一套SPI機制.

4、Spring中的SPI相比于JDK原生的,它的功能更為強大,因為它可以替換的類型不僅僅局限于接口/抽象類,它可以是任何一個類,接口,注解

5、正因為Spring SPI是支持替換注解類型的SPI,這個特性在Spring Boot中的自動裝配有體現(EnableAutoConfiguration注解)

6、Spring的SPI文件是有規矩的,它需要放在工程的META-INF下,且文件名必須為spring.factories ,而文件的內容本質就是一個properties

12、SpringBoot如何自動裝配

1、SpringBoot啟動的時候加載主配置類,@EnableAutoConfiguration注解開啟了自動配置功能。

2、@EnableAutoConfiguration注解里面有一個注解叫@Import,它使用反射的方式導入了AutoConfigurationImportSelector類

3、在AutoConfigurationImportSelector類中有一個getCandidateConfigurations(獲取候選配置)方法,它里面調用了SpringFactoriesLoader類

4、在SpringFactoriesLoader里面配置了工廠資源位置,這個位置是固定的(META-INF/spring.factories)

spring.factories是KV結構

5、然后通過spring.factories里面的KV值來自動裝配

13、如何實現Starter

1、要有被封裝的類(MyResponseAdvice)

原因:因為我們這整個starter都是為它服務的。

2、寫一個properties包,里面放各種屬性配置類,在這些類上面有兩個注解,分別是@ConfigurationProperties(配置注解)和@Data,其中@ConfigurationProperties是別人配置starter的前綴

3、寫一個autoConfigution包,里面放的是自動配置類,這個類上面也有兩個注解,分別為@ConditionalOnProperty(根據屬性開啟自動配置的開關)和@Import(導入的類),其中@ConditionalOnProperty這個注解根據屬性開啟自動配置的開關,而@Import是需要被封裝的類

4、最后在resources包下創建 META-INF包 和 spring.factories文件,配置自動注入的key和value

14、ThreadLocal的優點

  1. 線程隔離:每個線程都有自己的獨立變量副本,不受其他線程的影響,確保了線程安全性。

  2. 簡單易用:使用ThreadLocal可以方便地將數據與線程關聯起來,無需手動管理線程間的數據傳遞。

  3. 開箱即用,開銷小:在多線程環境下,可以避免因訪問共享變量而需要進行的上鎖操作,降低了使用復雜性。

  4. 適用于各種場景:如對象跨層傳遞、事務操作、數據庫連接等,能夠打破層次間的約束,提高代碼的可維護性和擴展性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212743.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習基本概念介紹 2023

筆記來源于: https://www.youtube.com/watch?vphQK8xZpgoU&t172s https://www.youtube.com/watch?vXLyPFnephpY&t645s Machine/Deep Learning 機器學習概況來說,讓機器具備自動找函式的能力 (Machine Learning 約等于 Looking …

智能優化算法應用:基于飛蛾撲火算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用:基于飛蛾撲火算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用:基于飛蛾撲火算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.飛蛾撲火算法4.實驗參數設定5.算法結果6.…

訂單系統的設計與海量數據處理實戰

概述 訂單系統可以說是整個電商系統中最重要的一個子系統,因此訂單數據可以算作電商企業最重要的數據資產。訂單系統從代碼上來說可分為兩部分:訂單程序和歷史訂單處理程序。數據存儲進行分庫分表。 訂單系統業務分析 對于一個合格的訂單系統&#xf…

如何使用bash寫腳本

本章主要介紹如何使用bash寫腳本。 了解通配符了解變量了解返回值和數值運算數值的對比判斷語句循環語句 grep的用法是“grep 關鍵字 file”,意思是從file中過濾出含有關鍵字的行。 例如,grep root /var/log/messages,意思是從/var/log/me…

基于Html+騰訊云播SDK開發的m3u8播放器

周末業余時間在家無事,學習了一下騰訊的云播放sdk,并制作了一個小demo(m3u8播放器),該在線工具是基于騰訊的云播sdk開發的,云播sdk非常牛,可以支持多種播放格式。 預覽地址 m3u8player.org 源碼…

JVM進程緩存

引言 緩存在日常開發中啟動至關重要的作用,由于是存儲在內存中,數據的讀取速度是非常快的,能大量減少對數據庫的訪問,減少數據庫的壓力。我們把緩存分為兩類: 分布式緩存,例如Redis: 優點&…

Mybatis之簡介、使用操作(安裝、XML、SqlSession、映射的SQL語句、命名空間、作用域和生命周期)

學習的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統/深入學習某技術知識點… 一個人摸索學習很難堅持,想組團高效學習… 想寫博客但無從下手,急需…

Java項目-瑞吉外賣Day4

實現文件的上傳下載: 前端代碼: 對文件的操作就是對流的操作。 上傳文件的后端代碼,需要注意MultipartFile的名字必須與前端相對: 為文件存儲位置進行動態設置,配置application.xml 在CommonController中設置屬性讀…

Nodejs后端+express框架

前言 基于vue3Node后臺管理項目,補充nodejs和express相關知識。 文章目錄 一,express 1.官網 Express - 基于 Node.js 平臺的 web 應用開發框架 - Express中文文檔 | Express中文網 2.安裝 npm install express --save 二、MongoDB 特點 非關…

uniapp 藍牙小程序

在 uni-app 中開發藍牙相關的小程序涉及到使用 uni-app 提供的藍牙 API。uni-app 為多端開發提供了統一的 API,這意味著你編寫的代碼可以在不同的平臺上運行,包括微信小程序。 以下是實現藍牙功能的基本步驟和代碼示例: 1. 開啟藍牙適配器 …

java之SpringBoot開發實用篇

MENU SpringBoot開發實用篇KF-1.熱部署KF-1-1.手動啟動熱部署KF-1-2.自動啟動熱部署KF-1-3.參與熱部署監控的文件范圍配置KF-1-4.關閉熱部署 KF-2.配置高級KF-2-1.ConfigurationPropertiesKF-2-2.寬松綁定/松散綁定KF-2-3.常用計量單位綁定KF-2-4.校驗KF-2-5.數據類型轉換 KF-3…

【頭歌系統數據庫實驗】實驗8 SQL的復雜多表查詢-2

目錄 第1關:基于派生表查詢每個隊員解答中超過他平均memory的user_id及題目編號problem_id 第2關:用ANY/ALL實現查詢2019級選手(user_id前4位為2019)滿足比2020級其中一個選手注冊時間早即可的選手 第3關:用聚集查詢…

python zblog API實現類似XMLRPC/發布文章

我發現python對Zblog的XML發布并不友好,雖然也有對應的模塊,但是遠遠沒有XPCRPC更直接方便,但是使用xmlRpc是直接給發布文章帶來了不小的便利,但是對系統也并不友好,但是zblog也開放了Api,但是干部子弟不樂…

UE小:物品拼裝功能

藍圖B1的實現步驟: 獲取玩家控制器和視角:首先獲取玩家控制器,然后使用Deproject Screen to World節點將屏幕上的鼠標位置轉換為世界空間中的一條射線。 射線檢測:使用Line Trace by Channel或Line Trace for Objects節點發射射線…

深度學習測試流程

深度學習模型測試的功能旨在驗證模型在各種情況下的性能和魯棒性。以下是深度學習模型測試的主要功能: 性能評估: 測試模型在任務目標上的整體性能,例如分類準確性、回歸誤差等。評估指標的選擇取決于具體的任務類型。 泛化能力:…

《信息技術時代》期刊雜志論文發表投稿

《信息技術時代》期刊收稿方向:通信工程、大數據、計算機、辦公自動化、信息或計算機教育、電子技術、系統設計、移動信息、圖情信息研究、人工智能、智能技術、信息技術與網絡安全等。 刊名:信息技術時代 主管主辦單位:深圳灣科技發展有限…

C++筆記之int、size_t、uint8_t、unsigned char*區別

C筆記之int、size_t、uint8_t、unsigned char*區別 code review! 文章目錄 C筆記之int、size_t、uint8_t、unsigned char*區別1.ChatGPT第一次查詢解釋2.ChatGPT第二次查詢解釋3.分別的使用示例 1.ChatGPT第一次查詢解釋 size_t、uint8_t 和 int 是編程中使用的不同類型&…

《微信小程序開發從入門到實戰》學習四十七

4.4 云函數 4.4.5 云函數的定時觸發 如果云函數需要定時執行,可以使用云函數定時觸發器。配置了定時觸發器,云函數會在相應時間點被自動觸發。函數返回結果不會返回調用方 在需要添加觸發器的云函數下新建文件config.json。格式如下: &quo…

05-詳解調用服務時負載均衡的配置及其原理

負載均衡 負載均衡的原理(通用) LoadBalanced注解用來攔截它所標記的RestTemplate發起的http請求, 底層是利用了一個名為Ribbon的組件來實現負載均衡功能(Cloud高版本已經棄用) LoadBalancerInterceptor的intercept方法會對RestTemplate的請求進行攔截 public class LoadBal…

【Linux】使用Bash和GNU Parallel并行解壓縮文件

介紹 在本教程中,我們將學習如何使用Bash腳本和GNU Parallel實現高效并行解壓縮多個文件。這種方法在處理大量文件時可以顯著加快提取過程。 先決條件 確保系統上已安裝以下內容: BashGNU Parallel 你可以使用以下命令在不同Linux系統上安裝它們&am…