農林漁牧網

您現在的位置是:首頁 > 畜牧業

Java面經:寫給正在求職的你,面試網際網路大廠真題(三)

2022-10-12由 魔據教育 發表于 畜牧業

全拋檢視選用的是什麼 拋切面

哈嘍

everyone~

歡迎大家來到魔據教育職場加油站

it

培訓就選魔據教育

蘑菇君今日為大家分享一波超級乾貨

希望大家取長補短

知己知彼百戰百勝哦!

Java面經:寫給正在求職的你,面試網際網路大廠真題(三)

【哈嘍—Java】

1。

你找一個最能體現你

Java

能力的專案

2。

你怎麼理解作業系統中程序和執行緒

3。

計算機網路大概分幾層,每層的作用是什麼

4。

連結串列和陣列有什麼區別嗎

5。

你能簡述一下你熟悉的排序演算法的排序過程

6。

有一張學生表,有學生

id

學生姓名和班級

id

考試得分表,裡面有學生

id

課程名稱和得分班級表 ,有班級

id

和班級名用

SQL

語句,告訴我語文平均分最高的班是哪個班

7。

有用過

spring

嗎?那你知道他是怎麼工作的嗎?

8。

你比較熟悉的程式碼管理工具是哪個

9。

它是怎麼提交程式碼的

10。

怎麼保證你開發內容的質量

【京東提前批】

1。spring start

後的操作;

2。spring

的動態代理:

JDK

動態代理和

CGLIB

動態,我當時忘記了

CGLIB

說了

aspectj

3。spring

的攔截器:

Web

開發中,我們除了使用

Filter

來過濾

web

請求外,還可以使用

spring

提供的

HandlerInterceptor

(攔截器);

HandlerInterceptor

的功能跟過濾器類似,但是提供更精細的控制能力;在

request

被響應之前、

request

被響應之後,檢視渲染之前以及

request

全部結束之後,我們不能透過攔截器修改

request

內容。但是可以透過丟擲異常(或者返回

false

)來暫停

request

的執行;

實現攔截器可以透過繼承

HandlerInterceptorAdapter

類,如果

preHandle

方法

return true

,則繼續後續處理;

註冊攔截器:實現攔截器後還需要將攔截器註冊到

spring

容器中,可以透過

implements WebMvcConfiguration

,覆蓋其

addInterceptors

方法,記得將

bean

註冊到

spring

容器中,可以選擇

@Component

或者

@Configuration

原理:一個攔截器,只有

preHandler

方法返回

true

postHandle

afterCompletion

才有可能被執行;如果

preHandler

方法返回

false

,則該攔截器的

postHandler

afterCompletion

必然不會被執行。攔截器不是

Filter

,卻實現了

Filter

的功能,其原理在於:

1

所有的攔截器(

Interceptor

)和處理器(

Handler

)都註冊在

HandlerMapping

中;

2

Spring MVC

中所有的請求都是由

DispatchServlet

分發的;

3

當請求進入

DispatcherServlet。doDispatch()

時候,首先會得到該請求的

Handler

(即

Controller

中對應的方法)以及所有攔截該請求的攔截器;

Filter

共存時的執行順序

攔截器是在

DispatcherServlet

這個

servlet

中執行的,因此所有的請求最先進入

Filter

,最後離開

Filter

。其順序如下。

Filter->Interceptor。preHandle->Handler->Interceptor。postHandle->Interceptor。afterCompletion->Filter

攔截器的本質上市面向切面編(

AOP

),符合橫切關注點的功能都可以放在攔截器中來實現,主要的應用場景:

·登入驗證,判斷使用者是否登入;

·許可權驗證,判斷使用者是否有許可權訪問資源,如驗證

token

·日誌記錄,記錄請求操作日誌(使用者

ip

,訪問時間等),以便統計請求訪問量;

·處理

cookie

、本地化、國際化、主題等;

·效能監控,監控請求處理時長等;

過濾器

Filter

建立一個

Filter

,並使用

WebFilter

註解進行修飾,表示該類是一個

Filter

,以便於啟動類進行掃描的時候確認;

然後在啟動類上添加註解

@ServletComponentScan

,該註解用於自動掃描指定包下(預設是與啟動類同包下)的

WebFilter/WebServlet/WebListener

等特殊類。

過濾器

filter

和攔截器

Interceptor

的區別:

有相似之處,都是

aop

的思想,都可以實現許可權檢查,日誌記錄,不同的是:

1

使用範圍不同:

Filter

Servlet

容器規定的,只能使用在

Servlet

容器中,而攔截器的使用範圍就大得多;

2

使用的資源不同:攔截器是屬於

spring

的一個元件,因此可以使用

spring

的所有資源,物件,如

service

物件,資料來源,事務控制等,而過濾器就不行;

3

深度不同:

Filter

還在

servlet

前後起作用。而攔截器能夠深入到方法前後,異常丟擲前後,因此攔截器具有更大的彈性,所有在

spring

框架中應該優先使用攔截器;

4

透過除錯可以發現:攔截器的執行過程是在過濾器的

diFilter

中執行的,過濾器的初始化會在專案啟動時執行;

靜態變數和例項變數的區別:

靜態變數:獨立存在的變數,只是位置放在某個類下,可以直接類名

呼叫靜態變數名。並且是專案或者程式一啟動執行到該類時就直接常駐記憶體。不需要初始化類再呼叫該變數。用關鍵字

static

宣告。靜態方法也是同樣,可以直接呼叫;

例項變數:就是相當於該類的屬性,需要先初始化該類,

new

該類後,才可以呼叫,但是該類未被再次使用,被垃圾回收器回收之後,該例項也將不存在了,不在記憶體中;

區別如下:

·儲存區域不同:靜態變數儲存在靜態儲存區,普通變數在堆;

·靜態變數與類相同,普通變數則與例項相關;

·記憶體分配方式不同;

·生命週期不同;

在程式執行時的區別:

例項物件屬於某個物件的屬性,必須建立了例項物件,其中的例項物件才會被分配空間,才能使用這個例項變數。靜態變數不屬於某個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的位元組碼,不用建立任何例項物件,靜態變數就會被分配空間,靜態變數就可以被使用了;總之,例項物件必須建立物件後才可以透過這個物件來使用,靜態變數則可以直接使用類名來引用;

類的靜態變數在記憶體中只有一個,

java

虛擬機器在載入類的過程中為靜態變數分配記憶體,靜態變數位於方法區,被類的所有例項共享,靜態變數可以直接透過類名進行訪問,其生命週期取決於類的生命週期;

而例項變數取決於類的例項:每建立一個例項,

java

虛擬機器就會為例項變數分配一次記憶體,例項變數位於堆區中,其生命週期取決於例項的生命週期;

4。

你專案裡面使用

rabbitmq

做什麼的?秒殺的削峰和異常處理系統;

5。

mysql

的隔離級別?

6。

建立執行緒的方式?

7。

執行緒池的工作形式?

這些面試全部出自大廠面試真題和麵試合集當中,蘑菇君已經為大家整理完畢。如果感覺小編寫得不錯,夥伴們素質三連哦

。我們會努力寫出更好的作品分享給大家。

寫在最後:別荒廢了最能拼的年紀,讓自己整天都無所事事。