Java面經:寫給正在求職的你,面試網際網路大廠真題(三)
2022-10-12由 魔據教育 發表于 畜牧業
全拋檢視選用的是什麼 拋切面
哈嘍
everyone~
歡迎大家來到魔據教育職場加油站
it
培訓就選魔據教育
蘑菇君今日為大家分享一波超級乾貨
希望大家取長補短
知己知彼百戰百勝哦!
【哈嘍—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。
執行緒池的工作形式?
這些面試全部出自大廠面試真題和麵試合集當中,蘑菇君已經為大家整理完畢。如果感覺小編寫得不錯,夥伴們素質三連哦
。我們會努力寫出更好的作品分享給大家。
寫在最後:別荒廢了最能拼的年紀,讓自己整天都無所事事。